本节看 Claude Code 这一侧:为什么需要 slash command 和 subagent 两级,而不是一个命令文件直接把所有事情做完。
Claude 入口层负责什么?
Claude 入口层只负责三件事:
- 接收
/codex:rescue用户命令。 - 把原始请求交给指定 subagent。
- 避免在命令文件里塞复杂逻辑。
用图表示:
sequenceDiagram participant U as User participant Cmd as commands/rescue.md participant Agent as codex:codex-rescue participant Bash as Bash Tool U->>Cmd: /codex:rescue fix failing tests Cmd->>Agent: Agent tool 调用 subagent_type Agent->>Bash: node codex-companion.mjs task ...
为什么要多一个 subagent?
因为 Claude Code 的 slash command 更适合作为入口声明,不适合作为复杂任务控制器。多一层 subagent 有几个好处:
- 可以把命令入口和执行策略分开。
- 可以限制 subagent 的行为,让它只做转发。
- 可以复用 Claude Code 的 Agent tool 管理机制。
- 可以避免命令文件递归调用自己。
subagent 为什么要“薄”?
如果 subagent 自己开始分析代码、调用工具、修改文件,它就会和 Codex runtime 抢职责。codex-plugin-cc 的设计目标是让 Codex 干活,所以 subagent 应该非常薄:
flowchart LR A[收到用户任务] --> B[保留原始 intent] B --> C[拼接 flags] C --> D[调用 Node companion] D --> E[等待或返回 jobId]
这里的设计原则是:转发层不要解释太多,否则原始任务会在 Claude 层被二次加工,Codex 收到的任务就不再纯净。
为什么避免调用 Skill?
这类插件命令通常会强调不要调用同名 Skill,因为 slash command 如果再触发同名 Skill,很容易形成循环:
flowchart TD A["/codex:rescue"] --> B{错误地调用 Skill(codex:rescue)?} B -->|是| A B -->|否| C[调用 codex:codex-rescue subagent]
所以它选择 Agent tool + subagent,而不是 Skill。
对你有什么启发?
如果你以后设计类似桥接插件,可以把入口层写得非常克制:
- command 文件只做路由和说明。
- agent 文件只做受控转发。
- 复杂逻辑放到脚本里。
- 脚本再去接真正的 runtime 或服务。
相关笔记
- Codex Plugin CC Rescue 原理
- Claude Code Plugin 完全指南
- Codex Plugin CC 01 桥接架构设计
- Codex Plugin CC 03 Node Companion 层