整框架对标:我们和十二家放在一起看

这一页站在整个框架的高度:我们是什么形态、别人是什么形态、强在哪、弱在哪、缺什么。子系统级的对标已经有六份(沙箱、agent协作、长期记忆、记忆采纳、发言人身份、聊天附件),本页不重做它们,只吸收结论。十二维每维一句话定性加一张图,细节留在各自的子系统页里。

最强 · 最弱 · 没想到 1我们是什么 代码量级 2十二家是什么 执行模型四种 十二维矩阵 国产四家 盲区清单 我们独有的三件 3下一步 4理想状态 取证方法 来源不一致 实现状态

00三个问题先回答结论

下面三条是这次调研要回答的全部。后面的十二维矩阵和盲区清单都是这三条的证据。

最强

会话是一张图,代码执行也是图上的节点

十二家里没有第二家把函数调用树写进对话本身@agentic_function跑起来时,它自己的每一层调用都是会话DAG上的code节点,和用户消息、模型消息、工具结果共用一套caller/predecessor边,存在同一个git仓库里。分支就是一个head指针,同一个会话内可以长出多条互不污染的历史。

最接近的是pi-mono的会话树(JSONL带parentId,/tree可切换、切换时会给废弃分支做摘要),但它树上只有对话条目。opencode的fork开的是新会话,hermes压缩时直接换session_id,codex的agent-graph-store记的是agent之间的图。

contextgit/dag.py · store/session/session_store.py · agentic_programming/function.py
最弱

只有入口没有出口,别的程序驱动不了我们

我们能调所有人:31个provider、MCP客户端、skills、plugins。反过来没有一条路进得来。没有MCP server(claude-code、codex、hermes、openclaw四家都有),没有ACP(opencode、hermes、openclaw、weclaw四家都有),没有OpenAI兼容端点(hermes、openclaw、codex三家有),没有IDE扩展,没有公开的headless协议(pi-mono的RPC模式光文档就1400行)。对外只有一个owner认证的本机WS和一个Python库入口。

连带的一条:项目说明文件我们和openclaw同一派,放在agent工作区而不是仓库里,这本身站得住。但openclaw另外做了migrate-claudemigrate-hermes两个导入扩展,codex有一整个external-agent-migration crate把别人的会话、配置、skills搬进来。我们连搬家的口子都没开。

openprogram/mcp/ 下只有client.py · 无acp / otel / lsp命中 · agent/management/workspace.py:36
没想到

codex的code mode:让模型写代码来调工具

模型不再发工具调用,而是当场写JavaScript调工具;CodeModeOnly模式下模型可见的工具面只剩execwait两个。背后是四个crate加一个V8运行时,在功能台账里默认关着,只看默认行为会判成不存在。

这和我们的agentic programming是同一个命题的两个方向:我们把流程事先固化成Python函数让agent调,它让模型当场写代码调工具。我们从没考虑过后者,也没考虑过"把工具面压缩到两个"这种裁剪方式。

codex-rs/features/src/lib.rs · code-mode / code-mode-host / code-mode-protocol / code-mode-runtime / v8-poc
要和"别人根本没打算做"区分开的几条:我们没有LSP、没有19个自动格式化器、没有tree-sitter、没有GitHub Action,opencode这些都有。这些是编码agent的装备,我们定位是通用harness,缺它们不算落后,只在"用OpenProgram写代码"这个场景里算。同样,hermes接了约26个渠道我们接了4个,但它的目标是全平台私人助理;我们的README写着"Any Platform",所以这一条对我们算数。

01我们是什么现状

一个Python写的通用agent harness。装出来是一条命令 openprogram,背后是一个常驻worker;TUI、网页、Electron桌面、四个聊天渠道、库调用全部收口到同一个 process_user_turn。会话状态存在每会话一个git仓库里,不是SQLite。工作流可以固化成带 @agentic_function 的Python函数,函数跑起来写进同一张会话DAG。

