Agent:对照 Claude Code 修漂移:v7 这一轮优化合集
系列回顾:主循环 · 代码库工具 · REPL · 项目上下文 · Skills · 权限 + Write · MCP · Context Budget · Bash · compact · autocompact · Hooks · Memory · Interrupt · WebSearch/Fetch
react-agent-mini 前面几篇多在立柱子:主循环、工具、权限、MCP、compact、子代理……
v7 有一批 change 性质不同:对照 Claude Code,把已经有的能力修到「同款心智」——不是再发明一套,而是修漂移、补体验、堵协议坑。
这篇把这一轮收成一张地图,方便以后检索;细节仍以各专题文 / README 为准。
先说结论:这是「对齐」,不是「新引擎」
| 类型 | 例子 | 读者该怎么记 |
|---|---|---|
| 行为对齐 | Windows 用 Git Bash;cancel 三段态;权限 a 记住允许 | 和 CC 用起来像同一套习惯 |
| 默认策略对齐 | micro 默认不再 content-clear;Read 去重 stub | 少踩「和 CC 不一样」的坑 |
| 协议/顺序对齐 | Skill 必须先 tool_result 再注入正文 | 不对齐会直接 400 |
| 体验对齐 | /status、compact 反馈、MCP help/错误 | 黑盒变成可预期 |
合集覆盖的主要 change:
v7-cc-align-compact-read-init
v7-windows-bash-gitbash
v7-slash-init(入口;正文再对齐 OLD_INIT)
v7-cancel-semantics
v7-permission-rules
v7-compact-ux
v7-mcp-ux
v7-fix-skill-tool-result-order
(WebSearch/Fetch、interrupt cascade 也是对齐方向,已有专文,文末只点名。)
1. Compact:默认别再清旧 tool_result
对照 CC 时发现:legacy 出站 content-clear 路径在上游已拿掉,压力交给单条截断、保尾和摘要。mini 若仍默认把旧 Read/Bash 结果换成:
[Old tool result content cleared]
就会和 CC 会话形态分叉,还容易逼模型反复重读。
现在:
- 默认:microcompact 不再 content-clear
- 逃生口:
COMPACT_MICRO_CONTENT_CLEAR=1或选项microContentClear
出站仍靠:budget 截断 →(可选 clear)→ 重估保尾 → autocompact。
2. Read:同文件未改,别再灌全文
长会话里模型常「再 Read 一遍刚读过的文件」,上下文被同一份正文灌爆。CC 用 readFileState + FILE_UNCHANGED_STUB。
mini 对齐后:
| 条件 | 行为 |
|---|---|
| 同路径 + 同 offset/limit + mtime 未变 + 上次来自 Read | 返回短 stub,提示看更早的 tool_result |
| 分段变了 / 文件被 Edit·Write 改过 | 正常重读并更新 state |
这是工具层去重,不改主循环。也解释了 Edit/Write 必须把 fromRead 语义弄对,否则会误 stub。
3. /init:正文跟 OLD_INIT,再加宿主约束
/init 本身是「slash → 注入引导 → runTurn」;对齐的第二刀是引导词:
- 正文结构跟 CC
OLD_INIT_PROMPT(目标文件换成AGENTS.md/CLAUDE.md) - 不做 NEW_INIT(AskUserQuestion / 访谈 UI)
- 文末 host note:用读配置发现测试命令,禁止在 init 里跑全量测试 / 长 typecheck(REPL 下每次 Bash 都要确认)
目标文件策略不变:有 CLAUDE.md 就改它,否则默认 AGENTS.md。
4. Windows Bash:Git Bash,不是 cmd
模型(和 CC)默认吐 Unix 语法:ls、&&、/dev/null。Windows 若仍 cmd.exe,大量「命令不认识」+ OEM 乱码。
现在:
- win32 上 spawn Git Bash(
bash.exe+-c) - 解析:
CLAUDE_CODE_GIT_BASH_PATH→ bash 形SHELL→ 常见 Git 路径 / 从git.exe推断 - 找不到就明确
isError,不静默退回 cmd - 工具描述写明:全平台按 Unix/bash 写命令
杀进程树仍可走 taskkill;变的是解释器,不是权限模型。
5. Cancel:收成 idle / running / cleanup
interrupt 接线之后,入口仍散:Ctrl+C、权限 deny、流里 AbortError、收尾再按一次……v7-cancel-semantics 把语义钉死:
| 状态 | 第一次 Ctrl+C | 第二次(窗口内 / 仍在收尾) |
|---|---|---|
| running | abort 当前轮,会话可继续 | — |
| cleanup(已 abort 还在收尾) | — | 强制退出 |
| idle | 不动作 | 退出 REPL |
权限 deny 与流中 AbortError 一样落到 { reason: 'aborted' },配对规则不变。
这不是新 Abort API,是把「和 CC 一样的可预期取消」写成状态机。
6. 权限:y 一次,a 本会话记住
CC 有 always-allow;mini 长会话若每次 Write 都 y/N,会被打断烦死。
REPL 现在是 [y/a/N]:
| 键 | 含义 |
|---|---|
y | 允许这一次 |
a | 会话内始终允许(工具名 + 可选路径) |
N | 拒绝(并按既有语义 abort 本轮) |
规则在 SessionPermissionRules:进程内存,不跨重启。headless 仍默认拒写,靠 ALLOW_WRITE=1 或规则命中放行。
不做:Ink 弹窗、企业策略引擎、落盘永久策略文件(可后续)。
7. Compact UX:压了什么,要看得见
策略柱子早有了,但用户侧仍偏黑盒。v7-compact-ux 对齐「可预期」:
/compact与 autocompact:有实质压缩时反馈前后占用(ctx ~NN%)- 新增
/status:随时看当前上下文估计(与回合后 ctx 行同源) - 文档写清开关:
COMPACT/AUTOCOMPACT/COMPACT_MICRO_CONTENT_CLEAR等
不重做完整 CC compact 策略树——只让已有管道可读。
8. MCP UX:列得出、错得懂
stdio MCP 骨架在;缺口是发现性与错误可读性。v7-mcp-ux:
/help/ MCP 列表更清楚- prompt / resource 失败文案统一、可读
- 合并进会话的工具表更可观测
仍不做 HTTP/SSE MCP、marketplace、OAuth 大流——对齐的是「会话里真正好用」,不是传输面扩容。
9. Skill 顺序:先 tool_result,再注入正文
这是典型「不对齐就炸」的坑。
OpenAI 兼容 API 要求:带 tool_calls 的 assistant 后面必须紧跟对应 role:tool。
若编排层把 Skill 正文(普通 user 文本)插在 tool_result 之前,下一轮直接 400,会话污染后怎么输入都挂。
对齐 CC 后:
assistant(tool_use: Skill)
→ tool_result(短确认)
→ 再注入 Skill 正文(字段名仍叫 prependMessages,语义是「附加注入」)
已脏掉的会话需要 /clear 或重启 REPL。字段名历史遗留,顺序才是契约。
一张总图
对照 Claude Code
│
├─ 默认策略 micro 默认不 clear · Read 去重 stub
├─ 运行时外壳 Git Bash · cancel 三段态 · y/a/N 规则
├─ 可观测 /status · compact 反馈 · MCP help/错误
├─ 引导入口 /init ≈ OLD_INIT + host note
└─ 硬协议 Skill:tool_result 先于注入正文
旁路已有专文、合集只点名:
刻意仍没对齐的(非目标)
| 未做 | 为什么 |
|---|---|
| Ink UI / Escape / rewind | readline 子集够用 |
| NEW_INIT 访谈、Plan Mode | 另开大刀 |
| 持久化企业权限策略 | 先会话内存 |
| time-based / cached microcompact | 复杂度换收益不值 |
| HTTP/SSE MCP、marketplace | 保持 stdio 边界 |
| 完整 CC compact 策略树 | UX 可观测优先于重写策略 |
对齐原则可以记成:
同一心智、同一硬契约;UI 与重型产品面可以瘦。
你可以从这里带走什么?
- v7 这一波很多是「修漂移」——对照 CC 比空想新柱子更值钱。
- 默认策略要对齐——content-clear、Read 去重会改变长会话味道。
- 取消与权限是日常肌肉记忆——三段态 +
a记住允许。 - 协议顺序没有商量余地——Skill 必须先
tool_result。 - 体验对齐可以很薄——
/status、可读错误,不必重做整棵策略树。
仓库与相关文档
- GitHub:https://github.com/jimchou-h/react-agent-mini
- OpenSpec(本轮):
v7-cc-align-compact-read-init·v7-windows-bash-gitbash·v7-cancel-semantics·v7-permission-rules·v7-compact-ux·v7-mcp-ux·v7-fix-skill-tool-result-order - 旁路专文:Interrupt · Web
- 术语:
src/tools/CONTEXT.md·src/permissions/CONTEXT.md·src/services/compact/CONTEXT.md
欢迎 Star、Issue 和 PR。
本文汇总 react-agent-mini v7 一批「对照 Claude Code 的优化」:修默认策略、对齐运行时习惯、补可观测性,并堵住 Skill 编排顺序这类硬协议坑。
更多推荐
所有评论(0)