Coding Agent:Claude Code 深度剖析 + 开源生态¶
更新日期:2026-04-15
本文目标:深入理解 Claude Code 的完整内部架构(tool loop、subagents、hooks、skills、MCP、memory、permission、compaction),对比主流开源 Coding Agent(Cline/Roo Code/OpenHands/Aider/Continue/OpenCode/Codex CLI),能据此选型或自建。
一、Coding Agent 生态全景¶
flowchart LR
subgraph cli["CLI / 终端"]
cc["Claude Code"]
codex["Codex CLI"]
opencode["OpenCode"]
aider["Aider"]
end
subgraph ide["IDE 插件"]
cline["Cline / Roo"]
cont["Continue"]
cur["Cursor"]
end
subgraph platform["平台 / SaaS"]
oh["OpenHands"]
devin["Devin"]
copilot["Copilot Workspace"]
end
classDef stage fill:#fff,stroke:#cc785c,color:#1a1a1a;
class cc,codex,opencode,aider,cline,cont,cur,oh,devin,copilot stage
| 类型 | 代表 | 部署形态 | 自主性 |
|---|---|---|---|
| CLI | Claude Code, Codex CLI, OpenCode, Aider | 终端 + 工程目录 | 高(agentic loop) |
| IDE | Cline, Roo, Continue, Cursor | 编辑器内嵌 | 中(依赖人 review) |
| 平台 | Devin, OpenHands, Copilot Workspace | 云端容器 | 高(沙箱中独立运行) |
二、Claude Code 完整架构¶
2.1 分层视图¶
flowchart LR
ui["UI 层<br/>CLI / IDE / Web"]
loop["Agent Loop<br/>tool call + hooks"]
tools["工具层<br/>Read/Write/Bash/Task<br/>MCP / Subagents"]
memory["上下文层<br/>CLAUDE.md / Memory<br/>Compaction"]
api["模型层<br/>Claude API"]
ui --> loop --> tools
loop --> memory
loop --> api
classDef stage fill:#fff,stroke:#cc785c,color:#1a1a1a;
class ui,loop,tools,memory,api stage
2.2 核心循环(Agentic Loop)¶
Claude Code 不是聊天机器人,而是 Agentic Loop:模型输出 → 解析工具调用 → 执行工具 → 结果回喂 → 继续生成,直到模型主动停止。参考 Inside Claude Code Architecture。
# Claude Code 的核心循环(简化伪代码)
async def agentic_loop(user_input, session):
session.messages.append({"role": "user", "content": user_input})
# 1. 触发 UserPromptSubmit hook
for hook in hooks.get("UserPromptSubmit"):
result = await hook.run(user_input, session)
if result.blocked: return result.reason
while True:
# 2. 构建完整请求
system_prompt = build_system_prompt(session) # 见 §2.3
tools_schema = collect_tools_schema(session) # 见 §2.4
# 3. 调用 Claude API (streaming)
response = await claude_api.messages.stream(
model=session.model,
system=system_prompt,
messages=session.messages,
tools=tools_schema,
max_tokens=8192,
)
# 4. 流式解析: text / tool_use / thinking blocks
async for event in response:
if event.type == "text_delta":
print(event.text, end="") # 实时显示
elif event.type == "tool_use":
tool_call = event.tool_use # 累积完整 tool call
elif event.type == "message_stop":
break
session.messages.append(response.to_message())
# 5. 如果没有 tool call 就结束
if response.stop_reason == "end_turn":
return
# 6. 执行工具调用
for tool_call in response.tool_calls:
# PreToolUse hook - 可拒绝/修改参数
pre_result = await run_hook("PreToolUse", tool_call, session)
if pre_result.blocked:
tool_result = pre_result.reason
else:
tool_call = pre_result.modified or tool_call
tool_result = await execute_tool(tool_call, session)
# PostToolUse hook
await run_hook("PostToolUse", tool_call, tool_result, session)
session.messages.append({
"role": "user",
"content": [{
"type": "tool_result",
"tool_use_id": tool_call.id,
"content": str(tool_result)
}]
})
# 7. Context 管理: 超限则 compaction
if session.token_count > THRESHOLD:
await compact(session)
# 循环直到模型 end_turn 或达到 max_steps
2.3 System Prompt 构建(多层组合)¶
Claude Code 的 system prompt 不是一个固定字符串,而是动态组合。参考 How Claude Code Builds a System Prompt。
2.4 CLAUDE.md 层级合并¶
搜索顺序(从上到下, 后者覆盖/补充前者):
1. 内置系统级 (写死在代码里)
2. 企业级 ~/.claude.json (managed deployment)
3. 用户级 ~/.claude/CLAUDE.md
4. 用户本地 ~/.claude/CLAUDE.local.md (gitignored)
5. 项目根 ./CLAUDE.md
6. 项目本地 ./CLAUDE.local.md (gitignored)
7. 子目录 ./src/CLAUDE.md (按 CWD 动态加载)
8. 规则模块 ~/.claude/rules/*.md (按需加载)
三、内置工具完整清单¶
Claude Code 有 ~24 个内置工具。这些工具的描述文本本身就是 system prompt 的一部分,影响模型何时调用它们。参考 claude-code-system-prompts (Piebald-AI)。
3.1 文件操作工具¶
3.2 代码搜索工具¶
3.3 执行工具¶
3.4 编排工具¶
3.5 Web 工具¶
3.6 工具加载优化(deferred loading)¶
关键优化:MCP 工具可能有几十上百个,如果全部 schema 都放进 system prompt,会吃掉大量上下文。Claude Code 采用 deferred loading:system prompt 只列出工具名字,完整 schema 在需要时通过 ToolSearch 按需加载。
# System prompt 只看到:
"Available MCP tools: mcp__slack__send_message, mcp__jira__create_ticket, ..."
# 当模型想用 slack__send_message 时:
ToolSearch({
"query": "select:mcp__slack__send_message"
})
# 返回完整 schema,然后才能调用
# 可节省 50%+ 的 context(当有 50+ 工具时)
↑ 上级 · H4. Coding Agent:Claude Code / Cursor / Devin / OpenClaw