接入面 常驻worker · 单端口18100 一次对话的收口 落到哪 TUI · Ink + React 网页 · Next.js 15 桌面 · Electron外壳 渠道 · 4个 Telegram Discord Slack微信 库调用 · Python @agentic_function / Runtime process_user_turn agent/dispatcher/__init__.py:151 上下文装配L0 / L1 / L2 超预算就snip,再不够才压缩 agent_loop调模型、跑工具 tool.before事件门,可否决 finalize:ContextCommit、git提交 外层是线程池,内层每轮自建asyncio事件循环 后台任务走OS线程,不走asyncio 会话DAG user / llm / code三种节点 caller + predecessor两种边,分支即head指针 60个工具 · 四域 todo · task · agent · message 扩展口 MCP客户端 · skills · plugins + 24事件 agent.json自定义agent · 31个provider 工具延迟加载:目录 + tool_search 每会话一个git仓库 history/ 追加写JSON节点 context/commits/ 每轮冻结 usage.db 唯一的SQLite,追加写账本 记忆工作区 Markdown,后台线程写 6个memory_* 工具读 网页与WS接口由owner_auth强制单owner认证:per-start token加profile专属cookie,这是一个单人框架,不是多租户服务。 聊天渠道那一侧有配对与白名单(channels/_access.py),是全框架唯一的身份边界。

1.1代码量级:我们在中间偏下

同一套口径数出来的首方源码行数:只算 .py/.ts/.tsx/.js/.rs/.go,排除测试、node_modules、dist、target、vendor。横轴是对数刻度,因为最大和最小之间差了350倍。这一栏只用来判断复杂度落差,不代表能力高低。

1千 1万 10万 100万 1000万 openclaw 1,987,813 codex-cli 1,070,595 hermes-agent 544,917 claude-code泄露树 512,685 · 截至2026-04 opencode 366,499 OpenProgram 254,320 pi-mono 116,599 weclaw 5,723 pi-ai 4,021 · 不是框架,是协议快照 pi-ai是pi-mono里packages/ai的只读切片,为了给我们的Python Codex provider当协议参考才留在references下,不参与能力比较。
怎么读这张图:openclaw和codex比我们大4到8倍,差距主要在渠道扩展、TUI和IDE集成这些外围,不在agent循环本身。weclaw五千行就做完了一个能用的微信agent,说明"接一条渠道加一个ACP客户端"这条路很短。我们25万行里web占7.3万、TUI占3.5万,真正的harness内核(openprogram/)是13.4万行。

02十二家是什么对照

八家在references/下有源码。claude-code和codex另外查了本机装的版本,两者结论不一致的地方在页面上标出来。国产四家是本机装的npm包,只做一句话定性。

2.1执行模型只有四种形状

一次对话跑在哪 一个进程 终端起来,跑完就没了 终端 agent循环 模型 pi-mono weclaw 状态存在哪 pi-mono:JSONL会话树 带parentId,叶子是当前位置 weclaw:转发给外部ACP agent 本机也拆成两半 客户端和服务端始终分离 TUI客户端 RPC worker内HTTP服务 opencode,只此一家 状态存在哪 SQLite加drizzle,消息表是追加 写的seq日志,系统上下文快照 单独一张epoch表 常驻守护进程 多个入口收口到一个进程 渠道 网页 / TUI 常驻进程 会话路由 + 名册 OpenProgram hermes-agent · openclaw claude-code · codex(都有daemon) 状态存在哪 我们:每会话一个git仓库 hermes / codex:SQLite claude-code:每项目一堆JSONL 推到别处执行 会话在本机,命令不在 本机 容器 / 远端 / 云 codex:远端环境 + 云端任务 claude-code:teleport到云容器 openclaw:每agent一个Docker hermes:7种执行后端 我们:docker.py / ssh.py在 backend/ 下,没接沙箱, 也没有云端一侧 四种形状不互斥:codex同时在第一、第三、第四栏里,claude-code同时在第一、第三、第四栏里。我们在第三栏,第四栏只做了一半。
这张图里唯一值得抄的一条:opencode即使在本机也把TUI和执行拆成两个进程走RPC,所以"把一个活着的会话搬到另一台机器"对它是自然结果(control-plane/move-session.ts)。我们的worker已经是常驻进程,网页和TUI已经走WS,差的只是把会话存储做成可搬运的,而每会话一个git仓库恰好是最容易搬的形态。

