从Harness架构到Token经济学的探索
本文基于真实工程实践,结合 Harness Engineering 领域的学术论文,分享 AI 辅助编程的架构思考、工程落地与 Token 成本优化。
01
你有没有遇到过这种情况——
花半小时纠正 AI 的一个错误,在 Prompt 里写清楚「不要这样做」,第二天开了新会话,AI 毫不犹豫地……又犯了同样的错
换了个更贵的模型,效果并没有你期望的那么好
同一套代码,别人的 AI 跑得很顺,你接进来却各种翻车
2025 年,LangChain 发布了一组实验数据:
给同一个大语言模型换上一套更精巧的 Harness 架构,它在 TerminalBench 2.0(AI 编程能力权威榜单)的通过率,从 52.8% 直接拉升到 66.5%。 底层模型权重一个字节没改,单靠换壳,排名从 30 名开外飙进前 5。
这说明一件事:很多时候卡住你的,不是模型,是模型外面那层「壳」。
Harness(直译「挽具/线束」)是包裹在大模型外面的那套代码,它决定三件事:
模型能看到什么(存什么、取什么、怎么呈现)模型的行为边界在哪里(什么能做、什么不能做)模型如何知道自己做对了(验证、反馈、修正)
「The model contains the intelligence and the harness is the system that makes that intelligence useful.」 —— LangChain, The Anatomy of an Agent Harness, 2026.03
一个公式:Agent = Model + Harness
这个概念并不是一夜冒出来的,而是被一个个真实 Bug 逼出来的。
| ReAct 论文 | ||
| Reflexion 论文 | ||
| Tree of Thoughts | ||
| Anthropic: Effective Harnesses for Long-Running Agents | ||
| Mitchell Hashimoto 命名 Harness Engineering | ||
| OpenAI: Harness Engineering(Codex) | ||
| LangChain: Anatomy of an Agent Harness | ||
| Thoughtworks(martinfowler.com) | ||
| Meta-Harness |
Harness 不是玄学,它有扎实的理论基础。
① 反馈控制论(Cybernetics)— Wiener, 1948
Harness 的本质可以用控制论的「双环控制」来描述:
┌──────────────────────────────────────────────────────────────────┐│ Harness 双环控制结构 ││ ││ ┌─────────────────────────────────────────────────────────┐ ││ │ 前馈控制(开环) │ ││ │ │ ││ │ 设计时注入 ──► Rules / Skills ──► AI 推理上下文 │ ││ │ (先验知识) (约束边界) (行动之前就生效) │ ││ └─────────────────────────────────────────────────────────┘ ││ ││ ┌─────────────────────────────────────────────────────────┐ ││ │ 反馈控制(闭环) │ ││ │ │ ││ │ AI 行动 ──► 检测结果 ──► 偏差计算 ──► 阻止/纠正 │ ││ │ (Hooks) (质量阈值) (deny/ask) │ ││ └─────────────────────────────────────────────────────────┘ ││ ││ 工程映射:Rules(前馈)+ Hooks(反馈)= Harness 的双保险 │└──────────────────────────────────────────────────────────────────┘
数学基础:负反馈系统的稳定性定理(Nyquist, 1932)——只要反馈增益 < 1,系统趋于稳定。Hooks 的 deny 机制本质上是一个「增益截断器」。
② ReAct 循环(Thought-Action-Observation)
> 论文:ReAct: Synergizing Reasoning and Acting in Language Models,Yao et al., ICLR 2023
ReAct 的本质是一个推理与行动交替的循环:
Thought(思考)→ Action(工具调用)→ Observation(观察结果)→ Thought(下一轮)...每一次工具调用就是 ReAct 的一次迭代。而在项目的 Harness 中,这个循环的三阶段分别被 Rules 和 Hooks 接管:
| Thought | Rules | project-rules.md |
| Action | PreToolUse Hooks | settings.jsonguard-commands.sh、protect-files.sh 等,在行动前检查安全性 |
| Observation | PostToolUse Hooks | impact-analysis.sh |
以 settings.json 中的 Hook 配置为例:
// .codebuddy/settings.json — PreToolUse 阶段{"matcher": "Write|Edit","hooks": [{ "command": ".../protect-files.sh" }, // Action 前:敏感文件保护{ "command": ".../search-gate.js" }, // Action 前:首次写入提醒先搜索{ "command": ".../suggest-compact.js" } // Action 前:工具调用次数检查]}
ReAct + Harness 的关键洞察:没有 Harness 的 ReAct 就像没有刹车的车——它能跑,但不知道什么时候该停。Hooks 就是在 Action 阶段加的「刹车系统」。
③ Reflexion — 反思记忆机制
论文:Reflexion: Language Agents with Verbal Reinforcement Learning,Shinn et al., NeurIPS 2023
Reflexion 的核心是从失败中提取反思,写入长期记忆,供下次任务召回。 把流程从「AI 自动生成」变成了「工程师手工沉淀 + 自动注入」的工程化版本。
Reflexion 在 项目中的三层实现:
第一层:反思提取 → ai-coding-defense.md
原始论文中,AI 在任务失败后自动生成反思报告。我们从真实 Bug 中手工提炼规则:
<!-- .codebuddy/rules/ai-coding-defense.md(alwaysApply) -->## 8 条编码红线(来自真实 Bug)1. 方案切换必须清理残留 —— 切换后全文搜索旧关键词2. 通用控件保护 —— 改公共组件前先评估引用方3. 改动完整性 —— template/script/style 同步4. 场景全覆盖 —— 多端、多调用方、多层守卫5. 避免策略反复 —— 先了解全部约束再定方案6. 异步操作所有路径必须有终态 —— loading 必须重置7. Vue 响应式纯净性 —— computed/Pinia getter 禁止副作用8. 调试硬编码必须打标记并清理 —— [xxx-debug] / __DEBUG_*__
每一条都对应一个或一组真实踩过的坑。这就是 Reflexion 中「失败 → 反思」的人工版。
第二层:记忆持久化 → .codebuddy/memory/
# .codebuddy/memory/ 目录结构memory/├── MEMORY.md # 长期记忆(项目约定、技术决策等核心结论)├── 2026-06-09.md # 当日工作记录(每次完成实质性工作后追加)└── archive/ # 归档(30天以上的旧记录,不再注入)
memory 是 CodeBuddy 的内部记忆——单个 memory 文件本身不会被注入上下文、不消耗 token,它只是 AI 跨会话持续学习的存储介质。archive-old-memories.sh 负责把过期记录归档,保持目录整洁。
第三层:记忆召回 → alwaysApply: true + SessionStart Hook
// .codebuddy/settings.json"SessionStart": [{"matcher": "compact","hooks": [{"command": "echo '项目 关键约定(compact 后重新注入):1) pnpm 2) request.ts ...'"}]}]
/compact 会清空上下文,导致 AI「失忆」。SessionStart Hook 在 compact 触发后自动重新注入关键约定,这是 Reflexion 中「episodic memory 持久化」的工程实现。
对比总结:
ai-coding-defense.md | ||
memory/*.md | ||
archive-old-memories.sh | ||
settings.json |
④ 蒙特卡洛树搜索(MCTS)
相关论文:CodeTree (Li et al., 2023)、RethinkMCTS (Zhang et al., 2024)
MCTS 的核心是「不一条路走到黑」:生成多个候选方案 → 模拟评估 → 选择最优 → 必要时回溯。这在 Harness 工程中有三层映射。
映射一:dev 阶段2 = MCTS 的「展开 + 选择」
<!-- .codebuddy/skills/项目-dev/SKILL.md 阶段2 节选 -->## 阶段 2:代码设计1. 搜索项目中类似功能的现有实现2. 评估复用 vs 新建 → 优先复用3. 如果新建,出 2-3 个方案 → 列出每个的优缺点4. 用户确认方案后再进入阶段3
这和 MCTS 的 Expansion + Selection 完全对应:不是直接写代码,而是先出方案树,评估后再选。
映射二:Rules 分级体系 = MCTS 的「剪枝」
<!-- .codebuddy/rules/ 分级设计 -->L1 核心(alwaysApply):project-rules.md / ai-coding-defense.md→ 永久剪枝:AI 永远不会考虑「用 npm 而不是 pnpm」这种错误分支L2 场景(按需):atomic-step-commit / search-first / debug-residue→ 条件剪枝:只在特定场景下才生效,不浪费 token
Rules 分级本质上是对 AI 搜索空间的剪枝——L1 永久剪掉明显错误的分支,L2 按需剪掉不需要的路径。
映射三:suggest-compact 阈值调优 = MCTS 的「模拟评估参数调优」
// .codebuddy/hooks/suggest-compact.jsconst THRESHOLD = 35; // 从 50 调优到 35// 工具调用超过 35 次 → 建议 /compact
MCTS 中模拟次数(rollout count)决定了评估的准确度。suggest-compact 的阈值从 50→35,就是根据实际观察(AI 在 35 次后质量明显下降)对「何时该回溯(compact)」这个参数的调优。
映射四:impact-analysis.sh = MCTS 的「节点评估函数」
# .codebuddy/hooks/impact-analysis.sh# 改公共组件时,自动 grep 全仓库引用方# 输出:影响 N 个文件,M 个调用点# → 评估值 = 影响面大小,帮助决定是否继续展开这个分支
一句话总结:MCTS 教我们的不是「让 AI 更聪明」,而是「给 AI 设计一个能试错的机制」——出方案 → 评估 → 选最优 → compact 后重来。
⑤ 信息熵压缩
无 Harness 的搜索空间:N 个可能的操作,每步有 N 种选择 → 路径空间 = N!(阶乘爆炸)加上 Rules(约束)后:「禁止 10 类操作」+ 「必须按 5 步流程」→ 路径空间 ≈ k×N(线性)信息论解释:Rules = 先验知识注入 → H(行动|规则) << H(行动) → 搜索熵大幅下降这就是为什么「壳越精巧,模型表现越好」:不是模型变聪明了,是它需要搜索的空间被大幅压缩了。
02
以下所有内容均来自
.codebuddy/的真实配置,不是理想状态,是我们现在正在用的东西。
.codebuddy/ 由四层能力组成:
┌─────────────────────────────────────────────────────────────────┐│ CodeBuddy IDE Runtime │├─────────────────────────────────────────────────────────────────┤│ ││ Commands(入口) Skills(能力) Rules(约束) ││ /review-commit 项目-dev ai-coding-defense ││ /review-branch quick-iterate project-rules ││ /deploy-test figma-to-code search-first ││ proto-sync atomic-step-commit ││ git-commit-push debug-residue ││ ││ Hooks(自动兜底) ││ guard-commands / commit-quality / protect-files ││ config-protection / search-gate / suggest-compact ││ post-edit-accumulator / large-file-blocker / impact-analysis ││ stop-format-typecheck ││ │└─────────────────────────────────────────────────────────────────┘
四层的职责分工:
| Commands | /review-commit、/deploy-test) | ||
| Skills | |||
| Rules | |||
| Hooks |
Hooks 是 Harness「反馈控制」层最具体的落地,也是我们花时间最多的部分。
所有 Hook 都在 AI 生命周期的三个时机自动触发:
用户发出指令│▼Agent 决定调用工具(Write / Edit / Bash)│├──► PreToolUse Hooks(行动之前)│ ├── guard-commands.sh ─ 危险命令?→ deny 阻止│ ├── commit-quality.sh ─ 质量不过?→ deny 阻止│ ├── protect-files.sh ─ 敏感文件?→ deny 阻止│ ├── config-protection.sh─ 配置文件?→ ask 询问用户│ ├── search-gate.js ─ 首次写入业务目录?→ allow + 提醒│ └── suggest-compact.js ─ 调用超 35 次?→ allow + 提醒│▼ 全部放行后,工具执行│├──► PostToolUse Hooks(行动之后)│ ├── post-edit-accumulator.js ─ 累积编辑文件路径│ ├── large-file-blocker.sh ─ 文件 > 400 行?→ 提醒拆分│ ├── impact-analysis.sh ─ 改公共组件?→ 自动影响面分析│ └── post-commit-review.sh ─ commit ≥ 3 文件?→ 提醒 /review-commit│▼ Agent 停止时│└──► Stop Hook└── stop-format-typecheck.js ─ 批量 eslint --fix + 调试扫描
每个 Hook 解决的真实问题:
commit-quality.sh | ||
search-gate.js | ||
suggest-compact.js | /compact | |
impact-analysis.sh | ||
stop-format-typecheck.js | ||
config-protection.sh | ||
large-file-blocker.sh | ||
SessionStart compact |
Rules 对应控制论的「前馈控制」:在 AI 行动之前,就把约束注入到上下文中。
分级体系(避免把所有规则都 alwaysApply):
| L1 核心 | project-rules.md | ||
| L1 核心 | ai-coding-defense.md | ||
| L1 核心 | plan-cleanup.mdc | ||
| L2 场景 | atomic-step-commit.mdc | ||
| L2 场景 | search-first.md | ||
| L2 场景 | debug-residue.md |
ai-coding-defense.md 的 8 条编码红线(全来自项目真实 Bug):
方案切换必须清理残留 — 切换方案后全文搜索旧关键词(防止两套方案并存)
通用控件保护 — 改公共组件前先评估所有引用方影响面
改动完整性 — template/script/style 同步,
ref()vs 普通变量,导出与引用同步场景全覆盖 — 多端(PC/Mobile)、多调用方、多层守卫、tab 缓存
避免策略反复 — 先了解全部约束再定方案,确定后不轻易切换
异步操作所有路径必须有终态 — 所有退出路径(成功/失败/提前 return)都必须重置 loading
Vue 响应式纯净性 —
computed/Pinia getter 禁止副作用调试硬编码必须打标记并清理 — 统一格式:
[xxx-debug]、__DEBUG_*__、TODO(debug-only):
这 8 条规则的特殊之处:不是「建议」,是「工具会拦」。
commit-quality.sh在 git commit 前自动扫描[xxx-debug]__DEBUG_*__TODO(debug-only)标记,命中即拒绝提交。这就是 Reflexion 论文的工程版:历史 Bug → 提炼反思 → 写入「记忆」→ 每次对话注入 → AI 不再犯同类错误。
Skills 是领域能力包,把「怎么在项目里做一件事」的完整工作流封装起来。
Skills 决策树:
用户说了什么?├── 提到 Figma 链接 → figma-to-code├── 「更新 proto」「同步接口」 → proto-sync(disable-model-invocation)├── 完整需求 + 设计稿 + 多文件 → 项目-dev├── 简短修改指令(< 20 字) → quick-iterate├── 「提交」「推送」「commit」 → git-commit-push(disable-model-invocation)└── 不确定 → 不加载 Skill,按 rules 执行
| dev | |||
| quick-iterate | |||
| figma-to-code | |||
| proto-sync | |||
| git-commit-push |
dev 的 5 阶段工作流(对应 ReAct 的 Plan→Execute→Verify 循环):
阶段 1:需求理解 + Plan 创建→ 读 Figma/需求文档 → 拆解步骤 → 两轮自我优化(边界条件 + 测试矩阵)阶段 2:代码设计→ 读现有类似实现 → 确定方案(不新建轮子)→ 用户确认阶段 3:编码实现→ 按 Plan 分步 → 每步 lint/type-check → 每步提交阶段 4:验证测试→ 端到端验证 → 边界回归 → 再优化一轮阶段 5:沉淀→ 写 plan 实施记录 → 更新 memory → 更新 docs/dev/
这是 atomic-step-commit.mdc 的核心设计,也是我们避免「大 PR 噩梦」的关键。
核心原则:每步 = 最小可独立验证单元
错误做法(反模式):一口气改 10 个文件 → 统一提交 → 发现问题不知道哪步引入的正确做法:步骤 1:store 新增字段 → lint + type-check → commit feat(store): ...步骤 2:API 层封装 → lint + type-check → commit feat(api): ...步骤 3:组件消费 → lint + type-check → commit feat(component): ...最终:整体验证 + 再优化一轮 → 用户 review
三种 Review 模式(根据任务风险选择):
| A. 自行 review | ||
| B. 用户 review | ||
| C. 传统模式 |
03
| Claude | |||
| DeepSeek | |||
| GLM | |||
| Hy3 preview |
任务有多复杂?├── 3+ 文件联动 / Skill 加载 / 架构设计 → Claude│ (原因:需要大窗口承载 Skill ~11K + Rules ~15K + 多文件代码)├── 单文件修改 / 中等 bug / proto 同步 → DeepSeek / Hy3│ (原因:上下文需求小,性价比高,速度快)├── 批量操作 / 文案文档 / 零碎问答 → GLM│ (原因:不需要复杂推理,最省 token)└── 不确定 → Auto 或 DeepSeek
Claude(~25%) → 关键任务:新功能开发、代码审查、架构设计、上线前 reviewDeepSeek(~50%) → 日常主力:bug fix、样式调整、proto 同步、git 提交GLM(~15%) → 批量/轻量:改文案、问答、文档注释Hy3(~10%) → 尝鲜/备选:日常开发验证
小窗口模型 + dev Skill:Skill ~11K + Rules ~15K ≈ 26K,32K 窗口只剩 ~6K → 建议拆分任务,每次只执行 1 阶段,或改用 Claude
长文件(> 300 行)建议用 Claude,小窗口模型可能截断
多轮对话超过 5 轮深度建议切 Claude,小模型容易丢失早期上下文
流程型 Skill(proto-sync / git-commit-push)已设
disable-model-invocation: true,可用 DeepSeek/GLM 执行,不浪费大模型配额
04
先搞清楚一次对话的「账单」:
每次对话基础开销分解(项目,优化后):─────────────────────────────────────────────System Prompt(IDE 内置,不可控) ~5K tokens─────────────────────────────────────────────alwaysApply Rules├── project-rules.md(精简后) ~3.5K tokens├── ai-coding-defense.md ~1.5K tokens└── plan-cleanup.mdc ~800 tokens小计 ~5.8K tokens─────────────────────────────────────────────workspace_rules(IDE 自动注入) ~5K tokens(去重后)─────────────────────────────────────────────Memories(自动注入) ~500-1K tokens─────────────────────────────────────────────合计基础开销 ~15K tokens═════════════════════════════════════════════
Transformer 的 KV Cache 机制(理解成本的关键)
要真正理解 Token 成本,必须先理解 KV Cache。
什么是 KV Cache?
Transformer 的自注意力机制中,每个 token 在处理时需要与序列中所有之前的 token 计算注意力。对于序列中第 i 个 token,注意力计算为:
Attention(Q, K, V) = softmax(QK^T / √d_k) · V其中:Q = 当前 token 的 Query 向量K = 所有历史 token 的 Key 向量矩阵 ← 每次推理都要重新计算,代价极大V = 所有历史 token 的 Value 向量矩阵 ← 同上KV Cache:把已经计算过的 K/V 向量缓存起来,下次推理直接复用→ 前缀相同的请求,缓存命中 → 计算成本降至 ×0.1
KV Cache 在工程中的三层意义:
┌─────────────────────────────────────────────────────────────────┐│ KV Cache 工程全景 ││ ││ 1. 前缀缓存(Prefix Caching) ││ ───────────────────────────── ││ System Prompt + alwaysApply Rules(~15K tokens) ││ │ ││ ▼ 第一次请求:full compute ││ ▼ 后续请求:cache hit → ×0.1 成本 ││ ││ 结论:稳定的 Rules 文本 = 高命中率 = 实际成本远低于字面字数 ││ ││ 2. 多轮对话复用 ││ ────────────── ││ 同一会话多轮 → 相同前缀 KV 直接复用,不重新 prefill ││ 这是为什么「长对话」不如「长×单价」那么贵 ││ ││ 3. Agent 多轮工具调用 ││ ─────────────────── ││ ReAct 循环中,每次 Observation 追加到序列尾部 ││ 前面的 KV 已缓存 → 只需计算新增 token 的 KV ││ 智能体密集调用工具时,KV Cache 是性能的关键支撑 │└─────────────────────────────────────────────────────────────────┘
Harness 调度层的 KV 管理职责:
智能体多轮工具调用、长代码库上下文极度依赖高性能 KV Cache。Harness 调度层还要做:├── 多会话 KV 隔离│ 不同用户的会话 KV 不能共用(安全边界),│ 但同一用户的多轮对话要尽量复用(命中前缀缓存)│├── 过期上下文回收│ 超过窗口的 KV 及时释放(prevent memory leak),│ /compact 命令触发的就是这个机制的应用层接口│└── 前缀树管理(Radix Tree)相同前缀的请求共享 KV 存储,这是 alwaysApply Rules「一次计算,多次复用」的底层支撑
| -47% | |||
| -60% | |||
| -36% | |||
| -27% | |||
| +100% |
对于流程型 Skill(proto-sync、git-commit-push),新增了 disable-model-invocation: true 标记——这类 Skill 是纯脚本执行流程,加载后 AI 按步骤执行即可,不需要再次调用大模型推理,直接节省每步骤的推理 token。
根因分析(三类问题):
原始问题:~23.5K 基础开销中,有 ~8.5K 是「重复注入」或「不必要的 alwaysApply」① 重复注入(~6K)├── my-rule.mdc 内容 = workspace_rules「Homepage 项目规则」→ 注入两遍└── project-rules.md §4 内容 ≈ workspace_rules 各条目描述 → 逐字重复② 不必要的 alwaysApply(~4.3K)├── atomic-step-commit:只有 10% 的对话需要多步骤流程└── search-first:已有 search-gate.js hook 物理提醒,规则层面双重冗余③ 空白占位(~500)└── TODO 占位符、空的章节头、模板示范修复逻辑:消除重复 + 按需加载 + 清理空白 = 节省 ~8.5K tokens
Rules 分级最终状态
| L1 核心 | project-rules.md | ||
| L1 核心 | ai-coding-defense.md | ||
| L1 核心 | plan-cleanup.mdc | ||
| L2 场景 | atomic-step-commit.mdc | ||
| L2 场景 | search-first.md | ||
| L2 场景 | debug-residue.md | ||
| L2 场景 | my-rule.mdc |
| Rules | ||
| Skills | ||
| Memory | archive-old-memories.sh 定期执行 | |
| Plans |
@Editor.vue:63 insertBlock 无 catch | ||
@Banner.vue 按钮圆角改 12px | ||
需求:投票按钮 文件:ActivityCard.vue + useVoteStore | ||
/compact |
Token 估算公式(快速心算):
Token 数 ≈ 中文字符数 ÷ 1.5 + 英文字符数 ÷ 4快速估算 ≈ 文件字符数 ÷ 2
05
| Bug 修复 | @文件:行号 现象:X 预期:Y | @Editor.vue:63 点击按钮没反应,预期弹出侧栏 |
| 样式调整 | @文件 把 A 改成 B | @Banner.vue 圆角改成 12px |
| 新功能 | 需求:X 涉及文件:A,B 注意:Y | 需求:加投票按钮 涉及:ActivityCard.vue + useVoteStore 注意:SSR 兼容 |
| 代码审查 | /review-commit 关注:X | /review-commit 关注:类型安全和 SSR 兼容 |
| 设计稿还原 | 按 Figma 还原 {链接} | 按 Figma 还原 https://www.figma.com/design/ABC?node-id=123 |
| proto 同步 | /proto-sync | |
| 提交代码 | /git-commit-push |
/review-commit | |
/compact | |
@文件:行号 精确指定位置 | |
先搜后写 — 动手写代码前,先搜索项目中是否已有可复用实现(
search-gate.js会自动提醒)精准定位 — 用
@文件:行号而不是模糊描述单一职责 — 每次对话只做一件事
选对 Skill — 简单修改不加载 Skill,流程型任务用 disable-model-invocation Skill
及时 compact — 35 次工具调用后考虑
/compact(compact 后 SessionStart Hook 自动重注入约定)信任 Hooks — Hook 拦截意味着有风险,不要绕过
沉淀经验 — 重要决策写 plan,核心结论存 memory(30天自动归档)
误区 1:「换更好的模型就能解决问题」 LangChain 实验证明仅改 Harness 可提升 13 个百分点。先检查 Harness,再换模型。
误区 2:「Rules 越多越好」 Rules 有成本。只有「每次对话都必须遵守」的才值得 alwaysApply,其余一律按需加载。
误区 3:「Hook 很烦,直接 --no-verify 绕过」 Hook 拦截说明有潜在风险。先读拦截原因,修正后再提交。--no-verify 在 Code Review 时可见。
误区 4:「Memory 越详细越好」 Memory 每次都注入。只存核心结论,定期运行 archive-old-memories.sh 归档老记录。
误区 5:「compact 之后项目规范就丢了」 不会了。SessionStart Hook 会在 compact 触发后自动重新注入 7 条关键约定。
误区 6:「所有 Skill 都需要 AI 推理」 流程型 Skill(proto-sync/git-commit-push)设了 disable-model-invocation: true,加载后按固定步骤执行,不触发额外推理,可以用更省配额的模型跑。
# 查看所有 alwaysApply Rules 的大小grep -rl "alwaysApply: true" .codebuddy/rules/ | xargs wc -m# 查看 memory 总大小find .codebuddy/memory -name "*.md" -exec wc -m {} + | tail -1# 检查是否有新增的 alwaysApply 规则grep -l "alwaysApply: true" .codebuddy/rules/*.md .codebuddy/rules/*.mdc 2>/dev/null# 查看哪些 Skill 没有设置退出条件(exit condition)grep -rL "exit\|退出\|DONE\|complete" .codebuddy/skills/*/SKILL.md# 查看哪些 Skill 是流程型但未设 disable-model-invocationgrep -rL "disable-model-invocation" .codebuddy/skills/*/SKILL.md
判断标准:
alwaysApply Rules 总字符数控制在 20K 以内(约 10K tokens),超出就要做一次规则降级或精简
memory 文件超过 30 天的,运行
archive-old-memories.sh归档流程型 Skill(固定步骤执行)建议设
disable-model-invocation: true
学术论文
工程文章
项目文件(.codebuddy/)
README.md— AI 编程辅助体系总览ai-infra-analysis.md— Token 消耗深度分析(含优化前后对比)rules/ai-coding-defense.md— 8 条编码红线rules/atomic-step-commit.mdc— 原子化提交工作流hooks/README.md— Hooks 体系完整文档scripts/archive-old-memories.sh— memory 归档脚本scripts/impact-analysis.sh— 影响面分析脚本
感谢你读到这里,不如关注一下?👇