Bash is all you need — A nano claude code–like 「agent harness」, built from 0 to 1

shareAI-lab 出品的 20 课递进式 Agent Harness 工程教程。从 while True 出发,逐步叠加 Claude Code 的每一个核心机制。与 claw0 组成姊妹教程——一个拆解 Agent Harness 内核,一个拆解网关路由与主动行为。


核心命题:Agency 不是编出来的

这个教程的开篇不是 Hello World,而是一段长达几千字的哲学陈述。它要讲一件反直觉的事:

Agency——感知、推理、行动的能力——是训练出来的,不是编出来的。

从 DeepMind 的 DQN 玩 Atari(2013),到 OpenAI Five 战胜 Dota 2 世界冠军(2019),到 AlphaStar 制霸星际争霸 II(2019),到腾讯绝悟碾压王者荣耀职业选手(2019),再到 Claude Code 重塑软件工程(2024-2025)——每一个里程碑指向同一个事实:Agent 的核心是一个被训练出来的神经网络,不是外面那层 if-else 代码。 外面的代码(模拟器、游戏客户端、IDE 和终端)提供的是环境(Harness),不是智能。

基于这个前提,教程做了一个犀利到冒犯的批判:

“提示词水管工式 ‘Agent’ 平台是不做模型的程序员的意淫。”

拖拽式工作流构建器、无代码 AI Agent 平台、提示词链编排库——这些东西试图通过堆叠过程式逻辑来暴力模拟智能,本质上是 GOFAI(经典符号 AI)的现代还魂。它们共享同一个幻觉:把 LLM API 调用用 if-else 分支、节点图、硬编码路由连在一起,就算”构建 Agent”了。那不是 Agent,那是一个有着宏大妄想的 shell 脚本。


心智转换:从”开发 Agent”到开发 Harness

当一个人说”我在开发 Agent”,他只能是两个意思之一:

  1. 训练模型(DeepMind、OpenAI、Anthropic 在做的事)
  2. 构建 Harness(我们大多数人在做的事)

教程明确定义了 Harness 的公式:

Harness = Tools + Knowledge + Observation + Action + Permissions

  Tools:       文件读写、Shell、网络、数据库、浏览器
  Knowledge:   产品文档、领域资料、API 规范、风格指南
  Observation: git diff、错误日志、浏览器状态、传感器数据
  Action:      CLI 命令、API 调用、UI 交互
  Permissions: 沙箱隔离、审批流程、信任边界

模型做决策,Harness 执行。模型做推理,Harness 提供上下文。模型是驾驶者,Harness 是载具。

这个隐喻贯穿全教程——你不需要”开发 Agent”,你需要的是造一个足够好的载具,然后把一个已经够聪明的模型放进去。这也正是 Harness工程 中反复强调的:Harness 工程师的职责不是编写智能,而是为智能构建栖居的世界。

Harness 工程师的五项职责

  1. 实现工具——给 Agent 一双手。每个工具是 Agent 在环境中可以采取的一个行动。设计时要原子化、可组合、描述清晰
  2. 策划知识——给 Agent 领域专长。按需加载(s07),不前置塞入。Agent 应该知道有什么可用,然后自己拉取所需
  3. 管理上下文——给 Agent 干净的记忆。子 Agent 隔离防噪声泄露(s06),压缩防历史淹没(s08),任务系统让目标跨会话持久化(s12)
  4. 控制权限——给 Agent 边界。沙箱化文件访问,破坏性操作要求审批。这是安全工程与 Harness 工程的交汇点
  5. 收集任务过程数据——Agent 在 Harness 中的每一条行动序列都是训练信号。这些感知-推理-行动轨迹是微调下一代 Agent 模型的原材料

为什么以 Claude Code 为教学标本

教程选择拆解 Claude Code 作为 Harness 工程的大师课,不是因为 Claude Code 做了什么特别聪明的设计,恰恰相反——是因为它没做太多事。

Claude Code 是最优雅的 harness 实现——不是因为它做了什么,而是因为它没做的事:它没有试图成为 Agent 本身。

把 Claude Code 剥到本质:

Claude Code = 一个 agent loop
            + 工具 (bash, read, write, edit, glob, grep, browser...)
            + 按需 Skill 加载
            + 上下文压缩
            + 子 Agent 派生
            + 带依赖图的任务系统
            + 异步邮箱的团队协调
            + worktree 隔离的并行执行
            + 权限治理

每一个组件都是 Harness 机制——为 Agent 构建的栖居世界的一部分。Agent 本身是 Claude(模型,由 Anthropic 训练)。Harness 没有让 Claude 变聪明。Claude 本来就聪明。Harness 给了 Claude 双手、双眼和一个工作空间。

这个拆解揭示了一个通用规律:最好的 Agent 产品,出自那些明白自己的工作是 Harness 而非 Intelligence 的工程师之手。 这个洞察适用于编程 Agent,也适用于农业、酒店、医疗、制造等任何领域的 Agent。


