为什么自建 Agent 内核,
而不是复用 Claude Code
FFAI 的内核和 Claude Code 高度同构——TAOR 循环、压缩阈值、重试语义逐常量对齐。既然长得像,为什么不直接用原装的?本页给出完整答案:五条决定性原因、三条次要原因、一张反事实翻盘条件表,以及「复用 Claude Code」的正确姿势。事实源在仓库 docs/modules/agent/references/why-own-kernel-not-claude-code.md(决策 D75)。
00先承认前提:内核确实是「临摹品」
不回避:FFAI 的主循环、auto-compact 阈值公式(window − 20000 − 13000)、重试语言(指数退避 ±25% jitter / 后台请求遇过载直接放弃 / 连续 3 次过载换模型)、记忆注入截断(200 行 / 25KB)、<tool_use_error> 反馈闭环、两轴协作模式,全部是对 Claude Code 的有意识临摹——设计文档逐处标了出处。
所以问题不是「我们能不能写出这个内核」(能,且已在生产运行),而是「既然长得像,为什么不用原装的」。答案的骨架一句话:
像的部分只占系统的 ~15%(主循环本体几千行);不像的部分才是系统的本体——多租户、多厂商、多端、可审计——而那些部分,Claude Code 在形态上给不了。
01五条决定性原因
任何一条单独成立,都足以否决「换内核」。五条同时成立。
工具层强制可经 MCP 达成,但「回合层」治理无法外包
先承认反驳成立的那一半(2026-07-07 修正):如果 MCP 的身份问题解决(per-user OAuth / OBO),org 隔离 + DataScope 完全可以在我们自己的 MCP server 里强制——强制点从来在我们后端代码里,MCP 只是换了传输层,门还是我们的门。我们的架构本就把 MCP 列为工具首选轨(G6 允许 CC/Cursor 调我们的业务工具)。
但搬得走的只有工具层。这些「回合层」治理长在循环里,CC 内核下要么消失、要么退化成面向机主(而非多组织 admin)的旋钮:① 上下文注入策略——个人/org 记忆注入、共享上下文隐私护栏(I-31)的第一层是 prompt 层不注入,MCP server 看不到 prompt;② 工具可见性按会话模式过滤(planMode / permissionMode / org 白名单,I-8/I-18);③ mid-turn 配额复查与软限降档路由;④ turn 级审计完整性——MCP 只审得到「工具被调了」,模型看到了什么、为何调它、本轮成本都在 CC 进程里,只有出入境记录、没有行程,HMAC 链口径就断了。
另外「身份解决」本身有新增成本:per-user token 的获取/刷新/撤销、confused deputy、每工具一跳 HTTP——可解,但都是换内核要额外付的复杂度。
模型锁定 vs 多厂商 + 数据驻留合规
Agent SDK 只跑 Anthropic 模型(API / Bedrock / Vertex)。而 FFAI 代码里有硬性出网合规门 FFAI_LLM_EGRESS_COMPLIANCE_CLEARED、region-aware 路由 CN→qwen——数据驻留是合规约束,不是偏好。ModelRouter(三层 scope 规则 + 轻 turn 降档 + 决策审计落库)还是架构目标 G10 声明的核心差异化。
换 CC 内核 = 5 家 provider、中立 IR、整个路由层作废。社区有把 CC 指向兼容端点的 shim,但那是非官方 hack,prompt cache / beta 特性随版本碎,不能当企业依赖。
多租户治理必须焊死在循环结构里,不能靠插入点
FFAI 的所有工具调用必经 ToolRegistry.invoke 单一收口(不变量 I-21 零绕过):IAM 授权、destructive 确认、幂等去重、出口脱敏(开关 import 时冻结,prompt injection 关不掉)、超限落盘、三档异常分类;外加 HMAC-SHA256 审计哈希链、org/user 双 scope 配额。
Claude Code 给的是 hooks(PreToolUse/PostToolUse 插入点)。插入点是「可以加检查」,收口是「不可能绕过检查」——多租户无人值守场景只有后者成立。CC 的安全模型是「问机主」(权限弹窗 UI 上万行),我们没有机主可问。
进程与部署模型不兼容
CC/SDK 每会话一个子进程(CLI 内核)。FFAI 是 NestJS 多副本常驻服务:几百员工会话跑在事件循环里、跨副本取消走 Redis 广播、SSE 流同进程直出、Teams webhook 后台跑 turn。
换成「每会话 spawn 一个 Node 子进程」意味着进程编排、资源记账、取消传播、SSE 桥接全部重做一层——为了换内核而给自己发明一个新的编排问题。
异步多端交互形态:ask_user 是第一类终态
CC 的交互模型是终端同步会话:AskUserQuestion 阻塞弹窗、循环原地等。FFAI 的 surface 是 Web / Teams / cron——ask_user 和 permission_required 是结束 turn 的第一类终态(事件推给前端 / Teams 卡片,用户回答开启新 turn),cron 跑在无人值守语义下。
这个差异渗透到主循环终止条件的设计里,不是外壳能适配掉的。
02三条次要但真实的原因
闭源 + 不可控演进
CC 闭源、版本节奏由 Anthropic 定;内核级依赖意味着它每次 breaking change 都是我们的 P0。自建内核 + 上游对标,把「被动跟随」变成「主动择优吸收」。
AI 时代自建成本已塌缩
内核核心(主循环 3,483 + 压缩 220 + 协议层 2,232 行)合计不到 6 千行;压缩层 220 行 vs CC 的 4,626 行(21×)证明「临摹最终答案」的成本极低。「自建工程量大」这个传统反对理由,在本项目实测数据里不成立。
许可与商业边界
把闭源终端产品嵌成多用户服务端内核处于授权条款灰色地带;Agent SDK 虽是官方嵌入形态,但授权前提仍是 Anthropic 模型(回到 R2)。
03反事实检验:什么条件下应该用 CC / Agent SDK
诚实列出翻盘条件,防止本文变成永久教条。任一行状态翻转时,应重开评估,而不是引用本文否决。
| 条件 | 若成立 | 现状(2026-07) |
|---|---|---|
| 单租户 / 单用户形态(内部工具 → 个人工具) | SDK 合理 | ❌ 不成立:多组织是 G2 根设定 |
| 只用 Anthropic 模型且无数据驻留约束 | R2 消失 | ❌ 不成立:qwen 合规门写在代码里 |
| 业务能力全部 MCP 化 + 身份 OBO 打通 | R1 的工具层消失(回合层治理仍在,见 R1) | ⚠️ 部分可行但未做:service 轨仍是默认,MCP 轨本就保留 |
| Agent SDK 开放多 provider + 服务端多租户运行时 | 重新评估 | ❌ 无此路线图信号 |
04「复用 Claude Code」的正确姿势
不换内核 ≠ 不用 CC。我们实际在做(和将要做)的三件事:
① 设计临摹
内核每个机制先看 CC 怎么做(阈值 / 重试 / memdir / 两轴 / tool_use_error),有标准答案就抄答案,不重新试错。事实源 references/claude-code-reference.md。
② 上游对标周期化
#1932 模式:CC / Codex / OpenClaw 发版 → 跑 delta 对标 → 逐项吸收。stall watchdog、bounded reader、拒收远端图片 URL 都是这么来的。
③ 沙箱内嵌当编程 worker
E28 per-user 持久容器 + E31 dev runtime 就绪后,编程类重任务由容器内的 CC/Codex CLI 承担(它们为此而生),FFAI 内核负责编排/身份/审计/投递——CC 变成 cli: 轨里的一个超级工具,而不是内核。既要 CC 的编码深度,又不交出平台控制权。
漂移防御(D75):任何「换内核 / 接 CC 引擎」的提案,先过 §03 反事实表;「沙箱内嵌 worker」是增量能力,不改变内核归属,勿混为「换内核」。
05FAQ:「Claude 不是有企业版吗?」
最容易混淆的一层追问。答案:Claude 的企业形态企业化的是「员工用 Claude」这件事;FFAI 要企业化的是「模型操作我们的业务系统」这件事——两个「企业」不在同一个位置。
Claude 的企业形态是两样东西:① Claude Enterprise(claude.ai 企业席位:SSO/SAML、席位与域管理、审计日志、数据不用于训练);② Claude Code 企业管理(managed settings 策略下发、用量/费用管控、Bedrock/Vertex 合规接入)。它们是采购合规层——让 IT 部门敢把 Claude 发给全员。但逐维对照我们的需求,会发现它答的不是同一道题:
| 维度 | Claude 企业版给的 | FFAI 需要的 |
|---|---|---|
| 多租户 | 「你们公司」在 Anthropic 云上的席位空间——隔离的是员工与 Claude 的对话 | 我们业务系统内部的多组织结构:查一张采购单要过 org 隔离 + DataScope 行级过滤。Claude 不知道我们的 org/部门/角色是什么,也永远不该知道 |
| 权限 | 席位级:谁能用、能用多少额度 | 业务动作级:这个员工的 agent 能不能改这张审批单,由我们的权限码决定——即 R1,MCP connector 级凭据表达不了 RBAC+DataScope+事务语义 |
| 审计 | 平台使用审计(谁登录、谁开了会话、admin 操作),落在 Anthropic 的审计域 | 业务操作审计:「谁在何时通过 agent 调了什么工具改了什么单据」,HMAC 链防篡改,落在我们的合规域——审计员查的是我们的账 |
| 模型/驻留 | 只有 Claude;驻留 = Anthropic 云或 Bedrock/Vertex region | CN 场景要 qwen、出网合规门、按任务路由(R2)——企业版再企业,也不会替你接通义千问 |
| 产品形态 | 入口是 claude.ai / 终端 CC,体验由 Anthropic 定义 | agent 是工作台首页、嵌 Teams、跑 cron、Canvas 长在我们前端——体验由我们定义 |
一句话收拢:企业版解决「公司安全地用 Claude」(信任边界在 Anthropic 平台);FFAI 解决「模型安全地操作我们的系统」(信任边界在我们平台)。两者互补不对立——员工通用问答可用 Claude Enterprise 席位,FFAI 内部照样经 API 调 Claude 模型(走我们的路由和审计),沙箱内嵌 worker 还能复用其管控能力。被否决的只是「把 CC 当 FFAI 的内核」,不是「在企业里用 Claude」。
FAQ-2:「工具可见性 MCP 能动态过滤、上下文注入 spawn 时能拼进去啊?」
2026-07-07 的连环追问,逐条认账之后,论证收敛到它的最终形态。
都对:MCP tools/list 是 per-session 动态的(还有 list_changed 通知 + readOnly/destructive 注解);内核由我们 spawn,system prompt / CLAUDE.md / append-system-prompt 都是我们拼的,per-turn 动态注入可走 UserPromptSubmit hook 注 additionalContext——连「共享上下文不注入」都成立。照此推演,任何「X 做不到」的具体清单都会被逐条失守,因为 CC 的旋钮面每个版本都在扩大。所以正确的论证不是阵地战,而是看什么撑到最后:
① 模型路由 / mid-turn 降档(R2)
CC 的循环只跟 Anthropic 说话。「软限触发换便宜模型」「CN 任务路由 qwen」在别人的循环里不存在对应概念。唯一的死刑条款。
② 循环本体的行为
ask_user/permission_required 终态、14 种 StreamEvent SSE 协议、跨副本取消、cron skipHistory、failover 候选链——这些不是「注入什么」,是「循环怎么走」。
③ 审计第一方性
hooks + transcript 摄取只能从 CC 的日志格式二手重建;HMAC 链从「记录产生即入链」退化为「摄取时补链」。
最终论证形态——不是「做不到」,是「负收益」:每一条「能做到」都需要一块胶水(OBO token 生命周期 / MCP server 化 / hooks 桥 / settings 下发 / transcript 摄取 / 每会话子进程编排)。胶水加总,规模大概率 ≥ 被替换的循环本体(约 3,500 行);换来的是黑盒依赖、每次 CC 发版的胶水脆性、以及无解的模型锁定。用 CC 当内核 = 把产品循环行为的上界设为「CC 恰好暴露的旋钮」,每个新需求先问一遍 Anthropic 有没有旋钮。判定应基于此,而非任何一条会随版本失效的「做不到」清单。
06FAQ-3:「Agent 长在业务系统上,会不会高耦合?」
2026-07-07 追问。判定:是好方式——代码耦合实际很低(插件反转),真正的耦合在进程/部署层,那才是要管理的部分。行动项登记于 decisions.md D76。
端口-适配器,低耦合
agent 内核零业务 import;业务模块经 @AgentTool 薄契约(元数据 + zod + AgentContext 6 字段)自注册、bootstrap 反向发现;独立 *.agent-tools.ts 出口 + CI 卡口防边界侵蚀。
深耦合是故意的
agent→平台(IAM/DataScope/org 模型)的耦合就是 R1 护城河;解开它产品退化为「通用 chatbot + connector」。业界同型:Agentforce / Joule / M365 Copilot 全是嵌入式。
唯一实的风险
长 SSE 和 100 轮循环本身 I/O-bound 无害;真实争用面是三个:事件循环同步 CPU 尖刺(大 JSON/脱敏/base64/HMAC)、堆与 GC 停顿(blob/图片/fetch 缓冲)、共享 Prisma 池(每迭代 3-5 笔写)。
治理姿势(D76):单 turn 已充分有界(四层大小上界 + MAX_ITER=100 + 硬超时 + 重执行全外放容器),裸露面 = 并发无上限 + 不可观测。行动排序:① per-user/org 并发 turn cap(Redis 计数 + 429,几十行)→ ② event loop lag / heap / pool wait 三指标接 OTel + 告警 → ③ 进程拆分是有触发条件的演进项(agent 致业务 P99 劣化超阈值 / 部署节奏被阻塞才拆;断面已备好:内核零业务 import + 事件流跨模块写 + service→MCP 出口预留)。在 ①② 数据缺席时提前拆微服务 = 盲飞。
前置心智模型:本机 vs 服务器 · 两种并发容量 · SSE 的账怎么算
本机 vs 服务器 = N=1 vs N=many
CC 无并发设计不是省略而是不需要——资源用户自带(成本外置,一万个 CC 用户 = 一万台用户的电脑出力)。服务器把负载集中到自己机器上,公平性 / 隔离 / 容量规划才成为一等公民。
两种并发容量,只有一种关联核数
CPU 并行 = 核数(Node 单线程 → pm2 每核一进程),对应循环里的同步尖刺;I/O 并发 = 内存 + fd + 事件循环健康,与核数基本无关——一个核挂几万条空闲连接是事件循环模型的本职。agent 负载是混合体:95%+ 墙钟在 await,穿插吃核的尖刺。
Little's law:L = λ × W
SSE 把 W 从毫秒放大到分钟 → 同样用户量,并发连接数放大百千倍——「长连接更耗并发资源」的数学本质。但 socket 本身便宜;贵的是连接背后活跃 turn 的 MB 级堆、连接钉住副本的运维税(drain / 滚动部署 / 断线续传 / 防代理砍连接)、被长期占用的 DB 池与上游流配额。
收束:agent 服务容量规划的单位不是「连接数」也不是「核数」,是「并发活跃 turn 数」——一个活跃 turn ≈ 一条 SSE + 一条上游流 + MB 级堆 + 每轮几笔 DB 写 + 间歇尖刺。核数决定尖刺消化能力,内存决定可挂 turn 数,DB 池决定可同时落库数。D76 行动项 ① cap 的对象正是活跃 turn。
资源瓶颈排序(「所以内存更重要?」的准确版本):① 逻辑资源先撞——DB 连接池、上游厂商并发/速率配额都是几十量级,在物理资源告急前先排队;② 内存是第一个硬耗尽的物理资源,且最大单项不是 Node 堆而是沙箱容器(2g × 暖池 32 ≈ 64g,I-34「持久≠运行」与 I-33 cgroup fail-safe 正为此而立);③ CPU 几乎不构成容量上限(尖刺影响 p99 不影响容量),且内存压力会转化为 CPU 症状(GC 变频变长),heap 与 event loop lag 要一起看。采购扩容优先级:加内存 > 加核;调优优先级:先把逻辑资源可观测化。
06bFAQ-4:「那用 CC 内核,在后端 API 处插我们的路由代理呢?」
即社区 claude-code-router 模式:Anthropic 协议代理 + ANTHROPIC_BASE_URL 指向。结论:demo 级可行,企业内核级不可行;但想法的内核在 worker 方案里值钱。
- 代理 = 入站 Anthropic 全协议仿真:prompt caching 断点/计价、beta sticky latch、thinking signature、细粒度工具流式——逐个仿真或剥离,比我们现有协议层(出站方向 2,232 行)更重且方向相反,永远追 CC 版本。
- 最阴险的是失同步:CC 内部状态机(压缩阈值/成本/重试)全按「它以为的 claude 模型」运转——路由到 128K 窗口模型,CC 以为有 200K → 压缩不触发 → 400 爆窗。CC 循环与 Anthropic 协议共生进化,代理骗得了请求格式,骗不了内部假设。
- 只攻下 R2 的一半,R1/R3/R4/R5 纹丝不动;胶水清单反增最重一块(协议仿真代理)。
- 值钱的落点:沙箱 CC worker 配我们的 LLM 出口网关——统一记账 + 出网合规 + 审计,只做管控不做跨模型路由(worker 用真 Claude,保真度 100%)。「API 层插一手」的价值全留,死穴全避。
06cFAQ-5:「E28 每人一个工作区之后,容器里跑 CC 当运行时呢?」
反方最强版本——「每人一个持久容器」恰好重建了 CC 的原生栖息地(一人一台机器),本题因此重开。诚实结论:此架构成立;真正剩下的决定因素只有三个,其中最硬的一个不是工程问题。
先补事实:Agent SDK 有什么(「封装 CLI」的正解就是 SDK——官方 CLI 封装,结构化消息流非拦 stdout):进程内工具定义(JS 函数即工具)、hooks 全套回调、canUseTool 程序化审批、systemPrompt/CLAUDE.md/cwd 注入、permissionMode、resume/fork。设想的三类注入(工具/记忆/执行控制)SDK 全部一等支持;唯一没有的是非 Anthropic 模型。E26 文件记忆本就临摹 CC,工作区语义直接对上——很多东西是对齐而非别扭。
① 模型锁定
整个产品 Anthropic-only:放弃出网合规门、CN qwen 驻留、Router 差异化。业务可接受则此条消失,不可接受则一票否决——这是公司层面的事实拍板,不是工程论证能替答的。
② 轻查询 → 分裂脑
「查待审批」今天进程内 ≈ 纯 LLM 延迟;容器路径 +2~4s(ensure-running + spawn/resume)。大概率演化为「轻业务小自研循环 + 重任务 CC worker」——即混合方案,争的只是比例。
③ 产品面重建
Canvas 流式长出、路由/占用事件、Teams 卡片语义要围绕 CC 消息流重做——等于重写现有前端契约。
| Claude Code on the Web(2026-07 查证) | FFAI 对应物 |
|---|---|
| 浏览器薄客户端 | Web/Teams surface |
| Anthropic 后端(会话管理/调度/流转发) | 我们现有的循环 + Gateway = 控制面(多出:多模型路由、业务工具、org 治理) |
| 每任务一台隔离托管 VM,仓库 clone 进去、CC 循环在里面跑 | E28 每用户持久容器(差异:他们 per-task 临时优化隔离,我们 per-user 持久优化连续性,可组合) |
| 网络代理 + 默认 allowlist | E31 S02 受控 egress(方向获印证) |
| GitHub token 存沙箱外凭据代理,箱内只发临时限权凭据 | 「token 不进沙箱 + 出口网关记账」同一哲学 |
| 沙箱化 → 权限弹窗 −84% | 「制度/隔离替代问人」路线 |
关键印证:Anthropic 自己把 CC 搬上服务器时,也没做共享多租户循环——而是给每个会话发一台机器。「现有循环当共享控制面 + 每人容器当工作面」不是分裂脑,是控制面/工作面的标准云架构;CC on the Web 就是它的单模型子集,我们多的三样(多模型/业务工具/org 治理)恰是必须自有循环的三个理由。
追问查证:为什么不共享?成本呢?ChatGPT 怎么做的?
安全遏制 + 架构复用各一半
官方理由:按「agent 已被 prompt injection 攻陷」设防——每会话 VM 划爆炸半径、凭据永不进箱、fs+网络双隔离、三层纵深。未明说的一半:CC 生来机器形,改共享服务 = 重写循环;发机器 = 零改动上云(用户猜的「为了架构简单」占一半)。
真的还好:沙箱是 token 的 1–3%
Firecracker 式 microVM:每台 <5MiB、启动 ~125ms、单机数千台;只在任务活跃期存在(Codex 容器缓存+resume ≈ 我们 I-34 经济学)。30min 任务 token $0.5–3 vs 沙箱算力 $0.01–0.05——算力是零头,token 才是大头。
Codex cloud——与 FFAI 同形
每任务隔离容器预载仓库、setup 联网装依赖、agent 阶段默认断网、AGENTS.md、并行任务各一 worktree。断网容器不可能自己调 API → 循环跑在 OpenAI 共享控制面、容器只执行命令 = 共享循环 + 离线沙箱执行,与我们架构完全同形。
「不做共享循环」不是行业共识,是 Anthropic 的历史路径(本地产品上云的最短路径)。两巨头各印证我们一半:Anthropic 印证工作面(每人/每任务一台机器 + 凭据代理),OpenAI 印证控制面(共享循环 + 离线容器执行)。我们两样都对。
追问:「直接全部给 CC 不是更简单吗?」
先纠正前提:两种方案里「调什么工具」都是模型决定的——循环(我们的或 CC 的)只组装工具清单 + 执行 + 治理。问题不是「谁决策」(伪问题),是「谁当 harness」。「更简单」的账:真省 1.5-2 万行(但那是维护最便宜的临摹部分);复杂度守恒——转移进胶水(85 工具 MCP 化 + token 管道 + 多端胶水 + 审计摄取,且长在我们不控制的接口上);净新增两笔硬成本——常见情形变慢(业务轻查询占绝对主导,每轮付容器唤醒 + spawn 1-3s,违反「为常见情形优化」原则)+ 模型锁定。「全部给 CC」对编码为主的个人助理确实更简单——那个产品 Anthropic 已经做了(CC web);重心决定 harness 归属。可量化翻盘触发器:上线数据若显示重编码/文件任务占绝对主导(>70%),本题重开。
决议路径:辩论边际收益已为零,用 POC 收口。2-3 天 spike:Agent SDK 进用户容器 + 进程内注 2-3 个真实业务工具(用户 token)+ CLAUDE.md 指 E27 工作区 + canUseTool 接确认流 + LLM 走网关记账。测四个数:轻查询端到端延迟 / 每活跃用户内存 / resume 跨天可靠性 / Canvas 胶水工作量。POC 无论结论都不浪费——它就是「沙箱 CC worker」的第一步,两条路线共用这段路。
06dFAQ-6:「终局是不是每人一个?只共享是不是不是最终形态?」
对了三分之二——要精确到「每人一个什么」。个人助理由三个平面组成:
状态面
文件、记忆、环境、persona、凭据绑定——「做文件」住在这里。北极星 E27/E28 已定:每用户一个持久工作区/个人云电脑。
执行面
跑命令、装依赖、dev server——「做命令」住在这里。个人容器就是他的机器,I-34「持久≠运行」让它经济成立。
控制面
循环、路由、治理、调度。循环是无状态的程序,个人化在数据不在程序——复制循环代码不会让助理更「个人」。最有力证据:体系里最「个人」的组件恰是最共享的——大模型权重全球共用,个人性来自 context 不来自程序副本。
演化路径(问题里真正尖的部分):当用户可深度编程自己的 agent 行为(沙盒代码级定制),那部分不可信逻辑必须下放个人容器执行——CC-in-container 是第一个实例。终局精确表述:共享控制面是永久骨架(身份/路由/治理/调度需要可信中枢),但其管辖的「行为」持续下放个人执行面——共享面收敛为「可信调度器 + 治理收口」,个人面长成「真正干活的地方」。行业对照:移动方向确实是「更多进个人机器」(Anthropic 连循环都进了 VM),但没有任何一家把身份/计费/调度/审计中枢下放——那是共享面的不可约核心。
终章:「为什么 CC 没做三平面?Codex 确定做了吗?」
三家都有三平面,区别在「折叠没折叠」和「状态面事实源放哪」:本地 CC 三面折叠在用户机器上——且折叠是对的(三平面分离是保管人架构的产物,单一信任域里分层是纯开销);CC on the Web = 控制面共享(账号/调度/计费)+ 循环随执行面进 VM(路径依赖)+ 状态面外包 GitHub(clone 是临时副本、事实源在 git、产出走 PR——不是没有状态面,是不需要自建);Codex cloud 90% 官方确证(每任务容器、agent 阶段断网、缓存+resume)+ 10% 标注推断(模型在推理集群 → 编排语义在 OpenAI 侧),状态面同样外包 git。
规律:编码 agent 的状态面可以外包给 git(代码天生有完美外部事实源);企业个人助理的状态——记忆/工作区/业务数据/对话史——没有 git 可外包,必须自己当保管人、自建状态面。三平面在 FFAI 显式、在本地 CC 折叠、在云端编码 agent 外包——形态由「谁当保管人」决定。这正是 E26/E27/I-34 整条线的存在理由。
边界钉死:执行面包括哪些?对话属于哪个面?
判据一句话:这段计算是谁写的?工程师写的、有界的 → 控制面;LLM/用户临时生成的、无界的 → 执行面;不是计算是数据 → 状态面。
- 执行面两个物理位置:云个人容器(code_session_exec / cli_exec / 未来 CC worker / 用户自编程逻辑)+ 用户本机(Desktop client 轨 file/clipboard/shell,本地强制层 I-28)。
- 两个易混项不在执行面:业务工具调用(查审批/建单)= 控制面活动(共享进程内、工程师写死、有界);工作区文件读写 = 控制面代表用户访问状态面(直接 FS/DB API 不开容器)。有界业务工具在控制面,无界命令/代码才在执行面。
- 对话 = 控制面的活动,产生状态面的数据,途中把无界计算外包给执行面。典型 turn:「分析 Excel 出图表」→ 控制面循环 → 状态面取文件 → 执行面跑 Python → 控制面治理 → 沉淀回状态面。LLM 推理本身是被控制面调用的共享智能。
- 状态面与执行面可以合并吗?物理已合一半(D55 卷统一:容器挂工作区同一块盘 = 「个人云电脑」体验),逻辑不能合——① 生命周期:执行可抛弃(GC 销容器保卷、suspend RAM 归零文件在),状态珍贵要备份;② 信任:状态必须在执行面被攻陷时幸存;③ 访问路径:控制面要直读状态(记忆/manifest 不开容器),容器大部分时间停着。正确关系:执行面是状态面外面那层「可抛弃的计算外壳」——合体呈现,分层实现;「销毁容器保留卷」能成立本身就证明两者是两个东西。用户自己的桌面机天然合一没问题(他的信任域);云上必须分层(我们是保管人——计算可以炸,数据不能丢)。
07最终建议:模型可以租,循环必须自有
「总体上自建更好,还是 Claude 内核 + 外层控制?」的定稿回答(2026-07-07)。
控制装在循环里,不在循环外
外层包得住工具层(MCP+OBO),包不住回合层——最需要控制的三样(模型路由 / ask_user 终态 / 第一方审计)恰恰在循环最里面。外层控制 = 把方向盘装在车顶。
模型锁定无工程解
CC 的循环只跟 Anthropic 说话;qwen 合规路由、出网合规门、ModelRouter 差异化在别人的循环里不存在对应概念,不随旋钮增多缓解。
换 = 已摊销资产换持续负债
自建成本已付完(4.9 万行生产运行、内核核心 <6 千行、临摹式维护便宜——压缩层 220 vs 4,626 行实测);换内核 = 胶水(≥被替换物)+ 黑盒脆性 + 模型锁定。资产在正常产出,非沉没成本谬误——「换」本身净值为负。
Claude 的三个正确位置:① Claude 模型进 ModelRouter(已在用);② CC 进用户沙箱当编程 worker(E28/E31 后立项评估——拿它全球最强的编码深度,不交出循环);③ 设计临摹 + 上游对标(已固化,#1932 模式)。重估触发:Anthropic 若发布多 provider、可编程循环的多租户服务端 agent 运行时,本题重做(详见 §03 反事实表)。
措辞澄清:「每轮调谁」的准确粒度是 per-turn,不是 per-iteration——路由每 turn 决策一次,turn 内最多 100 轮迭代钉死同一模型,因为缓存最值钱的位置恰在 turn 内(迭代间隔秒级、每轮重发全量前缀,缓存按 模型×前缀 键控 / TTL 5 分钟)。三个换模型时机都选在缓存价值最低点:轻 turn 降档要求上下文 ≤1500 token(可缓存量 ≈0)、预算降档冷读按便宜价计、压缩摘要走独立旁路不碰主链。已识别改进项:session 模型粘性(信号不变粘住上一 turn 模型,显著变化才换)——防规则逐 turn 横跳打掉 TTL 内缓存。
08落地路线:定型方案与三阶段施工
「哪个方案更好、具体怎么做」的定稿(2026-07-07)。定型:自建控制面 + 内嵌 Worker 执行面——每个部件被推演与两巨头实践双重锁定,无其他候选。
控制面(现有循环,保持并加固)
身份/RBAC · ModelRouter(5家) · 治理收口 · 配额 · 审计链 · Teams/Web/cron
│ 有界业务工具(service轨,进程内) │ 无界任务派 worker
▼ ▼
状态面(E27/E26,已有) 执行面(E28 容器,已有)
工作区 ~/ · 记忆 · PG/blob + CC/Codex CLI worker 进容器
(欠:卷备份) + LLM 出口网关(凭据不进箱)
控制面加固
① 并发 turn cap(D76①)② event loop lag/heap/pool wait 三指标+告警(D76②)③ Router session 粘性(防打缓存)。无论 worker 走向如何都必要。
CC Worker 进容器
轻量 runner(Node+Agent SDK)跑容器内;凭据不进箱(base_url 指我们的 LLM 网关)、业务工具最小集(短 TTL 限权 token)、工作区即 cwd。测四数:轻查询延迟/每用户内存/resume 跨天/Canvas 胶水量。
Worker 正式化
delegate_coding_task 工具(复用 delegate_task 异步治理);worker 接进 ToolRegistry 收口(脱敏/审计免费);token 计量入 quota;产物走工作区→Canvas(链路已有)。
终局对齐
egress allowlist(S02)、卷备份(状态面最大欠账)、per-task 临时环境叠加持久容器、远期用户自编程(Type B)。
双循环走查:「帮我把销售数据做成 Next.js 仪表盘」
① 用户在 FFAI 对话框提需求
② 我们的循环:组 context(记忆/manifest)→ 路由 → 模型调 delegate_coding_task
③ 治理收口放行 → 返 taskId(外层循环继续活着,可陪用户聊别的)
④ 容器 ensure-running(~1s) → runner 用 Agent SDK 起 CC 会话(cwd=工作区卷)
⑤ CC 自己的循环自主跑:Read→Edit→Bash 跑测试→看报错→再改→直到通过
Bash 圈在容器 · LLM 只走我们网关(key 不在箱内)· 文件只碰他的卷
进度经 SDK 消息流 → 我们转 SSE → 前端进度卡片
⑥ CC 收工返 summary;产物(代码)本来就在工作区卷上
⑦ 结果过治理(脱敏/截断)→ tool_result 喂回我们的模型 → 总结 + Canvas 预览
⑧ 「图表改成折线」→ resume 同一 CC 会话再派(上下文还在)
| 档 | 例子 | 谁干 | 循环归谁 |
|---|---|---|---|
| 1 纯业务/问答/记忆 | 查审批 / 问知识库 / 记偏好 | service 工具,进程内毫秒级 | 我们 |
| 2 一锤子机器活 | 存文档(直接 FS 不开容器)/ 跑一段 Python(容器跑一次) | 我们循环派单次工具 | 还是我们(容器只执行,循环没换) |
| 3 迭代型机器活 | 建项目 / 多文件改到测试绿 / 装依赖 | 委派容器内 CC 循环 | CC(任务期内) |
三档分界判据:这段机器工作需不需要「边看结果边改」的自主判断——「涉及文件」不是分界线(1、2 档今天已全部在跑,新增的只有第 3 档)。且两循环不是并列分流量:每轮对话都从我们的循环开始(含重任务),经理常驻、工程师按需雇。
两个卡点解释:① 为什么派而不自己做——编码 = 机器上「读→改→跑→看报错」,需要 Read/Edit/Bash + 4 万行 bash 安全解析 + 打磨两年的编码策略,那是 CC 的核心资产,自己重造 = 搬它最厚的部分,派给它 = 白拿。经理(我们循环:理解需求/拿资源/验收/汇报)× 工程师(CC:自己工位上自主干活)。② 两循环会不会打架——不会:CC 整场工作(它自己几十轮迭代、几分钟到半小时)在外层只是一次异步工具调用(taskId+轮询,delegate_task 同款,并发/超时/tail 治理直接复用);外层不干涉内层怎么写代码,内层碰不到外层任何东西(连真 API key 都没有)。
再追问:常驻循环为什么不自己做?——诚实前提:能做,且已在做低配版(轻迭代「跑代码→看报错→再跑」今天就会)。第 3 档委派的四笔账:① 差距在行为质量不在循环结构——CC 的资产是两年真实编码任务打磨的行为 + 模型-harness 协同调优;阈值常量抄得走,行为打磨的年限抄不走(数据+评测+迭代次数,非代码量);② 工具链价码:bash 安全解析 1.9 万行、工具系统 4.1 万行(code-atlas 实测),自建 = 重写 CC 最厚部分且跟不起周更,雇它 = 白拿只付 token;③ 上下文经济学(最实际):迭代编码烧几十万 token 机器噪音,亲自做 = 噪音涌进用户对话(污染/压缩/账单),委派 = 隔离在 worker 上下文、主对话只收 8000 字符 tail——delegate_task G9 早已承认此原则;④ 边界诚实:门槛是「深迭代时 CC 明显更强」而非「我们不能」,开源编码 agent 达标之日 worker 可换可去。一句话:招工程师不是经理不会写代码——他全球最强且白拿、手艺是年限攒的、让经理亲自写会把会议室变机房。
再追问:「我们的循环也用同款 Claude API,差距真有那么大吗?」——承认:智能在模型里两边共用,差距是「同一台发动机、两副底盘」(实证:同一模型跑 SWE-bench,不同 scaffold 分差十几到几十个点)。⚠️ 2026-07-07 数据修正:该说法对老模型成立、对前沿 Claude 已塌缩——mini-swe-agent(100 行 bash-only)跑 74%+,Opus 4.5 完整 vs 极简 harness 仅差 2.4 点(SWE-agent 官方);新模型按 agentic 轨迹 RL 训练,「会迭代」已长进权重。Hermes(自研循环)同款 Opus 后端「接近」CC 分数佐证同向。立场更新:雇 Worker 的论据重心从「能力差距」移至「上下文隔离 + 工具链/安全成熟度 + 免维护」——结论不变,论据权重变了;POC A/B 价值更大。同模型下差距三来源:① 工具人体工学+提示纪律(可抄但 = 那 4 万行);② 训练先验对齐(真护城河)——Claude 在 CC 工具形状上被训练评测,用 CC 直接命中最强编码先验,我们只吃通用先验,且模型-harness 周级协同调优永远慢半拍;③ 长任务上下文纪律(长多文件差距最大、短任务 ≈0)。两个推论:分档边界被精确校准(第 2 档差距 ≈0,差距集中在第 3 档——恰好解释为何只有第 3 档雇 CC);业务面我们零劣势(先验优势是机器形工具专属,业务工具是我们的形状,模型只有通用先验,CC 来了也一样)。POC 第五测量项:同一编码任务 A/B(我们循环+code_exec vs CC worker,3-5 个难度梯度)——用数据给第 3 档门槛画线。
最终口径 + 注入层三件套(让「可换 Worker」落地)
最终口径:控制面对标 CC 做齐能力;机器形工作全量下放可换 Worker(Claude/Codex/开源);我们的核心价值 = 身份/记忆/工具的注入层 + 治理收口。「初期其他都给 Worker」的画线:按对话形 vs 机器形切——机器形(含 dev runtime/preview 深化)初期可慷慨下放;对话形(轻业务查询=流量大头、Canvas 文档/图表=流式体验最优、web 搜抓/Teams/cron=基础设施)一个不给。
| 注入物 | CC 吃的 | Codex 吃的 | 我们做的(harness 中立契约) |
|---|---|---|---|
| 上下文/记忆 | CLAUDE.md + memory 文件 | AGENTS.md | 一个生成器同源产出两种文件 |
| 业务工具 | MCP | MCP | 一个 MCP 工具网关(用户限权 token)写一次两家通吃 |
| 文件 | cwd | cwd | 工作区卷挂载(D55 已有) |
| LLM 出口 | base_url | base_url | 我们的网关(记账/合规) |
注入层只对这四个中立接口编程、禁写任何 CC 专属胶水——Worker 即真正可插拔。
业务工具注入不只 MCP:五条路 + Worker 只读原则
| 路 | 做法 | 定位 |
|---|---|---|
| ① 文件信箱 | 控制面派单时预取业务数据成工作区文件(brief.md + data.json),Worker 只读文件、产出文件 | 默认首选:零协议零凭据天然审计;POC 只做这条即可跑通 |
| ② CLI 工具 | 容器装 ffai CLI(内带限权 token),上下文文件写用法 | Phase 2 动态只读查询:编码 agent 用 CLI 的先验最强(gh/git 即明证),且是本项目 CLI 化传统的产品化 |
| ③ MCP | stdio/HTTP 连我们的工具网关 | 真需要 schema 化动态调用时再上 |
| ④ SDK 进程内工具 | tool() JS 函数 | 禁用——CC 专属,破坏中立契约 |
| ⑤ 裸 HTTP+文档 | Worker 自己 curl | 不做主路 |
安全原则:注入给 Worker 的业务工具尽量只读;业务系统的写操作不让 Worker 直接做——Worker 产出草稿文件带回控制面,经治理(destructive 确认/审计/幂等)后由我们的循环真正落库。最小权限(Worker 被 prompt injection 时炸不到业务数据)+ 验收模型自洽(经理签字才生效)+ 大幅简化初期建设。
跨循环能力供给:Worker 中途要用循环一的业务工具怎么办?
场景真实且常见(迭代任务的本质 = 干了才知道要什么)。机制 = 经理转授三级供给,不是打破隔离:
L1 预取(派单时):数据进文件信箱 ← 覆盖 ~80%
L2 动态只读直连:派单时签发任务级 token(TTL=任务时长 · scope=白名单工具 · 只读)
Worker 经 CLI/MCP 网关调同一套后端 API
← 受控通道复用而非工具移交:RBAC+DataScope 照常强制、照常审计
L3 回调补料:request_from_manager 路由回控制面走完整治理
(destructive 确认 / ask_user 问真人)→ 结果写回工作区文件
← 业务写操作永远走这级;POC 可退化为 requests/*.json + 轮询补料
三要点:① 转授永远是父集合的收窄(同 skill allowed-tools / 子 agent 工具子集原则);② L1 身份兜底原样生效(任务 token 配宽也越不了权——权限模型铁律第三次兑现);③ 写操作自动升级为控制面治理事件。
重大输入:Hermes 是我们自己的项目 → 首选 Worker,解开合规死结
不搬 Hermes 循环进控制面:① 几何问题——Python sidecar = R1/R4 否决 CC-as-kernel 的同一拓扑;重写成 TS = 移植设计(已系统性发生:E26 记忆/脱敏/delegate 并发均移植自 Hermes);② 前提修正——FFAI 循环已是多模型原生,且多了 Hermes 没有的企业侧(其权限/安全 4,758 行四家最少,单用户形态)。
Hermes 当首选 Worker 的解锁:多模型 worker 经我们网关 per-task 路由(合规任务 qwen、硬任务 Claude)→「员工代码发 Anthropic」从二选一变成路由配置题;自己的代码零 license、可原生加 FFAI 适配。Worker 格局:Hermes 为主、CC 为辅,同一注入契约双 worker。POC 升级为 A/B/C 三臂(我们循环+code_exec vs CC worker vs Hermes worker)。
终局修正:论题推到底——自研子循环为默认,Worker 降级为可插拔加速器
收官追问「智能越强、循环越不重要,那干脆不要 Worker、自研循环直接干重活?」——可行,且是最简架构。四笔账在论题下重算:①行为质量已被 mini-swe-agent 打折;②工具链价码本来就不欠——CC 要 1.9 万行 bash 解析因为跑真机,我们跑在可抛弃断网容器,容器就是我们的 bash 安全;③上下文隔离自有方案(delegate_task 子会话 + tail);④免维护失义。
自研子循环干第 3 档 = OpenAI Codex 形状,比 Worker 更简:delegate_task 子循环 + 机器工具集(容器 exec + 工作区文件,全现成)= 用自有零件拼 mini-swe-agent。容器不装运行时、不开 LLM 出口(network=none 全密封)、注入层归零——LLM 网关/上下文文件生成/任务 token/三级供给全部不需要。
最终格局:delegate_machine_task 接口 worker 无关,三后端可插拔——(a) 自研子循环(默认,零新基建,先做)、(b) Hermes worker、(c) CC worker(可插拔加速器;注入三件套/网关设计降级为其适配器组件)。POC 三臂即裁决:A 臂进入容差则 Worker 推迟/不建。对冲:论题是趋势下注、长时程真实任务未测——「默认+可插拔」= 赌注押趋势、退路留接口。
用户终局拍板(2026-07-07):Worker 不建,直接走终局——自研循环 + 子循环干第 3 档 + 沙盒执行返回结果。Worker 相关设计(注入三件套/网关/三级供给/Hermes 与 CC 适配)留档作 contingency;POC 简化为「自研子循环真实任务验证」(可拿 CC 当基准对照,非产品化)。
收官问答:模型「知道」要去沙盒执行吗?——不需要知道,信任路径是锁死的
I-33 既有原则:永不信任 LLM 自我约束,约束由结构强制。四层机制,模型认知不在其中任何一层:① 工具清单即世界边界(capability 模型)——列表里不存在「主机执行」这个动作,执行形状工具的实现写死路由进 Docker;② 收口无旁路(I-21);③ 参数改不了向(orgId/userId 从 ctx 取 + 路径 sanitize);④ 全错还有爆炸半径(主机唯一 spawn = docker CLI、network=none、可抛弃容器)。类比:柜员不是「知道」不能进金库——他根本没有钥匙,金库还在另一栋楼。system prompt 的工具选择规则是质量优化不是安全边界:提示词是地图,工具实现是物理法则。
09收束论题:能力型 scaffolding 贬值,约束接入型基础设施升值
整场对谈的终稿命题(2026-07-07)——「模型越强、harness 需求越低」的 bitter lesson 主干成立,但只砍掉 harness 的一半。
能力型 scaffolding(帮模型更聪明)
精巧规划器、提示技巧、编排出智能——正被模型吃掉:AutoGPT 式规划器已死、mini-swe-agent 100 行追平大 harness、循环越写越薄。harness-训练协同也坍缩为通用 agentic 先验。FFAI 在这侧只押了零头(循环 3.5K + 压缩 220 行)。
约束接入型基础设施(权限/隔离/审计/注入层/保管)
不在智能侧、在世界侧——模型再强不会自带你的 RBAC、用户记忆、驻留合规。且模型越强 → 敢给越多自主权 → 越需要治理隔离。Anthropic 即活证据:模型变强后 CC 加的是沙箱(弹窗 −84%)和凭据代理,不是更聪明的规划器。FFAI 的 4.9 万行大头全在这侧。
终局推论:当所有竞争者拿到同一个大脑,唯一的差异化 = 你喂给它什么、让它碰到什么。模型商品化之日,即注入层 + 保管权成为唯一护城河之时。两个不消失的例外:上下文物理学(窗口/成本是物理问题,压缩与记忆选材永远要管)、多模型价差与合规差(与能力无关,路由层长存)。一句话终稿:智能是租来的且越来越强——正因如此,自有的部分(注入什么/保管什么/约束什么)才是产品的全部。
10依据与终态声明
- 最佳实践依据:企业内嵌 agent 的头部实现(Microsoft 365 Copilot、Salesforce Agentforce、GitHub Copilot 企业版)无一例外自持 orchestration 层、把厂商模型作为可替换后端——「循环自己拿、模型可路由」是企业 ToB 的行业事实标准。Claude Agent SDK 的官方定位是开发者构建 agent 应用的工具链,不是多租户平台内核;CC 自身的单机、单租户、权限弹窗信任模型也从设计上印证它不面向本场景。
- 终态符合性:自建内核 + 设计临摹 + 上游对标是终态方案而非过渡——它是 R1–R5 五条硬约束的唯一解,不存在「以后条件成熟再换回 CC」的隐含计划。唯一的开放项是 §03 的反事实条件与 §04③ 的沙箱内嵌 worker(后者是增量能力)。