TL;DR
Claude Code 是 Anthropic 官方推出的 CLI Agent,npm 全局安装后通过 claude 命令运行。它与 OpenClaw 和 Hermes Agent 解决同一个问题——让 AI 自主执行编程任务——但架构哲学走出了第三条路:子进程隔离模型。
OpenClaw 用 Gateway hub-and-spoke 把 25+ 通道和 14+ 子 Agent 串在一起;Hermes 用 Python 单循环 run_conversation() 在进程内完成一切;Claude Code 则把 Agent Runtime、MCP Server、子 Agent 全部跑在独立子进程里,通过 Node.js child_process.spawn() 和 ACP 协议(JSON-RPC over stdio)通信。
本文从源码级拆解 Claude Code 的子进程架构、ACP 协议实现、Session 模型、多 Agent 协作和安全机制,并在每个维度与 OpenClaw CLI Runner 和 Hermes delegate_task 做三角对照。
一、先看全貌:Claude Code 的进程模型
1.1 启动链路
用户执行 claude 命令→ npm global bin: claude.cmd / claude→ Node.js 主进程启动→ 加载 CLI 参数(--print / --model / --allowedTools…)→ 初始化 Session(新会话或 --continue/--resume)→ 进入 Agent Loop
Claude Code 本身是一个Node.js CLI 应用(npm 包 @anthropic-ai/claude-code),没有独立的 Gateway 进程。主进程承担三个角色:
child_process.spawn() 管理 MCP Server、子 Agent、浏览器 Daemon |

