ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

learn-claude-code 完整实战指南:从零搭建 coding agent 的 Agent Loop 与 Harness

learn-claude-code 完整实战指南:从零搭建 coding agent 的 Agent Loop 与 Harness learn-claude-code 完整实战指南从零搭建 coding agent 的 Agent Loop 与 Harness【免费下载链接】learn-claude-codeBash is all you need - A nano claude code–like 「agent harness」, built from 0 to 1项目地址: https://gitcode.com/GitHub_Trending/an/learn-claude-code如果你一直想拆开 coding agent 的黑盒看看 AI Agent 到底是怎么造出来的learn-claude-code 这个仓库值得一路跟下来。它的立场非常直接一个能用的 Agent 产品 模型 一套 Harness模型的运行环境智能长在模型里而你该投入的工程精力是搭建 Harness。全仓 17 个会话从一个十几行的 while 循环也就是 Agent Loop起步一路拼到目标闭环每一节都配一个能独立运行的 code.py。读完并跟着跑完你至少能做到三件事把 s01 示例亲手跑起来说清楚模型负责到哪里、代码负责从哪里开始以及看清全部 17 个会话的主线安排。先跑起来如何三步跑通第一个 Agent Loop 不需要任何前置知识三步。第一条命令把仓库克隆下来git clone https://gitcode.com/GitHub_Trending/an/learn-claude-code cd learn-claude-code pip install -r requirements.txt cp .env.example .env # 填入 ANTHROPIC_API_KEY 和 MODEL_ID python s01_agent_loop/code.py这段命令说明了什么依赖只有 anthropic、python-dotenv、pyyaml 三个包配置只有两个必填字段然后一条 python 命令进入 s01 的交互终端——这就是从零到能对话的 agent的全部成本。跑起来之后实际发生了什么终端出现s01 提示符你输入列出当前目录的 Python 文件回车接着屏幕上会滚出一串带$前缀的黄色命令行——那是模型决定调用 bash而你的代码真刀真枪地执行了它把输出以 tool_result 的形式塞回 messages模型看到结果后决定要不要再发下一条命令。如此往复直到模型某次不再返回工具调用最后打印一段文字结论。中间没有编排库、没有节点图就一次 LLM 调用套着一个 while 在转。想换模型或者用国内访问更顺的端点也只需要改.env这一点放到后面坑那一节细说。看懂全貌Agent Loop 的最小骨架整个仓库就是围着这一张图长出来的把 s01_agent_loop/ 的 code.py 剥到骨头就是下面这十几行def agent_loop(messages): while True: response client.messages.create( modelMODEL, systemSYSTEM, messagesmessages, toolsTOOLS) messages.append({role: assistant, content: response.content}) if response.stop_reason ! tool_use: return results [ {type: tool_result, tool_use_id: b.id, content: run_bash(b.input[command])} for b in response.content if b.type tool_use ] messages.append({role: user, content: results})这段说明了什么唯一的工具是 bashsystem prompt 只有一句话要求模型行动别解释而退出条件只有stop_reason ! tool_use一条——什么时候该停完全交给模型代码只剩一个职责执行工具、把结果回灌 messages、让循环继续转。模型做决策代码只负责执行这条分工线贯穿后面所有 16 节。顺手看一眼 bash 执行器的开头它藏着后面两节课的胚胎def run_bash(command: str) - str: dangerous [rm -rf /, sudo, shutdown, reboot, /dev/] if any(d in command for d in dangerous): return Error: Dangerous command blocked r subprocess.run(command, shellTrue, timeout120, capture_outputTrue, textTrue) return ((r.stdout r.stderr).strip() or (no output))[:50000]这段说明了什么危险命令黑名单、120 秒超时、输出截断到 5 万字符——就给模型自由套的第一道边界。s03 的 Permission 和 s04 的 Hooks 要做的就是把这种拦一下升级为一条有规则、有审批、有扩展点的正式流水线。Harness 到底是什么模型与代码的真实分工先澄清一个最容易搞混的问题模型不是被周围代码教会做 agent 的。感知、推理、行动这套能力来自训练本身——2013 年一个神经网络只靠原始像素和分数就自学会了 7 款 Atari 游戏没有任何规则表2019 年 OpenAI Five 纯粹靠自我对弈学会团队配合直播中 2-0 击败世界冠军战队。这两个案例里能动性都是从权重里长出来的不是从编排脚本里拼出来的。所以真正的工作天然分成两半。把模型看成选手球技是数据中心的千万张显卡喂出来的Harness 就是赛场和装备文件读写、shell、API 调用是选手在场上能完成的动作领域文档、风格指南是比赛规则git diff 和错误日志是记分牌沙箱和审批流是裁判。选手做判断赛场提供执行条件选手做推理赛场提供上下文。coding agent 的赛场就是 IDE、终端和文件系统——换成农业、酒店、制造这些领域循环一个字不用改变的只是赛场。这也解释了课程反复强调的一点你要写的是 Harness不是 Intelligence。顺带划掉一类伪选手拖拽式工作流构建器、无代码 AI Agent 平台、用 if-else 和节点图串 LLM 调用的编排库。这不是在培养选手是在提线——路线被程序逻辑预先画死模型只是流程里某个节点的文本补全器。智能不可能从规则树里组装出来它只会在一个开放循环里、由模型自己一步步做决策时出现。这也是为什么本课程的每一个会话都拒绝往循环里塞死流程。17 个会话怎么安排按五个能力阶段走主线 每节只加一个 Harness 机制机制配一句口号。17 节连起来是一条能力曲线能动 → 能干复杂活 → 能记能长跑 → 能协作 → 能编排收尾。阶段解决什么问题覆盖会话1 能动循环跑起来且行为可控s01 循环、s02 工具分派、s03 Permission、s04 Hooks2 干复杂活会计划、会分工、会省上下文s05 TodoWrite、s06 Subagent、s07 Skill 加载、s08 上下文压缩3 能记能长跑跨会话持久化慢活不阻塞s09 Memory、s10 任务系统、s11 后台任务、s12 定时调度4 能协作多 agent 组队干活s13 Agent Teams5 编排与收尾接外部能力整合闭环s14 MCP、s15 集成 Harness、s16 Workflow、s17 Goal Loop阶段 1 里s02 把 s01 里硬编码的 bash 调用换成一张 TOOL_HANDLERS 分派表从此加工具 加一个 handler工具从 1 个涨到 5 个s03 和 s04 则把放行、拦截、问用户三态做成权限流水线并在循环外留出 PreToolUse / PostToolUse 钩子扩展不改主循环。阶段 2 是干活能力s05 逼模型先写计划再动手s06 给子任务一份全新的 messages[]干完只回传一个 tool_result上下文互不污染s07 的知识加载只先给模型目录需要时才展开正文s08 的四级压缩按 budget、snip、micro-compact、summary 的顺序先整理工具结果超限了才动历史摘要。阶段 3 管活得久s09 的记忆拆成选择、提取、整理三个子系统s10 把目标拆成带 blockedBy 依赖的任务图写进文件目标因此能活在一个会话之外s11 把慢命令丢进后台线程完成时再往对话里注入通知s12 用持久化的 cron 让任务到点自己启动。阶段 4 的 s13 是全仓信息量最大的一节常驻队友、原子认领可执行任务、任务绑定的 worktree 隔离并行、类型化团队协议全部收在一节里。阶段 5 是收口s14 让 MCP 外部工具接入同一个工具池s15 把此前所有机制收回一个循环s15_integrated_harness/ 单文件 3000 多行用 DEFAULT_MAX_TOKENS、CONTEXT_LIMIT、KEEP_RECENT_TOOL_RESULTS 这类显式常量管理运行时预算和 s08 的压缩机制一脉相承s16 让固化的 Workflow 能从 journal 恢复执行终点 s17_goal_loop/ 的机制很小但很妙——模型说这轮我想停不再等于结束一个独立的 evaluator 会复核目标是否达成没达成就把没干完的活送回同一个 agent loop该不该结束由目标说了算。容易踩的两个坑新旧章节编号与兼容模型端点 ⚠️第一个坑是编号。仓库里现存两条教程轨道根目录 s01–s17 是现行正式版每节带中/英/日三语 README 加独立 code.py这是你该走的路而agents/和docs/目录是旧 12 节版仅为兼容旧读者在过渡期保留。两套编号并不对齐——最典型的是旧 s03 讲的是 TodoWrite现行 s03 讲的是 Permission照旧教程的章节号去找内容会直接找错门。旧 12 节与现行 17 节的大致对应关系如下旧版编号现行编号说明s01–s02s01–s02循环与工具分派编号一致s03–s06s05–s08TodoWrite / Subagent / Skill / Compact因 Permission、Hooks 前插而整体后移s07–s08s10–s11任务系统、后台任务又因新增的 Memory 继续后移s09–s12s13团队相关四节合并为一节 Agent Teams旧版没有s03、s04、s09、s12、s14–s17权限、钩子、记忆、定时、MCP、集成、编排、目标闭环均为新增第二个坑是模型端点。.env有三个字段ANTHROPIC_BASE_URL是可选的而.env.example里直接内嵌了一张 Anthropic 协议兼容提供方对照表MiniMax、GLM、Kimi、DeepSeek 各自的 Base URL 和 MODEL_ID 取值国际站和大陆站两组都列了抄一行就能用。换句话说这门课从第一天起就默认模型的人可以换、赛场不用换——端点一换整套 Harness 原样工作这正是模型与 Harness 解耦最具体的体现。另外提一句tests/ 里有 13 个测试文件覆盖压缩配对、技能加载、任务系统、目标闭环等机制想核对某个行为又舍不得花 token 时直接读对应测试比真跑一遍更划算。结语代码与智能的分界线在哪17 节跑完你手里多出的不是一个更聪明的模型而是一张边界图智能在训练里长出来你的代码只负责把赛场修好——动作要原子、知识要按需、边界要清楚、目标要能验收。循环永远长一个样变的是工具、知识、规则和赛场的大小从填好一个终端到填好一个团队的工作流路径是同一句话。你写的代码永远不会让模型变聪明只会让模型的聪明有地方落地。【免费下载链接】learn-claude-codeBash is all you need - A nano claude code–like 「agent harness」, built from 0 to 1项目地址: https://gitcode.com/GitHub_Trending/an/learn-claude-code创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表