在终端里输入一句“帮我修复 auth.test.ts 里失败的测试”,Claude Code 会自己收集上下文、规划步骤、调用工具、执行命令,反复迭代直到任务完成。要复现这套流程,先去 TaoToken 在这里承担统一接入角色,官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 上可以创建 API Key,再回到本地配置工具接口。MBZUAI VILA Lab 联合 UCL 对 Claude Code v2.1.88 源码的分析,把这个过程拆成了五条设计哲学以及权限系统、上下文压缩、子智能体编排等关键子系统,但先让模型请求能发出去,你才能亲眼看到这些设计在真实任务里如何运作。
很多开发者把精力花在选模型、囤各家 Key、切换不同供应商上,却低估了 Base URL 这个最容易被卡住的环节。官方工具默认请求 Anthropic 的接口,如果你的 Key 和额度走的是别的来源,就需要一个兼容通道把请求转成 Claude Code 认识的格式。TaoToken 解决的正是这个统一接入问题,Key 和接口都在一处管理,接入之后的权限弹窗、上下文压缩和子智能体循环仍然由 Claude Code 自己负责。下面从配置说起,再对照源码看这套设计在真实请求里长什么样。
1. 配置先行:在 settings.json 里把 Claude Code 指到 TaoToken
1.1 准备材料:官网注册、创建 Key、查看模型 ID
要复现论文里那个“修复 auth.test.ts 失败的测试”的例子,你手上需要三样东西:一个 TaoToken 账号、一个有效的 API Key、一个正确的模型 ID。打开官网注册并登录,在控制台创建一个新 Key,创建后把字符串完整复制下来,后面所有配置都用它替换占位符 YOUR_API_KEY。模型 ID 不要凭记忆写,直接去模型广场复制当前可用的模型 ID,不同时期开放的模型可能完全不同,写错 ID 请求会在服务端直接失败。
另外要分清两个地址:网页端是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end,用来注册、创建 Key、查看用量;接口地址填https://taotoken.net/api,末尾不要加/v1。这两个地址不是一回事,混了就会出现“网页能登录但工具请求失败”的情况。对 Claude Code 这类终端工具来说,它只认接口地址和 Key,不关心网页端长什么样。
1.2 修改 ~/.claude/settings.json
Claude Code 会依次读取系统级、用户级和项目级配置。用户级配置文件在~/.claude/settings.json,把环境变量写进env字段是最不容易出错的方式。下面是一份最低可运行的配置:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_AUTH_TOKEN": "YOUR_API_KEY", "ANTHROPIC_MODEL": "YOUR_MODEL_ID" } }三个变量的作用分别是:ANTHROPIC_BASE_URL告诉 Claude Code 把请求发到哪里,这里填 TaoToken 的接口地址;ANTHROPIC_AUTH_TOKEN是认证凭证,也就是你在官网创建的那个 Key;ANTHROPIC_MODEL是模型 ID,以模型广场为准。如果你更习惯环境变量,可以打开 shell 配置文件写入同样的内容,效果一致。建议优先用 settings.json,因为它随用户目录走,换机器时复制过去就行。配置完成后重启终端和 Claude Code 进程,让新环境变量生效。
1.3 跑通第一个任务:修复 auth.test.ts 里失败的测试
进入一个真实项目,最好带测试文件和 git 仓库,启动 Claude Code 后输入:帮我修复 auth.test.ts 里失败的测试。如果配置正确,你会看到 Claude Code 开始加载项目里的 CLAUDE.md 指令、读取 git 状态、构建初始上下文。这中间出现的权限弹窗是正常现象,每一个弹窗背后都是论文里提到的“人类决策权威”设计哲学在起作用。请求是否真正经过了 TaoToken,可以用一次故意错误的配置来验证:把ANTHROPIC_BASE_URL改成一个不存在的地址,如果任务立刻报连接错误,说明环境变量已生效;改回来后再做一次完整调用,确认日志里能看到正常返回。这一步验证完,再去看源码理解的权限系统和上下文管理,就有了真实行为做参照。
2. 观察一:五条设计哲学怎么解释“完美的 AI Agent 不存在”
2.1 先从“为什么这样设计”开始,而不是“怎么实现”
论文没有一上来就贴源码细节,而是先问了一个更底层的问题:Claude Code 为什么要设计成这样?答案被归纳为五条以人为中心的设计哲学:人类决策权威,要求人能随时看到、批准或否决智能体的操作;安全、隐私与数据保护,要求即使人没注意,系统也能自己保护用户及其代码和数据;可靠执行,要求智能体做的事和人类想的一致,长时间运行也不走偏;能力放大,要让人类做到以前做不到的事;上下文适应性,要能适应具体项目、工具、习惯,并随使用时间逐步改善。这五条不是并列的功能清单,而是架构取舍的价值基准。论文还从官方文档和社区分析中整理出十三条设计原则,例如拒绝优先、渐进式信任、纵深防御,它们是比哲学更低一层的约束规则,直接指导权限系统的具体实现。
对照你自己的配置过程就能理解这些现象:为什么第一次运行会有一堆权限弹窗,为什么 CLAUDE.md 里的指令会出现在上下文里,为什么切换模型时要留意模型 ID——这些都能在这五条哲学里找到对应的设计原因。你在 settings.json 里填的ANTHROPIC_MODEL,实际上决定了系统在“能力放大”和“可靠执行”之间选择哪一个平衡点:不同模型的工具调用习惯和上下文长度不同,Claude Code 会基于模型能力调整自己的行为。
2.2 五条哲学之间的矛盾是架构取舍,不是 bug
论文的一个重要发现是,这五条哲学之间存在张力。人类决策权威和安全之间,Anthropic 自己的分析显示用户批准了大约 93% 的权限弹窗,频繁点击导致注意力下降,安全不能全指望人工审批;安全与能力之间,安全研究机构 Adversa.ai 发现当一条命令包含 50 个以上子命令时,逐条做拒绝规则检查会导致界面冻结,系统只能在响应速度和检查粒度之间二选一,最终退化为单条审批;可扩展性与安全之间,Hooks 和 MCP 扩展在信任对话弹出之前就会加载,给 CVE-2025-59536 这样的漏洞留下了利用窗口,而这些漏洞直到披露后数周才被修复。
理解这些矛盾比记住每个实现细节更有用。它们提醒你:任何 AI Agent 都是在多个目标之间求妥协,不存在一个又强、又快、又绝对安全的配置。用 TaoToken 接入时,也不要追求“一次配好再也不用管”,而是把它当作一个可以随时调整的通道:跑高风险操作时把权限模式收紧,做探索性任务时再放开限制。配置本身也是取舍的一部分。
2.3 最小脚手架、最大操作 Harness:确定性代码占绝大部分
论文用“最小脚手架、最大操作 Harness”概括 Claude Code 的整体结构。脚手架指约束和引导模型决策的规划框架,操作 Harness 指围绕模型运行的确定性基础设施。源码分析的结果显示,Claude Code 的绝大部分代码是权限检查、工具路由、上下文管理、错误恢复这类确定性逻辑,AI 决策代码只占约 1.6%。核心的智能体循环是一个持续迭代的过程:调用模型、获取工具调用请求、执行、返回结果,直到模型停止请求。它把模型放在一个自由度较高的位置上,同时用确定性代码在周围套一层严密的护栏。
你的 TaoToken 配置其实也在履行类似职责:Base URL 和 Key 属于 Harness 的一部分,它们本身不参与生成答案,却决定了模型能否稳定地进入这个循环。如果你在跑任务时遇到“卡在某个工具调用上反复重试”,问题往往不在提示词,而在 Harness 的某个配置项上。接口地址拼错、Key 失效、模型 ID 过期,都会让循环在最开始的地方停下来。
3. 观察二:权限系统与上下文压缩在 auth.test.ts 里的真实形态
3.1 七层安全机制不是每次全触发
论文梳理出权限系统的七层独立安全机制:工具预过滤、拒绝优先规则、权限模式、ML 分类器、沙箱隔离、恢复会话时不继承旧权限、Hooks 拦截。每次工具调用都会经过权限判定,结果分三种:允许则放行,拒绝则返回,询问则交由用户或自动分类器裁决。并非每一层都在所有场景下触发。ML 分类器只在 auto mode 开启时参与决策,沙箱只针对 Shell 命令且需要全局启用,Hooks 拦截取决于用户是否配置了对应的脚本。
所以当你第一次用配置好的 Claude Code 运行“修复 auth.test.ts”时,大概率只看到权限弹窗和拒绝规则在起作用,这是正常现象。想要观察更多安全层,可以打开权限模式,或者配置一个 Hooks 脚本,在每次工具调用前打印一条日志,然后重新触发任务,对比不同配置下日志的差异。这种实验能帮你直观理解“拒绝优先”的含义:与其放行后再审查,不如在入口处就拦住。
3.2 93% 的通过率是一个警告信号
论文引用 Anthropic 的数据说明了一个反直觉的现象:用户批准了约 93% 的权限弹窗,意味着大多数人可能没有认真看弹窗内容就点了允许。这不是用户的错,而是审批交互本身带来的注意力衰减。每次弹窗都在打断思路,看得多了自然就麻木了,但安全设计不能把“用户会认真审批”当作前提。理解这一点之后,你使用 Claude Code 时就应该有意识地调整习惯:第一次请求命令时把命令内容看清楚,而不是条件反射地按回车;对于涉及删除、覆盖文件、执行未知脚本的操作,即使弹窗出现也先拒绝,再手动确认。
这里有一个经验:给 Claude Code 配置 Hooks,在前面加一道针对危险命令的黑名单规则,比分分秒秒盯着终端更可靠。权限系统是最后一道人工闸门,如果这道闸门因为疲劳而失效,再多的安全层也只是降低风险而不是消除风险。
3.3 五层上下文压缩如何保住 token 预算
随着对话推进,上下文窗口里的内容会不断膨胀。论文描述了五层上下文压缩管道:预算裁剪始终生效,历史修剪和上下文折叠由特性开关控制,微压缩处理局部内容,自动摘要默认开启并在最后兜底。系统在每轮模型调用前顺序评估这五层,从轻量裁剪到生成摘要,逐层增加压缩力度。你在跑长任务时,如果注意到 Claude Code 突然开始总结之前的对话,或者日志里出现 compaction 相关记录,就是这个管道在起作用。
这里有一个值得留意的操作细节:上下文压缩依赖连续多次成功的模型往返,如果接口不稳定导致某次请求超时,压缩过程可能被迫中断,产生上下文丢失的错觉。所以保持模型通道的稳定不只是为了省时间,也是在保护上下文管理的完整性。你在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 控制台看到的那一条条调用记录,就是这个智能体循环里每一次模型请求留下的痕迹,它们能清楚地告诉你压缩发生在哪一步、哪一类任务消耗的 token 最多。
4. 观察三:OpenClaw 的边界级控制与 Claude Code 的逐操作评估
4.1 同一组设计问题的不同答案
论文还对比了开源智能体系统 OpenClaw。Claude Code 对每次工具调用做逐操作安全评估,OpenClaw 做边界级访问控制;Claude Code 的智能体循环是系统的中心,OpenClaw 的智能体循环只是网关里的一个组件;Claude Code 的扩展修改的是单个上下文窗口,OpenClaw 的插件扩展的是整个网关的能力面。更深一层看,两个系统面对的是同一组设计问题——在哪里设边界、把决策权放给谁、扩展点放在哪一层——只是给出的答案不同。
你用 TaoToken 接入的是 Claude Code 这一侧,但理解这种差异不会白费。它解释了为什么同一个 Key 配出来的工具行为可能完全不同,也提醒你选工具链时要先搞清楚它的执行模型是任务级还是网关级,再决定往哪一侧投入。如果你需要的是一个能自主完成编程任务的执行体,Claude Code 的逐操作评估更合适;如果你需要的是一个统一接收多平台消息、再分发给底层工具的中枢,OpenClaw 的边界控制模型更符合直觉。
4.2 网关级系统与任务级 Harness 可以叠加
论文特别指出,Claude Code 和 OpenClaw 不是二选一的关系。OpenClaw 可以通过 ACP(Agent Client Protocol)把 Claude Code 作为外部编程 Harness 接入,两个系统分层组合使用。这意味着智能体的设计空间是可以叠加的:网关负责消息路由和边界控制,任务级 Harness 负责把单个编程任务执行到底。回到你的日常配置,TaoToken 在其中的角色更接近“跨层统一接入”:它把模型接口层收拢到一处,至于上层是 Claude Code 还是 OpenClaw,都由你自己决定。这种组合式的灵活性,正是论文里“Harness 边界演化”这一未来方向在当下的缩影。
5. 观察四:快 20% 的感知与慢 19% 的事实
5.1 两项研究带来的冷水
论文在架构之外引用了两项关于 AI 编程工具的研究:一项针对 16 名资深开发者、246 个任务的随机对照实验发现,使用 AI 工具的组实际完成速度慢了 19%,但自我感知快了 20%;另一项针对 807 个代码仓库的因果分析发现,使用 Cursor 后代码复杂度上升了 40.7%。第一个数字解释了很多团队为什么“用起来很爽,交付却变慢”——感知速度不等于实际速度;第二个数字说明短期提速可能以长期维护成本为代价。这两项研究针对的是 AI 编程工具本身,和用哪个接口通道无关,但它们给了你一个评判自己使用方式的框架:不要只看任务完成得有多快,还要看完成后的代码是否还能被自己和同事顺畅理解。
5.2 把“可持续性缺口”纳入工具链
论文提出,未来的智能体系统可以把这类“可持续性缺口”纳入设计目标,而不只是事后评估指标。对普通开发者来说,这个观点可以立刻落地:在每次让 Claude Code 修复 auth.test.ts 之后,不要直接提交代码,先 review 一遍改动,看它是否引入了不必要的抽象或过度的重复;在配置里保留一份清晰的 CLAUDE.md,把项目约定写进去,让 Agent 的每次操作都遵循同样的上下文基线;账号侧用好统一接入的调用记录,定期回看一次实际跑了多少请求、花在什么类型的任务上,而不是凭感觉判断“AI 帮我省了不少时间”。
论文提出的六个未来方向——静默失败与可观测性、记忆持久化、Harness 边界演化、时间跨度扩展、治理与监管、对人类长期能力的影响——其中静默失败是最值得普通用户警惕的一项。智能体的主要失败模式不是崩溃,而是在无人察觉的情况下产出错误结果。你在本地跑代码时,至少还有编译器和测试用例兜底;但如果完全信任 AI 生成的结果而不加验证,你就是在替这种失败模式买单。
6. 排障与下一步:拿 Key、看用量、跑通你自己的 auth.test.ts
6.1 配置后常见的三个问题
接上 TaoToken 之后,最容易踩的问题有三个。第一个是把接口地址写成https://taotoken.net/api/v1,Claude Code 会沿着/v1去拼接路径导致请求失败,正确做法是去掉末尾的/v1。第二个是ANTHROPIC_AUTH_TOKEN里混入了换行或空格,复制 Key 时最好直接粘贴到一个纯文本编辑器里检查一遍再放回配置。第三个是ANTHROPIC_MODEL填了一个模型广场上不存在的 ID,服务端返回的报错可能类似model not found,这时回到 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 的模型广场重新复制。三个问题的共同特征是:官网能登录、Key 看着没问题、但终端请求就是不通。遇到时按这个顺序排查,通常几分钟内就能定位。
6.2 论文的六个开放问题与你的下一步
论文在结尾梳理了六个开放方向:静默失败与可观测性的差距、记忆持久化与人机长期协作、Harness 边界的演化、时间跨度的扩展、治理与监管、对人类长期能力的影响。这些听上去是研究者该关心的问题,但其中至少有两个和你今天要做的事直接相关:可观测性可以通过控制台里的调用记录来建立,时间跨度可以通过把一个大任务拆成多个会话、并在每个会话开始时加载相同的 CLAUDE.md 来逼近。完成这些之后,下一步就很具体了:打开 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 注册,创建一个新 Key,配好 settings.json,在你的项目里输入那句“修复 auth.test.ts 里失败的测试”。这一次,当权限弹窗弹出、当上下文压缩悄悄发生、当子智能体被委派去读文件时,你已经知道这些现象背后的设计原因了。