1.2 与 OpenClaw / Hermes 的第一层差异
| 语言 | |||
| 架构模型 | |||
| 入口 | run_conversation() | claude | |
| 多会话 | |||
| 通道 |
关键差异:OpenClaw 的 Gateway 是持久化服务,7×24 运行;Claude Code 和 Hermes 都是一次性会话——执行完退出,无需守护进程。
二、子进程模型:为什么 Claude Code 不用单循环?
2.1 Node.js child_process 四大原语
Claude Code 的进程管理全部建立在 Node.js child_process 模块之上:
child_process.spawn() → 创建 MCP Server 子进程(stdio pipe 通信)child_process.fork() → 创建子 Agent(IPC 通道 + 独立 V8 实例)child_process.exec() → 执行一次性 Shell 命令(Bash 工具)child_process.execFile() → 执行指定二进制文件
spawn vs fork 的区别:
spawn
:启动任意可执行文件,通过 stdin/stdout/stderr pipe 通信。用于 MCP Server(外部进程)。
fork
:启动新的 Node.js 进程,带 IPC 通道(process.send() / process.on('message'))。用于子 Agent(同语言、需要结构化消息)。
2.2 实际运行的进程树
一个典型 Claude Code 会话启动后的进程树:
claude (主进程, PID 12345)├── node mcp-server-filesystem (MCP Server, PID 12346)├── node mcp-server-github (MCP Server, PID 12347)├── chrome-headless-shell (浏览器 Daemon, PID 12348)├── claude --print (子 Agent ”reviewer”, PID 12349)└── claude --print (子 Agent ”tester”, PID 12350)
每个子进程完全独立——独立的内存空间、独立的 V8 实例、独立的错误边界。一个 MCP Server 崩溃不会影响主 Agent Loop。
2.3 三角对照:进程隔离哲学
| 子任务执行方式 | |||
| 进程隔离 | |||
| 通信协议 | |||
| 子进程管理 | delegate_task | ||
| 崩溃恢复 |
共同点:三者都选择了子进程隔离执行高风险任务——没有人让 Agent 在同一个进程里跑 rm -rf。
差异:OpenClaw 把子进程管理抽象为 Gateway 层,Hermes 抽象为工具层,Claude Code 直接在 CLI 层 spawn——抽象层级逐级下移。
三、ACP 协议:Agent 与 IDE 的标准通信层
3.1 ACP 是什么
ACP(Agent Client Protocol)由 Zed Industries 主导,2025 年 9 月发布。它是一个开放标准,定义了编辑器(Client)与 AI Agent(Server)之间的 JSON-RPC 通信规范。
理解 ACP 最好的类比是LSP(Language Server Protocol)——LSP 让所有编辑器都能接入任何语言的智能提示,ACP 让所有编辑器都能接入任何 AI Agent。
3.2 ACP 角色:Client / Server(命名与直觉相反)
编辑器(ACP Client) Agent(ACP Server)│ ││ session/new ───────────────→│ 创建会话│ session/load ──────────────→│ 恢复会话│ session/set_mode ──────────→│ 切换模式│ ││←─ terminal/create ──────────│ 请求执行命令│←─ terminal/wait_for_exit ───│ 等待命令完成│←─ session/request_permission│ 请求用户授权│←─ session/update ──────────│ 流式输出进度
关键理解:Agent 是 Server,编辑器是 Client。Agent 主动向编辑器请求权限、创建终端、推送更新——不是编辑器"调用"Agent,而是 Agent"驱动"编辑器。
3.3 Claude Code 的 ACP 实现
Claude Code 通过 --acp 模式启动为 ACP Server:
以 ACP Server 模式启动,通过 stdio 与编辑器通信claude --acp
通信方式:JSON-RPC over stdio——Agent 进程的 stdin/stdout 承载所有协议消息。这与 LSP 完全一致,不需要网络端口、不需要 HTTP Server。
3.4 ACP vs MCP:两个协议的分工
| 解决什么问题 | ||
| 谁定义的 | ||
| 谁调用谁 | ||
| 通信方向 | ||
| 类比 |
ACP 和 MCP 在协议层面相互独立——ACP Agent 可以同时是 MCP Host(调用 MCP 工具),但 ACP 协议本身不感知 MCP。
3.5 三角对照:通信协议设计
| 主通信协议 | |||
| MCP 支持 | |||
| 协议标准化 | |||
| 编辑器集成 |
Claude Code 和 OpenClaw 都选了 ACP + MCP 双协议——ACP 负责 Agent ↔ 编辑器通信,MCP 负责 Agent ↔ 工具通信。Hermes 走自研路线,所有通信都在同一个 Python 进程内通过 ToolRegistry 完成。
四、Session 模型:JSON 文件 vs 数据库
4.1 Claude Code 的 Session 持久化
Claude Code 的会话以JSON 文件形式持久化在 ~/.claude/projects// 下:
~/.claude/projects/└── a1b2c3d4/项目 hash ├── sessions/ │ ├── abc-123.json# 会话 1 │ └── def-456.json# 会话 2 └── memory/# Auto-memory(≤25KB / ≤200行)
每个 Session JSON 包含完整对话历史、工具调用记录、token 用量。恢复机制:
claude --continue恢复当前目录最近会话claude --resume <session-id># 恢复指定会话claude -c# 简写,等同 --continue
4.2 Auto-Memory:Agent 自管理记忆
Claude Code 有一个独特的自动记忆机制:Agent 在会话中自主判断哪些信息值得跨会话保留,写入 ~/.claude/projects//memory/。限制 25KB / 200 行——这意味着 Agent 必须做选择性记忆,不是全量日志。
这与 Hermes 的 Hindsight 自动 retain 理念类似,但实现方式完全不同:Claude Code 靠 Agent 自己判断,Hermes 靠独立的记忆引擎(SQL 模板 + pgvector)。
4.3 三角对照:Session 与记忆
| Session 存储 | |||
| 语义搜索 | |||
| 跨会话记忆 | |||
| 记忆上限 |
Claude Code 和 OpenClaw 都选择了Agent 自管理记忆——让 Agent 决定记什么。Hermes 选择了独立记忆引擎——Hindsight 在 Agent Loop 之外运行,不受 Agent 的判断力限制。这是三个框架在记忆哲学上最根本的分歧。
五、多 Agent 协作:子 Agent 与 Task Tool
5.1 Claude Code 的子 Agent 模型
Claude Code 支持三种子 Agent 创建方式:
方式 1:静态定义(.claude/agents/)
.claude/agents/security-reviewer.md---name: security-reviewerdescription: Security-focused code reviewmodel: opustools: [Read, Bash]---你是一个资深安全工程师。审查代码中的注入漏洞、认证缺陷、密钥泄露。
使用时在对话中 @security-reviewer review the auth module。
方式 2:动态 CLI flag
claude --agents '{”reviewer”:{”description”:”Reviews code”,”prompt”:”You are a code reviewer”}}' -p 'Use @reviewer to check auth.py'方式 3:Task Tool 自动 spawn
Agent 在 Agent Loop 中自主判断任务复杂度,需要并行处理时通过 Task Tool 创建子 Agent——与 OpenClaw 的 sessions_spawn 理念一致。
5.2 子 Agent 的进程模型
每个子 Agent 通过 child_process.fork() 或 child_process.spawn() 启动——完全独立的 Node.js 进程。这意味着:
独立的内存空间(不会污染主 Agent 的上下文)
独立的模型调用(可以指定不同 model)
独立的工具权限(可以 restrict 工具列表)
崩溃不传播(子 Agent OOM 不影响主 Agent)
5.3 三角对照:多 Agent 实现
| 创建方式 | sessions_spawn | delegate_task | @agent-name |
| 进程模型 | |||
| 配置独立性 | |||
| 通信方式 | |||
| 并行上限 | |||
| 编排复杂度 |
Claude Code 的独特优势:@agent-name 语法极其简洁——在对话中像 @某人一样调用子 Agent,不需要写工具调用代码。这是三个框架中对开发者最友好的多 Agent 接口。
六、安全模型:Permission 分级 + Hooks 拦截
6.1 五级 Permission Mode
default → 标准模式:危险操作弹确认acceptEdits → 自动接受编辑,其他弹确认plan → 只读规划模式,不允许写auto → 自动批准(谨慎使用)bypassPermissions → 完全跳过权限检查
通过 Shift+Tab 在 TUI 中实时切换,或通过 --permission-mode CLI 参数指定。
6.2 工具白名单/黑名单
只允许读文件和 git 操作claude --allowedTools ”Read,Bash(git *)” -p ”review the code”# 禁止读写 .env 文件claude --disallowedTools ”Read(.env),Write(.env)” -p ”refactor”
工具名支持 glob 模式:Bash(npm run lint:*) 只允许特定 npm 脚本。
6.3 Hooks 系统:8 种拦截点
Hooks 是 Claude Code 安全模型的核心创新——在 8 个关键时刻执行自定义脚本:
UserPromptSubmit | ||
PreToolUse | ||
PostToolUse | ||
Notification | ||
Stop | ||
SubagentStop | ||
PreCompact | ||
SessionStart |
安全 Hook 示例:
{”hooks”: {”PreToolUse”: [{”matcher”: ”Bash”,”hooks”: [{”type”: ”command”,”command”: ”if echo \”$CLAUDE_TOOL_INPUT\” | grep -qE 'rm -rf|git push.*--force'; then echo 'Blocked!' && exit 2; fi”}]}]}}
6.4 三角对照:安全模型
| 权限模型 | |||
| 用户确认 | |||
| Prompt Injection 防御 | |||
| 凭据管理 | |||
| 沙箱 | |||
| Hook/拦截点 |
核心差异:Claude Code 把安全防线设在用户交互层——通过 Permission Mode 让用户控制 Agent 能做多危险的事。Hermes 把防线设在系统层——Prompt Injection 检测 + Vault 加密 + 爆炸半径评估。OpenClaw 居中——ToolPolicy 精细但无自动拦截。
七、Settings 层级:四层配置覆盖
Claude Code 的配置层级设计值得单独一节——它比 OpenClaw 和 Hermes 都更精细:
优先级从高到低:1. CLI flags → 覆盖一切2. .claude/settings.local.json → 个人项目配置(gitignored)3. .claude/settings.json → 团队共享项目配置(git-tracked)4. ~/.claude/settings.json → 全局用户配置
对应的 Context 文件也分三层:
~/.claude/CLAUDE.md → 全局(所有项目生效)./CLAUDE.md → 项目级(git-tracked).claude/CLAUDE.local.md → 个人项目覆盖(gitignored)
设计理念:团队共享 settings.json + CLAUDE.md,个人通过 .local 文件覆盖,不会被 git 追踪导致冲突。
三角对照:配置管理
| 配置文件 | openclaw.jsonSOUL.md | config.yamlSOUL.md + skills/ | settings.jsonCLAUDE.md ×3 |
| 层级 | |||
| 团队协作 | .local 分离团队/个人 | ||
| 热加载 |
八、终局对照:五维选型矩阵
| 最佳场景 | |||
| 进程模型 | |||
| 通信标准 | |||
| 多 Agent | |||
| 语义记忆 | |||
| 安全防线 | |||
| 配置管理 | |||
| 编辑器集成 | |||
| 学习曲线 | |||
| 社区规模 |
九、总结:三条路线,一个趋势
OpenClaw:平台路线。Gateway 是内核,Channel Plugin 是驱动,ACP + MCP 双协议让 Agent 融入开发生态。380K Star 的社区飞轮驱动生态繁荣。代价是复杂度高、调试门槛高。
Hermes Agent:深度路线。Python 单循环 + Hindsight PG 语义记忆 + 四层安全防御。不做平台做深度——当需要从近万条历史事实中 472ms 语义召回时,只有 Hermes 能做到。代价是通道少、多 Agent 是后来者。
Claude Code:务实路线。Node.js 子进程模型 + 最友好的多 Agent 接口(@agent-name)+ 最精细的权限分级。不追求平台效应,专注做好一件事:让开发者在终端里用 AI 写代码。代价是记忆系统薄弱(无语义搜索)、无多通道支持。
共同趋势:三个框架都选择了子进程隔离执行高风险任务——没有人让 Agent 在同一进程里跑不可信代码。ACP 协议正在成为 Agent ↔ 编辑器的标准通信层,Claude Code 和 OpenClaw 都已接入。
下一篇预告:Codex CLI 源码拆解——OpenAI 的 Python Agent 框架如何用子进程模型与 Claude Code 正面对标,以及与 Hermes 的
delegate_task形成三角对照。
夜雨聆风