2.2十二维矩阵

每格一句话定性。我们那一列按判定上色:绿=领先橙=持平红=落后。表格宽,自己横向滚。

维度OpenProgramclaude-codecodexopenclaw opencodehermes-agentpi-monoweclaw
定位形态 通用harness编码CLI加云端编码CLI加云端多渠道网关平台 编码CLI加SaaS周边私人助理加研究harness编码TUI加库微信转接器
目标用户 单人本机单人,订阅或企业单人,配置分七层单人运营,多人经渠道进 单个开发者单人,陌生人靠配对码单人本机单人,零鉴权
执行模型 常驻worker进程内加daemon加云容器进程内加app-server加远端网关进程加每agent容器 本机也拆服务端客户端进程内加网关守护单进程守护进程转发
状态存哪 每会话一个git仓库每项目一堆JSONLrollout JSONL加5个SQLite每agent目录JSONL SQLite加drizzleSQLite加FTS5JSONL会话树内存,重启即失
上下文装配 L0/L1/L2组件注册表静态前缀加动态边界标记每模型提示词编进二进制工作区文件加引导预算 13套按模型提示词stable/context/volatile三层按已启用工具裁提示词没有
项目说明文件 agent工作区AGENTS.mdCLAUDE.md四层含系统级AGENTS.md从git根往下拼工作区AGENTS/SOUL/TOOLS 全局加项目,首个命中四种格式加子目录提示祖先目录全走一遍没有
工具面 60个,延迟目录加tool_search约24个外露,ToolSearch约28个,code mode可压到2个约35个分11组,tool_search 16个,按模型换apply_patch约82个,32个toolset7个,3个默认关0个
权限审批 5种模式加规则加tool.before门5种模式,裁剪按深度4种含Granular,execpolicy DSL分层裁剪,审批卡进聊天 默认ask,bash命令分词55条危险模式,辅助LLM自动批没有,靠工具白名单自动全批
扩展口 插件加skills加MCP客户端加24事件插件市场加27钩子加122命令插件市场加11钩子,模型可自装126插件加59skills加ClawHub 插件19钩子,可往TUI里渲染20钩子加shell脚本钩子加178skills约40事件加包管理器,无MCP只有配置文件
多渠道 4个手机网页桥,Slack,Discord没有聊天渠道,有云任务28个,另加电话与Meet GitHub加Slack加ACP加两个IDE约26个,另加webhook与cron没有1个
界面 TUI加网页加Electron自研Ink分支加Vim加语音ratatui,IDE经socket喂上下文TUI加控制台加三个原生App OpenTUI加网页加ElectronInk TUI加React网页自研TUI框架,能跑DOOM只有终端
对外接口 没有MCP server加Agent SDK加会话服务MCP server加app-server加两个SDKMCP server三种加OpenAI兼容加74个RPC HTTP服务加JS SDK加ACPMCP server加OpenAI兼容加ACPRPC模式加JSON模式加SDK本机HTTP推送
观测与计费 追加账本含缓存读写与分项成本OTel加Perfetto加BigQuery,有预算上限OTel加分析上报,只有token没有金额轨迹导出加OTel加Prometheus OTel加数据湖,stats命令日志脱敏加Langfuse,拉供应商配额安装计数可关,脚本聚合成本一个日志文件
首方源码行数 254,320512,685 截至2026-041,070,5951,987,813 366,499544,917116,5995,723
矩阵读出来的三件事。第一,形态上我们和openclaw、hermes是一类(常驻网关型通用助理),和claude-code、codex、opencode、pi-mono那一类(编码CLI)不是一回事,所以拿LSP和格式化器比没有意义,拿渠道数量比才有意义。第二,同类里我们的渠道数是4比28比26,差距是数量级的。第三,"对外接口"整行只有我们是空的,而且这一行和形态无关,编码型和网关型都做了。

