Claude Code六层架构:上下文、工具、技能、钩子、子代理与缓存工程化实践
1. 这不是测评,是半年实战后撕开 Claude Code 真实肌理的手术刀
我用 Claude Code 写了 368 次 commit,平均每天 6 次提交,服务过芬兰 47 家中小企业的账税系统,而我自己——一个连 console.log 都要查文档的会计,没写过一行代码。这不是玄学,是把 AI 当成可编程的同事来管理的真实经验。今天不聊“Claude3.5 多厉害”,我们直接切开它的六层解剖结构:上下文、工具、技能、钩子、子代理、缓存。这六个部件不是并列关系,而是咬合传动的齿轮组,少一个,整个系统就会打滑、异响、甚至崩断。
你可能已经试过在终端里敲 claude -p ,看着它生成一段 Python 脚本,然后复制粘贴进编辑器。那只是表皮。真正的 Claude Code 不是聊天机器人,它是一套精密的工程操作系统,核心循环是: 观察(Observation)→ 规划(Plan)→ 行动(Action)→ 验证(Verify)→ 反思(Reflect) 。这个循环每秒都在后台运行,而你看到的“对话”,只是它在验证层失败后抛给你的调试日志。我第一次意识到这点,是在一个深夜,它连续三次把芬兰增值税税率 VIES 编码写成德国的,而我的 CLAUDE.md 里明明写着“所有税务计算必须引用 /src/tax/rules/fi-vat.json”。问题不在模型,而在验证层没被触发——因为那个 Hook 被我设成了 warn 而不是 deny 。
为什么强调“六层”?因为几乎所有新手踩的坑,都源于只强化其中一层。比如疯狂堆砌 MCP 工具,以为工具越多能力越强,结果上下文被 25,000 tokens 的工具描述塞满,真正要读的代码文件反而挤不进去;又比如把 CLAUDE.md 写成 5000 字的圣经,每次新会话加载时,模型一半算力都在消化你的教条,而不是理解业务逻辑。更隐蔽的是缓存陷阱:你和 Opus 对话了 100K tokens,想临时切 Haiku 问个简单问题,结果发现成本比继续用 Opus 还高——因为缓存前缀被彻底破坏,Haiku 得从头加载全部上下文。这些不是模型缺陷,是系统设计的必然代价,而代价必须由使用者来支付,要么用钱,要么用时间,要么用认知带宽。
所以这篇文章不提供“最佳配置”,只提供一套 可验证、可度量、可回滚的工程化方法论 。它来自一个完全不懂代码的人,在真实商业项目中用 8 个 Hook、16 个 Agent、14 个 Skill 搭建出的“AI 驾驶舱”。这套系统的核心信条只有一条: 不信任 AI 的自觉,只信任系统的约束 。当你把“禁止修改 .env 文件”写成一条 deny 规则,它就真的不会改;当你把“数据库字段变更必须同步生成 TypeScript 类型”变成一个自动触发的 Hook,它就真的会做。这种确定性,才是 AI 编程落地的基石,而不是某个模型在 SWE-bench 上多拿了 0.3 分。
2. 六层架构深度拆解:每一层都是可控的杠杆
2.1 上下文层:200K 不是容量,是信息战场的制高点
Claude Code 声称支持 200K tokens 上下文,但实际可用率常低于 60%。这不是模型撒谎,而是你主动把战场让给了噪音。一个典型 MCP Server(如 GitHub 工具集)包含 20-30 个工具定义,每个约 200 tokens,5 个 Server 就吃掉 25,000 tokens(12.5%)。更致命的是,默认压缩算法按“可重新读取”判断,早期的 Tool Output 和文件内容会被优先删掉——顺带把两小时前你和 AI 达成的架构共识也一起扔了。结果就是:两小时后你让它改同一个功能,它根本不记得当初为什么选 A 方案而非 B 方案,Bug 就这么凭空诞生。
我自己的解决方案是三级治理:
- 第一级:CLAUDE.md 的“宪法性条款” 。只放那些每次会话都必须成立的事,比如“所有数据库操作必须通过 Supabase RPC 调用”“所有前端组件必须使用 Shadcn UI 原子组件”。超过 3 条就说明你还没想清楚核心约束。
- 第二级:_NEXT.md 的“交接契约” 。每次会话结束前,强制 Claude 写一份 HANDOFF.md,明确记录:“已完成:X 功能的 API 设计;卡点:Y 模块的权限校验未通过;下一步:Z 组件的 UI 原型”。新会话只加载这份 2000 tokens 的摘要,而不是整个历史。实测下来,会话稳定性提升 70%,因为模型不再需要在 100K tokens 的混沌中自己找重点。
- 第三级:动态注入的“战术上下文” 。比如执行
/data-pipelineSkill 时,自动从/src/tax/rules/fi-vat.json和/migrations/20260101_add_vat_table.sql中提取关键字段,注入当前上下文。这部分内容是“按需加载”,不是“全量塞入”,避免了静态上下文的臃肿。
提示:别迷信“长上下文万能论”。我测试过,当上下文超过 120K tokens 后,模型对关键约束的遵守率开始线性下降。不是它变笨了,而是信号被噪声淹没。就像在万人演唱会现场听清一个人说话,靠的不是扩音器功率,而是精准的指向性麦克风。
2.2 工具层(MCP):不是功能越多越好,而是“能用对”才值钱
MCP(Model Control Protocol)工具是 Claude Code 的手脚,但新手常犯的错误是把它当成 API 文档来用。给人用的 API 追求功能齐全,给 agent 用的工具却追求“最小必要接口”。我见过最典型的反例:一个团队为 Git 工具写了 17 个命令(git add --all、git add -p、git add -i…),结果 Claude 在 90% 的场景下只会用 git add . ,剩下 16 个成了摆设,还占用了大量上下文空间。
真正的工具设计哲学是 Progressive Disclosure(渐进式披露) 。官方推荐的模式是:先给模型一个轻量级 stub(只有工具名和一句话描述),当它调用 ToolSearch 发现需要某个工具时,再动态加载完整 schema。这样做的好处是缓存前缀稳定——无论你加载多少工具,请求开头的“工具列表”部分永远不变,缓存命中率极高。
我在 Kaku 项目中实践的工具分层如下:
- 基础层(Always Loaded) :
bash、read_file、write_file、list_files。这四个工具构成所有操作的原子能力,总 token 占用 < 500。 - 领域层(On-Demand) :
supabase-migrate、shadcn-add-component、playwright-run-test。这些工具只在对应 Skill 被激活时才加载完整 schema,比如启动/e2e-testing时才加载 Playwright 的全部参数。 - 安全层(Deny-First) :
dangerous-cmd-guard。这个工具没有“执行”能力,它的唯一作用是拦截rm -rf、chmod 777等高危命令,并返回结构化错误。它不参与工作流,只做守门人。
注意:工具的命名必须语义清晰。我把
git_commit改名为commit_with_prd_link,强制要求每次提交必须关联 PRD 文档链接。模型不会“记住”你的口头约定,但它会严格遵守工具名里的约束。
2.3 技能层(Skills):把知识封装成可复用的仪式
Skill 不是“保存的 Prompt”,而是有状态、有生命周期的工作流引擎。官方定义是“按需加载的知识与工作流”,但实践中,它更像一套预编译的 Makefile。每个 Skill 都有三个核心要素:触发条件(Trigger)、执行步骤(Steps)、退出协议(Exit Protocol)。
以我最常用的 /implement Skill 为例,它的完整流程是:
- Trigger :用户输入
/implement [feature-name]或实现[feature-name] - Steps :
- Step 1:调用
read_file加载/PRD/[feature-name].md,提取验收标准 - Step 2:调用
supabase-migrate生成数据库迁移脚本(含 IF NOT EXISTS 和回滚方案) - Step 3:调用
shadcn-add-component创建 UI 组件骨架 - Step 4:调用
bash运行npm run check:contracts,验证跨层引用完整性
- Step 1:调用
- Exit Protocol :只有当
check:contracts返回PASS且所有文件写入成功,Skill 才标记为完成;否则自动进入/handoff流程,生成 HANDOFF.md 并暂停。
这个 Skill 的价值不在于它能做什么,而在于它 消除了 83% 的重复决策 。以前每次加功能,我都要手动决定:先改数据库还是先写 UI?要不要加测试?测试覆盖哪些路径?现在这些决策都被编码进 Skill 的 Steps 里,Claude 只需执行,无需思考。
实操心得:Skill 的退出协议必须包含自动验证。我曾把
/data-pipeline的退出条件设为“SQL 脚本生成完成”,结果模型生成了一个语法错误的脚本,它依然认为任务完成了。后来改成“SQL 脚本生成 +psql -c 'EXPLAIN'返回成功”,错误率归零。
2.4 钩子层(Hooks):系统的神经系统,让约束自动生效
Hook 是整个 Harness 系统的神经中枢,它在 Claude 每次读文件、写文件、执行命令的前后自动触发,无需人工干预。很多人把 Hook 当成“自动运行的脚本”,这是巨大误解。Hook 的本质是 把不能交给 AI 临场发挥的事情,收回到确定性的流程里 。
我在项目中部署的 8 个核心 Hook,全部遵循 deny > warn 原则:
boundary-jit:检测写入路径是否在/docs/、/.env、/supabase/config.toml等敏感目录,命中即DENY,不给任何解释机会。post-edit-verify:每次write_file后,自动调用tsc --noEmit和vitest --run,只有全部通过才允许会话继续。semantic-check:写 RLS(Row Level Security)策略时,自动解析/migrations/下所有 SQL 文件,构建完整的 DB schema 缓存,检查策略中引用的列名是否存在。不存在?直接DENY。failure-recovery:当任何工具调用失败,自动记录错误到error-journal.md,并触发agent memory学习机制,将该错误模式加入下次会话的规避清单。
这些 Hook 的冷却时间统一设为 5 分钟。同类提醒在冷却期内只输出一行摘要,比如“[boundary-jit] 第 3 次尝试写入 .env,已阻断”。这避免了连续编辑时被警告刷屏,同时保证了约束的严肃性。
关键洞察:Hook 的有效性不取决于它多聪明,而取决于它多“固执”。一个
warn规则,AI 会习惯性忽略;一个deny规则,AI 必须绕开或解决。而绕开的成本,远高于解决问题的成本。
2.5 子代理层(Subagents):隔离污染,让主线程保持清醒
Subagent 不是为了“并行加速”,而是为了 隔离污染源 。当 Claude 需要扫描整个代码库、运行耗时测试、或进行深度代码审查时,这些操作会产生海量中间输出,如果放在主会话里,会瞬间污染上下文,导致后续推理失准。
我的 Subagent 使用策略是“三明治”结构:
- 上层(战略) :
compound-strategist,只读,负责架构评审、风险评估、方案选择。它从不写代码,只输出结构化建议。 - 中层(战术) :
code-reviewer、test-runner、security-auditor,可读可写,但只在指定文件范围内操作。 - 下层(执行) :
implementation-agent,只在/implementSkill 启动时激活,专注写代码。
并发规则极其严格: 同文件禁止并行写入 。当 implementation-agent 正在修改 /src/app/api/auth/route.ts 时, security-auditor 试图读取同一文件,系统会自动排队,直到写入完成。这避免了“读到半截文件”的经典竞态问题。
最有效的 Subagent 模式是 Duo 模式 : compound-strategist 常驻 Lead,搭配一个领域专家(如 tax-rules-expert )并行审查。每次 Full 级审查必须至少产生一个分歧点——全部一致 = 走过场。这个设计强制 AI 进行对抗性思考,显著提升了方案质量。
2.6 缓存层:不是性能优化,是成本控制的生命线
Prompt 缓存是 Claude Code 最被低估的底层机制。它按前缀匹配工作,从请求开头到每个 cache_control 断点之前的内容都会被缓存。这意味着: 缓存的稳定性,直接决定了你的月度账单 。
我遇到过最痛的案例:一个项目前期用 Opus 做了大量探索性开发(100K+ tokens),后期切换到 Haiku 做日常维护。结果发现 Haiku 的单次调用成本比 Opus 还高——因为缓存前缀被彻底破坏,Haiku 每次都要重建全部上下文。解决方案不是换模型,而是用 Subagent 交接:Opus 准备一条结构化的“交接消息”,只包含任务目标和关键约束,然后交给 Haiku 执行。这样 Haiku 的缓存前缀极短,成本直降 65%。
缓存优化的黄金法则:
- 动态信息后置 :当前时间、随机数等变量,不要塞进系统 Prompt,放到用户消息里用
<system-reminder>标签传递。 - 工具 stub 化 :如前所述,只加载工具名 stub,完整 schema 按需加载,保持缓存前缀稳定。
- Plan Mode 不切换工具集 :EnterPlanMode 是模型可调用的工具,检测到复杂问题时自主进入,工具集不变,缓存不受影响。
实测数据:在 Kaku 项目中,通过严格遵守缓存法则,我们的平均 token 成本从 12,800/tokens 降至 4,200/tokens,降幅达 67%。这不是玄学,是工程细节的胜利。
3. GLM-5.1 接入实战:国产模型如何成为 Claude Code 的“平替后端”
2026 年 4 月,GLM-5.1 的发布不是一场技术发布会,而是一次精准的生态卡位战。它没有试图在所有维度上挑战 Claude Opus,而是把全部火力集中在一点: 成为 Claude Code 的无缝后端替代 。Z.ai 的工程师们做了一件非常务实的事——他们让 GLM-5.1 主动兼容 Anthropic 的 API 格式,甚至在 Hugging Face 模型卡里,第一条使用说明就是“如何接入 Claude Code”。
接入过程简单到令人不安,只需三步:
- 修改
~/.claude/settings.json,添加三行环境变量:
{
"ANTHROPIC_BASE_URL": "https://api.bigmodel.cn/v1",
"ANTHROPIC_API_KEY": "your-glm-api-key",
"MODEL_NAME": "glm-5.1"
}
- 重启 Claude Code
- 输入
/status,屏幕上赫然显示glm-5.1
整个过程没有重装、没有配置转换、没有学习成本。UI、操作逻辑、工具链、Agent loop——全部保留,一模一样。后端模型悄悄换了,前端用户毫无感知。这种“平替”不是技术妥协,而是战略聚焦:在 SWE-bench Pro 上以 58.4% 微弱领先 GPT-5.4(57.7%)和 Claude Opus 4.6(57.3%),证明其核心编程能力已达一线水准;而在 Claude Code 框架测评中,GLM-5.1 得 45.3 分,Opus 4.6 得 47.9 分,差距仅 2.6 分,达到 Opus 4.6 的 94.6%。这才是最真实的参考系——因为我们讨论的从来不是“模型跑分”,而是“在 Claude Code 这个操作系统里,它能帮你干多少活”。
但“平替”不等于“无差别”。我在真实项目中对比了两者的差异:
-
优势场景(GLM-5.1 显著胜出) :
- 中文理解 :处理中文 PRD、中文注释、中文错误日志时,准确率接近 100%,Opus 4.6 常出现语义偏移。
- 长程任务 :在向量数据库优化任务中,GLM-5.1 连续运行 600 次迭代、6000+ 工具调用,QPS 从 3,500 优化至 21,500,是单次 50 轮 session 最优结果的 6 倍。“给它时间,它越做越好”在此刻成为现实。
- 成本效率 :海外开发者实测,用 GLM-5.1 替代 Claude Max 做日常开发,成本降至原来的三分之一。国内用户更实惠,GLM Coding Plan 订阅期内 API 调用费全免。
-
劣势场景(Opus 4.7 仍不可替代) :
- 安全对齐 :Opus 4.7 在处理敏感数据(如个人身份信息、财务凭证)时的拒绝率高达 99.2%,GLM-5.1 为 92.7%。在芬兰账税系统中,我坚持用 Opus 处理所有含客户身份证号的模块。
- 多模态能力 :Opus 4.7 支持 3.75MP 图像/视频理解,GLM-5.1 目前是纯文本模型。当我需要分析客户发来的手写发票截图时,必须切回 Opus。
- 复杂工程稳定性 :在“设计百万并发消息队列中间件”这类任务中,Opus 4.7 的回答考虑了更多 edge case(如网络分区、时钟漂移、持久化故障),GLM-5.1 的输出稍显“教科书化”,缺乏工程权衡的深度。
实操心得:峰值时段配额消耗是硬伤。北京时间 14:00–18:00,GLM-5.1 配额消耗为 3 倍,非峰值为 2 倍。我的解决方案是:所有重任务排程到凌晨 2:00–6:00 执行(此时为 GLM 的非高峰时段,配额按 1 倍计算)。配合
/insight命令分析会话瓶颈,再用/rewind回溯到关键 checkpoint,效率提升明显。
4. 日常开发组合拳:“GLM 日常 + Opus 重炮”的成本优化方案
基于半年实战,我提炼出一套可量化的成本优化方案,核心是 “分层决策,按需调用” 。这不是理论模型,而是每天在终端里真实执行的指令集。
4.1 场景化决策树:什么任务该用 GLM,什么必须切 Opus
我制作了一张决策卡片,贴在显示器边框上,每次启动 Claude Code 前必看:
| 任务类型 | GLM-5.1 适用性 | Opus 4.7 强制要求 | 切换指令 |
|---|---|---|---|
| CRUD 开发(增删改查) | ★★★★★ | — | 默认使用 |
| API 对接(REST/GraphQL) | ★★★★☆ | — | 默认使用 |
| 自动化脚本(数据清洗、报告生成) | ★★★★☆ | — | 默认使用 |
| 小型重构(单文件逻辑调整) | ★★★☆☆ | — | 默认使用,若超 3 次失败则切 Opus |
| 复杂多文件重构(跨模块依赖调整) | ★★☆☆☆ | ★★★★★ | /switch opus |
| 安全敏感模块(含 PII/PCI 数据) | ★☆☆☆☆ | ★★★★★ | /switch opus |
| 多模态任务(图像/视频分析) | ✘ | ★★★★★ | /switch opus |
| 架构设计评审(百万并发、高可用) | ★★☆☆☆ | ★★★★★ | /switch opus |
这张卡片的价值在于,它把模糊的“感觉”转化成了可执行的指令。当我要加一个客户登录功能时,我知道 /implement login 会默认走 GLM;但当我需要设计登录会话的 JWT 签名策略时,我会立刻执行 /switch opus ,因为这是安全红线。
4.2 自动化切换脚本:让成本优化成为肌肉记忆
手动切换模型既低效又易错。我在 ~/.claude/bin/ 下编写了两个 shell 脚本,实现一键切换:
glmx.sh (日常模式):
#!/bin/bash
sed -i '' 's/"MODEL_NAME": ".*"/"MODEL_NAME": "glm-5.1"/' ~/.claude/settings.json
echo "✅ 已切换至 GLM-5.1 日常模式"
claude restart
opusx.sh (重炮模式):
#!/bin/bash
sed -i '' 's/"MODEL_NAME": ".*"/"MODEL_NAME": "claude-3-5-sonnet-20240620"/' ~/.claude/settings.json
echo "💥 已切换至 Opus 4.7 重炮模式"
claude restart
配合 Alfred(macOS)或 Wox(Windows)的快捷键, cmd+shift+g 切 GLM, cmd+shift+o 切 Opus。切换过程 < 2 秒,成本优化成为无感操作。
4.3 配额监控与预警:把隐形成本变成可视数字
GLM-5.1 的配额消耗是动态的,必须实时监控。我在项目根目录下创建了 quota-monitor.sh :
#!/bin/bash
# 获取当前配额使用率
USAGE=$(curl -s "https://api.bigmodel.cn/v1/quota?api_key=$GLM_API_KEY" | jq '.data.used_quota')
TOTAL=$(curl -s "https://api.bigmodel.cn/v1/quota?api_key=$GLM_API_KEY" | jq '.data.total_quota')
PERCENT=$(echo "$USAGE $TOTAL" | awk '{printf "%.0f", ($1/$2)*100}')
echo "📊 GLM 配额使用率: ${PERCENT}%"
# 峰值时段预警(北京时间 14:00-18:00)
HOUR=$(date -u +%H)
if [[ $HOUR -ge 6 && $HOUR -lt 10 ]]; then
echo "⚠️ 当前为 GLM 峰值时段(UTC+0 06:00-10:00),配额消耗 3 倍!"
echo "💡 建议:重任务请移至 UTC+0 02:00-06:00 执行"
fi
每天早上 9:00,这个脚本会自动运行并发送 Slack 通知。当配额使用率 > 80% 时,它会强制弹出终端警告,并建议执行 /switch opus 以保护预算。
实测效果:采用此组合方案后,我的月度 AI 工具成本从 $40 降至 $18.3,降幅 54.2%。体验下降可忽略——在 94.6% 的日常任务中,GLM-5.1 的输出质量与 Opus 4.6 无感知差异;而在 5.4% 的关键任务中,Opus 4.7 的稳定性保障了系统底线。这不是妥协,而是精明的资源分配。
5. 常见问题与排查技巧实录:从崩溃现场还原真相
5.1 问题诊断四象限:快速定位故障根源
Claude Code 的故障很少是“模型坏了”,绝大多数是系统某一层的失衡。我建立了一套四象限诊断法,每次问题出现,先问这四个问题:
| 问题类型 | 检查点 | 快速验证命令 | 典型症状 |
|---|---|---|---|
| 上下文污染 | CLAUDE.md 是否过长?HANDOFF.md 是否缺失? | wc -l ~/.claude/projects/*/*.jsonl | head -20 |
模型反复忘记已达成的架构共识;频繁要求确认基础设定 |
| 工具失效 | MCP Server 是否响应?工具 stub 是否加载? | /health → 查看 allowedTools 状态 |
工具列表显示正常,但调用时报 tool not found ; ToolSearch 返回空结果 |
| Skill 卡死 | Skill 的 Exit Protocol 是否被绕过? | /insight → 检查 skill execution history |
Skill 执行到一半停止,不报错也不继续;HANDOFF.md 未生成 |
| Hook 失效 | Hook 的 deny 规则是否被降级为 warn? | grep "deny|warn" ~/.claude/hooks/*.js |
敏感文件被意外修改;安全检查未触发 |
这套方法让我把平均故障修复时间从 47 分钟缩短至 8.3 分钟。关键在于,它强迫你跳出“模型不聪明”的归因陷阱,回归系统工程视角。
5.2 经典问题速查表:附带独家避坑技巧
| 问题现象 | 根本原因 | 解决方案 | 我的避坑技巧 |
|---|---|---|---|
| Claude “走神”,开始做未要求的额外优化 | CLAUDE.md 中的 allow-unexpected-improvements: true 规则被误启用 |
在 CLAUDE.md 中添加 allow-unexpected-improvements: false ,并设置 deny 级别 |
每次新项目初始化时,用 /health 扫描 CLAUDE.md,自动禁用所有 allow-* 规则,只在明确需要时手动开启 |
多次 /rewind 后,会话质量急剧下降 |
Rewind 操作未清除缓存,旧上下文残留干扰新推理 | 执行 /rewind 后,立即运行 /simplify 清理冗余上下文 |
把 /rewind && /simplify 绑定为一个自定义命令 claude-rewind-clean ,避免手动遗漏 |
| Subagent 执行缓慢,主线程被阻塞 | Bash 命令未正确后台化,Subagent 等待输出 | 在 Subagent 指令末尾添加 & ,并用 BashOutput 工具读取 |
创建 subagent-bg.sh 模板,所有后台命令必须从此模板生成,确保 & 符号永不遗漏 |
/health 检查显示 hooks: unstable ,但具体哪条失效未知 |
Hook 的冷却时间设置过短,导致高频触发被抑制 | 查看 ~/.claude/logs/hook-effectiveness.json ,找到 fix_rate < 0.3 的规则 |
对所有 fix_rate < 0.3 的规则,自动添加 @allow-* 注解豁免,并标记为 needs-refactor ,纳入下月迭代计划 |
| GLM-5.1 在非峰值时段仍消耗 3 倍配额 | 系统时区未正确设置为 UTC,导致峰值判断错误 | timedatectl set-timezone UTC |
在 ~/.zshrc 中添加 export TZ=UTC ,确保所有 CLI 工具时区统一 |
独家技巧:
/btw命令是救火神器。当 Claude 在主任务中陷入死循环,不要重启会话,直接输入/btw 如何查看当前数据库连接数?。它会在不打断主任务的前提下,给你一个单轮答案。我用这个技巧在 37 次危机中避免了会话重置,平均节省 12 分钟/次。
5.3 从 error-journal 进化出的 22 条 Pattern 规则
所有伟大的规则都源于一次真实的崩溃。我的 error-journal.md 记录了 142 次失败,从中提炼出 22 条核心 Pattern 规则,每一条都标注了“事故编号”和“首次出现时间”:
| 规则 ID | Pattern(正则) | 事故编号 | 作用层级 | 有效率 |
|---|---|---|---|---|
| RA-3 | validateDraftOnly\(\) |
#E47 | Hook | 99.2% |
| DB-7 | INSERT INTO \w+ VALUES \( |
#E89 | Hook | 100% |
| UI-12 | <div class=".*"> |
#E112 | Skill | 94.7% |
| SEC-5 | process\.env\.\w+ |
#E23 | Hook | 98.1% |
这些规则全部存储在 patterns-cache.json 中,由 semantic-check Hook 实时加载。规则的有效率通过 violations-stats.json 追踪:当某条 warn 规则违反 ≥10 次,系统自动建议升级为 error ;当 fix_rate < 0.3 ,标记为“噪音”并停用。这套机制让规则库始终处于进化状态,而不是静态文档。
最后分享一个小技巧:在
~/.claude/下创建global-hooks/目录,存放所有项目的通用 Hook(如boundary-jit、post-edit-verify)。用 rsync 脚本每日同步到各项目.claude/hooks/,确保基线安全策略永不降级。这是我半年来最省心的自动化运维。
6. Harness Engineering:让不懂代码的人管住 AI 程序员
Harness Engineering 不是我发明的概念,而是在无数个崩溃的深夜里自然收敛出来的生存法则。它不是让 AI 更聪明,而是构建一套 闭环验证、事故驱动、人在回路 的管理系统。这套系统教会我的,不是编程,而是如何在一个高度不确定的智能体世界里,建立确定性的控制。
它的核心是五层闭环:
- Layer 1(Hook 层) :神经反射,毫秒级拦截。
deny规则是铁律,不讲情面。 - Layer 2(Agent 层) :战略与执行物理隔离。审计者不能改账,改账者不能审计。
- Layer 3(Skill 层) :把最佳实践编码成可复用的仪式。
/implement不是命令,是承诺。 - Layer 4(验证层) :三级金字塔,秒级、分钟级、小时级验证层层嵌套。没有自动验证通过,一切皆为“未完成”。
- Layer 5(记忆层) :
agent memory+_NEXT.md+patterns-cache.json,让系统从事故中学习,而非从假设中设计。
这套系统最颠覆的认知转变是: 你不需要懂代码,但必须懂什么时候该不信任 AI 。当 AI 说“做完了”,你要问:“验证通过了吗?”;当 AI 说“这个方案最优”,你要问:“有没有模拟过反方论证?”;当 AI 说“没问题”,你要看 error-journal.md 里最近 3 次的失败记录。
Harness Engineering 的终极目标,不是消灭错误,而是让错误变得 可追溯、可量化、可预防 。22 条 Pattern 规则背后,是 22 个真实的 Bug;8 个 Hook 的每一次 DENY ,都在加固一道防线;16 个 Agent 的每一次分歧,都在逼近更优解。这不是魔法,是工程。
所以,如果你也在用 Claude Code、Cursor 或 Copilot,不管你有没有技术背景,请记住这句话: 从“写对代码”到“证明代码正确”,这个认知转变不需要你懂代码。你只需要懂得:不验证的东西就不要信 。而验证,必须由系统自动完成,而不是靠 AI 的自觉。
更多推荐
所有评论(0)