-
Notifications
You must be signed in to change notification settings - Fork 22
Expand file tree
/
Copy pathfeature-matrix.html
More file actions
730 lines (696 loc) · 154 KB
/
Copy pathfeature-matrix.html
File metadata and controls
730 lines (696 loc) · 154 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>功能清单对标:设计参考审计快照</title>
<style>
:root{
--bg:#16150f; --pan:#1d1c14; --bd:#2e2c20; --tx:#bdb9a6; --acc:#d4843a;
--cb:#12110b; --dim:#8a8675;
--c0:#4f8ef7; --c1:#5aad4e; --c2:#d4843a; --c3:#9d6fe0; --c4:#2db3d5;
--no:#e0445a;
}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--tx);
font:14px/1.7 -apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;padding:40px 24px 96px}
.wrap{max-width:1180px;margin:0 auto}
h1{font-size:23px;color:#f0eee6;margin:0 0 6px}
.sub{color:var(--tx);margin:0 0 18px;max-width:84ch}
h2{font-size:16px;color:var(--acc);margin:38px 0 8px;scroll-margin-top:20px}
h2 .num{color:var(--dim);font-size:12px;margin-right:8px;letter-spacing:.16em}
h2 .ly{font-size:10.5px;letter-spacing:.18em;padding:2px 8px;border-radius:99px;
margin-left:10px;vertical-align:2px;font-weight:600}
.ly0{color:#e0445a;border:1px solid #6d2530}
.ly1{color:#4f8ef7;border:1px solid #2c4a78}
.ly2{color:#5aad4e;border:1px solid #2f5228}
.ly3{color:#d4843a;border:1px solid #6b4519}
h3{font-size:13.5px;color:#f0eee6;margin:24px 0 6px;font-weight:600;scroll-margin-top:20px}
.lead{color:var(--dim);font-size:13px;margin:0 0 12px;max-width:90ch}
.card{background:var(--pan);border:1px solid var(--bd);border-radius:12px;padding:8px;margin-bottom:16px}
svg{display:block;width:100%;height:auto;background:var(--cb);border-radius:8px}
.scroll{overflow-x:auto}
.scroll svg{min-width:900px}
.legend{font-size:12.5px;color:var(--dim);padding:8px 10px;line-height:1.8}
.legend b{color:#f0eee6}
code{background:var(--cb);color:var(--acc);padding:1px 5px;border-radius:4px;font:12px Menlo,monospace}
a{color:var(--acc)}
text{font-family:-apple-system,"Segoe UI",sans-serif}
.toc{display:flex;flex-wrap:wrap;gap:7px;margin:0 0 24px}
.toc a{font-size:12px;color:var(--tx);text-decoration:none;border:1px solid var(--bd);
background:var(--pan);border-radius:99px;padding:4px 12px}
.toc a:hover{border-color:var(--acc);color:#f0eee6}
.toc a.l0{border-color:#6d2530}
.toc a.l1{border-color:#2c4a78} .toc a.l2{border-color:#2f5228}
.toc a.l3{border-color:#6b4519}
.tbl{overflow-x:auto;background:var(--pan);border:1px solid var(--bd);border-radius:12px;margin-bottom:16px}
table{width:100%;border-collapse:collapse;font-size:13px;min-width:900px}
table.wide{min-width:1140px}
th{text-align:left;padding:10px 12px;color:var(--dim);font-weight:600;font-size:11px;
letter-spacing:.12em;border-bottom:1px solid var(--bd);white-space:nowrap;vertical-align:bottom}
td{padding:9px 12px;border-bottom:1px solid #26241a;vertical-align:top;line-height:1.6}
tr:last-child td{border-bottom:none}
td.y{color:var(--c1)} td.n{color:var(--no)} td.p{color:var(--c2)}
td b{color:#f0eee6;font-weight:600}
td.name{white-space:nowrap;color:#f0eee6;font-weight:600}
tr.us td{background:#1b2231}
tr.us td.name{color:#4f8ef7}
.src{display:block;color:#6b6a63;font:10.5px/1.5 Menlo,monospace;margin-top:3px;word-break:break-word}
.srcin{color:#6b6a63;font:10.5px/1.5 Menlo,monospace}
/* 功能全表 */
table.fx{min-width:1120px;font-size:12px}
table.fx th{padding:8px 4px;text-align:center;font-size:10px;letter-spacing:.04em}
table.fx th.fname{text-align:left;padding-left:12px;min-width:250px}
table.fx th.us{color:#4f8ef7}
table.fx td{padding:6px 4px;text-align:center;white-space:nowrap;font-size:13px;line-height:1.3}
table.fx td.fname{text-align:left;white-space:normal;padding-left:12px;font-size:12.5px;
color:#f0eee6;line-height:1.45}
table.fx td.us{background:#1b2231}
table.fx tr.grp td{background:var(--cb);color:var(--acc);font-size:11px;letter-spacing:.16em;
padding:7px 12px;text-align:left;border-bottom:1px solid var(--bd);border-top:1px solid var(--bd)}
table.fx tr.grp td b{color:#f0eee6;letter-spacing:0;font-size:12px}
table.fx tr.grp td.hc{color:#6b6a63;font-size:9.5px;letter-spacing:.02em;text-align:center;padding:7px 3px}
table.fx tr.grp td.hc.us{color:#4f8ef7;background:#181f2c}
.g1{color:#5aad4e} .g2{color:#d4843a} .g3{color:#4f8ef7} .g0{color:#4a483d}
.only{background:#241a12}
pre{background:var(--cb);border:1px solid var(--bd);border-radius:10px;padding:14px 16px;
overflow-x:auto;margin:0 0 16px;font:12.5px/1.9 Menlo,monospace;color:#a5a190}
pre b{color:var(--acc);font-weight:400}
pre i{color:#6b6a63;font-style:normal}
.note{border-left:3px solid var(--bd);padding:2px 0 2px 13px;color:var(--dim);
font-size:12.5px;margin:0 0 16px;max-width:92ch;line-height:1.8}
.note b{color:#f0eee6}
.note.blue{border-left-color:#2c4a78}
.note.green{border-left-color:#2f5228}
.note.orange{border-left-color:#6b4519}
.note.red{border-left-color:#6d2530}
.three{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:0 0 18px}
.q{background:var(--pan);border:1px solid var(--bd);border-top-width:3px;border-radius:12px;padding:14px 16px}
.q .k{font-size:10.5px;letter-spacing:.2em;color:var(--dim);margin-bottom:5px}
.q h4{margin:0 0 8px;font-size:15px;font-weight:700;color:#f0eee6;line-height:1.45}
.q p{margin:0 0 8px;font-size:12.5px;color:#a5a190;line-height:1.7}
.q p:last-child{margin-bottom:0}
.q .ev{font:10.5px/1.6 Menlo,monospace;color:#6b6a63;display:block;margin-top:6px}
@media(max-width:980px){.three{grid-template-columns:1fr}}
ul{margin:0 0 14px;padding-left:20px;max-width:92ch}
li{margin-bottom:6px;font-size:13px;line-height:1.75}
li b{color:#f0eee6}
.key{display:flex;flex-wrap:wrap;gap:14px;font-size:12px;color:var(--dim);padding:9px 12px;
background:var(--pan);border:1px solid var(--bd);border-radius:10px;margin:0 0 12px}
.key span b{font-size:14px;margin-right:4px}
</style>
</head>
<body>
<script type="application/json" id="openprogram-scope-decisions">
{
"schema_version": 1,
"decisions": [
{
"id": "windows",
"status": "deferred",
"decision": "do-not-plan",
"scope": ["implementation", "testing", "packaging", "compatibility"],
"visible": false,
"decided_at": "2026-08-12"
},
{
"id": "os-credential-store",
"status": "rejected",
"decision": "do-not-implement",
"aliases": ["Keychain", "keyring", "Credential Manager"],
"visible": false,
"decided_at": "2026-08-12"
}
]
}
</script>
<div class="wrap">
<h1>功能清单对标:设计参考审计快照</h1>
<p class="sub">本页用于后续完善 OpenProgram 时核对功能范围,不是实现需求、产品质量排名或对外宣传材料。审计单位是 160 个功能条目、OpenProgram 加 12 个参考列;证据来自功能配置、命令与工具清单、出厂 agent、帮助文本、界面入口和实现代码。每个格子表示在指定快照中确认到的状态,不表示对所有运行路径做过端到端验收。</p>
<div class="toc">
<a class="l0" href="#three">设计前需要确认的三类问题</a>
<a class="l1" href="#matrix">1功能全表 160 项</a>
<a class="l1" href="#cover">覆盖度</a>
<a class="l2" href="#gaps">2 OpenProgram 未确认的 67 项</a>
<a class="l2" href="#newfound">相对既有审计新增的条目</a>
<a class="l2" href="#ours">3仅 OpenProgram 确认的 6 项</a>
<a class="l3" href="#plan">4设计参考顺序</a>
<a href="#method">范围、证据与状态</a>
</div>
<div class="note orange">
<b>快照与使用边界</b>。OpenProgram 的通用实现证据以 <code>integrated candidate@33dd7d2c</code> 为基线(2026-08-13 复核),包含运行中发消息排队、owner/paired 两档来源权限加配对准入、默认开启并覆盖全部本地执行面的沙箱、ACP 服务端与三个 LSP 工具,以及 commit-push-pr 打包技能、credential_process 外部命令取密钥、请求录制与严格离线回放、backup 命令、每会话资源限额,以及本轮完成的队列与 WebSocket 生命周期、session index/merged_heads 一致性、DAG 持久化观测、provider 诊断、record/replay 安全加固、SessionStore 锁范围修复、commitment/heartbeat 并发修复、完整 credential-file hardening 与 resource-governance 集成修复。JSON Schema structured output 单独按 Tasks 1–6@<code>2fb471b3</code> 及后续 trust-boundary 修复复核;Runtime URL SSRF 单独按集成提交 <code>be5eaa3c</code> 的实现、兼容性测试与运行时审计记为 <code>◐</code>。其他列固定在第五节列出的本地源码、二进制或 npm 包版本,没有声明为各产品的最新版本。<code>·</code> 只表示本轮没有确认到实现,不等于功能不存在。第四节是设计参考,优先级尚未经过使用频率统计或工程量估算。
</div>
<div class="note blue">
<b>和 <a href="framework-comparison.html">framework-comparison</a> 的分工</b>。那一份比较执行模型、状态存储、上下文装配和权限审批等设计机制;本页按用户可调用或可配置的功能记录证据。前一份记录 55 个候选差异,本页撰写时记录 78 个(15 个重合、63 个此前未列出);截至 integrated candidate@33dd7d2c 复核其中 11 个已实现,现存 67 个。两份材料分别支持机制设计和功能范围设计,计数不能直接合并。
</div>
<!-- ══════════════════════════ 三问 ══════════════════════════ -->
<h2 id="three"><span class="num">00</span>设计前需要确认的三类问题<span class="ly ly0">判断</span></h2>
<div class="three">
<div class="q" style="border-top-color:#5aad4e">
<div class="k">优先复核的三个候选组</div>
<h4>Git 工作流余项、可恢复删除边界、外部控制协议</h4>
<p><b>一,Git 工作流仍有六项未确认。</b>十项里 OpenProgram 现确认 4 项:只读生成提交信息、worktree 隔离执行、shadow git,以及带非写入 dry-run 和显式远端写授权门禁的 commit-push-pr 打包技能。当前 diff 安全审查、从 PR 标识创建 worktree、.worktreeinclude 同步等条目仍未确认;本页没有使用频率和工程量数据,不能据此判断使用优先级或实现成本。</p>
<p><b>二,可恢复删除目前只覆盖绑定 session/turn 的本地 agent 子进程常用入口。</b>当前通过 PATH、PYTHONPATH 和 NODE_OPTIONS 覆盖 shell、Python 与 Node 的常用删除 API,<code>openprogram trash list/restore</code> 可查询和恢复已记录条目。没有 session/turn 上下文的 cron 与后台任务不会注入,Docker/SSH 后端、绝对路径系统命令、直接 syscall、<code>find -delete</code> 等也不在覆盖范围;列表不是全量删除审计,该机制仍不是安全沙箱。</p>
<p><b>三,外部控制契约只落地了编辑器一侧。</b><code>openprogram acp</code> 已按 ACP v1 提供编辑器可驱动的服务端,协议形状对齐上游 schema 并有往返测试。其余对外通路仍是内部约定:MCP 客户端、本地 FastAPI 接口和 WebSocket 动作中,<code>/api/doctor</code> 与 <code>/api/mcp</code> 只有后端契约测试,没有版本化的外部兼容承诺;本轮仍未确认 MCP 服务端和面向远程控制的客户端 SDK。“集成与被集成”13 项中确认 1.5 分。</p>
<span class="ev">commands/commit_message.py · sandbox/recoverable_delete.py · cli/commands/trash.py · acp/server.py · tests/unit/{test_recoverable_delete.py,test_diagnostic_mcp_route_contracts.py,test_acp_server.py}</span>
</div>
<div class="q" style="border-top-color:#4f8ef7">
<div class="k">当前仅 OpenProgram 确认</div>
<h4>六项,结论限于已列快照</h4>
<p>当前证据确认 <code>@agentic_function</code> 的各层调用与用户、模型和工具节点共用会话 DAG,也确认默认会话存储为每会话一个 git 仓库。在其余 12 列的指定快照中没有确认到相同实现;这不是对所有版本和未公开实现的绝对唯一性声明。</p>
<p>其余四项是多分支 N 路合并、按剩余消息预算调整子 agent 工具、升级前隔离冷启动探测,以及无人值守时从工具解析结果中移除 <code>ask_user_question</code>。</p>
<p>六项分别属于会话数据结构、协作预算和运行安全机制,不代表 OpenProgram 在用户可见功能数量上领先。</p>
<span class="ev">context/git/dag.py · store/session/git_session.py · agent/internals/_merge.py · agent/attended.py</span>
</div>
<div class="q" style="border-top-color:#d4843a">
<div class="k">相对既有机制审计的增量</div>
<h4>78 条里 63 条此前未列出</h4>
<p>前几轮机制审计记录了 55 个候选差异;本页撰写时 OpenProgram 未确认而至少一个参考列已确认的条目为 78 个,两份材料重合 15 个,<b>其余 63 个此前未列出</b>;integrated candidate@33dd7d2c 复核后其中 11 个已实现,现存 67 个。</p>
<p>版本控制 7 条、界面形态 5 条、多 agent 6 条和代码理解 4 条均未出现在前几轮清单中;编辑器集成新增 6 条,集成与被集成新增 9 条,部署与运维新增 6 条。</p>
<p>这里的“新增”表示此前文档未记录,不表示相关产品最近发布了这些功能,也不表示全部条目都应进入实现计划。</p>
<span class="ev">前六轮出处:runtime/sandbox · agent-collab-comparison · memory-comparison · memory-adoption · speaker-identity · chat-attachments · context/comparison · extension-gating · framework-comparison</span>
</div>
</div>
<!-- ══════════════════════════ LAYER 1 ══════════════════════════ -->
<h2 id="matrix"><span class="num">01</span>功能全表<span class="ly ly1">清单</span></h2>
<p class="lead">160 项,13 类。OpenProgram 列以当前实现、可达入口和测试为主要依据;只有设计文档而没有实现时不计为已确认。外部列以第五节列出的静态快照为依据。表格可横向滚动。</p>
<div class="key">
<span><b class="g1">●</b>证据足以确认</span>
<span><b class="g2">◐</b>仅部分场景或部分界面确认</span>
<span><b class="g3">○</b>已实现,但默认关闭或受门控</span>
<span><b class="g0">·</b>本快照未确认,不等于没有</span>
<span style="color:#4f8ef7">蓝色背景标示 OpenProgram 列</span>
<span style="color:#d4843a">橙底表示当前仅 OpenProgram 列确认</span>
</div>
<div class="tbl">
<table class="fx">
<tr>
<th class="fname">功能</th><th class="us">我们</th><th>claude</th><th>codex</th><th>openclaw</th>
<th>opencode</th><th>hermes</th><th>pi-mono</th><th>pi-ai</th><th>weclaw</th>
<th>cc内</th><th>cx内</th><th>gm内</th><th>buddy</th>
</tr>
<tr class="grp"><td>01 <b>编辑器集成</b> <span style="color:#6b6a63">9 项</span></td><td class="hc us">我们</td><td class="hc">claude</td><td class="hc">codex</td><td class="hc">openclaw</td><td class="hc">opencode</td><td class="hc">hermes</td><td class="hc">pi-mono</td><td class="hc">pi-ai</td><td class="hc">weclaw</td><td class="hc">cc内</td><td class="hc">cx内</td><td class="hc">gm内</td><td class="hc">buddy</td></tr>
<tr><td class="fname">官方 IDE 扩展或插件<span class="src">我们没有自研 IDE 扩展;编辑器入口经 openprogram acp,Zed 这类原生支持 ACP 的编辑器无需装扩展,本行只计自研插件。claude /ide · codex app-server 驱动 VS Code 扩展 · buddy --ide</span></td><td class="g0 us">·</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g2">◐</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td></tr>
<tr><td class="fname">被 IDE 经 ACP 驱动<span class="src">我们 openprogram acp 经 acp/server.py 在 stdio 上讲 ACP v1:initialize 协商、session new/load、流式 prompt 轮次带 tool_call 上报、cancel、权限请求转到既有审批流;docs/interfaces/acp.md 给出 Zed agent_servers 配置。openclaw acp · opencode acp · hermes acp · buddy --acp · gm内 --experimental-acp</span></td><td class="g1 us">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g3">○</td><td class="g1">●</td></tr>
<tr><td class="fname">LSP 诊断与符号跳转<span class="src">我们 lsp/ 的 JSON-RPC stdio 客户端加 lsp_diagnostics/lsp_references/lsp_definition 三个 core toolset 工具,Python 走 pyright、TS 走 typescript-language-server,缺二进制时回安装提示;覆盖两种语言,不及 hermes 的约 25 个。claude ENABLE_LSP_TOOL</span></td><td class="g1 us">●</td><td class="g3">○</td><td class="g0">·</td><td class="g0">·</td><td class="g3">○</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g3">○</td><td class="g0">·</td><td class="g0">·</td><td class="g3">○</td></tr>
<tr><td class="fname">编辑器选区与打开文件进上下文<span class="src">我们 acp/server.py 把 prompt 里的 resource 块按选区或打开文件围栏注入、resource_link 转成路径提及;依赖编辑器经 ACP 主动发送,没有自研扩展自动共享选区。codex /ide · opencode 扩展自动共享选区 · gm内 IDE companion</span></td><td class="g2 us">◐</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td></tr>
<tr><td class="fname">行内补全<span class="src">buddy product.json productFeatures.InlineCompletions</span></td><td class="g0 us">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">行内对话与 CodeLens 与状态栏动作<span class="src">buddy InlineChat / CodeLens / StatusBar / CodeAction / FloatShortcut</span></td><td class="g0 us">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">终端快捷键自动配置<span class="src">claude /terminal-setup · buddy /terminal-setup 覆盖十余种终端</span></td><td class="g0 us">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g2">◐</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td></tr>
<tr><td class="fname">浏览器控制<span class="src">openclaw 专属 Chrome 配置档 · hermes 五种后端 · codex chrome@openai-bundled</span></td><td class="g2 us">◐</td><td class="g3">○</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g3">○</td><td class="g1">●</td><td class="g3">○</td><td class="g0">·</td></tr>
<tr><td class="fname">桌面 GUI 控制<span class="src">我们经 gui_agent 程序(GUI-Agent-Harness)提供桌面控制;functions/_programs.py 的 KNOWN_PROGRAMS 登记该程序,完整 release runtime 已包含其依赖、默认 OCR 数据和 GPA 检测模型。开发者可额外替换 OCR 或浏览器后端。codex computer-use@openai-bundled · buddy ComputerUse 默认关 · openclaw peekaboo</span></td><td class="g2 us">◐</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g3">○</td><td class="g3">○</td></tr>
<tr class="grp"><td>02 <b>会话与历史</b> <span style="color:#6b6a63">17 项</span></td><td class="hc us">我们</td><td class="hc">claude</td><td class="hc">codex</td><td class="hc">openclaw</td><td class="hc">opencode</td><td class="hc">hermes</td><td class="hc">pi-mono</td><td class="hc">pi-ai</td><td class="hc">weclaw</td><td class="hc">cc内</td><td class="hc">cx内</td><td class="hc">gm内</td><td class="hc">buddy</td></tr>
<tr><td class="fname">恢复上次会话<span class="src">各家 --resume / -c</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td></tr>
<tr><td class="fname">分支或 fork 会话<span class="src">codex fork · opencode --fork · buddy /fork</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">同一会话内多条历史并存<span class="src">我们 context/git/dag.py head 指针 · pi-mono /tree 会话树</span></td><td class="g1 us">●</td><td class="g2">◐</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g2">◐</td><td class="g0">·</td><td class="g0">·</td><td class="g2">◐</td></tr>
<tr class="only"><td class="fname">会话本体存成 git 仓库<span class="src">我们 store/session/git_session.py 每会话一个仓库、追加写;其他对象主要使用 JSONL 或 SQLite</span></td><td class="g1 us">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td></tr>
<tr><td class="fname">手动压缩上下文<span class="src">各家 /compact;我们 Web action 与 TUI /compact 都调用 dispatcher.trigger_compaction</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td></tr>
<tr><td class="fname">到阈值自动压缩<span class="src">我们 context/engine.py 默认阈值 0.80;dispatcher/loop_runner.py 超阈值先 snip,仍超阈值则自动 compact</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g2">◐</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g2">◐</td><td class="g1">●</td><td class="g1">●</td></tr>
<tr><td class="fname">回退到历史某点并恢复文件<span class="src">我们 _rewind.py · claude /rewind · buddy /rewind Beta · hermes checkpoints 默认关</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g3">○</td><td class="g0">·</td><td class="g1">●</td><td class="g3">○</td><td class="g2">◐</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g3">○</td><td class="g1">●</td><td class="g1">●</td></tr>
<tr><td class="fname">导出会话为文件<span class="src">pi-mono /export 出独立 HTML · openclaw /export-trajectory · opencode export --sanitize</span></td><td class="g2 us">◐</td><td class="g1">●</td><td class="g2">◐</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g2">◐</td><td class="g1">●</td><td class="g1">●</td></tr>
<tr><td class="fname">生成公开分享链接<span class="src">opencode /share 到 opncd.ai · pi-mono /share 到 GitHub gist</span></td><td class="g0 us">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td></tr>
<tr><td class="fname">会话全文搜索<span class="src">我们 store/session/search.py FTS5 · hermes session_search FTS5</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g2">◐</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g2">◐</td><td class="g0">·</td><td class="g0">·</td></tr>
<tr><td class="fname">归档会话<span class="src">我们 openprogram sessions archive/unarchive 经 cli/commands/sessions.py::_cmd_session_archive 调 session_db.set_archived,list --archived/--all 可分别查看;归档只隐藏默认列表,不影响 last-activity 或删除。codex archive / unarchive · ~/.codex/archived_sessions/</span></td><td class="g1 us">●</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td></tr>
<tr><td class="fname">后台或分离运行的会话<span class="src">buddy --bg 加 codebuddy ps/logs/attach/kill · hermes /background</span></td><td class="g2 us">◐</td><td class="g1">●</td><td class="g2">◐</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g2">◐</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">将运行中会话迁移至其他设备或客户端<span class="src">claude /teleport · codex --remote · opencode attach · buddy --remote-control</span></td><td class="g0 us">·</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g3">○</td><td class="g1">●</td></tr>
<tr><td class="fname">跨渠道接管同一会话<span class="src">openclaw /dock · hermes /handoff</span></td><td class="g0 us">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td></tr>
<tr><td class="fname">运行中插话改方向<span class="src">我们 apps/web/lib/state/send-queue.ts 在运行中把消息排进客户端队列,队列行可撤回或停止当前轮次立即发送,运行结束按序发出;未实现不打断当前轮次的 mid-turn steer。openclaw /steer · hermes /steer · pi-mono Enter 排队加 Alt+Enter 跟进</span></td><td class="g2 us">◐</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td></tr>
<tr><td class="fname">上下文占用可视化<span class="src">我们 Web /api/sessions/{id}/context 与 TUI /context 均显示 token 分类;TUI 使用本地估算,Web 使用统一 session_stats</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g2">◐</td><td class="g2">◐</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">临时旁支会话不进主历史<span class="src">codex /side 与 /btw · openclaw /btw · hermes /background</span></td><td class="g0 us">·</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td></tr>
<tr class="grp"><td>03 <b>代码理解</b> <span style="color:#6b6a63">10 项</span></td><td class="hc us">我们</td><td class="hc">claude</td><td class="hc">codex</td><td class="hc">openclaw</td><td class="hc">opencode</td><td class="hc">hermes</td><td class="hc">pi-mono</td><td class="hc">pi-ai</td><td class="hc">weclaw</td><td class="hc">cc内</td><td class="hc">cx内</td><td class="hc">gm内</td><td class="hc">buddy</td></tr>
<tr><td class="fname">语义或向量代码检索<span class="src">我们 semble 需装 [search] 额外件 · openclaw QMD 索引任意目录</span></td><td class="g2 us">◐</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g2">◐</td></tr>
<tr><td class="fname">只读探索子 agent<span class="src">opencode explore · claude Explore · gm内 codebase_investigator · buddy code-explorer</span></td><td class="g2 us">◐</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g2">◐</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td></tr>
<tr><td class="fname">外部依赖与文档研究 agent<span class="src">opencode scout,OPENCODE_EXPERIMENTAL_SCOUT 门控</span></td><td class="g0 us">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g3">○</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td></tr>
<tr><td class="fname">将外部目录或仓库注册为命名上下文<span class="src">opencode references 的 @别名</span></td><td class="g0 us">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td></tr>
<tr><td class="fname">生成项目说明文件<span class="src">我们 TUI /init 同步创建通用 AGENTS.md、SOUL.md、USER.md 模板,保留已有文件并分别报告 created/skipped;未分析项目代码。claude /init · buddy /init</span></td><td class="g2 us">◐</td><td class="g1">●</td><td class="g1">●</td><td class="g2">◐</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">读取其他 agent 格式的项目说明文件<span class="src">opencode 读取 CLAUDE.md 与 .claude/skills · buddy 缺少 CODEBUDDY.md 时读取 AGENTS.md</span></td><td class="g2 us">◐</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td></tr>
<tr><td class="fname">读取既有会话记录作为上下文<span class="src">我们 read_conversation · openclaw sessions_history · hermes session_search</span></td><td class="g1 us">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td></tr>
<tr><td class="fname">内置深度研究工作流<span class="src">buddy builtin/workflows/deep-research.workflow.js 使用五个并行分支和三次表决式对抗验证</span></td><td class="g0 us">·</td><td class="g0">·</td><td class="g0">·</td><td class="g2">◐</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">读自身文档回答自身问题<span class="src">claude claude-code-guide 子 agent · gm内 get_internal_docs · openclaw docs 命令</span></td><td class="g0 us">·</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g2">◐</td></tr>
<tr><td class="fname">图片与 PDF 输入<span class="src">我们 Web/渠道可收附件;图片进入 ImageContent,PDF 保存到会话工作目录后由 pdf/read 读取;TUI 无同等文件选择入口</span></td><td class="g2 us">◐</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g2">◐</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td></tr>
<tr class="grp"><td>04 <b>版本控制</b> <span style="color:#6b6a63">10 项</span></td><td class="hc us">我们</td><td class="hc">claude</td><td class="hc">codex</td><td class="hc">openclaw</td><td class="hc">opencode</td><td class="hc">hermes</td><td class="hc">pi-mono</td><td class="hc">pi-ai</td><td class="hc">weclaw</td><td class="hc">cc内</td><td class="hc">cx内</td><td class="hc">gm内</td><td class="hc">buddy</td></tr>
<tr><td class="fname">生成提交信息<span class="src">我们 /commit-message 以 GIT_OPTIONAL_LOCKS=0 读取 staged 或 unstaged 变更,status 上限 20,000 字符、完整模型输入上限 80,000 字符;无工具模型只生成候选,不执行 commit。buddy GenerateCommitMessage · claude /commit</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">提交、推送并创建 PR<span class="src">OpenProgram 不随包提供该默认 skill;提交与远端写入由普通工具权限和用户授权控制。buddy commit-push-pr 的 allowedTools 仅允许 gh pr create</span></td><td class="g0 us">·</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">PR 或 Issue 评论触发机器人<span class="src">opencode /oc 提及触发 · buddy GitLab @codebuddy · gm内 @gemini-cli</span></td><td class="g0 us">·</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td></tr>
<tr><td class="fname">从 PR 编号或链接直接开 worktree<span class="src">buddy -w #PR 或 PR 链接,支持 GitHub/GitLab/CNB</span></td><td class="g0 us">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g2">◐</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">worktree 隔离执行<span class="src">我们 worktree/manager.py · hermes hermes -w · buddy isolation: worktree</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g3">○</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">worktree 建好后同步本地未跟踪文件<span class="src">buddy .worktreeinclude · hermes .worktreeinclude</span></td><td class="g0 us">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">影子 git 不污染用户历史<span class="src">我们 store/shadow_git · opencode snapshot 默认开 · hermes checkpoints 默认关</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g3">○</td><td class="g2">◐</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g3">○</td><td class="g1">●</td></tr>
<tr><td class="fname">AI 作者署名写进 git 历史<span class="src">codex ext/git-attribution</span></td><td class="g0 us">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td></tr>
<tr><td class="fname">对当前 diff 做安全审查<span class="src">buddy /security-review · claude /security-review</span></td><td class="g0 us">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">非 git 的版本控制<span class="src">claude CLAUDE_CODE_PERFORCE_MODE · buddy WorktreeCreate 钩子可接 SVN/Perforce</span></td><td class="g0 us">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g2">◐</td></tr>
<tr class="grp"><td>05 <b>任务与规划</b> <span style="color:#6b6a63">11 项</span></td><td class="hc us">我们</td><td class="hc">claude</td><td class="hc">codex</td><td class="hc">openclaw</td><td class="hc">opencode</td><td class="hc">hermes</td><td class="hc">pi-mono</td><td class="hc">pi-ai</td><td class="hc">weclaw</td><td class="hc">cc内</td><td class="hc">cx内</td><td class="hc">gm内</td><td class="hc">buddy</td></tr>
<tr><td class="fname">待办清单工具<span class="src">各家 todowrite / TaskCreate;pi-mono 只有示例扩展</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g2">◐</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td></tr>
<tr><td class="fname">计划模式<span class="src">我们 enter_plan_mode · gm内 /plan 实验性</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g2">◐</td><td class="g2">◐</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g3">○</td><td class="g1">●</td></tr>
<tr><td class="fname">目标条件驱动的自治循环<span class="src">我们 agent/goal/judge.py 独立裁判模型 · claude /goal · codex /goal · buddy /goal · hermes /goal</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">定时任务<span class="src">我们 Scheduler 工具和 REST API 登记一次性、周期与监控任务;常驻 worker 执行 agent prompt 或受控命令,scheduler-worker 支持 --once/--list</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g2">◐</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">周期心跳式主动发起<span class="src">OpenProgram 已删除 Commitments 专用 heartbeat;周期检查统一表达为 Scheduler monitor 任务。openclaw heartbeat 与 cron 是两条独立路径</span></td><td class="g1 us">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td></tr>
<tr><td class="fname">常驻授权长期自主运行<span class="src">openclaw standing orders,带触发与升级规则</span></td><td class="g0 us">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td></tr>
<tr><td class="fname">一次性、周期与监控任务连接长期记忆<span class="src">OpenProgram Scheduler 复用签名执行 spec、冻结 sandbox policy 与常驻 worker;任务可保存 workspace_id + memory_id,只在执行时解析当前 Topic block。Memory writer 不再推断 Commitments,旧 commitments.jsonl 只做一次性迁移。</span></td><td class="g1 us">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td></tr>
<tr><td class="fname">模型动态生成编排脚本并执行大规模并行任务<span class="src">buddy ultracode 最多 1000 个子 agent、并发上限 16 · claude Dynamic Workflows · codex code mode 默认关闭</span></td><td class="g0 us">·</td><td class="g1">●</td><td class="g3">○</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g3">○</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">类型化工作流运行时带审批检查点<span class="src">openclaw Lobster 加 llm-task</span></td><td class="g0 us">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td></tr>
<tr><td class="fname">结构化提问用户<span class="src">我们 ask_user_question · buddy AskUserQuestion · opencode question · hermes clarify</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g2">◐</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g2">◐</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">按 JSON schema 约束输出<span class="src">我们 Tasks 1–6@2fb471b3:Runtime/Agent 严格本地校验、最多一次修复、verified native/hidden-tool/explicit-prompt 协商、CLI/Web typed lifecycle、record/replay v2 与 no-tool session title;后续 trust-boundary 修复拒绝 remote ref、本地直接引用环、超预算 schema 和无 raw terminal 的 EOF · buddy --json-schema 加 StructuredOutput · opencode format: json_schema</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g2">◐</td><td class="g1">●</td></tr>
<tr class="grp"><td>06 <b>多 agent</b> <span style="color:#6b6a63">14 项</span></td><td class="hc us">我们</td><td class="hc">claude</td><td class="hc">codex</td><td class="hc">openclaw</td><td class="hc">opencode</td><td class="hc">hermes</td><td class="hc">pi-mono</td><td class="hc">pi-ai</td><td class="hc">weclaw</td><td class="hc">cc内</td><td class="hc">cx内</td><td class="hc">gm内</td><td class="hc">buddy</td></tr>
<tr><td class="fname">派生子 agent<span class="src">我们 agent 工具三种起点 · pi-mono 只有示例扩展 · weclaw 是把消息广播给多个外部 CLI</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g2">◐</td><td class="g0">·</td><td class="g2">◐</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td></tr>
<tr><td class="fname">agent 之间发消息<span class="src">我们 send_message · codex multi_agent_v1.send_message · buddy SendMessage</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g2">◐</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">持久收件箱,跨会话去重有界<span class="src">我们 agent/inbox.py 60 秒去重窗口加 50 条上限 · claude 同为 50 条跨会话信箱</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td></tr>
<tr><td class="fname">持久任务看板<span class="src">hermes ~/.hermes/kanban.db,多项目分板加自动拆解</span></td><td class="g0 us">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td></tr>
<tr><td class="fname">agent 团队:队长加成员加邮箱<span class="src">buddy Agent Teams 带 @成员补全与共享任务表 · claude 需 CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS</span></td><td class="g0 us">·</td><td class="g3">○</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g3">○</td><td class="g0">·</td><td class="g0">·</td><td class="g3">○</td></tr>
<tr><td class="fname">团队可换执行后端<span class="src">buddy 进程内、独立进程、tmux 三种 · claude teammateMode: iterm2</span></td><td class="g0 us">·</td><td class="g2">◐</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g2">◐</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr class="only"><td class="fname">多条分支 N 路合并成一条<span class="src">我们 agent/internals/_merge.py 加 subagent merge</span></td><td class="g1 us">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td></tr>
<tr><td class="fname">委派模式:协调 agent 不直接执行任务<span class="src">buddy --permission-mode delegate,可用工具限制为五个</span></td><td class="g0 us">·</td><td class="g3">○</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">多模型共识或交叉复核<span class="src">我们 mixture_of_agents · claude /advisor · openclaw oracle 技能</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td></tr>
<tr><td class="fname">子 agent 深度预算<span class="src">我们 agent.max_spawn_depth 默认 1 · claude 默认 3 · hermes max_spawn_depth</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g2">◐</td></tr>
<tr><td class="fname">并发数与每会话派生总量上限<span class="src">我们 agent/resource_governance.py 每会话 live/queued/total 上限加 token、费用与运行时长限额,config_schema 可配并入 usage ledger 计量 · claude 并发 20 加每会话 200 次 · hermes max_concurrent_children 默认 3</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g2">◐</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">子 agent 支持从持久状态恢复执行<span class="src">buddy 使用 agentId 与 agent-{id}.jsonl,并在后续调用中传入 resume 参数</span></td><td class="g0 us">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr class="only"><td class="fname">函数调用树写进同一张会话图<span class="src">我们 agentic_programming/function.py 写 code 节点,store/session/session_node_writer.py 与 context/nodes.py 统一 caller/predecessor 语义</span></td><td class="g1 us">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td></tr>
<tr class="only"><td class="fname">按剩余消息预算限制子 agent 可用工具<span class="src">我们 agent/internals/_model_tools.py 在解析工具时读取调用链消息预算;tests/unit/agent/test_spawn_caller_invariant.py 验证预算耗尽后移除协作工具</span></td><td class="g1 us">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td></tr>
<tr class="grp"><td>07 <b>记忆与知识</b> <span style="color:#6b6a63">10 项</span></td><td class="hc us">我们</td><td class="hc">claude</td><td class="hc">codex</td><td class="hc">openclaw</td><td class="hc">opencode</td><td class="hc">hermes</td><td class="hc">pi-mono</td><td class="hc">pi-ai</td><td class="hc">weclaw</td><td class="hc">cc内</td><td class="hc">cx内</td><td class="hc">gm内</td><td class="hc">buddy</td></tr>
<tr><td class="fname">跨会话长期记忆<span class="src">我们 memory/ · codex memories 默认关 · openclaw 内置 SQLite 加 FTS5</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g3">○</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g3">○</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">后台记忆整理与巩固<span class="src">我们凌晨三点重整 · claude Dream System · openclaw dreaming 需自己打开</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g1">●</td><td class="g3">○</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g2">◐</td></tr>
<tr><td class="fname">外部记忆服务可插拔<span class="src">hermes 八家记忆提供商 · openclaw honcho / lancedb / QMD</span></td><td class="g0 us">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td></tr>
<tr><td class="fname">记忆编成可浏览的维基<span class="src">openclaw memory-wiki 带出处与主张</span></td><td class="g0 us">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td></tr>
<tr><td class="fname">技能体系与渐进披露<span class="src">各家 SKILL.md;我们五层解析加远程缓存</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td></tr>
<tr><td class="fname">技能市场或远程安装<span class="src">openclaw ClawHub · hermes Skills Hub 八个源 · pi-mono pi install npm/git</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td></tr>
<tr><td class="fname">agent 自己造技能<span class="src">我们 distill 技能 · claude skillify · hermes skill_manage · openclaw Skill Workshop 默认关</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g0">·</td><td class="g3">○</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td></tr>
<tr><td class="fname">技能与插件的安全扫描或信任分级<span class="src">hermes 四档信任加扫描 · buddy SkillSecurityScan 默认关;我们的插件沙箱是 stub</span></td><td class="g2 us">◐</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g3">○</td></tr>
<tr><td class="fname">按技能 bundle 批量加载<span class="src">hermes bundles 通过斜杠命令一次加载一组技能</span></td><td class="g0 us">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td></tr>
<tr><td class="fname">厂商知识库接入<span class="src">buddy knowledgeBases 的 Tencent 文档源,@ 可引</span></td><td class="g0 us">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr class="grp"><td>08 <b>扩展</b> <span style="color:#6b6a63">11 项</span></td><td class="hc us">我们</td><td class="hc">claude</td><td class="hc">codex</td><td class="hc">openclaw</td><td class="hc">opencode</td><td class="hc">hermes</td><td class="hc">pi-mono</td><td class="hc">pi-ai</td><td class="hc">weclaw</td><td class="hc">cc内</td><td class="hc">cx内</td><td class="hc">gm内</td><td class="hc">buddy</td></tr>
<tr><td class="fname">插件系统<span class="src">各家;我们 openprogram/plugins 支持 pip/npm/git/path</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td></tr>
<tr><td class="fname">插件市场<span class="src">我们 plugins/marketplace.py 支持内置目录与自定义市场,Web Marketplace 可浏览并调用插件安装接口</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">MCP 客户端<span class="src">我们 mcp/client.py 全生命周期;pi-mono 明确不做 MCP</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td></tr>
<tr><td class="fname">MCP 服务端,供外部程序调用<span class="src">我们 openprogram mcp serve 经 mcp/server/server.py 在 stdio 上暴露 list_tools/call_tool,token 认证走 auth.py,工具契约与 owner/paired 权限映射见 service.py 与 contracts.py;tests/unit/test_mcp_server_{contracts,turns,auth,tools,security,cli}.py 与 tests/integration/programs/test_mcp_server.py 覆盖。claude mcp serve · codex mcp-server · openclaw mcp serve · hermes mcp serve</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td></tr>
<tr><td class="fname">MCP 交互式 HTML 组件<span class="src">buddy dist/web-ui/sandbox_proxy.html,io.modelcontextprotocol/ui 规范</span></td><td class="g0 us">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">事件钩子<span class="src">claude 约 28 个事件 · buddy 26 个事件 · 我们 24 个</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td></tr>
<tr><td class="fname">钩子支持 LLM 判定或 HTTP 回调<span class="src">buddy 与 claude 均支持 command、prompt、agent、http 四种动作</span></td><td class="g0 us">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g2">◐</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">用户写代码注册新工具<span class="src">opencode .opencode/tools/*.ts · pi-mono registerTool · codex dynamicTools 实验</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g3">○</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g3">○</td><td class="g2">◐</td><td class="g2">◐</td></tr>
<tr><td class="fname">注册自定义模型供应商<span class="src">codex model_providers · opencode provider.npm · buddy models.json 热重载</span></td><td class="g1 us">●</td><td class="g2">◐</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g2">◐</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">从其他 agent 迁移配置或状态<span class="src">codex /import 与 external-agent-migration · openclaw migrate-claude · hermes claw migrate</span></td><td class="g0 us">·</td><td class="g1">●</td><td class="g3">○</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g3">○</td><td class="g2">◐</td><td class="g2">◐</td></tr>
<tr><td class="fname">输出风格或人格切换<span class="src">我们 context/output_style.py 提供 concise/explanatory/direct/detailed 四个内置风格加用户与项目目录 .md 覆盖;agent.output_style 在 config_schema.py 里 APPLY_LIVE,改后立刻生效,context/components.py 的 output_style 组件把风格文本装进 system prompt。codex /personality · hermes 14 种人格加 SOUL.md · buddy 三种 output style</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr class="grp"><td>09 <b>界面形态</b> <span style="color:#6b6a63">12 项</span></td><td class="hc us">我们</td><td class="hc">claude</td><td class="hc">codex</td><td class="hc">openclaw</td><td class="hc">opencode</td><td class="hc">hermes</td><td class="hc">pi-mono</td><td class="hc">pi-ai</td><td class="hc">weclaw</td><td class="hc">cc内</td><td class="hc">cx内</td><td class="hc">gm内</td><td class="hc">buddy</td></tr>
<tr><td class="fname">终端界面<span class="src">我们 Ink 加 Rich 双实现;weclaw 没有终端界面</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td></tr>
<tr><td class="fname">网页界面<span class="src">我们 Next.js 18 个页面 · buddy --serve 带 xterm.js 分屏 · gm内 /remote 面板默认关</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g3">○</td><td class="g1">●</td></tr>
<tr><td class="fname">桌面应用<span class="src">我们 Electron 带跨窗口拖标签 · codex codex app · opencode Electron Beta</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td></tr>
<tr><td class="fname">移动端应用或 PWA<span class="src">我们 apps/web/app/manifest.ts 加 192/512/maskable PNG 图标提供 standalone PWA 安装入口 · openclaw iOS/Android 节点 App · buddy manifest.webmanifest 支持安装为 PWA 和扫码配对</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g3">○</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g3">○</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">聊天渠道接入<span class="src">我们 4 个 · openclaw 28 个 · hermes 27 个 · buddy 6 个</span></td><td class="g1 us">●</td><td class="g2">◐</td><td class="g0">·</td><td class="g1">●</td><td class="g2">◐</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g2">◐</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">语音输入或输出<span class="src">openclaw Swabble 唤醒词加 14 家 TTS · hermes Ctrl+B 按住说话;我们只有 openai 一家 TTS 真通</span></td><td class="g2 us">◐</td><td class="g1">●</td><td class="g3">○</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g2">◐</td><td class="g1">●</td><td class="g3">○</td><td class="g0">·</td><td class="g0">·</td></tr>
<tr><td class="fname">电话呼入呼出<span class="src">openclaw voice-call 使用 Twilio、Telnyx 或 Plivo,支持 DTMF</span></td><td class="g0 us">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td></tr>
<tr><td class="fname">主题切换<span class="src">我们 Web 设置支持多套持久主题与 auto;TUI /theme 支持 auto、dark/light 及 dim 变体并持久化</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td></tr>
<tr><td class="fname">Vim 模式<span class="src">claude 完整模态引擎带文本对象 · buddy /vim · codex /vim</span></td><td class="g0 us">·</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g2">◐</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td></tr>
<tr><td class="fname">快捷键全量可重映射<span class="src">buddy keybindings.json 分 16 个上下文并支持组合键 · claude 约 95 个可绑定动作</span></td><td class="g0 us">·</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">独立二进制不装 Node<span class="src">pi-mono bun build --compile · buddy 原生安装器加 Homebrew tap · weclaw 是 Go</span></td><td class="g0 us">·</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">屏幕阅读器与无障碍<span class="src">claude --ax-screen-reader · gm内 --screen-reader</span></td><td class="g0 us">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td></tr>
<tr class="grp"><td>10 <b>集成与被集成</b> <span style="color:#6b6a63">13 项</span></td><td class="hc us">我们</td><td class="hc">claude</td><td class="hc">codex</td><td class="hc">openclaw</td><td class="hc">opencode</td><td class="hc">hermes</td><td class="hc">pi-mono</td><td class="hc">pi-ai</td><td class="hc">weclaw</td><td class="hc">cc内</td><td class="hc">cx内</td><td class="hc">gm内</td><td class="hc">buddy</td></tr>
<tr><td class="fname">HTTP API 服务端<span class="src">opencode serve 带 OpenAPI · buddy --serve 带 Swagger 与 PTY 接口;我们有 FastAPI 路由与 WebSocket 动作,doctor/MCP 当前响应有后端契约测试,但尚未定义稳定、版本化的外部控制契约</span></td><td class="g2 us">◐</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">OpenAI 兼容端点<span class="src">openclaw /v1/chat/completions 默认关 · hermes /v1/chat/completions 与 /v1/responses</span></td><td class="g0 us">·</td><td class="g0">·</td><td class="g0">·</td><td class="g3">○</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td></tr>
<tr><td class="fname">面向远程控制协议的官方 SDK<span class="src">codex Python 加 TypeScript · opencode @opencode-ai/sdk · buddy 两语言 SDK;OpenProgram 的本地 Python 导入 API 不按远程客户端 SDK 计</span></td><td class="g0 us">·</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g2">◐</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">CI 集成<span class="src">opencode GitHub Action · buddy GitLab CI/CD 组件 · claude /install-github-app</span></td><td class="g0 us">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td></tr>
<tr><td class="fname">入站 webhook<span class="src">openclaw webhooks 插件接 Zapier/n8n · buddy /api/v1/webhooks 带 wecom 与 wechat-kf</span></td><td class="g0 us">·</td><td class="g3">○</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g3">○</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">通过移动端控制运行中会话<span class="src">buddy --remote-control 使用 Cloudflare 隧道与扫码配对 · codex remoteControl 配对</span></td><td class="g0 us">·</td><td class="g1">●</td><td class="g3">○</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g3">○</td><td class="g3">○</td><td class="g1">●</td></tr>
<tr><td class="fname">在云端执行任务<span class="src">codex cloud exec 实验性 · claude 云容器 · buddy sandbox e2b 与腾讯云 CVM</span></td><td class="g0 us">·</td><td class="g1">●</td><td class="g3">○</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g3">○</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">图像生成<span class="src">openclaw 10 个后端 · hermes FAL 九个模型 · buddy ImageGen 按部署档开关</span></td><td class="g0 us">·</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g2">◐</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g3">○</td></tr>
<tr><td class="fname">视频生成<span class="src">openclaw 16 个后端 · buddy Hunyuan-Video-Art</span></td><td class="g0 us">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g3">○</td></tr>
<tr><td class="fname">网络搜索<span class="src">openclaw 12 家可换 · hermes 8 家含自建 SearXNG</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g2">◐</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td></tr>
<tr><td class="fname">智能家居与 IoT<span class="src">openclaw openhue / sonoscli / camsnap · hermes Home Assistant 工具</span></td><td class="g0 us">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td></tr>
<tr><td class="fname">参加会议并出纪要<span class="src">openclaw Google Meet 插件加 meeting-notes · hermes Teams 会议</span></td><td class="g0 us">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td></tr>
<tr><td class="fname">支付授权卡<span class="src">buddy WeixinPayInterception,任务中途暂停等真实付款确认</span></td><td class="g0 us">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g3">○</td></tr>
<tr class="grp"><td>11 <b>部署与运维</b> <span style="color:#6b6a63">15 项</span></td><td class="hc us">我们</td><td class="hc">claude</td><td class="hc">codex</td><td class="hc">openclaw</td><td class="hc">opencode</td><td class="hc">hermes</td><td class="hc">pi-mono</td><td class="hc">pi-ai</td><td class="hc">weclaw</td><td class="hc">cc内</td><td class="hc">cx内</td><td class="hc">gm内</td><td class="hc">buddy</td></tr>
<tr><td class="fname">常驻服务与开机自启<span class="src">我们写 launchd plist 与 systemd unit · claude server 与 self-hosted-runner</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">多平台部署文档<span class="src">openclaw 约 20 个部署目标,包括 K8s 与 Fly.io · buddy 提供官方 Dev Container feature</span></td><td class="g0 us">·</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g2">◐</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g2">◐</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">多身份或多租户并存<span class="src">我们 agents add 命名人格;channels/_access.py 用 8 位配对码加稳定发信人 ID 放行渠道来信,agent/authority.py 按 owner 与 paired 两档发放能力,paired 只有 reply 与 memory.source.append。渠道共用同一个 agent 与记忆工作区,不做租户隔离。hermes profile create 各带网关与记忆 · openclaw 一个网关多 agent</span></td><td class="g1 us">●</td><td class="g2">◐</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g2">◐</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">企业策略强制配置<span class="src">codex configRequirements 加 MDM · opencode .mobileconfig · claude managed-settings.d</span></td><td class="g0 us">·</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td></tr>
<tr><td class="fname">用量与成本显示<span class="src">各家;我们 usage/ledger.py 按真实每百万 token 定价算</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td></tr>
<tr><td class="fname">信用点配额与购买入口<span class="src">buddy 按模型的信用倍率与充值深链 · opencode Zen 与 Go 订阅</span></td><td class="g0 us">·</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">OpenTelemetry 导出<span class="src">claude 加 Datadog 与 Perfetto · buddy 仅 traces 加四个默认关的隐私开关 · openclaw 走插件</span></td><td class="g0 us">·</td><td class="g1">●</td><td class="g1">●</td><td class="g3">○</td><td class="g1">●</td><td class="g2">◐</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g2">◐</td><td class="g1">●</td><td class="g3">○</td><td class="g1">●</td></tr>
<tr><td class="fname">自更新<span class="src">各家;weclaw 会自己换掉自己的二进制并清 macOS 隔离属性</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td></tr>
<tr class="only"><td class="fname">升级前隔离冷启动探针<span class="src">我们 cli/commands/upgrade.py 在临时端口检查 /healthz 与 doctor 后才重启;线上验证失败仅输出手工回退命令,尚无自动回滚</span></td><td class="g1 us">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td></tr>
<tr><td class="fname">健康自检<span class="src">我们 doctor 十项检查,TUI /doctor 调同一 /api/doctor 并显示逐项结果;后端测试固定 results 与 all_ok 响应结构。openclaw doctor · buddy doctor</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g2">◐</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">可分享的诊断包<span class="src">我们 openprogram diagnostics 经 cli/commands/diagnostics.py::build_bundle 打包 version/config/credentials/environment 与日志尾,写成 zip;脱敏复用 providers/recording.remove_secret_values 并加子串键名匹配与 GitHub/AWS/Google/JWT 值模式,凭据文件本身不进包,credentials.json 只记 provider 名与数量。tests/unit/config/test_diagnostics_command.py 覆盖。openclaw diagnostics 脱敏支持包 · hermes debug share · codex doctor --json</span></td><td class="g1 us">●</td><td class="g2">◐</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g2">◐</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td></tr>
<tr><td class="fname">备份与导入自身状态<span class="src">我们 cli/commands/backup.py 提供 backup create/list/restore/prune:范围是 INCLUDED 显式允许清单(memory、sessions、config.json、agents、skills、plugins、usage.db 等),凭据 auth 与 mcp_tokens 默认排除、须 --include-credentials 并打印警告;归档写 <state>/backups/ 的 tar.gz,先写 .partial 再改名,权限 0600,创建后回读校验,不可读则删除并报错。恢复有三道闸:worker 或 web 在跑时拒绝执行、非 --yes 时需确认、覆盖前先自动存一份 pre-restore 快照;解包用 filter="data" 并逐成员做路径包含检查,符号链接一律跳过。openclaw backup 打包全部状态 · hermes backup 与 import</span></td><td class="g1 us">●</td><td class="g2">◐</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g2">◐</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td></tr>
<tr><td class="fname">进程预热降低启动延迟<span class="src">buddy cbc-prewarm 使用 Unix socket 通知;其文档记录启动时间由 3.7 秒降至约 1 毫秒,本文未独立验证</span></td><td class="g0 us">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">多实例管理器<span class="src">buddy instances.json 加网页切换 · openclaw 一台机器多网关</span></td><td class="g0 us">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">按需自动启动本地模型服务<span class="src">openclaw 选择本地模型时自动启动 vLLM、llama.cpp 或 MLX,并在空闲时停止服务 · codex --oss --local-provider</span></td><td class="g0 us">·</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g2">◐</td><td class="g2">◐</td><td class="g2">◐</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td></tr>
<tr class="grp"><td>12 <b>安全</b> <span style="color:#6b6a63">15 项</span></td><td class="hc us">我们</td><td class="hc">claude</td><td class="hc">codex</td><td class="hc">openclaw</td><td class="hc">opencode</td><td class="hc">hermes</td><td class="hc">pi-mono</td><td class="hc">pi-ai</td><td class="hc">weclaw</td><td class="hc">cc内</td><td class="hc">cx内</td><td class="hc">gm内</td><td class="hc">buddy</td></tr>
<tr><td class="fname">操作系统级沙箱<span class="src">我们 sandbox/__init__.py 用 Seatbelt 与 bubblewrap,config_schema.py 的 sandbox.mode 默认 workspace-write;bash、execute_code、cron worker、MCP stdio 服务器与派生 agent 共用同一条 backend/local.py 包裹路径,_with_hard_floor 让 agentics 目录在任何配置下都不可写。codex 三平台 · opencode 只有 Docker 安装法</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g2">◐</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td></tr>
<tr><td class="fname">沙箱后端可换<span class="src">hermes 七种终端后端含 modal 与 daytona · openclaw docker/ssh/OpenShell · buddy container/e2b/CVM</span></td><td class="g1 us">●</td><td class="g0">·</td><td class="g2">◐</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g2">◐</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">多档审批模式<span class="src">我们五档审批模式,另有 agent/authority.py 的 owner/paired 两档来源权限,渠道来信按档位裁掉工具能力并给出结构化 reason_code。buddy 八档 · claude 六档;weclaw 全自动批</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g2">◐</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td></tr>
<tr><td class="fname">LLM 判定的自动审批<span class="src">我们 auto 模式先用固定 allow/deny 集筛选,不确定的写/edit 调 _auto_classifier.py,分类失败时拒绝</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">不可由 bypass 绕过的强制拒绝规则<span class="src">我们 _approval.py 在 bypass 短路前应用显式 deny/ask 与 force_ask,test_deny_rule_blocks_even_under_bypass 覆盖 deny;hermes hardline · buddy hard_deny</span></td><td class="g1 us">●</td><td class="g2">◐</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g2">◐</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">将删除操作重定向至回收站<span class="src">我们对绑定 session/turn 的 LocalBackend 与 execute_code 注入 shell/Python/Node shim;manifest 支持 openprogram trash list/restore。无上下文的 cron/后台任务、Docker/SSH 与可绕过入口未覆盖</span></td><td class="g2 us">◐</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr data-op-scope-id="os-credential-store" data-op-decision="do-not-implement"><td class="fname">凭据存操作系统钥匙串<span class="src">buddy 使用 Keychain、keyring 或凭据管理器 · codex 可选 keyring-store;我们使用权限模式为 0600 的明文文件</span></td><td class="g0 us">·</td><td class="g1">●</td><td class="g3">○</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g3">○</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">通过外部命令获取密钥<span class="src">我们 auth/methods/credential_process.py 每次调用外部命令取 token,argv 列表无 shell 插值、60 秒可配超时、cache_seconds 去重;helper stderr 在进入错误信息或日志前经 diagnostics redactor 脱敏,再截断至 200 字符。pi-mono 将以 ! 开头的值解释为 shell 命令 · claude apiKeyHelper · openclaw SecretRef</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">提示注入扫描<span class="src">hermes 扫 AGENTS.md 与 .cursorrules,加 Tirith 执行前内容扫描</span></td><td class="g0 us">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td></tr>
<tr><td class="fname">私网访问与 SSRF 防护<span class="src">我们 <code>be5eaa3c</code>:统一 URL/IP policy、同步/异步 peer-constrained transport、逐跳 redirect 与 credential origin 限制、响应/解压/超时上限、consumer registry、SDK fail-closed disposition、owner-only 精确例外、doctor 与 runtime audit;范围限 Runtime-owned HTTP,浏览器导航和任意代码网络另行验收。hermes 挡 RFC1918 与云元数据 · openclaw 可选前置代理</span></td><td class="g2 us">◐</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td></tr>
<tr><td class="fname">威胁模型文档或形式化验证<span class="src">openclaw MITRE ATLAS 加 TLA+ 机检模型 · codex Bugcrowd 漏洞披露</span></td><td class="g0 us">·</td><td class="g0">·</td><td class="g2">◐</td><td class="g1">●</td><td class="g0">·</td><td class="g2">◐</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g2">◐</td><td class="g0">·</td><td class="g0">·</td></tr>
<tr><td class="fname">合规管控与外部模型开关<span class="src">三家内网版按工蜂仓库的《AI Coding IDE 安全管控》决定放不放外部模型</span></td><td class="g0 us">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td></tr>
<tr><td class="fname">每次编辑静默审计上报<span class="src">cc内 默认插件在每次 Write/Edit 与 UserPromptSubmit 上回调,未见开关</span></td><td class="g0 us">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g2">◐</td></tr>
<tr><td class="fname">私有化或离线部署档<span class="src">buddy product.selfhosted.json · openclaw 自托管部署 · hermes Docker Compose</span></td><td class="g0 us">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr class="only"><td class="fname">无人值守时从可用工具中移除提问工具<span class="src">我们 agent/attended.py 在策略层移除 ask_user_question,避免任务因等待用户输入而停止</span></td><td class="g1 us">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td></tr>
<tr class="grp"><td>13 <b>开发者体验</b> <span style="color:#6b6a63">13 项</span></td><td class="hc us">我们</td><td class="hc">claude</td><td class="hc">codex</td><td class="hc">openclaw</td><td class="hc">opencode</td><td class="hc">hermes</td><td class="hc">pi-mono</td><td class="hc">pi-ai</td><td class="hc">weclaw</td><td class="hc">cc内</td><td class="hc">cx内</td><td class="hc">gm内</td><td class="hc">buddy</td></tr>
<tr><td class="fname">实时成本可见<span class="src">各家;我们在底栏常驻</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td></tr>
<tr><td class="fname">调试开关与分类日志<span class="src">claude --debug "api,hooks" · 我们约 30 个环境变量开关</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td></tr>
<tr><td class="fname">确定性模拟模型驱动完整 agent 循环<span class="src">我们 tests/component/providers/scripted_provider.py 经正式 provider registry 与公开 stream 入口脚本化文本、思考、工具调用、错误及多轮;pi-mono faux provider</span></td><td class="g1 us">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td></tr>
<tr><td class="fname">请求录制与回放<span class="src">我们 openprogram recordings CLI(status/record/replay/off/list/show/delete/prune)与 record_replay.mode/file 配置,跨进程并发录制,回放严格离线不解析凭证 · pi-mono HTTP 与 WebSocket 磁带 · buddy CODEBUDDY_RECORD_DIR / REPLAY_DIR</span></td><td class="g1 us">●</td><td class="g0">·</td><td class="g2">◐</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g2">◐</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">会话导出成训练样本<span class="src">hermes batch processing 批量生成轨迹 · pi-mono 依赖外部 pi-share-hf</span></td><td class="g0 us">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g2">◐</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td></tr>
<tr><td class="fname">内置强化学习训练管线<span class="src">hermes Tinker-Atropos 的 GRPO 加 LoRA</span></td><td class="g0 us">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td></tr>
<tr><td class="fname">使用洞察报告<span class="src">buddy /insights 生成描述交互习惯与失败或中断场景的 HTML 报告 · claude /insights</span></td><td class="g0 us">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g2">◐</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">人写与机器写的代码占比<span class="src">buddy CodeAdoptionRate</span></td><td class="g0 us">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td></tr>
<tr><td class="fname">不依赖模型的诊断与恢复命令<span class="src">我们 rescue 包含十二项探针 · openclaw crestodian 提供免配置修复</span></td><td class="g1 us">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g2">◐</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td></tr>
<tr><td class="fname">同一会话内切换供应商并保持历史兼容<span class="src">我们 Web/TUI 可在同一会话切换模型;providers/_shared/transform_messages.py 归一化跨协议消息,测试覆盖跨供应商工具调用 ID 回放</span></td><td class="g1 us">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td></tr>
<tr><td class="fname">多个 API key 轮换<span class="src">我们 auth/usage.py 与 auth/pool.py 支持同一 provider 的多凭据、冷却期跳过和多种选择策略;当前仅覆盖接入统一 auth pool 的 provider</span></td><td class="g2 us">◐</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td></tr>
<tr><td class="fname">失败自动切模型或供应商<span class="src">我们默认开启:候选链是同一 provider 下启用的其他模型(最多 2 个),仅在输出内容前的限流/过载/服务/超时/网络错误切换;OPENPROGRAM_FALLBACK_MODELS 可显式指定跨 provider 序列或设 off 关闭</span></td><td class="g1 us">●</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g2">◐</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td></tr>
<tr><td class="fname">提交反馈与日志<span class="src">codex /feedback 在包含日志前请求同意 · buddy /feedback</span></td><td class="g0 us">·</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g0">·</td><td class="g0">·</td><td class="g0">·</td><td class="g1">●</td><td class="g1">●</td><td class="g1">●</td><td class="g0">·</td></tr>
</table>
</div>
<div class="note">
<b>读表限制</b>。<code>pi-ai</code> 是协议参考源码,不是可运行产品,因此保留空列只用于说明审计单位不同。<code>cc内</code> 与 <code>cx内</code> 是上游 CLI 的启动器包装,功能状态与上游高度相关;<code>gm内</code> 也复用了大量上游内容。这 13 列不是 13 个相互独立的产品样本。分数只表示本页 160 项中已确认状态的加权和,不能推导产品质量、稳定性、安全性、使用价值或市场覆盖。
</div>
<h3 id="cover">1.1已确认功能覆盖分</h3>
<p class="lead">按 160 项加权:<code>●</code> 记 1 分,<code>◐</code> 和 <code>○</code> 各记 0.5 分。该分数只用于定位本页清单中的候选差异,不是综合产品排名。</p>
<div class="card scroll">
<svg viewBox="0 0 960 330" role="img" aria-label="十三列在160项功能上的已确认功能覆盖分,buddy为103分,OpenProgram为84.5分">
<rect x="0" y="0" width="960" height="330" fill="#12110b"/>
<text x="20" y="26" fill="#8a8675" font-size="11" letter-spacing="2">已确认功能覆盖分 / 160</text>
<line x1="150" y1="36" x2="150" y2="300" stroke="#2e2c20"/>
<line x1="470" y1="36" x2="470" y2="300" stroke="#221f18"/>
<text x="470" y="318" fill="#4a483d" font-size="10" text-anchor="middle">50%</text>
<line x1="790" y1="36" x2="790" y2="300" stroke="#221f18"/>
<text x="790" y="318" fill="#4a483d" font-size="10" text-anchor="middle">100%</text>
<g font-size="11">
<g transform="translate(0,44)"><text x="140" y="11" fill="#bdb9a6" text-anchor="end">buddy</text><rect x="150" y="2" width="412" height="13" rx="2" fill="#d4843a"/><text x="572" y="12" fill="#8a8675" font-size="10">103.0</text></g>
<g transform="translate(0,64)"><text x="140" y="11" fill="#bdb9a6" text-anchor="end">claude</text><rect x="150" y="2" width="382" height="13" rx="2" fill="#9d6fe0"/><text x="542" y="12" fill="#8a8675" font-size="10">95.5</text></g>
<g transform="translate(0,84)"><text x="140" y="11" fill="#bdb9a6" text-anchor="end">cc内</text><rect x="150" y="2" width="376" height="13" rx="2" fill="#6b4d96"/><text x="536" y="12" fill="#8a8675" font-size="10">94.0</text></g>
<g transform="translate(0,104)"><text x="140" y="11" fill="#bdb9a6" text-anchor="end">hermes</text><rect x="150" y="2" width="368" height="13" rx="2" fill="#5aad4e"/><text x="528" y="12" fill="#8a8675" font-size="10">92.0</text></g>
<g transform="translate(0,124)"><text x="140" y="11" fill="#4f8ef7" text-anchor="end" font-weight="700">我们</text><rect x="150" y="2" width="338" height="13" rx="2" fill="#4f8ef7"/><text x="498" y="12" fill="#4f8ef7" font-size="10" font-weight="700">84.5</text></g>
<g transform="translate(0,144)"><text x="140" y="11" fill="#bdb9a6" text-anchor="end">openclaw</text><rect x="150" y="2" width="332" height="13" rx="2" fill="#2db3d5"/><text x="492" y="12" fill="#8a8675" font-size="10">83.0</text></g>
<g transform="translate(0,164)"><text x="140" y="11" fill="#bdb9a6" text-anchor="end">codex</text><rect x="150" y="2" width="260" height="13" rx="2" fill="#7a7566"/><text x="420" y="12" fill="#8a8675" font-size="10">65.0</text></g>
<g transform="translate(0,184)"><text x="140" y="11" fill="#bdb9a6" text-anchor="end">cx内</text><rect x="150" y="2" width="256" height="13" rx="2" fill="#5e5a4d"/><text x="416" y="12" fill="#8a8675" font-size="10">64.0</text></g>
<g transform="translate(0,204)"><text x="140" y="11" fill="#bdb9a6" text-anchor="end">opencode</text><rect x="150" y="2" width="214" height="13" rx="2" fill="#7a7566"/><text x="374" y="12" fill="#8a8675" font-size="10">53.5</text></g>
<g transform="translate(0,224)"><text x="140" y="11" fill="#bdb9a6" text-anchor="end">gm内</text><rect x="150" y="2" width="168" height="13" rx="2" fill="#5e5a4d"/><text x="328" y="12" fill="#8a8675" font-size="10">42.0</text></g>
<g transform="translate(0,244)"><text x="140" y="11" fill="#bdb9a6" text-anchor="end">pi-mono</text><rect x="150" y="2" width="152" height="13" rx="2" fill="#7a7566"/><text x="312" y="12" fill="#8a8675" font-size="10">38.0</text></g>
<g transform="translate(0,264)"><text x="140" y="11" fill="#bdb9a6" text-anchor="end">weclaw</text><rect x="150" y="2" width="34" height="13" rx="2" fill="#4a483d"/><text x="194" y="12" fill="#8a8675" font-size="10">8.5</text></g>
<g transform="translate(0,284)"><text x="140" y="11" fill="#6b6a63" text-anchor="end">pi-ai</text><rect x="150" y="2" width="2" height="13" rx="1" fill="#33312a"/><text x="162" y="12" fill="#6b6a63" font-size="10">0 协议参考源码,不是产品</text></g>
</g>
</svg>
</div>
<div class="card legend">
<b>分数解释</b>:codebuddy 在本快照中得到 103 分,主要因为其包内记录了 74 个功能开关、47 个工具、16 个出厂 agent、5 套部署配置、26 个钩子事件及多类界面设置。这个结果说明按功能清单审计会记录机制审计未覆盖的用户功能,不说明 codebuddy 的实现质量或总体能力高于其他对象。
</div>
<h3 id="bycat">1.2按类别比较已确认比例</h3>
<p class="lead">灰色横带是该类别 10 个有效参考列(剔除证据过稀的 pi-ai、weclaw)已确认比例的最低到最高范围,竖刻度是中位数,蓝点是 OpenProgram 的位置。点落在带子左端附近说明大幅落后,落在带外右侧说明领先全部参考列。当前比例差最大的三类依次为集成与被集成、版本控制、代码理解。</p>
<div class="card scroll">
<svg viewBox="0 0 960 400" role="img" aria-label="十三个功能类别中OpenProgram相对10个参考列已确认比例范围的位置,多agent与任务与规划两个类别领先全部参考列,集成与被集成落在范围下端">
<rect x="0" y="0" width="960" height="400" fill="#12110b"/>
<text x="20" y="24" fill="#8a8675" font-size="11" letter-spacing="2">类内已确认比例 <tspan fill="#55523f">┃ 范围端点</tspan> <tspan fill="#8a8675">│ 中位数</tspan> <tspan fill="#4f8ef7">● 我们</tspan></text>
<line x1="200" y1="34" x2="200" y2="366" stroke="#2e2c20"/>
<line x1="400" y1="34" x2="400" y2="366" stroke="#221f18"/>
<line x1="600" y1="34" x2="600" y2="366" stroke="#221f18"/>
<line x1="800" y1="34" x2="800" y2="366" stroke="#221f18"/>
<text x="200" y="384" fill="#4a483d" font-size="10" text-anchor="middle">0</text>
<text x="400" y="384" fill="#4a483d" font-size="10" text-anchor="middle">33%</text>
<text x="600" y="384" fill="#4a483d" font-size="10" text-anchor="middle">67%</text>
<text x="800" y="384" fill="#4a483d" font-size="10" text-anchor="middle">100%</text>
<g font-size="11">
<g transform="translate(0,42)"><text x="190" y="12" fill="#bdb9a6" text-anchor="end">编辑器集成 9</text><line x1="233" y1="8" x2="667" y2="8" stroke="#3a382d" stroke-width="6" stroke-linecap="round"/><line x1="233" y1="2" x2="233" y2="14" stroke="#55523f" stroke-width="1.5"/><line x1="667" y1="2" x2="667" y2="14" stroke="#55523f" stroke-width="1.5"/><line x1="467" y1="1" x2="467" y2="15" stroke="#8a8675" stroke-width="2"/><circle cx="433" cy="8" r="5" fill="#4f8ef7"/><text x="685" y="12" fill="#6b6a63" font-size="10">buddy 78%</text></g>
<g transform="translate(0,67)"><text x="190" y="12" fill="#bdb9a6" text-anchor="end">会话与历史 17</text><line x1="394" y1="8" x2="606" y2="8" stroke="#3a382d" stroke-width="6" stroke-linecap="round"/><line x1="394" y1="2" x2="394" y2="14" stroke="#55523f" stroke-width="1.5"/><line x1="606" y1="2" x2="606" y2="14" stroke="#55523f" stroke-width="1.5"/><line x1="535" y1="1" x2="535" y2="15" stroke="#8a8675" stroke-width="2"/><circle cx="606" cy="8" r="5" fill="#4f8ef7"/><text x="624" y="12" fill="#6b6a63" font-size="10">claude 68%</text></g>
<g transform="translate(0,92)"><text x="190" y="12" fill="#bdb9a6" text-anchor="end">代码理解 10</text><line x1="350" y1="8" x2="560" y2="8" stroke="#3a382d" stroke-width="6" stroke-linecap="round"/><line x1="350" y1="2" x2="350" y2="14" stroke="#55523f" stroke-width="1.5"/><line x1="560" y1="2" x2="560" y2="14" stroke="#55523f" stroke-width="1.5"/><line x1="470" y1="1" x2="470" y2="15" stroke="#8a8675" stroke-width="2"/><circle cx="410" cy="8" r="5" fill="#4f8ef7"/><text x="578" y="12" fill="#6b6a63" font-size="10">openclaw 60%</text></g>
<g transform="translate(0,117)"><text x="190" y="12" fill="#bdb9a6" text-anchor="end">版本控制 10</text><line x1="260" y1="8" x2="710" y2="8" stroke="#3a382d" stroke-width="6" stroke-linecap="round"/><line x1="260" y1="2" x2="260" y2="14" stroke="#55523f" stroke-width="1.5"/><line x1="710" y1="2" x2="710" y2="14" stroke="#55523f" stroke-width="1.5"/><line x1="380" y1="1" x2="380" y2="15" stroke="#8a8675" stroke-width="2"/><circle cx="440" cy="8" r="5" fill="#4f8ef7"/><text x="728" y="12" fill="#6b6a63" font-size="10">buddy 85%</text></g>
<g transform="translate(0,142)"><text x="190" y="12" fill="#5aad4e" text-anchor="end" font-weight="700">任务与规划 11</text><line x1="255" y1="8" x2="582" y2="8" stroke="#3a382d" stroke-width="6" stroke-linecap="round"/><line x1="255" y1="2" x2="255" y2="14" stroke="#55523f" stroke-width="1.5"/><line x1="582" y1="2" x2="582" y2="14" stroke="#55523f" stroke-width="1.5"/><line x1="445" y1="1" x2="445" y2="15" stroke="#8a8675" stroke-width="2"/><circle cx="636" cy="8" r="5" fill="#5aad4e"/><text x="654" y="12" fill="#5aad4e" font-size="10" font-weight="700">我们 73%,超过最高参考 claude 64%</text></g>
<g transform="translate(0,167)"><text x="190" y="12" fill="#5aad4e" text-anchor="end" font-weight="700">多 agent 14</text><line x1="221" y1="8" x2="543" y2="8" stroke="#3a382d" stroke-width="6" stroke-linecap="round"/><line x1="221" y1="2" x2="221" y2="14" stroke="#55523f" stroke-width="1.5"/><line x1="543" y1="2" x2="543" y2="14" stroke="#55523f" stroke-width="1.5"/><line x1="329" y1="1" x2="329" y2="15" stroke="#8a8675" stroke-width="2"/><circle cx="586" cy="8" r="5" fill="#5aad4e"/><text x="604" y="12" fill="#5aad4e" font-size="10" font-weight="700">我们 64%,超过最高参考 cc内 57%</text></g>
<g transform="translate(0,192)"><text x="190" y="12" fill="#bdb9a6" text-anchor="end">记忆与知识 10</text><line x1="260" y1="8" x2="620" y2="8" stroke="#3a382d" stroke-width="6" stroke-linecap="round"/><line x1="260" y1="2" x2="260" y2="14" stroke="#55523f" stroke-width="1.5"/><line x1="620" y1="2" x2="620" y2="14" stroke="#55523f" stroke-width="1.5"/><line x1="485" y1="1" x2="485" y2="15" stroke="#8a8675" stroke-width="2"/><circle cx="530" cy="8" r="5" fill="#4f8ef7"/><text x="638" y="12" fill="#6b6a63" font-size="10">hermes 70%</text></g>
<g transform="translate(0,217)"><text x="190" y="12" fill="#bdb9a6" text-anchor="end">扩展 11</text><line x1="418" y1="8" x2="718" y2="8" stroke="#3a382d" stroke-width="6" stroke-linecap="round"/><line x1="418" y1="2" x2="418" y2="14" stroke="#55523f" stroke-width="1.5"/><line x1="718" y1="2" x2="718" y2="14" stroke="#55523f" stroke-width="1.5"/><line x1="664" y1="1" x2="664" y2="15" stroke="#8a8675" stroke-width="2"/><circle cx="636" cy="8" r="5" fill="#4f8ef7"/><text x="736" y="12" fill="#6b6a63" font-size="10">claude 86%</text></g>
<g transform="translate(0,242)"><text x="190" y="12" fill="#bdb9a6" text-anchor="end">界面形态 12</text><line x1="425" y1="8" x2="725" y2="8" stroke="#3a382d" stroke-width="6" stroke-linecap="round"/><line x1="425" y1="2" x2="425" y2="14" stroke="#55523f" stroke-width="1.5"/><line x1="725" y1="2" x2="725" y2="14" stroke="#55523f" stroke-width="1.5"/><line x1="538" y1="1" x2="538" y2="15" stroke="#8a8675" stroke-width="2"/><circle cx="525" cy="8" r="5" fill="#4f8ef7"/><text x="743" y="12" fill="#6b6a63" font-size="10">claude 88%</text></g>
<g transform="translate(0,267)"><text x="190" y="12" fill="#bdb9a6" text-anchor="end">集成与被集成 13</text><line x1="269" y1="8" x2="638" y2="8" stroke="#3a382d" stroke-width="6" stroke-linecap="round"/><line x1="269" y1="2" x2="269" y2="14" stroke="#55523f" stroke-width="1.5"/><line x1="638" y1="2" x2="638" y2="14" stroke="#55523f" stroke-width="1.5"/><line x1="465" y1="1" x2="465" y2="15" stroke="#8a8675" stroke-width="2"/><circle cx="269" cy="8" r="5" fill="#4f8ef7"/><text x="656" y="12" fill="#6b6a63" font-size="10">hermes 73%</text></g>
<g transform="translate(0,292)"><text x="190" y="12" fill="#bdb9a6" text-anchor="end">部署与运维 15</text><line x1="300" y1="8" x2="640" y2="8" stroke="#3a382d" stroke-width="6" stroke-linecap="round"/><line x1="300" y1="2" x2="300" y2="14" stroke="#55523f" stroke-width="1.5"/><line x1="640" y1="2" x2="640" y2="14" stroke="#55523f" stroke-width="1.5"/><line x1="540" y1="1" x2="540" y2="15" stroke="#8a8675" stroke-width="2"/><circle cx="520" cy="8" r="5" fill="#4f8ef7"/><text x="658" y="12" fill="#6b6a63" font-size="10">hermes 73%</text></g>
<g transform="translate(0,317)"><text x="190" y="12" fill="#bdb9a6" text-anchor="end">安全 15</text><line x1="260" y1="8" x2="620" y2="8" stroke="#3a382d" stroke-width="6" stroke-linecap="round"/><line x1="260" y1="2" x2="260" y2="14" stroke="#55523f" stroke-width="1.5"/><line x1="620" y1="2" x2="620" y2="14" stroke="#55523f" stroke-width="1.5"/><line x1="420" y1="1" x2="420" y2="15" stroke="#8a8675" stroke-width="2"/><circle cx="520" cy="8" r="5" fill="#4f8ef7"/><text x="638" y="12" fill="#6b6a63" font-size="10">buddy 70%</text></g>
<g transform="translate(0,342)"><text x="190" y="12" fill="#bdb9a6" text-anchor="end">开发者体验 13</text><line x1="315" y1="8" x2="592" y2="8" stroke="#3a382d" stroke-width="6" stroke-linecap="round"/><line x1="315" y1="2" x2="315" y2="14" stroke="#55523f" stroke-width="1.5"/><line x1="592" y1="2" x2="592" y2="14" stroke="#55523f" stroke-width="1.5"/><line x1="408" y1="1" x2="408" y2="15" stroke="#8a8675" stroke-width="2"/><circle cx="546" cy="8" r="5" fill="#4f8ef7"/><text x="610" y="12" fill="#6b6a63" font-size="10">hermes 65%</text></g>
</g>
</svg>
</div>
<div class="card legend">
<b>按本表计分,多 agent 和任务与规划是超过全部参考列的两个类别</b>:多 agent OpenProgram 9.0/14(64%),最高参考列 <code>cc内</code> 为 8.0/14(57%);任务与规划 OpenProgram 8.0/11(73%),最高参考列 <code>claude</code>、<code>cc内</code>、<code>buddy</code> 并列 7.0/11(64%)。其余类别蓝点都落在参考范围之内;离范围上端最远的三类为集成与被集成(我们 12%,范围 12%–73%)、版本控制(40%,10%–85%)和编辑器集成(39%,6%–78%)。范围只统计 10 个有效参考列,pi-ai(0 项确认)与 weclaw(5%)证据过稀被剔除;数字按当前功能全表重算,与旧图个别标注略有出入。该结论仍受功能定义和快照版本限制。
</div>
<!-- ══════════════════════════ LAYER 2 ══════════════════════════ -->
<h2 id="gaps"><span class="num">02</span>OpenProgram 未确认、参考列已确认的 67 项<span class="ly ly2">候选</span></h2>
<p class="lead">筛选条件是 OpenProgram 为 <code>·</code>、至少一个参考列不是 <code>·</code>。这 67 项是设计候选,不是已经证明的产品缺陷;<code>·</code> 可能表示确实未实现,也可能表示本轮证据不足。分组依据当前“单人本机、常驻 worker、通用 harness、自有 TUI/Web/桌面界面”的产品边界。</p>
<div class="tbl">
<table class="wide">
<tr><th>功能</th><th>大类</th><th>已确认的参考对象</th><th>依据</th></tr>
<tr class="grp"><td colspan="4"><b class="g1">进入后续评估</b> <span style="color:#6b6a63">37 项</span></td></tr>
<tr><td class="name">终端快捷键自动配置</td><td class="sz">编辑器集成</td><td>claude、cc内、gm内 等 5 家</td><td class="srcin">claude /terminal-setup · buddy /terminal-setup 覆盖十余种终端</td></tr>
<tr><td class="name">将运行中会话迁移至其他设备或客户端</td><td class="sz">会话与历史</td><td>claude、codex、opencode 等 7 家</td><td class="srcin">claude /teleport · codex --remote · opencode attach · buddy --remote-control</td></tr>
<tr><td class="name">跨渠道接管同一会话</td><td class="sz">会话与历史</td><td>openclaw、hermes</td><td class="srcin">openclaw /dock · hermes /handoff</td></tr>
<tr><td class="name">临时旁支会话不进主历史</td><td class="sz">会话与历史</td><td>codex、openclaw、hermes 等 4 家</td><td class="srcin">codex /side 与 /btw · openclaw /btw · hermes /background</td></tr>
<tr><td class="name">外部依赖与文档研究 agent</td><td class="sz">代码理解</td><td>opencode</td><td class="srcin">opencode scout,OPENCODE_EXPERIMENTAL_SCOUT 门控</td></tr>
<tr><td class="name">将外部目录或仓库注册为命名上下文</td><td class="sz">代码理解</td><td>opencode</td><td class="srcin">opencode references 的 @别名</td></tr>
<tr><td class="name">内置深度研究工作流</td><td class="sz">代码理解</td><td>buddy</td><td class="srcin">buddy builtin/workflows/deep-research.workflow.js 使用五个并行分支和三次表决式对抗验证</td></tr>
<tr><td class="name">读自身文档回答自身问题</td><td class="sz">代码理解</td><td>claude、openclaw、cc内 等 5 家</td><td class="srcin">claude claude-code-guide 子 agent · gm内 get_internal_docs · openclaw docs 命令</td></tr>
<tr><td class="name">从 PR 编号或链接直接开 worktree</td><td class="sz">版本控制</td><td>claude、cc内、buddy 等 4 家</td><td class="srcin">buddy -w #PR 或 PR 链接,支持 GitHub/GitLab/CNB</td></tr>
<tr><td class="name">worktree 建好后同步本地未跟踪文件</td><td class="sz">版本控制</td><td>hermes、buddy</td><td class="srcin">buddy .worktreeinclude · hermes .worktreeinclude</td></tr>
<tr><td class="name">AI 作者署名写进 git 历史</td><td class="sz">版本控制</td><td>codex、cx内</td><td class="srcin">codex ext/git-attribution</td></tr>
<tr><td class="name">对当前 diff 做安全审查</td><td class="sz">版本控制</td><td>claude、cc内、buddy</td><td class="srcin">buddy /security-review · claude /security-review</td></tr>
<tr><td class="name">常驻授权长期自主运行</td><td class="sz">任务与规划</td><td>openclaw</td><td class="srcin">openclaw standing orders,带触发与升级规则</td></tr>
<tr><td class="name">模型动态生成编排脚本并执行大规模并行任务</td><td class="sz">任务与规划</td><td>claude、cc内、buddy 等 5 家</td><td class="srcin">buddy ultracode 最多 1000 个子 agent、并发上限 16 · claude Dynamic Workflows · codex code mode 默认关闭</td></tr>
<tr><td class="name">类型化工作流运行时带审批检查点</td><td class="sz">任务与规划</td><td>openclaw</td><td class="srcin">openclaw Lobster 加 llm-task</td></tr>
<tr><td class="name">持久任务看板</td><td class="sz">多 agent</td><td>hermes</td><td class="srcin">hermes ~/.hermes/kanban.db,多项目分板加自动拆解</td></tr>
<tr><td class="name">agent 团队:队长加成员加邮箱</td><td class="sz">多 agent</td><td>claude、cc内、buddy</td><td class="srcin">buddy Agent Teams 带 @成员补全与共享任务表 · claude 需 CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS</td></tr>
<tr><td class="name">委派模式:协调 agent 不直接执行任务</td><td class="sz">多 agent</td><td>cc内、buddy</td><td class="srcin">buddy --permission-mode delegate,可用工具限制为五个</td></tr>
<tr><td class="name">子 agent 支持从持久状态恢复执行</td><td class="sz">多 agent</td><td>buddy</td><td class="srcin">buddy 使用 agentId 与 agent-{id}.jsonl,并在后续调用中传入 resume 参数</td></tr>
<tr><td class="name">记忆编成可浏览的维基</td><td class="sz">记忆与知识</td><td>openclaw</td><td class="srcin">openclaw memory-wiki 带出处与主张</td></tr>
<tr><td class="name">按技能 bundle 批量加载</td><td class="sz">记忆与知识</td><td>hermes</td><td class="srcin">hermes bundles 通过斜杠命令一次加载一组技能</td></tr>
<tr><td class="name">MCP 交互式 HTML 组件</td><td class="sz">扩展</td><td>buddy</td><td class="srcin">buddy dist/web-ui/sandbox_proxy.html,io.modelcontextprotocol/ui 规范</td></tr>
<tr><td class="name">钩子支持 LLM 判定或 HTTP 回调</td><td class="sz">扩展</td><td>claude、cc内、buddy 等 4 家</td><td class="srcin">buddy 与 claude 均支持 command、prompt、agent、http 四种动作</td></tr>
<tr><td class="name">从其他 agent 迁移配置或状态</td><td class="sz">扩展</td><td>claude、openclaw、hermes 等 8 家</td><td class="srcin">codex /import 与 external-agent-migration · openclaw migrate-claude · hermes claw migrate</td></tr>
<tr><td class="name">Vim 模式</td><td class="sz">界面形态</td><td>claude、codex、cc内 等 7 家</td><td class="srcin">claude 完整模态引擎带文本对象 · buddy /vim · codex /vim</td></tr>
<tr><td class="name">快捷键全量可重映射</td><td class="sz">界面形态</td><td>claude、codex、opencode 等 7 家</td><td class="srcin">buddy keybindings.json 分 16 个上下文并支持组合键 · claude 约 95 个可绑定动作</td></tr>
<tr><td class="name">屏幕阅读器与无障碍</td><td class="sz">界面形态</td><td>claude、cc内、gm内</td><td class="srcin">claude --ax-screen-reader · gm内 --screen-reader</td></tr>
<tr><td class="name">OpenAI 兼容端点</td><td class="sz">集成与被集成</td><td>hermes</td><td class="srcin">openclaw /v1/chat/completions 默认关 · hermes /v1/chat/completions 与 /v1/responses</td></tr>
<tr><td class="name">面向远程控制协议的官方 SDK</td><td class="sz">集成与被集成</td><td>claude、codex、opencode 等 8 家</td><td class="srcin">codex Python 加 TypeScript · opencode @opencode-ai/sdk · buddy 两语言 SDK</td></tr>
<tr><td class="name">入站 webhook</td><td class="sz">集成与被集成</td><td>openclaw、hermes、buddy 等 5 家</td><td class="srcin">openclaw webhooks 插件接 Zapier/n8n · buddy /api/v1/webhooks 带 wecom 与 wechat-kf</td></tr>
<tr><td class="name">通过移动端控制运行中会话</td><td class="sz">集成与被集成</td><td>claude、openclaw、cc内 等 7 家</td><td class="srcin">buddy --remote-control 使用 Cloudflare 隧道与扫码配对 · codex remoteControl 配对</td></tr>
<tr><td class="name">OpenTelemetry 导出</td><td class="sz">部署与运维</td><td>claude、codex、opencode 等 9 家</td><td class="srcin">claude 加 Datadog 与 Perfetto · buddy 仅 traces 加四个默认关的隐私开关 · openclaw 走插件</td></tr>
<tr><td class="name">进程预热降低启动延迟</td><td class="sz">部署与运维</td><td>buddy</td><td class="srcin">buddy cbc-prewarm 使用 Unix socket 通知;其文档记录启动时间由 3.7 秒降至约 1 毫秒,本文未独立验证</td></tr>
<tr><td class="name">按需自动启动本地模型服务</td><td class="sz">部署与运维</td><td>codex、openclaw、cx内 等 6 家</td><td class="srcin">openclaw 选择本地模型时自动启动 vLLM、llama.cpp 或 MLX,并在空闲时停止服务 · codex --oss --local-provider</td></tr>
<tr data-op-scope-id="os-credential-store" data-op-decision="do-not-implement"><td class="name">凭据存操作系统钥匙串</td><td class="sz">安全</td><td>claude、cc内、buddy 等 5 家</td><td class="srcin">buddy 使用 Keychain、keyring 或凭据管理器 · codex 可选 keyring-store;我们使用权限模式为 0600 的明文文件</td></tr>
<tr><td class="name">提示注入扫描</td><td class="sz">安全</td><td>hermes</td><td class="srcin">hermes 扫 AGENTS.md 与 .cursorrules,加 Tirith 执行前内容扫描</td></tr>
<tr><td class="name">使用洞察报告</td><td class="sz">开发者体验</td><td>claude、hermes、cc内 等 5 家</td><td class="srcin">buddy /insights 生成描述交互习惯与失败或中断场景的 HTML 报告 · claude /insights</td></tr>
<tr class="grp"><td colspan="4"><b class="g2">与当前产品边界不一致</b> <span style="color:#6b6a63">15 项</span></td></tr>
<tr><td class="name">官方 IDE 扩展或插件</td><td class="sz">编辑器集成</td><td>claude、codex、opencode 等 8 家</td><td class="srcin">claude /ide · codex app-server 驱动 VS Code 扩展 · buddy --ide</td></tr>
<tr><td class="name">生成公开分享链接</td><td class="sz">会话与历史</td><td>claude、opencode、pi-mono 等 4 家</td><td class="srcin">opencode /share 到 opncd.ai · pi-mono /share 到 GitHub gist</td></tr>
<tr><td class="name">PR 或 Issue 评论触发机器人</td><td class="sz">版本控制</td><td>claude、openclaw、opencode 等 7 家</td><td class="srcin">opencode /oc 提及触发 · buddy GitLab @codebuddy · gm内 @gemini-cli</td></tr>
<tr><td class="name">团队可换执行后端</td><td class="sz">多 agent</td><td>buddy</td><td class="srcin">buddy 进程内、独立进程、tmux 三种 · claude teammateMode: iterm2</td></tr>
<tr><td class="name">外部记忆服务可插拔</td><td class="sz">记忆与知识</td><td>openclaw、hermes</td><td class="srcin">hermes 八家记忆提供商 · openclaw honcho / lancedb / QMD</td></tr>
<tr><td class="name">独立二进制不装 Node</td><td class="sz">界面形态</td><td>claude、codex、opencode 等 6 家</td><td class="srcin">pi-mono bun build --compile · buddy 原生安装器加 Homebrew tap · weclaw 是 Go</td></tr>
<tr><td class="name">CI 集成</td><td class="sz">集成与被集成</td><td>claude、opencode、hermes 等 6 家</td><td class="srcin">opencode GitHub Action · buddy GitLab CI/CD 组件 · claude /install-github-app</td></tr>
<tr><td class="name">图像生成</td><td class="sz">集成与被集成</td><td>codex、openclaw、hermes 等 6 家</td><td class="srcin">openclaw 10 个后端 · hermes FAL 九个模型 · buddy ImageGen 按部署档开关</td></tr>
<tr><td class="name">多平台部署文档</td><td class="sz">部署与运维</td><td>claude、openclaw、hermes 等 6 家</td><td class="srcin">openclaw 约 20 个部署目标,包括 K8s 与 Fly.io · buddy 提供官方 Dev Container feature</td></tr>
<tr><td class="name">多实例管理器</td><td class="sz">部署与运维</td><td>openclaw、hermes、buddy</td><td class="srcin">buddy instances.json 加网页切换 · openclaw 一台机器多网关</td></tr>
<tr><td class="name">威胁模型文档或形式化验证</td><td class="sz">安全</td><td>openclaw 等 4 家</td><td class="srcin">openclaw MITRE ATLAS 加 TLA+ 机检模型 · codex Bugcrowd 漏洞披露</td></tr>
<tr><td class="name">私有化或离线部署档</td><td class="sz">安全</td><td>openclaw、hermes、buddy</td><td class="srcin">buddy product.selfhosted.json · openclaw 自托管部署 · hermes Docker Compose</td></tr>
<tr><td class="name">会话导出成训练样本</td><td class="sz">开发者体验</td><td>hermes</td><td class="srcin">hermes batch processing 批量生成轨迹 · pi-mono 依赖外部 pi-share-hf</td></tr>
<tr><td class="name">人写与机器写的代码占比</td><td class="sz">开发者体验</td><td>buddy</td><td class="srcin">buddy CodeAdoptionRate</td></tr>
<tr><td class="name">提交反馈与日志</td><td class="sz">开发者体验</td><td>claude、codex、hermes 等 6 家</td><td class="srcin">codex /feedback 在包含日志前请求同意 · buddy /feedback</td></tr>
<tr class="grp"><td colspan="4"><b class="g0">当前不纳入</b> <span style="color:#6b6a63">15 项</span></td></tr>
<tr><td class="name">行内补全</td><td class="sz">编辑器集成</td><td>buddy</td><td class="srcin">buddy product.json productFeatures.InlineCompletions</td></tr>
<tr><td class="name">行内对话与 CodeLens 与状态栏动作</td><td class="sz">编辑器集成</td><td>buddy</td><td class="srcin">buddy InlineChat / CodeLens / StatusBar / CodeAction / FloatShortcut</td></tr>
<tr><td class="name">非 git 的版本控制</td><td class="sz">版本控制</td><td>claude、cc内</td><td class="srcin">claude CLAUDE_CODE_PERFORCE_MODE · buddy WorktreeCreate 钩子可接 SVN/Perforce</td></tr>
<tr><td class="name">厂商知识库接入</td><td class="sz">记忆与知识</td><td>buddy</td><td class="srcin">buddy knowledgeBases 的 Tencent 文档源,@ 可引</td></tr>
<tr><td class="name">电话呼入呼出</td><td class="sz">界面形态</td><td>openclaw</td><td class="srcin">openclaw voice-call 使用 Twilio、Telnyx 或 Plivo,支持 DTMF</td></tr>
<tr><td class="name">在云端执行任务</td><td class="sz">集成与被集成</td><td>claude、cc内、buddy 等 5 家</td><td class="srcin">codex cloud exec 实验性 · claude 云容器 · buddy sandbox e2b 与腾讯云 CVM</td></tr>
<tr><td class="name">视频生成</td><td class="sz">集成与被集成</td><td>openclaw、hermes</td><td class="srcin">openclaw 16 个后端 · buddy Hunyuan-Video-Art</td></tr>
<tr><td class="name">智能家居与 IoT</td><td class="sz">集成与被集成</td><td>openclaw、hermes</td><td class="srcin">openclaw openhue / sonoscli / camsnap · hermes Home Assistant 工具</td></tr>
<tr><td class="name">参加会议并出纪要</td><td class="sz">集成与被集成</td><td>openclaw、hermes</td><td class="srcin">openclaw Google Meet 插件加 meeting-notes · hermes Teams 会议</td></tr>
<tr><td class="name">支付授权卡</td><td class="sz">集成与被集成</td><td>buddy</td><td class="srcin">buddy WeixinPayInterception,任务中途暂停等真实付款确认</td></tr>
<tr><td class="name">企业策略强制配置</td><td class="sz">部署与运维</td><td>claude、codex、opencode 等 7 家</td><td class="srcin">codex configRequirements 加 MDM · opencode .mobileconfig · claude managed-settings.d</td></tr>
<tr><td class="name">信用点配额与购买入口</td><td class="sz">部署与运维</td><td>claude、codex、opencode 等 5 家</td><td class="srcin">buddy 按模型的信用倍率与充值深链 · opencode Zen 与 Go 订阅</td></tr>
<tr><td class="name">合规管控与外部模型开关</td><td class="sz">安全</td><td>cc内、cx内、gm内 等 4 家</td><td class="srcin">三家内网版按工蜂仓库的《AI Coding IDE 安全管控》决定放不放外部模型</td></tr>
<tr><td class="name">每次编辑静默审计上报</td><td class="sz">安全</td><td>cc内</td><td class="srcin">cc内 默认插件在每次 Write/Edit 与 UserPromptSubmit 上回调,未见开关</td></tr>
<tr><td class="name">内置强化学习训练管线</td><td class="sz">开发者体验</td><td>hermes</td><td class="srcin">hermes Tinker-Atropos 的 GRPO 加 LoRA</td></tr>
</table>
</div>
<div class="note green">
<b>37 项仍需单独立项判断</b>。commit-push-pr、外部命令取密钥、每会话资源限额、请求录制与回放的 CLI 入口、JSON schema 输出、deterministic heartbeat、commitment lifecycle、MCP 服务端、归档会话、输出风格切换和可分享诊断包已陆续落地并移出本表;当前优先关注 diff 安全审查,以及可恢复删除尚未覆盖的后端和删除入口。这里没有可靠的使用频率与工程量数据;具体顺序由第四节按风险、依赖关系、协议稳定性和可验收性给出。已落地的 credential_process 具备无 shell 插值的 argv、可配超时、结果缓存和 helper stderr 脱敏。
</div>
<h3 id="newfound">2.1相对前几轮新增的清单项</h3>
<p class="lead">口径为本页撰写时(414aa4de 基线)的 78 项:15 项在前几轮文档出现过,63 项此前未列出;此后已实现的 11 项仍计入本图。“新增”描述文档覆盖差异,不表示产品发布时间。</p>
<div class="card scroll">
<svg viewBox="0 0 960 400" role="img" aria-label="按功能类别拆分的候选差异条目数,深色为前几轮已列出,橙色为本轮新增">
<rect x="0" y="0" width="960" height="400" fill="#12110b"/>
<text x="20" y="24" fill="#8a8675" font-size="11" letter-spacing="2">OpenProgram 未确认、参考列已确认的条目数</text>
<rect x="700" y="12" width="14" height="10" fill="#4a483d"/><text x="720" y="21" fill="#8a8675" font-size="10.5">前几轮已列出 15</text>
<rect x="828" y="12" width="14" height="10" fill="#d4843a"/><text x="848" y="21" fill="#8a8675" font-size="10.5">本轮新增 63</text>
<line x1="200" y1="34" x2="200" y2="366" stroke="#2e2c20"/>
<g stroke="#221f18">
<line x1="300" y1="34" x2="300" y2="366"/><line x1="400" y1="34" x2="400" y2="366"/>
<line x1="500" y1="34" x2="500" y2="366"/><line x1="600" y1="34" x2="600" y2="366"/>
<line x1="700" y1="34" x2="700" y2="366"/><line x1="800" y1="34" x2="800" y2="366"/>
</g>
<g fill="#4a483d" font-size="10" text-anchor="middle">
<text x="200" y="384">0</text><text x="400" y="384">4</text><text x="600" y="384">8</text><text x="800" y="384">12</text>
</g>
<g font-size="11">
<g transform="translate(0,42)"><text x="190" y="12" fill="#bdb9a6" text-anchor="end">集成与被集成</text><rect x="200" y="3" width="100" height="14" fill="#4a483d"/><rect x="300" y="3" width="450" height="14" fill="#d4843a"/><text x="762" y="14" fill="#8a8675" font-size="10">2 + 9</text></g>
<g transform="translate(0,67)"><text x="190" y="12" fill="#bdb9a6" text-anchor="end">安全</text><rect x="200" y="3" width="100" height="14" fill="#4a483d"/><rect x="300" y="3" width="250" height="14" fill="#d4843a"/><text x="562" y="14" fill="#8a8675" font-size="10">2 + 5</text></g>
<g transform="translate(0,92)"><text x="190" y="12" fill="#bdb9a6" text-anchor="end">开发者体验</text><rect x="200" y="3" width="100" height="14" fill="#4a483d"/><rect x="300" y="3" width="200" height="14" fill="#d4843a"/><text x="512" y="14" fill="#8a8675" font-size="10">2 + 4</text></g>
<g transform="translate(0,117)"><text x="190" y="12" fill="#bdb9a6" text-anchor="end">部署与运维</text><rect x="200" y="3" width="100" height="14" fill="#4a483d"/><rect x="300" y="3" width="300" height="14" fill="#d4843a"/><text x="612" y="14" fill="#8a8675" font-size="10">2 + 6</text></g>
<g transform="translate(0,142)"><text x="190" y="12" fill="#d4843a" text-anchor="end" font-weight="700">版本控制</text><rect x="200" y="3" width="350" height="14" fill="#d4843a"/><text x="562" y="14" fill="#d4843a" font-size="10" font-weight="700">0 + 7 整类全新</text></g>
<g transform="translate(0,167)"><text x="190" y="12" fill="#bdb9a6" text-anchor="end">编辑器集成</text><rect x="200" y="3" width="100" height="14" fill="#4a483d"/><rect x="300" y="3" width="150" height="14" fill="#d4843a"/><text x="462" y="14" fill="#8a8675" font-size="10">2 + 3</text></g>
<g transform="translate(0,192)"><text x="190" y="12" fill="#d4843a" text-anchor="end" font-weight="700">界面形态</text><rect x="200" y="3" width="250" height="14" fill="#d4843a"/><text x="462" y="14" fill="#d4843a" font-size="10" font-weight="700">0 + 5 整类全新</text></g>
<g transform="translate(0,217)"><text x="190" y="12" fill="#bdb9a6" text-anchor="end">会话与历史</text><rect x="200" y="3" width="50" height="14" fill="#4a483d"/><rect x="250" y="3" width="200" height="14" fill="#d4843a"/><text x="462" y="14" fill="#8a8675" font-size="10">1 + 4</text></g>
<g transform="translate(0,242)"><text x="190" y="12" fill="#d4843a" text-anchor="end" font-weight="700">多 agent</text><rect x="200" y="3" width="300" height="14" fill="#d4843a"/><text x="512" y="14" fill="#d4843a" font-size="10" font-weight="700">0 + 6 整类全新</text></g>
<g transform="translate(0,267)"><text x="190" y="12" fill="#d4843a" text-anchor="end" font-weight="700">代码理解</text><rect x="200" y="3" width="200" height="14" fill="#d4843a"/><text x="412" y="14" fill="#d4843a" font-size="10" font-weight="700">0 + 4 此前未列出</text></g>
<g transform="translate(0,292)"><text x="190" y="12" fill="#bdb9a6" text-anchor="end">任务与规划</text><rect x="200" y="3" width="50" height="14" fill="#4a483d"/><rect x="250" y="3" width="250" height="14" fill="#d4843a"/><text x="512" y="14" fill="#8a8675" font-size="10">1 + 5</text></g>
<g transform="translate(0,317)"><text x="190" y="12" fill="#bdb9a6" text-anchor="end">扩展</text><rect x="200" y="3" width="100" height="14" fill="#4a483d"/><rect x="300" y="3" width="150" height="14" fill="#d4843a"/><text x="462" y="14" fill="#8a8675" font-size="10">2 + 3</text></g>
<g transform="translate(0,342)"><text x="190" y="12" fill="#bdb9a6" text-anchor="end">记忆与知识</text><rect x="200" y="3" width="50" height="14" fill="#4a483d"/><rect x="250" y="3" width="150" height="14" fill="#d4843a"/><text x="412" y="14" fill="#8a8675" font-size="10">1 + 3</text></g>
</g>
</svg>
</div>
<div class="card legend">
<b>如何解释这张图</b>:版本控制、界面形态、多 agent 和代码理解的当前候选项均未出现在前几轮差异清单中,说明只按既定机制维度组织材料会遗漏用户功能。这个结果支持保留两种审计视角,但不能证明 69 项都重要,也不能据此确定实现优先级。
</div>
<!-- ══════════════════════════ LAYER 3 ══════════════════════════ -->
<h2 id="ours"><span class="num">03</span>当前仅 OpenProgram 列确认的 6 项<span class="ly ly1">快照差异</span></h2>
<p class="lead">筛选条件是 OpenProgram 不是 <code>·</code>、其余 12 列均为 <code>·</code>。结论只适用于第五节列出的版本和证据范围;“未确认”不能支持绝对唯一性声明。</p>
<div class="tbl">
<table class="wide">
<tr><th>功能</th><th>已确认实现</th><th>其他快照中的相近机制</th><th>依据</th></tr>
<tr class="us">
<td class="name">函数调用树写进<br>同一张会话图</td>
<td><code>@agentic_function</code> 执行期间,每层函数调用都记录为会话 DAG 上的 code 节点,并与用户消息、模型消息和工具结果使用相同的 caller 与 predecessor 边。</td>
<td>本轮未在其他快照中确认等价实现。<b>codex code mode</b> 是模型生成 JavaScript 调用工具且默认关闭;<b>buddy ultracode</b> 生成并行编排脚本;<b>opencode</b> 与 <b>pi-mono</b> 记录工具调用历史,但本轮未确认它们把嵌套函数执行层级写入同一会话 DAG。</td>
<td class="srcin">agentic_programming/function.py · store/session/session_node_writer.py · context/nodes.py</td>
</tr>
<tr class="us">
<td class="name">会话本体<br>存成 git 仓库</td>
<td>每个会话对应一个 git 仓库,以追加方式写入,不维护可变的当前状态镜像文件;分支由 head 指针表示。</td>
<td>本轮未在其他快照中确认等价实现。已检查对象主要使用 JSONL 或 SQLite 保存会话;多家另用 git 保存项目文件快照,但本轮没有确认其将对话本体作为 git 仓库内容保存。</td>
<td class="srcin">store/session/git_session.py · store/session/session_store.py</td>
</tr>
<tr class="us">
<td class="name">多条分支<br>N 路合并成一条</td>
<td>可为多条并行分支指定同一个 base,并通过 <code>subagent merge</code> 或网页 <code>/merge</code> 合并为一条分支。</td>
<td>本轮未在其他快照中确认 N 路会话分支合并。opencode 和 codex 可创建新会话或 thread;pi-mono 的 <code>/tree</code> 可把放弃分支摘要注入当前位置,但语义不同。</td>
<td class="srcin">agent/internals/_merge.py</td>
</tr>
<tr class="us">
<td class="name">按剩余消息预算<br>限制子 agent 可用工具</td>
<td>派生子 agent 时,根据剩余消息预算确定可用工具集合,而不是使用固定白名单。</td>
<td>其他对象使用不同条件限制可用工具:<b>claude</b> 根据 agentDepth 决定是否提供派生工具,<b>buddy</b> 使用每个 agent 的工具白名单,<b>opencode</b> 使用 <code>permission.task</code> 的 glob 规则。</td>
<td class="srcin">agent/internals/_model_tools.py · tests/unit/agent/test_spawn_caller_invariant.py</td>
</tr>
<tr class="us">
<td class="name">升级前隔离<br>冷启动探针</td>
<td>新代码先以独立 profile 在临时端口启动,轮询 <code>/healthz</code> 并运行 doctor 检查;通过后才重启现有实例。重启后的版本验证失败会输出手工回退命令,<b>当前没有自动回滚</b>。</td>
<td>本轮未在其他快照中确认重启前的隔离冷启动探测。已检查的参考实现主要在下载或替换后重启。</td>
<td class="srcin">cli/commands/upgrade.py::_cold_start_probe · run_upgrade</td>
</tr>
<tr class="us">
<td class="name">无人值守时从可用工具中<br>移除提问工具</td>
<td>每个会话通过一个开关控制 agent 是否可以请求用户输入。默认无人值守时,策略层从可用工具集合中移除 <code>ask_user_question</code>,因此任务不会进入等待用户回答的状态。</td>
<td>本轮未在其他快照中确认按会话从工具解析结果中移除提问工具。weclaw 自动处理 ACP 权限请求,hermes 对审批设置超时,opencode 提供跳过权限检查的运行参数,但这些不是同一机制。</td>
<td class="srcin">agent/attended.py</td>
</tr>
</table>
</div>
<div class="note blue">
<b>六项的共同范围</b>。前三项涉及会话 DAG、git 持久化和分支合并;后三项涉及协作预算、升级前验证和无人值守工具策略。它们是当前快照中的机制差异,不是对所有公开或未公开版本的唯一性证明,也不能替代对兼容性、故障恢复和用户价值的单独验收。
</div>
<!-- ══════════════════════════ LAYER 4 ══════════════════════════ -->
<h2 id="plan"><span class="num">04</span>设计参考顺序<span class="ly ly3">暂定</span></h2>
<p class="lead">以下六批用于后续框架设计讨论,不是已批准的实现计划。排序依据是不可逆风险、前置依赖、协议稳定性和验收可定义程度;当前没有使用频率统计和可靠工程量估算。</p>
<div class="tbl">
<table class="wide">
<tr><th>批次</th><th>候选范围</th><th>当前基础与依赖</th><th>排序依据与最低验收条件</th></tr>
<tr>
<td class="name">一</td>
<td><b>不可逆操作与凭据</b>:补齐可恢复删除的剩余执行路径;外部命令取密钥已落地为 credential_process(argv 无 shell、可配超时、结果缓存、helper stderr 脱敏)。</td>
<td><code>agent/internals/_approval.py</code> 已确认显式 deny 先于 bypass 生效。当前工作树为带 session/turn 上下文的本地 agent 子进程提供 shell、Python 和 Node 常用删除 API 的回收目录、manifest 以及 <code>trash list/restore</code>;没有上下文的 cron/后台任务、Docker、SSH、绝对路径命令、直接 syscall 和禁用注入等路径不在覆盖范围内,因此该机制不是安全边界,列表也不是全量删除审计。</td>
<td class="y">先处理不可逆本地状态与密钥暴露风险。最低验收:明确覆盖范围内的删除均转入可恢复位置;恢复路径和分发产物有测试;补充路径不得弱化现有 sandbox 的 fail-closed 行为;密钥不写入普通配置或日志;外部命令有参数约束、超时和脱敏。</td>
</tr>
<tr>
<td class="name">二</td>
<td><b>确定性循环测试</b>:请求录制、默认脱敏和离线回放。</td>
<td>当前工作树已有测试专用 scripted provider,可经正常 provider 注册路径驱动文本、思考、工具调用、错误和多轮响应,并覆盖真实 <code>agent_loop</code> 工具结果回填;录制与回放已具备 <code>openprogram recordings</code> CLI 与 <code>record_replay.mode/file</code> 配置入口,回放严格离线不解析凭证。</td>
<td class="y">后续协议、会话和权限改动需要稳定回归基线。最低验收:录制默认脱敏;回放不访问网络;事件顺序和失败差异可定位;录制格式有版本约束。</td>
</tr>
<tr>
<td class="name">三</td>
<td><b>Git 工作流</b>:受审批的提交/推送/PR、diff 安全审查、从 PR 创建 worktree、按清单复制未跟踪文件。</td>
<td>已有 <code>worktree/manager.py</code>、shadow git、项目级 git 状态与补丁工具;当前工作树的 <code>/commit-message</code> 只读分析 staged 或 unstaged 变更,status 与完整模型输入分别限为 20,000 和 80,000 字符,并由无工具模型生成候选;commit-push-pr 已作为打包技能落地,提供不执行子进程的完整 dry-run,真实 <code>git push</code> 与 <code>gh pr create</code> 默认拒绝并要求配置或本轮用户明确授权。剩余条目为 diff 安全审查、从 PR 开 worktree和未跟踪文件同步。</td>
<td class="y">依赖较少且接近现有编码流程。最低验收:所有远端写入默认需要明确授权;支持 dry-run;不覆盖未提交改动;GitHub/GitLab 差异有适配测试;安全审查输出可追溯到具体 diff。</td>
</tr>
<tr>
<td class="name">四</td>
<td><b>外部控制协议</b>:ACP 服务端已落地,剩余为 MCP 服务端能力与权限映射、入站 webhook;客户端 SDK 等协议稳定后再决定。</td>
<td>已有 FastAPI 路由、WebSocket 动作、工具注册表、MCP 客户端,以及按 ACP v1 讲协议、复用 process_user_turn 与既有审批流的 <code>openprogram acp</code>;<code>/api/doctor</code>、MCP 列表与详情的当前响应结构已有后端契约测试。ACP 之外,测试固定的是现有内部调用约定,不等于认证、版本策略或面向第三方的兼容承诺。</td>
<td class="y">先确定协议与安全边界,避免多个客户端各自定义行为。最低验收:认证默认开启;工具权限、取消、进度和错误语义明确;外部客户端端到端测试通过;SDK 只封装已稳定协议。</td>
</tr>
<tr>
<td class="name">五</td>
<td><b>会话操作</b>:归档、临时旁支、运行中转向和跨渠道接管。</td>
<td>自动压缩以及 TUI <code>/compact</code>、<code>/context</code>、<code>/doctor</code> 已实现;<code>/mcp</code> 支持 list、show、restart、enable 和 disable,add、edit、remove 仍提示使用 shell CLI。现有 SessionStore、分支、渠道绑定和 doctor 检查可复用。</td>
<td class="p">这些功能会改变会话所有权和历史可见性,需要在协议层之后明确状态语义。最低验收:每个操作都有持久状态、取消/失败恢复和多界面一致性测试;接管必须校验身份与当前 owner。</td>
</tr>
<tr>
<td class="name">六</td>
<td><b>界面与诊断</b>:先补键盘和屏幕阅读器可用性,再评估快捷键重映射、Vim、代码感知的 <code>/init</code>、使用洞察和可分享诊断包。</td>
<td>Web 与 TUI 已有可持久化主题,Web 已提供 standalone PWA manifest 与安装图标,诊断已有 doctor 基础;当前 <code>/init</code> 同步创建三个通用模板,保留已有文件并分别报告 created/skipped,但不分析项目代码。键位仍需先确定跨界面配置模型。</td>
<td class="p">不阻塞核心协议,但无障碍属于基本验收要求。最低验收:键盘完成主要流程;屏幕阅读器有语义标签;设置可持久化且作用域明确;诊断包默认脱敏并在导出前显示文件清单。</td>
</tr>
</table>
</div>
<div class="note orange">
<b>当前不纳入顺序的两组</b>。编辑器内行内补全、行内对话、CodeLens 和状态栏动作要求长期维护原生 IDE 插件;若只需要让 IDE 调用 OpenProgram,<code>openprogram acp</code> 已覆盖该需求。企业策略、静默审计上报、信用点购买和组织级强制配置依赖多用户治理与商业计费场景,当前单人本机产品边界没有这些前提。若目标用户或部署方式变化,需要重新评估,而不是沿用本页结论。
</div>
<!-- ══════════════════════════ 取证 ══════════════════════════ -->
<h2 id="method"><span class="num">05</span>范围、证据与状态</h2>
<p class="lead">本页以静态审计为主:OpenProgram 的易过时结论复核了当前实现与测试,其他对象使用固定的本地源码、二进制或安装包快照。除明确写出的命令输出外,没有对每个对象执行完整端到端验收。</p>
<div class="tbl">
<table class="wide">
<tr><th>入口</th><th>审计内容</th><th>典型证据</th></tr>
<tr><td class="name">功能开关配置</td><td>用于确认结构化配置中声明的功能状态和门控阶段</td><td class="srcin">buddy product.json 的 productFeatures 74 项 · codex features/src/lib.rs 的 Stage 分级 · claude 约 70 个 tengu_ 灰度门</td></tr>
<tr><td class="name">命令清单</td><td>用于枚举用户可调用的斜杠命令、CLI 子命令和快捷键入口</td><td class="srcin">codex tui/src/slash_command.rs 51 个 · buddy slash-commands.md 42 个 · openclaw 约 55 个顶层 CLI 命令</td></tr>
<tr><td class="name">工具清单</td><td>用于确认模型在指定版本中可调用的工具集合</td><td class="srcin">buddy product.json tools[] 47 个 · hermes 约 82 个分 32 个 toolset · pi-mono 7 个其中 3 个默认关</td></tr>
<tr><td class="name">出厂 agent 定义</td><td>用于确认预置 agent 及其工具白名单</td><td class="srcin">buddy agents[] 16 个 · claude Explore / Plan / claude-code-guide / verification · gm内 codebase_investigator</td></tr>
<tr><td class="name">README 与帮助文本</td><td>用于确认文档声明的用户可见功能;未经实现核验时只作为二级证据</td><td class="srcin">opencode 35 个文档页 · hermes 48 个功能页 · openclaw 约 350 个文档文件</td></tr>
<tr><td class="name">界面入口</td><td>用于确认菜单、面板、设置分类和扩展贡献点中的可达入口</td><td class="srcin">buddy dist/web-ui/manifest.webmanifest 与 sandbox_proxy.html · hermes 面板插件 SDK</td></tr>
</table>
</div>
<div class="note">
<b>证据强度</b>。一级证据是当前实现、测试和实际命令输出;二级证据是结构化配置、命令帮助和版本对应文档;三级证据是目录或文件名线索。表格中的状态是“在本快照中确认到什么”,不是“理论上是否可能存在”。当证据冲突时以当前可执行版本和实现为准;只找到设计文档而没有实现时,OpenProgram 列不记为已确认。
</div>
<h3>各家取的是哪个版本</h3>
<div class="tbl">
<table class="wide">
<tr><th>对象</th><th>取证来源</th><th>注意</th></tr>
<tr><td class="name">OpenProgram</td><td><code>integrated candidate@33dd7d2c</code>;JSON Schema 行另用 <code>2fb471b3</code>;Runtime URL SSRF 行另用 <code>be5eaa3c</code></td><td>通用能力按 integrated candidate 复核(2026-08-13)。本轮新增实现证据包括队列与 WebSocket 生命周期、session index/merged_heads 一致性、DAG 持久化观测、结构化输出重试总预算、provider 诊断、record/replay 安全加固、credential_process stderr 脱敏、SessionStore 锁范围、commitment/heartbeat 并发、完整 credential-file hardening 与 resource-governance 集成修复。JSON Schema structured output 与 Runtime URL SSRF 分别按对应实现、复审和集成证据复核。既有证据仍包括 commit-push-pr、recordings CLI、backup、同 provider 失败切换、每会话资源限额、TUI 命令、scripted provider、<code>trash list/restore</code>、运行中发消息排队、owner/paired 权限、默认沙箱、ACP 服务端和三个 LSP 工具。文档改动本身不作为功能证据。</td></tr>
<tr><td class="name">claude-code</td><td class="p">本机 CLI <code>2.1.226</code>;<code>references/claude-code-leaked@a371abbe75ff</code> 仅作补充</td><td>二进制与参考源码冲突时以本机二进制为准;只在内部构建出现且本机不可达的功能不计入</td></tr>
<tr><td class="name">codex</td><td class="p">本机 CLI <code>0.147.0</code>;源码 <code>references/codex-cli@57f42a81131c</code></td><td>UnderDevelopment 与 Experimental 条目使用 <code>○</code>,不按默认开启状态计为完整确认</td></tr>
<tr><td class="name">openclaw</td><td><code>references/openclaw@b1b28415c2eb</code></td><td rowspan="5">均为本地源码快照,不声明为项目最新发布版;文档声明没有统一转换成端到端运行验证</td></tr>
<tr><td class="name">opencode</td><td><code>references/opencode@8e2d422ffe56</code></td></tr>
<tr><td class="name">hermes</td><td><code>references/hermes-agent@d952b377aa3d</code></td></tr>
<tr><td class="name">pi-mono</td><td><code>references/pi-mono@3eb002766fff</code></td></tr>
<tr><td class="name">weclaw</td><td><code>references/weclaw@10711d0c6b7e</code></td></tr>
<tr><td class="name">pi-ai</td><td class="n">协议参考源码,不是产品</td><td>十个文件,共 4,493 行。README 声明该目录不参与编译或运行时导入;<code>src/utils/oauth/index.ts</code> re-export 的三个文件未出现在该快照中。因此此列只作为协议源码记录,不用于产品功能判断</td></tr>
<tr><td class="name">国产四家</td><td>本机 npm 包:<code>claude-internal 1.1.9 / claude 2.1.154</code>、<code>Codex-internal 0.0.8</code>、<code>gemini-internal 1.9.0</code>、<code>codebuddy 2.109.3</code></td><td>cc内 与 cx内 是上游 CLI 的启动器包装,不能视为独立样本;gm内 复用了大量上游内容;buddy 为独立实现</td></tr>
<tr><td class="name">Trae</td><td class="n">未获取到实现</td><td>本机未安装,且未取得可核验的实现或版本快照,因此不纳入矩阵;参考列总数仍为十二个</td></tr>
</table>
</div>
<h3>本页的实现状态</h3>
<div class="tbl">
<table>
<tr><th>条目</th><th>状态</th></tr>
<tr><td>功能矩阵、84.5 分、67 个候选差异、6 个快照差异</td><td class="y">基于上述基线提交;JSON Schema structured output 与 Runtime URL SSRF 分别以 <code>2fb471b3</code> 和 <code>be5eaa3c</code> 的实现、复审及集成证据复核;外部对象没有做全量运行验收</td></tr>
<tr><td>第四节的六个批次</td><td class="n">设计参考,未表示已实现或已批准;实施前需重新核对现状并单独估算</td></tr>
<tr><td>OpenProgram 列的 <code>◐</code></td><td class="p">只在部分界面或部分输入路径确认;具体限制写在对应依据中</td></tr>
<tr><td>分数、类别比例和候选计数</td><td class="p">由矩阵状态机械计算;不附带质量权重或重要性权重</td></tr>
</table>
</div>
<div class="note">
<b>相关文档</b>。<a href="framework-comparison.html">framework-comparison</a> 按设计维度和机制对标同样这十二个参考对象。<a href="framework-overview.html">framework-overview</a> 说明 OpenProgram 单次对话的内部执行过程。子系统级对照分别见:沙箱 <a href="runtime/sandbox.html">runtime/sandbox</a>,agent 协作 <a href="runtime/agent-collab-comparison.html">agent-collab-comparison</a>,长期记忆 <a href="memory/memory-comparison.html">memory-comparison</a> 与 <a href="memory/memory-adoption.html">memory-adoption</a>,多人会话身份 <a href="memory/speaker-identity.html">speaker-identity</a>,聊天附件 <a href="ui/chat-attachments.html">chat-attachments</a>,上下文成分 <a href="context/comparison.html">context/comparison</a>,扩展准入 <a href="extension-gating/reference-comparison.html">extension-gating/reference-comparison</a>。
</div>
</div>
</body>
</html>