2.3国产四家:把一个开源框架搬进企业要补什么

本机装着腾讯的四个CLI。前三个是上游的内网化版本,改动本身就是素材:它们相对上游补的东西,正好是一个"要给别人用"的框架该考虑的。codebuddy-code是自研的,对比价值最高。字节的Trae本机没有可读实现,不写猜测。

是什么相对上游改了什么规模
claude-code-internal
v1.1.9
不是代码分支,是启动器包装。依赖上游@anthropic-ai/claude-code@2.1.154原封不动,全部改动在环境变量与代理层。 端点换成内网网关;模型白名单从网关拉,Opus和Sonnet都映射到GLM-5.1;配置目录劫持到~/.claude-internal把逃生口堵死(扫设置文件删掉所有ANTHROPIC_*键,用户改不回去);关掉上游遥测,换成内网上报,事件里带git仓库与commit;三种认证含设备码流程供CI用;本机MITM代理守护进程固定12639端口;服务器下发的启动公告带确认门。 388行
133 KB
codex-internal
v0.0.8
同样是包装器,包上游@openai/codex@0.118.0 重写config.toml注入内网provider并强制选中;关掉上游更新检查与反馈上报;注入请求头映射,每个请求把打开的仓库列表、是否YOLO模式、会话id告诉网关;能力阉割codex mcp add直接拒绝改成管理员托管,codex app-server硬退出;清掉继承来的OPENAI_*CODEX_HOME;把用户id与邮箱绑进子进程环境。 502行
572 KB
gemini-cli-internal
v1.9.0
三个里唯一的真源码分支 新增一个codebuddy/核心模块,做成与Google并列的第四个ContentGenerator后端;认证枚举里加了两种(内网GitLab OAuth、内网API key),Google那几条原样保留,所以同一个二进制内外网都能用;把仓库远端与submodule路径上报网关;API key透传进沙箱容器环境。 576,579行
25 MB
codebuddy-code
v2.109.3
腾讯自研,内部代号genie,建在一个IoC容器上。44个工具,工具名与claude-code高度同形(Agent、Skill、ToolSearch、EnterWorktree、SendMessage、TeamCreate),另有LSP、ComputerUse、CronCreate、Workflow、WeChatReply/WeComReply。 提示词与工具授权是数据不是代码:一个326 KB的product.json装着109个Nunjucks模板、每个agent的工具白名单、模型白名单、命令表;换部署就换这个文件,五套档位(SaaS、内网、零信任、自托管、云托管)同一份代码。会话存成~/.codebuddy/projects/<cwd槽>/<uuid>.jsonl。有原生沙箱二进制,另有bubblewrap/seatbelt兜底。带一个叫"CodeBuddy Code Remote Control"的PWA,用手机浏览器遥控本机会话。headless是独立的webpack产物,不是一个命令行开关。 2,629行打包
21.7 MB
另有16 MB
headless
四条我们没想到过的,全部来自codebuddy-code:把删除拦在运行时。vendor/shim/safe-bin/下有rmrmdirunlink三个PATH替身,只在会话环境变量存在时生效;再配一个sitecustomize.py经PYTHONPATH自动加载,patch掉os.removeshutil.rmtreepathlib,全部改道到自带的回收站二进制。这层在工具层之下,agent起的子进程也盖得住。我们的read-before-edit和checkpoint都在工具层,绕过工具就没有了。 :度量AI写了多少。一个git HEAD watcher按文件归因agent与人类的改动比例并上报。这是管理指标不是用户功能,但它说明"agent产出可审计"是企业采购的硬条件。 :远程企业策略带失败开放缓存,组织服务器决定你能不能加自定义模型、能不能上传skill,判定结果缓存在本地。 :合规内容策略直接编在系统提示词最前面,在模型之前先做客户端拦截。

2.4盲区清单:别人有,我们连想都没想过

前面六份子系统对标是按我们已知的问题去查的,查不出"不知道自己不知道"的。这一节反过来:先把十二家的能力全摊开,再挑出我们的设计文档里从来没出现过的条目。按四个主题分组。