20 课递进路径

每个课程在同一个 Agent Loop 上叠加一个 Harness 机制。循环本身从不修改。每节有一句格言概括其核心理念:

#主题格言关键机制
s01Agent Loop”One loop & Bash is all you need”while True + stop_reason
s02Tools”加一个工具, 只加一个 handler”dispatch map 模式
s03Permissions”先划边界, 再给自由”操作前判断,问用户
s04Hooks”挂在循环上, 不写进循环里”工具前后留插口
s05TodoWrite”没有计划的 agent 走哪算哪”先列步骤再动手
s06Subagent”大任务拆小, 干净上下文”子 Agent 隔离,只带结果回来
s07Skill”用到时再加载, 别全塞 prompt”先列目录,用到再展开
s08Compact”上下文总会满, 腾地方”四层压缩策略,便宜的优先
s09Memory”记住该记的, 忘掉该忘的”筛选 + 提取 + 整理三子系统
s10System Prompt”prompt 是组装出来的”分段 + 按需拼接
s11Error Recovery”错误不是终点, 是重试起点”重试 + 腾空间 + 换路子
s12Task”大目标拆小任务, 排好序, 持久化”文件持久化的任务图
s13Background”慢操作丢后台”后台线程 + 完成通知注入
s14Cron”定时触发, 不需要人推”按时间自动触发任务
s15Teams”一个搞不定, 组队来”持久化队友 + 异步邮箱
s16Protocols”队友之间要有约定”固定请求-回复格式沟通
s17Autonomous”队友自己看板, 有活就认领”自组织,不需要领导分配
s18Worktree”各干各的目录, 互不干扰”任务管目标,worktree 管目录
s19MCP”能力不够? 插上 MCP”外部工具接入同一工具池
s20Comprehensive”机制很多,循环一个”所有机制回到一个完整 Harness

核心架构代码(贯穿全部 20 课不变):

def agent_loop(messages):
    while True:
        response = client.messages.create(
            model=MODEL, system=SYSTEM,
            messages=messages, tools=TOOLS,
        )
        messages.append({"role": "assistant", "content": response.content})
 
        if response.stop_reason != "tool_use":
            return
 
        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,
                })
        messages.append({"role": "user", "content": results})

这个循环就是一切。课程中的所有机制——权限检查、Hook 拦截、子 Agent 派生、上下文压缩、任务调度——都是挂在这个循环上的插件。循环属于 Agent,机制属于 Harness。


跨领域通用性

教程反复强调它教的不只是”怎么造一个编程 Agent”,而是一套可以泛化到任何领域的 Harness 工程模式:

庄园管理 Agent = 模型 + 物业传感器 + 维护工具 + 租户通信
农业 Agent     = 模型 + 土壤/气象数据 + 灌溉控制 + 作物知识
酒店运营 Agent = 模型 + 预订系统 + 客户渠道 + 设施 API
医学研究 Agent = 模型 + 文献检索 + 实验仪器 + 协议文档
制造业 Agent   = 模型 + 产线传感器 + 质量控制 + 物流系统
教育 Agent     = 模型 + 课程知识 + 学生进度 + 评估工具

循环永远不变。工具在变。知识在变。权限在变。 Agent = 模型 + 泛化的操作环境(Harness)。这是 Harness工程 中”Harness 是跨领域抽象”的最完整陈述。


与 Vault 中其他概念的关联

这篇教程与 vault 中多个概念笔记深度交叉:

  • Harness工程:教程本身就是”Harness 工程”最系统的教学实现——Harness = Tools + Knowledge + Observation + Action + Permissions 直接定义了它的边界
  • [Agent Skill](Agent Skill.md)(s07):教程中 Skill 的实现——先列目录、用到再展开——与开放式的 Agent Skill 协议完全一致
  • Subagent(s06):教程中 Subagent 的设计——隔离上下文、只带结果回来——提供了具体实现思路
  • 上下文工程:Compact(s08)+ Memory(s09)+ System Prompt(s10)三个课程构成了上下文工程的实操三部曲
  • [MCP 模型上下文协议](MCP 模型上下文协议.md)(s19):作为工具池的”万能插座”接入
  • 三层架构:教程 + claw0 的组合覆盖了 Harness 层(执行层)+ Gateway 层(网关层)
  • pi-coding-agent:完美示例——一个独立开发者用同样的 Harness 工程思维从零构建了一个极简 Agent

重要引用

“Agency — 感知、推理、行动的能力 — 是训练出来的,不是编出来的。”

“造好 Harness。Agent 会完成剩下的。”

“Bash is all you need. Real agents are all the universe needs.”

“最好的 agent 产品,出自那些明白自己的工作是 harness 而非 intelligence 的工程师之手。”