三月初的时候我就逆向了claude并进行了分析 有了下面文章

2026-04-11 13:551阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐
问题描述:

文章如左:https://www.cdxiaodong.life/article/31d0f0c5-b87c-8043-84a2-d47565f6f9e5

不过确实因为是逆向的 相比开源的版本,在重点的分流、多代理调度等功能上没有分析到

下面是最新版本我比较感兴趣的部分

flowchart TD A["CLI 入口<br/>entrypoints/cli.tsx"] --> B{"参数分流"} B -->|--version| V["直接输出版本"] B -->|remote-control / bridge| RC["bridgeMain()<br/>远程控制模式"] B -->|daemon| D["daemonMain()<br/>守护进程模式"] B -->|ps / logs / attach / kill / --bg| BG["后台会话管理"] B -->|默认完整 CLI| M["main.tsx"] M --> M1["初始化启动优化<br/>profiler / keychain / MDM"] M1 --> M2["initBuiltinPlugins()<br/>initBundledSkills()"] M2 --> M3["getTools(toolPermissionContext)"] M3 --> S["setup.ts<br/>setup(...)"] M3 --> C["getCommands(cwd)"] M3 --> AG["getAgentDefinitionsWithOverrides(cwd)"] S --> S1["switchSession()"] S1 --> S2["startUdsMessaging()"] S2 --> S3["setCwd(cwd)"] S3 --> S4["captureHooksConfigSnapshot()"] S4 --> S5["initializeFileChangedWatcher()"] S5 --> S6{"worktreeEnabled?"} S6 -->|yes| S7["createWorktreeForSession()<br/>可选 tmux"] S6 -->|no| M4["继续启动"] C --> M4 AG --> M4 S7 --> M4 M4 --> QE["QueryEngine.ts<br/>submitMessage(...)"] QE --> QE1["fetchSystemPromptParts()"] QE1 --> QE2["组装 systemPrompt / userContext / systemContext"] QE2 --> Q["query.ts<br/>query() / queryLoop()"] Q --> Q1["buildQueryConfig()"] Q1 --> Q2["memory / skill prefetch"] Q2 --> Q3["compact / snip / microcompact"] Q3 --> Q4["调用模型并流式接收 assistantMessages"] Q4 --> Q5{"assistant 是否产生 tool_use?"} Q5 -->|否| Q6["输出最终消息并结束"] Q5 -->|是| T["runTools(...) / StreamingToolExecutor"] T --> T1{"是否调用 AgentTool?"} T1 -->|否| T2["tool_result 回填消息"] T2 --> Q T1 -->|是| AT["AgentTool.tsx<br/>AgentTool.call(...)"] AT --> AT1["解析参数<br/>subagent_type / run_in_background / isolation / cwd"] AT1 --> AT2{"team_name + name?"} AT2 -->|是| TEAM["spawnTeammate()"] AT2 -->|否| AT3["选择 selectedAgent"] AT3 --> AT4{"isolation"} AT4 -->|remote| REM["teleportToRemote()<br/>remote_launched"] AT4 -->|worktree| W["createAgentWorktree()"] AT4 -->|none| AT5["直接继续"] W --> AT5 TEAM --> T2 REM --> T2 AT5 --> AT6["assembleToolPool()<br/>生成 workerTools"] AT6 --> AT7["计算 shouldRunAsync"] AT7 --> RA["runAgent.ts<br/>runAgent(...)"] RA --> RA1["initializeAgentMcpServers()"] RA1 --> RA2["createSubagentContext()"] RA2 --> RA3["recordSidechainTranscript()<br/>writeAgentMetadata()"] RA3 --> RA4["子代理再次进入 query(...)"] RA4 --> QSUB["子代理 queryLoop"] QSUB --> QSUB2["自己的工具调用 / 推理 / 结果"] QSUB2 --> RA5["清理 MCP / hooks / cache / transcript 映射"] RA5 --> T2

多代理同步 / 异步 / worktree / remote