谁有机制我们为什么没想到判定
主题一 · 直接挑战我们的方法论
codex code mode:模型写JavaScript调工具,不发工具调用。CodeModeOnly下模型可见的工具只剩execwait。四个crate加一个V8运行时,默认关。code-mode / code-mode-host / code-mode-protocol / code-mode-runtime / v8-poc 我们的agentic programming命题是"把流程事先固化成Python给agent调",从没考虑过"让模型当场写代码调工具"。两者是同一命题的两端,我们只做了一端。 值得单独立项对比。它同时给出了一种我们没有的裁剪方式:把整个工具面折进一个exec。
hermes harness自己是训练数据发生器:批量跑数据集,按概率分布采样每条样本可见的toolset,再把轨迹压到token预算里,接进Atropos强化学习环境。batch_runner.py · toolset_distributions.py · trajectory_compressor.py · environments/ 我们把工具裁剪当成"这个agent能用什么"的权限问题,它把工具裁剪当成"这条训练样本的观测空间"的采样问题。同一个开关,两种用途。 不做。我们不训模型。但"轨迹可导出成结构化样本"这一半值得留口子。
主题二 · 让别人能用上我们
codex
openclaw
把用户从别的agent搬过来。codex有一个约1.6万行的external-agent-migration crate,导入别的agent(含claude-code)的会话、配置和skills,磁盘上留着external_agent_session_imports.json。openclaw有migrate-claudemigrate-hermes两个扩展。 我们一直在想"怎么把功能做全",没想过"用户已经在别的工具里攒了半年会话和配置,怎么让他零成本走过来"。这是获客问题被当成工程问题解决了。 该做。我们已经会读别人的skills格式,差的是会话与配置导入。
codex 105条功能台账带阶段features/src/lib.rs里每个能力一条记录,标Stable/UnderDevelopment/Experimental/Removed/Deprecated,各自带default_enabled。三分之一的已发布能力默认关着。 我们的能力散在代码里,没有一张表能回答"这个版本到底有哪些能力、哪些是实验的"。今天我们自己就在这上面栽过:codex的长期记忆被判成"没有",其实是完整子系统默认关着。 该做。这张表同时是发布说明、灰度开关和对外能力清单。
codebuddy 五套部署档,提示词与工具授权是数据:109个提示词模板、每agent工具白名单、模型白名单全在一个product.json里,SaaS/内网/零信任/自托管/云托管换文件不换代码。 我们的系统提示词组件是Python函数,工具授权在agent.json里,但"整套配置作为一个可替换的部署档"这个层级不存在。 部分该做。我们的组件注册表已经是对的骨架,缺的是把整套值外置成一份可替换的档。
opencode 控制面:把活着的会话搬到另一台机器或另一个工作区,以及把会话发布成一个公开URL(增量流进Durable Object加对象存储,自托管版也有)。control-plane/move-session.ts · share/share-next.ts 我们把会话当成本机资产。每会话一个git仓库恰恰是最容易搬和最容易分享的形态,但我们从没往这个方向用过它。 该做,而且我们的存储形态占便宜
主题三 · 让agent可信
codebuddy 把删除拦在工具层之下:PATH里放rmrmdirunlink替身,PYTHONPATH里放sitecustomize.pypatch掉Python的删除API,全部改道回收站二进制。子进程也盖得住。 我们所有的保护都挂在工具上(read-before-edit、checkpoint、tool.before门)。bash里一条rm -rf起的子进程,工具层拦不住。 该做。成本低,覆盖的正是我们现在漏的那一块。
codex execpolicy:命令允许清单是一门独立的小语言,规则文件发到~/.codex/rules/default.rules,和操作系统沙箱是两层。另有guardian,用一个LLM复核审批提示。 我们的权限规则是字符串匹配加fnmatch,够用但表达不了"这条命令的第三个参数不能是绝对路径"这类判断。而"审批本身要不要复核"这个问题我们没问过。 DSL先不做。guardian值得试,它正好补上我们Gate.ask三态里悬空的那一态。
codebuddy 度量AI写了多少代码:git HEAD watcher按文件归因agent与人类的改动比例并上报。 我们记token和成本,不记产出归属。企业要买单的时候问的是后者。 先记录不上报。我们有每轮git提交,归属信息是现成的。
openclaw 轨迹导出:系统提示词加工具清单加每一个事件,脱敏后打成一个带版本的包,10 MB/50 MB/256 KB三级上限。src/trajectory/ 我们有DAG和ContextCommit,但没有"把一次会话完整交出去给别人复现"的导出物。报bug时只能截图。 该做。DAG已经是完整记录,缺的只是一个脱敏打包器。
主题四 · 让agent更主动、更好测
openclaw 承诺追踪:从聊天里抽出隐含承诺,转成有类型的条目(约定、截止、关心、未了事),置信度阈值0.86,每天最多主动发3条。另有心跳与开机一次性两条独立的主动路径。src/commitments/ 我们的proactive层做的是"事件发生时执行规则",全部由外部事件触发。"从对话内容里长出未来的动作"这条路我们没有。 机制值得抄,阈值和限流要照抄,否则就是骚扰。
openclaw 配对的手机成为agent的手和眼:日历、通讯录、相机、相册、定位、传感器、通知监听、短信、截屏,配上真的APNs推送与带过期的授权组。 我们的渠道只用来收发消息。"渠道另一端的设备本身是一个可调用的资源"这个想法没出现过。 不做。我们没有原生App,代价与收益不成比例。列在这里是因为它解释了openclaw的144万行原生代码花在哪。
pi-mono 假provider加HTTP录制回放:一个完整注册的假模型按脚本吐文本、思考和工具调用,chunk大小可配;另有HTTP与WebSocket的录制回放,磁带存在测试夹具里。 我们有4.6万行测试,但没有一个能确定性驱动整个agent循环的假模型。所以循环本身的测试覆盖一直是空的,这一条在framework-overview.md的"已知边界"里已经写着。 该做,优先级最高的一条。它是"给核心入口补测试"这件事的前置条件。
pi-mono 会话中途换供应商:把思考块签名和工具调用id归一化,一段对话可以从一个供应商接着在另一个供应商跑下去;配套的扩展把它做成"用一段生成的交接提示词开一个新会话",当作压缩的无损替代。 我们有31个provider,但换模型意味着换会话。"同一段历史跨供应商继续"这个能力我们默认它不可能。 值得验证。我们的provider层已经有统一消息类型,缺的是签名归一化那一小块。
这张表里最该立刻动的两条:假provider(没有它,核心入口的测试永远补不上),和轨迹导出(没有它,出问题只能靠截图)。两条都建在我们已有的东西上,都不需要改架构。

