ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Claude Code 跑 Harness 架构的 Agent 循环:Key 用 TaoToken

2026/9/18 21:29:35 拓冰建站 浏览量
Claude Code 跑 Harness 架构的 Agent 循环:Key 用 TaoToken Claude Code 那份 51 万行代码泄露把 Harness 架构推到了台前真正让 Agent 循环转起来的不是某个神奇提示词而是控制层、Hook 检查站和模型路由三件事。想亲手把这条路跑通第一步不是抄那不到 30 行的循环而是先给 Claude Code 一个稳定的模型入口。TaoToken 在这里扮演统一 API 接入点你可以先打开 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 创建 Key再回到 Claude Code 里把 Base URL 填成 https://taotoken.net/api。很多开发者看完泄露出来的 Harness 结构第一反应是去翻 Agent 循环的伪代码结果配置环境变量时卡在 401也有人把 Base URL 末尾加了/v1然后对着 404 排查半天。问题不在循环而在模型通道没有先接好。1. 从 51 万行代码泄露看 HarnessAgent 循环不是只有 while True1.1 泄露出来的重点是控制层不是业务提示词那份代码泄露之所以在开发者圈子里炸开不是因为它写了多少业务逻辑而是因为它把 Claude Code 的 Harness 控制层暴露得很清楚。Harness 像什么你可以把它想成剧组里的执行导演剧本是模型给的但谁上场、什么时候喊卡、道具能不能用都要经过执行导演点头。模型只负责生成下一步建议Harness 负责判断这个建议要不要执行、执行前检查什么、执行后记录什么。没有这层控制Agent 循环就退化成把模型输出直接扔进终端风险不可控长会话也会很快跑偏。原文提到“不到 30 行的 Agent 循环”这很容易让人误以为核心很简单。确实循环骨架很短读取上下文、调用模型、解析工具调用、执行工具、把结果写回上下文再来一轮。但真正撑起可靠性的是循环外面那圈控制层。Claude Code 把权限校验、Hook 检查、模型路由、会话压缩、工具结果回填这些东西包在 Harness 里所以顶层循环看起来干净实际工程复杂度在下面。你亲手跑的时候最先接触到的不是这些控制细节而是模型通道Base URL 填哪里、Key 用哪把、模型 ID 怎么选。1.2 模型路由是 Harness 的成本阀门Claude Code 会根据任务类型、上下文长度、当前模式去路由不同模型。Opus、Sonnet、Haiku 在能力上有差异成本差距也会在长会话里被放大。原文提到“60 倍差距”这个数字不是让你背下来而是提醒你模型路由是 Harness 的成本阀门。如果你把 Base URL 指向一个不稳定的通道或者模型 ID 填错导致每次重试都打到高价模型循环还是能跑但账单会很难看。TaoToken 在这条链路里只做一件事作为模型 API 的统一接入点让 Claude Code 发出的请求被正确路由到目标模型。它不参与 Hook 权限校验也不替代工具执行更不会替你决定某个 Bash 命令能不能跑。1.3 想亲手验证 Harness先解决 Key 与 Base URL读泄露文章是一回事亲手跑 Agent 循环是另一回事。Claude Code 的 Harness 需要向模型发起请求请求必须带鉴权信息和正确的 endpoint。很多教程直接让你改~/.claude/settings.json却没告诉你 Key 从哪里来。比较顺的路径是先去 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 注册并创建 API Key然后在 Claude Code 的环境变量或 settings.json 里填ANTHROPIC_BASE_URLhttps://taotoken.net/api注意末尾不要加/v1。这样 Harness 的控制层照常工作你只需要专注观察三大 Hook 检查站有没有在工具执行前后正常拦截。2. 给 Agent 循环接上模型通道在 TaoToken 创建 Key 并确认模型 ID2.1 为什么 Harness 不替你管模型额度Harness 关心的是“这一步该不该执行”不是“这次调用花谁的钱”。权限 Hook 会检查工具调用是否符合规则PostToolUse 会处理工具结果但它不会帮你换一个有额度的 Key。Claude Code 发出的请求最终要落到某个兼容 Anthropic 协议的 endpoint 上如果默认通道额度不足、多 Key 切换麻烦Agent 循环就会在请求阶段频繁失败。把模型通道统一到 TaoToken 之后你可以在一个地方管理 Key、查看模型列表、对账用量Harness 那边不用改控制逻辑。2.2 创建 Key 时顺手确认模型 ID打开 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 之后进入控制台创建 API Key。Key 会以YOUR_API_KEY这种形式出现在配置里记得不要把它提交到 Git。创建完 Key别急着关页面去模型广场看一眼当前可用的模型 ID。Claude Code 的ANTHROPIC_MODEL需要填真实存在的 ID不要凭记忆写一个带日期后缀的名字。模型 ID 以 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 模型广场当时列表为准复制你真正要跑的那个。如果你打算长期跑 Agent 循环建议先选一个成本和能力平衡的模型做默认再在具体任务里切换。2.3 准备 Claude Code 的 settings.json 骨架Claude Code 支持环境变量也支持在~/.claude/settings.json里写env。推荐用文件配置因为长会话里环境变量容易被不同终端污染。文件结构大致如下注意ANTHROPIC_BASE_URL只写到https://taotoken.net/api不要带/v1{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_AUTH_TOKEN: YOUR_API_KEY, ANTHROPIC_MODEL: YOUR_MODEL_ID } }把YOUR_API_KEY换成你在 TaoToken 控制台创建的 Key把YOUR_MODEL_ID换成模型广场里复制的 ID。保存后不用改 Harness 里的 Hook 配置模型通道和权限控制是两层互不替代。3. 改 ~/.claude/settings.json把 Claude Code 指到 https://taotoken.net/api3.1 env 写法与终端环境变量写法如果你不想改全局settings.json也可以只在当前终端导出export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_AUTH_TOKENYOUR_API_KEY export ANTHROPIC_MODELYOUR_MODEL_ID这两种写法二选一即可。同时写的话通常以 Claude Code 读取到的配置为准容易出现“我明明改了文件但终端里还是旧 Key”的情况。排查时先用echo $ANTHROPIC_BASE_URL确认当前 shell 里有没有旧值。注意ANTHROPIC_BASE_URL填的是https://taotoken.net/api不是官网首页也不是带/v1的地址。官网首页用于注册、创建 Key、看模型广场和用量接口地址只填进工具。3.2 重启 Claude Code 让 Harness 重新加载改完配置后退出当前 Claude Code 会话再重新进入。Harness 在启动时会读取环境配置如果你在会话中途改文件有时候不会立刻生效。重新进入后先跑一个最小任务比如让它读取当前目录下的一个文件并解释内容。这个任务会触发 Agent 循环模型生成工具调用Harness 检查工具权限执行读取再把结果写回上下文。你不需要看到所有内部步骤但如果它能在几轮内完成说明 Key、Base URL、模型 ID 至少是通的。3.3 TaoToken 只负责路由不参与 Hook 权限校验这里要分清楚责任边界。TaoToken 是模型 API 的统一接入点它让 Opus、Sonnet、Haiku 的请求被正确路由不参与 Claude Code 的 Hook 权限校验也不替代工具执行。Harness 里的 PreToolUse 该拦还会拦PostToolUse 该记录还会记录。你换模型通道不会把权限体系换掉。反过来说如果你发现某个危险命令没有被拦截不要去找 TaoToken 的配置应该去检查 Claude Code 的 Hook 规则和权限模式。这个边界分清楚排障时能省很多时间。4. 跑通不到 30 行的循环三大 Hook 检查站怎么拦截工具调用4.1 用一个小任务触发 Agent 循环想观察 Agent 循环不要一上来就给大任务。可以给它一个本地文件让它先列目录、再读取、再总结。这个过程中会多次触发模型请求和工具调用。你可以把 Agent 循环理解成一个很短的调度器把用户输入放进上下文调用模型解析模型返回的工具请求交给 Harness 判断执行工具把结果塞回上下文继续下一轮。伪代码大概长这样但真实执行权在 Claude Code 的 Harness 里不在模型手里context [] while True: user_input input( ) context.append({role: user, content: user_input}) while True: reply call_model(context) context.append(reply) tool_call parse_tool_call(reply) if tool_call is None: break if not pre_tool_use_check(tool_call): context.append({role: tool, content: blocked by hook}) continue result run_tool(tool_call) post_tool_use_record(tool_call, result) context.append({role: tool, content: result})这段代码只说明结构不是让你绕过 Claude Code 的权限体系。真正的工具执行、权限判断、Hook 触发都在 Harness 层完成。4.2 三大检查站UserPromptSubmit、PreToolUse、PostToolUseClaude Code 的 Hook 体系里和 Agent 循环关系最紧的三个检查站可以这样理解UserPromptSubmit 在用户输入提交时触发适合做输入预处理或拒绝某些请求PreToolUse 在工具真正执行前触发是最关键的权限闸门可以拦截 Bash、文件写入等操作PostToolUse 在工具执行后触发适合记录结果、格式化输出或做后续校验。你配置好模型通道后可以故意让 Claude Code 执行一条只读命令再执行一条会修改文件的命令观察 PreToolUse 是否按规则放行或拒绝。4.3 不要用 Agent 循环直连生产库Claude Code 能生成代码、解释 SQL、对照配置但不要把它直接指向生产库或生产机器去“执行”业务操作。诊断 SQL、编译命令、注册表操作这些正确姿势是让模型生成或解释由你在本地或隔离环境执行再把报错贴回对话。Harness 的 Hook 可以帮你拦截一部分危险命令但最终执行边界要你自己守住。Agent 循环再顺也不该拿生产环境当试验场。你可以用本地测试库练手把 Hook 规则写严一点再逐步放开常用只读命令。5. 排障settings.json 生效了但 401、404、模型不存在5.1 401Key 没填对或旧环境变量覆盖401 通常说明请求到了模型通道但鉴权没过。先确认ANTHROPIC_AUTH_TOKEN是你在 TaoToken 控制台创建的那把 Key而不是旧平台留下的值。然后检查当前终端有没有导出过同名环境变量settings.json和 shell 环境变量同时存在时容易互相打架。最后确认 Key 没有多余空格复制时不要把换行带进去。如果刚创建 Key 就报 401重新复制一次确保用的是YOUR_API_KEY替换后的真实值。5.2 404 或路径重复Base URL 末尾不要加 /v1404 最常见的原因是 Base URL 写错。Claude Code 里填https://taotoken.net/api即可末尾不要加/v1也不要填成官网首页。有些工具会在请求时自动拼接路径如果你手动加了/v1最后可能变成/api/v1/v1/messages这类地址。排查时直接看 Claude Code 的请求日志或者用 curl 做一个最小请求确认 endpoint 是https://taotoken.net/api再加官方要求的路径。官网地址只用于注册、看模型广场和用量不要混进ANTHROPIC_BASE_URL。5.3 模型不存在回模型广场重新复制 ID如果报模型不存在或模型不可用不要凭感觉改 ID。打开 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 的模型广场复制当前可用的模型 ID 到ANTHROPIC_MODEL。有些模型名称看起来很像但实际 ID 带不同后缀复制错一位就会失败。如果你在长会话里切换过模型还要确认 Harness 的路由配置有没有缓存旧 ID。改完后重启 Claude Code再跑一次最小只读任务。模型路由通了再去看 Hook 拦截和成本记录。6. 对账与控制台把这次 Harness 会话的调用记下来6.1 用模型对话发一条测试消息配置保存并重启后先在 TaoToken 模型对话 里用同一把 Key 发一条测试消息确认模型 ID 和 Base URL 没填错。这一步能快速区分是模型通道问题还是 Claude Code 配置问题。如果模型对话正常但 Claude Code 仍然报错就去看 Claude Code 的 Hook 日志和请求日志。如果模型对话也失败先回控制台检查 Key 状态和模型权限。6.2 去 Coding Plan 或控制台看这次调用确认 Agent 循环能跑之后可以打开 Coding Plan 看套餐是否够用再去 控制台 API Keys 对一下这次会话的调用记录。重点看三件事请求是否记到了正确的 Key 上、模型路由是否符合预期、长会话里有没有因为模型切换导致成本突然拉高。原文提到的 60 倍差距最好用你自己的用量记录去验证而不是只记一个数字。模型广场当时的列表和价格才是判断依据。6.3 Claude Code 接入文档与下一步如果你还想调整环境变量写法或 Hook 配置可以对照 Claude Code 接入文档 再核一遍。把ANTHROPIC_BASE_URL固定在https://taotoken.net/apiKey 用YOUR_API_KEY占位替换模型 ID 用模型广场复制的值。接下来跑一个真实的本地小任务观察 UserPromptSubmit、PreToolUse、PostToolUse 三个检查站的日志顺序再回控制台看这次 Harness 会话的用量是否对上。把 Hook 拦截记录和调用记录放在一起看你就能判断这条 Agent 循环值不值得长期留在日常开发里。