flowchart TD A["主代理在 queryLoop 中调用 AgentTool"] --> B["AgentTool.call(...)<br/>解析参数:<br/>subagent_type / run_in_background / isolation / cwd"] B --> C["选择 selectedAgent"] C --> D["检查权限 / MCP 依赖 / agent 定义"] D --> E{"isolation 是什么?"} E -->|remote| R1["Remote 模式"] E -->|worktree| W1["Worktree 模式"] E -->|未设置| N1["普通本地模式"] R1 --> R2["checkRemoteAgentEligibility()"] R2 --> R3["teleportToRemote()"] R3 --> R4["registerRemoteAgentTask()"] R4 --> R5["返回 remote_launched"] R5 --> END1["主代理拿到远程任务句柄<br/>不在本地直接跑 queryLoop"] W1 --> W2["createAgentWorktree()"] W2 --> W3["得到独立 worktreePath"] W3 --> P1["继续构造 runAgentParams"] N1 --> P1["继续构造 runAgentParams"] P1 --> P2["assembleToolPool()<br/>为子代理生成独立工具池"] P2 --> P3["决定 shouldRunAsync"] P3 --> J{"shouldRunAsync?"} J -->|否| S1["同步子代理"] J -->|是| A1["异步子代理"] S1 --> S2["runAgent(...)"] S2 --> S3["createSubagentContext()<br/>通常共享部分父状态"] S3 --> S4["当前调用栈内直接进入子 queryLoop"] S4 --> S5["子代理完成后把结果返回给父代理"] S5 --> S6["如果是 worktree:<br/>检查是否有改动"] S6 --> S7{"worktree 有改动?"} S7 -->|否| S8["removeAgentWorktree()<br/>自动清理"] S7 -->|是| S9["保留 worktree 供后续查看/接管"] S8 --> END2["同步结果回到父代理"] S9 --> END2 A1 --> A2["registerAsyncAgent()"] A2 --> A3["创建独立 abortController / taskId / outputFile"] A3 --> A4["后台启动 runAsyncAgentLifecycle(...)"] A4 --> A5["内部仍然调用 runAgent(...)"] A5 --> A6["子代理在后台进入自己的 queryLoop"] A6 --> A7["主代理立即收到 async_launched"] A7 --> A8["后续通过任务输出 / 通知 / SendMessage 跟踪"] A8 --> A9["如果是 worktree:<br/>完成后再决定清理或保留"] A9 --> END3["后台任务与主代理解耦运行"] classDef remote fill:#ffe8e8,stroke:#d44,stroke-width:1px; classDef worktree fill:#e8f4ff,stroke:#3b82f6,stroke-width:1px; classDef async fill:#fff7e6,stroke:#d97706,stroke-width:1px; classDef sync fill:#eafbea,stroke:#16a34a,stroke-width:1px; class R1,R2,R3,R4,R5 remote; class W1,W2,W3,S6,S7,S8,S9 worktree; class A1,A2,A3,A4,A5,A6,A7,A8,A9 async; class S1,S2,S3,S4,S5 sync; 网友解答:


--【壹】--:

很多人都有做分析吧 只不过太细节的东西逆不干净

问题描述:

文章如左:https://www.cdxiaodong.life/article/31d0f0c5-b87c-8043-84a2-d47565f6f9e5

不过确实因为是逆向的 相比开源的版本,在重点的分流、多代理调度等功能上没有分析到

下面是最新版本我比较感兴趣的部分

flowchart TD A["CLI 入口<br/>entrypoints/cli.tsx"] --> B{"参数分流"} B -->|--version| V["直接输出版本"] B -->|remote-control / bridge| RC["bridgeMain()<br/>远程控制模式"] B -->|daemon| D["daemonMain()<br/>守护进程模式"] B -->|ps / logs / attach / kill / --bg| BG["后台会话管理"] B -->|默认完整 CLI| M["main.tsx"] M --> M1["初始化启动优化<br/>profiler / keychain / MDM"] M1 --> M2["initBuiltinPlugins()<br/>initBundledSkills()"] M2 --> M3["getTools(toolPermissionContext)"] M3 --> S["setup.ts<br/>setup(...)"] M3 --> C["getCommands(cwd)"] M3 --> AG["getAgentDefinitionsWithOverrides(cwd)"] S --> S1["switchSession()"] S1 --> S2["startUdsMessaging()"] S2 --> S3["setCwd(cwd)"] S3 --> S4["captureHooksConfigSnapshot()"] S4 --> S5["initializeFileChangedWatcher()"] S5 --> S6{"worktreeEnabled?"} S6 -->|yes| S7["createWorktreeForSession()<br/>可选 tmux"] S6 -->|no| M4["继续启动"] C --> M4 AG --> M4 S7 --> M4 M4 --> QE["QueryEngine.ts<br/>submitMessage(...)"] QE --> QE1["fetchSystemPromptParts()"] QE1 --> QE2["组装 systemPrompt / userContext / systemContext"] QE2 --> Q["query.ts<br/>query() / queryLoop()"] Q --> Q1["buildQueryConfig()"] Q1 --> Q2["memory / skill prefetch"] Q2 --> Q3["compact / snip / microcompact"] Q3 --> Q4["调用模型并流式接收 assistantMessages"] Q4 --> Q5{"assistant 是否产生 tool_use?"} Q5 -->|否| Q6["输出最终消息并结束"] Q5 -->|是| T["runTools(...) / StreamingToolExecutor"] T --> T1{"是否调用 AgentTool?"} T1 -->|否| T2["tool_result 回填消息"] T2 --> Q T1 -->|是| AT["AgentTool.tsx<br/>AgentTool.call(...)"] AT --> AT1["解析参数<br/>subagent_type / run_in_background / isolation / cwd"] AT1 --> AT2{"team_name + name?"} AT2 -->|是| TEAM["spawnTeammate()"] AT2 -->|否| AT3["选择 selectedAgent"] AT3 --> AT4{"isolation"} AT4 -->|remote| REM["teleportToRemote()<br/>remote_launched"] AT4 -->|worktree| W["createAgentWorktree()"] AT4 -->|none| AT5["直接继续"] W --> AT5 TEAM --> T2 REM --> T2 AT5 --> AT6["assembleToolPool()<br/>生成 workerTools"] AT6 --> AT7["计算 shouldRunAsync"] AT7 --> RA["runAgent.ts<br/>runAgent(...)"] RA --> RA1["initializeAgentMcpServers()"] RA1 --> RA2["createSubagentContext()"] RA2 --> RA3["recordSidechainTranscript()<br/>writeAgentMetadata()"] RA3 --> RA4["子代理再次进入 query(...)"] RA4 --> QSUB["子代理 queryLoop"] QSUB --> QSUB2["自己的工具调用 / 推理 / 结果"] QSUB2 --> RA5["清理 MCP / hooks / cache / transcript 映射"] RA5 --> T2

