Claude Code对Harness设计与实现的启发
一、Harness设计
Layer 1: System Prompt(宪法层)→ 定义价值观和行为准则
↓
Layer 2: Tool Schema(协议层)→ Zod验证约束参数空间
↓
Layer 3: Input Validation(验证层)→ 拒绝非法输入
↓
Layer 4: Permission System(权限层)→ 门控高风险操作
↓
Layer 5: Runtime Safety(执行层)→ 沙盒、并发控制、错误取消
↓
Layer 6: Context Management(记忆层)→ 确保长对话中约束不被遗忘
↓
Layer 7: System Reminders(矫正层)→ 持续注入行为提醒
↓
Layer 8: Budget & Circuit Breakers(兜底层)→ 绝对限制防止失控
核心组件
| 组件 | 实现方式 | 代码位置 |
|---|---|---|
| 工具注册表 | 40+工具的Registry模式 | src/tools.ts + src/tools/ |
| 权限治理 | 四级权限模式(Auto/Plan/Ask/Deny)+ 检查点机制 | 集成在 Tool.ts 和 QueryEngine.ts |
| 上下文管理 | 三层压缩策略(MicroCompact/AutoCompact/FullCompact) | context.ts 及相关模块 |
| 子Agent调度 | AgentTool + Coordinator模块 + Task系统 | coordinator/ + tasks/ |
| 记忆系统 | CLAUDE.md层次结构 + AutoDream背景整合 | 文件系统 + 内存管理模块 |
| Hook系统 | 25+生命周期事件的扩展点 | 分布在核心引擎中 |
二、架构设计:模型即Agent,工程即Harness
(1)分离"决策"与"执行"
模型(Agent):负责决定"下一步做什么"
Harness:负责可靠地执行决策、管理资源、确保安全
这种分离让Harness可以独立于模型演进,适配不同的LLM后端。
(2)极简的 Agentic Loop
def agent_loop(messages):
while True:
# 1. 调用 LLM 获取下一步决策
response = client.messages.create(
model=MODEL,
system=SYSTEM_PROMPT,
messages=messages,
tools=TOOLS,
)
messages.append({"role": "assistant", "content": response.content})
# 2. 检查是否需要使用工具
if response.stop_reason != "tool_use":
return # 任务完成
# 3. 执行工具并收集结果
results = []
for block in response.content:
if block.type == "tool_use":
output = TOOL_HANDLERS[block.name](**block.input)
results.append({
"type": "tool_result",
"tool_use_id": block.id,
"content": output,
})
# 4. 将工具结果反馈,继续循环
messages.append({"role": "user", "content": results})
整个Harness的控制流可以非常简洁,复杂性应分散到工具实现和治理层。
(3)工具系统的关键设计原则
40+工具的设计遵循 :
| 原则 | 实现方式 |
|---|---|
| 原子性 | 每个工具只做一件事(BashTool、FileReadTool分离) |
| 自包含 | 每个工具包含:Zod输入schema、权限模型、执行逻辑、UI组件 |
| 可组合性 | 工具通过注册表(Registry)统一管理,自由组合成工作流 |
| 并发安全 | 读操作并发执行,写操作串行执行避免冲突 |
(4)多层冗余约束系统
Claude Code的Harness不依赖单一安全机制,而是多层独立有效的约束:即使System Prompt被模型"遗忘",权限系统仍会拦截危险操作
即使权限系统被绕过(如bypass模式),沙盒仍限制Bash能力
即使沙盒被禁用,USD预算和轮次限制仍是最后防线。
生产级Harness必须假设每一层都可能失效,设计多层兜底机制。
(5)上下文管理的工程实践
三层压缩策略 :
MicroCompact(局部压缩):清理旧工具输出
AutoCompact(临界压缩):对话接近上下文限制时自动触发摘要
Full Compact(核选项):完整摘要+持久化关键信息到CLAUDE.md
上下文管理不是简单的"截断",而是分层的、有策略的信息保全机制。
(6)多Agent协作的工程实现
三种Subagent执行模型 :
| 模型 | 机制 | 适用场景 |
|---|---|---|
| Fork模型 | 字节级复制父上下文,共享API prompt缓存 | 并行执行相同类型任务,成本与串行相当 |
| Teammate模型 | 通过JSONL文件邮箱跨终端面板通信 | 需要独立会话的复杂协作 |
| Worktree模型 | 每个Agent在独立Git Worktree工作 | 避免文件冲突的隔离执行 |
内置 Agent 的分工体系:
| Agent 类型 | 职责 | 约束 |
|---|---|---|
| Explore Agent | 代码探索专家 | 绝对只读,禁止任何文件修改 |
| Plan Agent | 架构规划 | 只读,输出 step-by-step implementation plan |
| Verification Agent | 对抗性验证 | “Try to break it”,必须跑 build/test/linter,做 adversarial probes |
| General Purpose Agent | 通用任务 | 完整工具集 |
| Claude Code Guide Agent | 产品使用指导 | 特定领域 |
多Agent不是简单的"多开",而是需要解决上下文隔离、通信机制、文件系统隔离等工程问题。
(7)模块化系统提示词架构
Claude Code使用110+个字符串片段动态组装系统提示词 :
根据运行环境(Terminal/VS Code/Desktop)条件注入
根据当前模式(Normal/Plan/Auto)调整
根据功能状态(团队协作、学习模式)扩展
避免单一巨型提示词,采用模块化、条件组装的策略,控制token消耗的同时确保相关性。
三、扩展生态的 Harness 集成
(1)Skill:Workflow Package
Skill 不是文档,而是 prompt-native workflow package :
Markdown prompt bundle + frontmatter metadata
可声明 allowed-tools
可按需注入当前上下文
匹配 skill 时必须调用 Skill tool,不能只提不执行
(2)Plugin:Prompt + Metadata + Runtime Constraints
Plugin 提供 :
Markdown commands、SKILL.md 目录
Commands metadata、userConfig
Shell frontmatter、allowed-tools
Runtime 变量替换(${CLAUDE_PLUGIN_ROOT} 等)
(3)MCP:不只是工具桥
MCP 同时注入 :
新工具
如何使用这些工具的说明(通过 getMcpInstructionsSection() 拼进 system prompt)
四、对实现Harness的启发
| 原则 | Claude Code 实现 | 通用 Harness 启示 |
|---|---|---|
| 制度化好行为 | 将"不要乱加功能、不要过度抽象、不要瞎重试"写进 prompt 和 runtime 规则 | 不依赖模型即兴发挥,通过系统约束确保一致性 |
| 上下文是稀缺资源 | System prompt 动静边界、fork path 共享 cache、skill 按需注入 | 将 token 当 runtime 预算管理,而非免费空气 |
| 多层冗余约束 | Hook 权限 + Permission Model + Settings 规则 + Sandbox | 每层独立有效,不依赖单一安全机制 |
| 生态模型可感知 | Skills 列表、Agent 列表、MCP instructions 都注入 prompt | 模型必须"知道自己的扩展能力是什么" |
| Agent 生命周期产品化 | Transcript 记录、Metadata 写入、Cleanup、Resume 机制 | 不是"一次函数调用",而是完整的运行时治理 |
| 专业化分工 | Explore/Plan/Verification 分离 | 降低角色混杂,提高系统稳定性 |
Claude Code真正的秘诀不是一段 system prompt,而是一个把 prompt architecture、tool runtime、permission model、agent orchestration、skill packaging、plugin system、hooks governance、MCP integration、context hygiene 和 product engineering 全部统一起来的系统。
对 Harness 实现的启发:不要追求复杂的框架,而要构建可靠的约束环境——通过 Prompt 编排、工具流水线、权限治理、Hook 策略、Agent 调度、生命周期管理,将强大的 LLM 能力安全、可控、可扩展地"套上马鞍"。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)