2.5我们独有的三件,别人最接近的对应物是什么

独有本身不是价值,独有并且换来了别人换不到的东西才是。三件里两件成立,一件目前只是形状上独有。

我们的它是什么别人最接近的这份独有买到了什么
会话DAG
分支即head指针
一张图,三种节点角色(user/llm/code),两种边(caller/predecessor)。分支就是从某个节点往回走的一条链,两条链互不污染。存在每会话一个git仓库里,追加写,没有可变的当前状态镜像文件。 pi-mono的JSONL会话树最接近:每条记录带parentId,当前位置是一个叶子,/tree可切换,切换时给废弃分支做摘要。但树上只有对话条目。
opencode的fork开的是新会话。hermes压缩时直接换session_id。codex的agent图存的是agent之间的关系。
同一个会话里可以并行长出多条历史,且两条历史各自的文件改动通过worktree隔离。这是"派一个子agent去试另一条路,不污染主线"的物理基础,八家里只有我们和pi-mono具备,而pi-mono没有子agent。
@agentic_function
流程固化成代码
一个Python装饰器。函数跑起来时,它自己的每一层调用被记成会话DAG上的code节点,和用户消息、模型消息、工具结果共用同一套边,写进同一个git仓库。 没有对应物。pi-mono的扩展、opencodetool/*.tshermes的skills都能注册新工具,但工具执行对它们是一个黑盒,只有入参和返回值进历史。
反方向的对应物是codex的code mode:模型当场写代码调工具。
一个流程跑完之后,它内部走了哪几步、每步看到什么,和对话本身在同一张图上可回看、可重放、可从中间某一步分支。这是把"工作流"和"对话"统一成一种数据的唯一实现。
四域协作工具面
todo/task/agent/message
四个名词各管一个域:计划归todo,正在跑的任务归task,执行任务的实体归agent,通讯归message。工具名不用记,每个工具只操作它那个域的名词。 各家都有这些能力,但没人分域命名。opencodetasktodowritehermesdelegate加看板;claude-code是Task/TaskOutput/SendMessage/Brief;codebuddy的44个工具里TaskCreate/Get/Update/List/Stop/Output六个动词全在,也没有分域。 这是命名上的独有,能力上不独有。真正有实证的差异在另一份文档里:八家中只有我们按剩余消息预算裁子agent的工具面,防环机制密度与openclaw并列第一。见runtime/agent-collab-comparison.html

03下一步计划

宏观层的计划只排顺序,不写方案。每条都指向一份该单独写的设计文档,或者一个已经存在的子系统页。

顺序做什么为什么排在这落点
1 假provider:一个按脚本吐文本、思考、工具调用的假模型,注册成正式provider 核心入口缺测试这件事在framework-overview.md的已知边界里挂了很久,缺的就是这个前置件。它同时让后面每一条改动都可验证。 openprogram/providers/ 新增一个目录
2 对外接口开第一条:MCP server,把我们的工具面暴露出去 "对外接口"整行只有我们是空的,而MCP server是四家都做了的那一条,也是成本最低的一条。我们已经有完整的MCP客户端,协议这一侧是现成的。 openprogram/mcp/ 现在只有client.py
3 轨迹导出:系统提示词加工具清单加全部事件,脱敏打包,带上限 DAG已经是完整记录,只差一个打包器。有了它,报bug、复现、以及将来任何形式的评测都有了同一个载体。 openprogram/store/session/ 加导出,参照openclaw src/trajectory/
4 删除拦截下沉到工具层之下:PATH替身加sitecustomize.py,改道回收站 我们的保护全在工具层,bash起的子进程一律漏过。这是现在最大的一处数据安全缺口,而补法很短。 与runtime/sandbox.md的第4步(默认开启)同一批做
5 功能台账:每个能力一条记录,带阶段与默认开关 能力散在代码里,对内说不清版本边界,对外说不清我们有什么。这张表还能顺手解决灰度。 参照codex codex-rs/features/src/lib.rs
6 会话导入:把claude-code与codex的会话与配置搬进来 排在后面是因为它依赖前面的存储与导出格式先稳下来。但它是唯一一条直接影响"有没有人愿意换过来"的。 参照codex external-agent-migration、openclaw migrate-claude
明确不做的:训练数据管线(我们不训模型)、原生手机App与设备控制(没有App,代价与收益不成比例)、LSP与自动格式化器(编码agent的装备,我们是通用harness,需要时经MCP接现成的)、命令允许清单DSL(现有的fnmatch规则够用,等出现表达不了的真实需求再说)。

04理想状态目标

宏观层的理想只有三句,每句对应上面三个问题里的一个。

把最强的做到底

一次会话是一个可搬运、可分享、可复现的对象

会话已经是一个git仓库,里面是一张完整的图。理想状态下这个仓库可以整个交给另一台机器接着跑,可以脱敏后发出去给别人看,可以从图上任意一个节点重新分叉。三件事共用同一个载体,不需要三套导出格式。

把最弱的补平

别的程序能把我们当成一个部件用

对外至少一条标准协议出口,让编辑器、别的agent、别人的脚本能驱动我们,而不是只有人能驱动我们。同时留一条搬家的路,让已经在别的工具里攒了半年的人零成本走过来。

把盲区变成常态

能力有一张表,行为有一份可复现的记录

每个能力在台账上有一条记录,标着阶段和默认开关;每一次运行都能导出成一份脱敏的完整轨迹。前者让我们说得清自己有什么,后者让别人说得清我们哪里坏了。这两件缺一件,规模一大就失控。

05取证方法与状态

哪条结论来自哪里,以及哪些地方两个来源不一致。

对象取证来源日期注意
OpenProgramworktree检出的origin/main2026-08-10另有三个会话在改channels、web、memory-introspection与workflow-first,本页只描述已提交状态
claude-code本机安装的二进制2.1.226(267 MiB)为准,references/claude-code-leaked只作参考泄露树截至2026-04两者不一致的地方见下表
codex源码树加本机安装的0.146.0,另查~/.codex/运行时目录2026-08功能台账里105条有三分之一默认关,默认行为不代表能力边界
其余六家references/下的源码各仓库HEADopenclaw HEAD 2026-05-25,weclaw HEAD 2026-03-30
国产四家本机~/.npm-global/lib/node_modules/下的npm包,读dist/打包产物2026-08前三个是包装器,改动集中在环境变量与配置层;gemini那个是真源码分支
Trae未获取到实现本机没装,/Applications、应用支持目录、VS Code与Cursor扩展目录里都没有。不写猜测

两个来源不一致的地方

条目泄露源码树说本机二进制说本页采用
claude-code的子agent深度上限 树里没有这个开关 有,默认3,可用环境变量覆盖,且带灰度开关2.1.226 @249432727附近 二进制
claude-code的按agent裁工具 有裁剪,但不含深度 裁剪函数直接吃agentDepth,只有深度小于上限才给出派子agent的工具;另有三张常量表分别管普通agent、异步agent、协调者模式@256834891 · @75243888 · @75243840 · @75243792 二进制
claude-code的Slack 只有一个市场安装链接 有完整的Slack对话面,含机器人、人类回合校验、频道搜索@78014240 · @106577664 · @106582768 · @70680752 二进制
claude-code的产物发布 完全没有 有一整套:计划产物发布成带脚本哈希白名单的托管HTML,另有独立的产物工具与一组开关@75228592 · @75228672 · @75228896 · @75229360 · @75180658 二进制
claude-code的定时与外部触发 没有 有三个定时工具、一个远程触发工具,以及一组给自托管CI跑的工具集@75240320 二进制
codex的长期记忆 源码里是完整子系统(读写两阶段管线加独立数据库),功能台账里标Stable但default_enabled: false。只看默认行为会判成"没有",今天已经误判过一次。 按"有"计

本页的实现状态

第一层与第二层描述的是各仓库当前的真实状态;第三层与第四层是尚未落地的目标形态。按项目惯例,未实现的部分在正文里用现在时正面陈述,在这里统一标注。

条目状态落点
形态图、代码量级、十二维矩阵、国产四家、盲区清单、独有三件如实描述当前状态各仓库HEAD,见上表
第三层六条与第四层三句全部未实现
假provider、MCP server、轨迹导出、删除拦截、功能台账、会话导入未实现,无对应代码grep无opentelemetry / acp / language_server / fake_provider命中
和别的文档的分工framework-overview回答"我们内部一次对话怎么跑",只讲我们自己,没有对照。本页回答"我们和别人整体上差在哪",只讲对照,不讲内部机制。feature-matrix对标的是同样这十二家,但换了查法:本页按设计维度和机制查,那一页按功能清单查(功能开关配置、命令清单、工具清单、出厂agent、帮助文本、运行时目录),160项一张大表。两边的缺口清单只重合21条,本页找出55条,那页找出97条。要看机制看这页,要看清单看那页。子系统级的对照各有各的页:沙箱在runtime/sandbox图解),agent协作在agent-collab-comparison,长期记忆在memory-comparisonmemory-adoption,多人会话身份在speaker-identity,聊天附件在chat-attachments,上下文成分在context/comparison,扩展准入在extension-gating/reference-comparison。本页不重复它们的结论,只在需要时引用。