多代理同步 / 异步 / worktree / remote

flowchart TD A["主代理在 queryLoop 中调用 AgentTool"] --> B["AgentTool.call(...)<br/>解析参数:<br/>subagent_type / run_in_background / isolation / cwd"] B --> C["选择 selectedAgent"] C --> D["检查权限 / MCP 依赖 / agent 定义"] D --> E{"isolation 是什么?"} E -->|remote| R1["Remote 模式"] E -->|worktree| W1["Worktree 模式"] E -->|未设置| N1["普通本地模式"] R1 --> R2["checkRemoteAgentEligibility()"] R2 --> R3["teleportToRemote()"] R3 --> R4["registerRemoteAgentTask()"] R4 --> R5["返回 remote_launched"] R5 --> END1["主代理拿到远程任务句柄<br/>不在本地直接跑 queryLoop"] W1 --> W2["createAgentWorktree()"] W2 --> W3["得到独立 worktreePath"] W3 --> P1["继续构造 runAgentParams"] N1 --> P1["继续构造 runAgentParams"] P1 --> P2["assembleToolPool()<br/>为子代理生成独立工具池"] P2 --> P3["决定 shouldRunAsync"] P3 --> J{"shouldRunAsync?"} J -->|否| S1["同步子代理"] J -->|是| A1["异步子代理"] S1 --> S2["runAgent(...)"] S2 --> S3["createSubagentContext()<br/>通常共享部分父状态"] S3 --> S4["当前调用栈内直接进入子 queryLoop"] S4 --> S5["子代理完成后把结果返回给父代理"] S5 --> S6["如果是 worktree:<br/>检查是否有改动"] S6 --> S7{"worktree 有改动?"} S7 -->|否| S8["removeAgentWorktree()<br/>自动清理"] S7 -->|是| S9["保留 worktree 供后续查看/接管"] S8 --> END2["同步结果回到父代理"] S9 --> END2 A1 --> A2["registerAsyncAgent()"] A2 --> A3["创建独立 abortController / taskId / outputFile"] A3 --> A4["后台启动 runAsyncAgentLifecycle(...)"] A4 --> A5["内部仍然调用 runAgent(...)"] A5 --> A6["子代理在后台进入自己的 queryLoop"] A6 --> A7["主代理立即收到 async_launched"] A7 --> A8["后续通过任务输出 / 通知 / SendMessage 跟踪"] A8 --> A9["如果是 worktree:<br/>完成后再决定清理或保留"] A9 --> END3["后台任务与主代理解耦运行"] classDef remote fill:#ffe8e8,stroke:#d44,stroke-width:1px; classDef worktree fill:#e8f4ff,stroke:#3b82f6,stroke-width:1px; classDef async fill:#fff7e6,stroke:#d97706,stroke-width:1px; classDef sync fill:#eafbea,stroke:#16a34a,stroke-width:1px; class R1,R2,R3,R4,R5 remote; class W1,W2,W3,S6,S7,S8,S9 worktree; class A1,A2,A3,A4,A5,A6,A7,A8,A9 async; class S1,S2,S3,S4,S5 sync; 网友解答:


--【壹】--:

很多人都有做分析吧 只不过太细节的东西逆不干净