1. 从立项会议纪要里拆出的三个技术锚点Manus 立项初期的会议纪要里有三个词被反复提及Agent 云端浏览器、状态持久化、渐进式披露。这三个词不是并列关系而是一条因果链——云端浏览器决定了 Agent 能操作什么状态持久化决定了 Agent 能不能记住做过什么渐进式披露决定了用户能不能看懂 Agent 在做什么。任何一个环节断掉Agent 就退化成一次性脚本。我重新梳理这份纪要时最强烈的感受是团队当时讨论的不是“要不要做”而是“先做哪一块才能让原型跑起来”。Peak 那句“Devin 的 session credential 不能持久化这也是咱们一定要解决的事儿”基本定调了技术优先级。因为如果登录态每次都要用户手动接管Agent 的“代理”属性就不成立用户会觉得自己在伺候一个健忘的实习生。所以这篇文章不打算复述会议纪要的哲学讨论而是把纪要里散落的技术决策翻译成可运行的配置。你会看到三件事怎么用 TaoToken 的 API 给 Agent 会话挂上持久化状态、怎么配置云端浏览器的接入检查清单、怎么用渐进式披露的思路观察 Agent 行为变化。适合正在做 Agent 原型、被会话状态丢失折磨过的开发者。先明确一个前提Manus 纪要里提到的“云端浏览器”不是让你去搭一个远程桌面而是让 Agent 在一个受控的浏览器实例里执行操作并且这个实例的登录态、文件系统、环境变量要跨会话保留。TaoToken 在这里的角色是提供模型调用入口让 Agent 的决策层能稳定拿到推理结果。官网入口在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 地址是 https://taotoken.net/api 两个别混。2. TaoToken 前置Agent 会话状态持久化的接入准备在动手写配置之前先把 TaoToken 的接入信息理清楚。纪要里范斌提到“密钥管理既安全又对开发者友好”这个诉求落到实操层面就是不要把 Key 硬编码进 Agent 的 prompt 或代码里而是走环境变量或独立的 secret 配置。TaoToken 的 API Key 在控制台生成地址是 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite 生成后你会拿到一串以 sk- 开头的字符串。这里有个容易踩的坑很多人把 Base URL 写成 https://taotoken.net/ 然后拼 /v1/chat/completions结果 404。正确的 Base URL 是 https://taotoken.net/api 后面接 /v1/chat/completions 或 /v1/messages 取决于你用 OpenAI 兼容格式还是 Anthropic 格式。纪要里张涛调研 XPRA 时强调“只传输变化的像素区域”这个思路类比到 API 调用就是只传必要的上下文不要把整个会话历史每次都塞进去否则 token 消耗会爆炸。模型 ID 的选择上Agent 场景建议用支持长上下文和工具调用的模型。如果你做的是 Claude Code 类的编码 Agent走 Anthropic 兼容端点如果是通用任务规划走 OpenAI 兼容端点。具体模型列表在文档里查https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。文档里有每个模型的上下文窗口和工具调用支持情况别凭感觉选。状态持久化的核心思路是Agent 每次会话开始时从持久化存储里读取上一次的 cookies、localStorage、工作目录文件列表、环境变量会话结束时把这些状态写回去。TaoToken 不负责存这些状态它只负责模型推理。状态存储你可以用 Redis、SQLite 或对象存储关键是序列化和反序列化的格式要统一。纪要里提到“为每个用户或每个项目提供一个持久化的工作目录”这个目录的路径要写进 Agent 的 system prompt让它知道文件该往哪放。还有一个细节纪要里潘潘说“我都没有一个 overview”指的是 Devin 的 Editor 没有文件目录树。你在做状态持久化时要同时持久化一份文件目录的 JSON 快照这样 Agent 恢复会话时能先看到“上次我有哪些文件”而不是从零开始探索。这个快照的生成逻辑可以放在每次文件操作后触发也可以放在会话结束时统一生成。3. 可复制的 Agent 会话状态持久化配置片段下面这份配置是我根据纪要里“登录状态、文件系统、环境变量与密钥管理”三个持久化对象整理的你可以直接复制到项目里改。配置文件用 JSON 格式路径放在项目根目录的agent-state/config.json。注意 Base URL 和 Key 的引用方式Key 不要写死在 JSON 里用环境变量注入。{ agent: { name: manus-prototype, model_id: claude-sonnet-4-20250514, base_url: https://taotoken.net/api, api_key_env: TAOTOKEN_API_KEY, max_tokens: 8192, temperature: 0.3 }, persistence: { enabled: true, storage_backend: sqlite, sqlite_path: ./agent-state/sessions.db, snapshot_interval_seconds: 30, restore_on_start: true }, browser: { mode: cloud, headless: true, viewport: { width: 1280, height: 800 }, user_data_dir: ./agent-state/browser-profile, persist_cookies: true, persist_local_storage: true, interactive_takeover: { enabled: true, trigger_on: [captcha, two_factor, login_required], timeout_seconds: 300 } }, filesystem: { workspace_root: ./agent-state/workspace, snapshot_manifest: ./agent-state/workspace-manifest.json, max_file_size_mb: 50 }, secrets: { provider: env, keys: [TAOTOKEN_API_KEY, THIRD_PARTY_API_KEY], mask_in_logs: true }, progressive_disclosure: { default_visible_panels: [chat], reveal_on_event: { shell_exec: [shell], browser_navigate: [browser], file_write: [editor] } } }这份配置里几个关键点解释一下。persistence.storage_backend用 sqlite 是为了原型阶段方便生产环境换成 Redis 或 Postgres 都行只要保证restore_on_start能读到上一次的快照。browser.user_data_dir指向一个持久化目录这样 Chromium 的 cookies 和 localStorage 不会因为进程重启而丢失这是纪要里“登录状态持久化”的落地方式。interactive_takeover.trigger_on对应纪要里“用户接管”的讨论。当 Agent 检测到验证码或两步验证时暂停自动化把浏览器控制权交给用户用户完成后 Agent 继续。timeout_seconds设 300 秒是防止用户忘记操作导致会话卡死。progressive_disclosure这一段直接对应纪要里潘潘说的“一开始只有 planner然后一点一点随着工作逐渐出来”。default_visible_panels只显示聊天框当 Agent 执行 shell 命令时才浮现 shell 面板导航浏览器时才浮现 browser 面板。这样新用户不会被四个面板同时轰炸。如果你用的是 Claude Code 或 Cline 这类工具配置文件的路径和字段名会不同但核心三件套不变Base URL 填https://taotoken.net/apiKey 从环境变量读Model ID 填你选的模型。Cline 的 MCP 配置里baseUrl字段对应上面的base_urlapiKey字段建议用${env:TAOTOKEN_API_KEY}的引用方式。Codex 的auth.json里则是api_base和api_key两个字段别搞混。4. 验证请求重启会话后确认状态恢复配置写完后必须做一次完整的验证否则你不知道状态到底有没有持久化成功。验证分三步第一次会话写入状态、模拟进程重启、第二次会话读取状态。第一步启动 Agent 并让它执行一个会产生状态的操作。比如让 Agent 访问一个需要登录的页面手动完成登录然后让 Agent 在 workspace 里写一个文件。用 curl 直接测 TaoToken 的 API 是否通export TAOTOKEN_API_KEYsk-你的key curl -s https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d { model: claude-sonnet-4-20250514, messages: [{role: user, content: 回复 OK 两个字母}], max_tokens: 10 }如果返回的 JSON 里有choices[0].message.content且内容是 OK说明 API 通了。如果返回 401检查 Key 是否复制完整如果返回local proxy failed检查 Base URL 是不是写成了https://taotoken.net/而不是https://taotoken.net/api。第二步杀掉 Agent 进程但不要删除agent-state目录。然后重新启动 Agent观察日志里有没有restore_on_start相关的输出。正常情况下Agent 启动时会从 sqlite 里读取上一次的会话快照包括 cookies 和文件列表。第三步让 Agent 执行一个依赖上次状态的任务。比如“打开上次登录的页面确认是否还在登录态”或“列出 workspace 里上次生成的文件”。如果 Agent 能直接访问而不需要重新登录说明 cookies 持久化成功如果能看到上次的文件列表说明文件系统快照恢复成功。验证渐进式披露时观察 Agent 执行不同操作时面板的浮现顺序。第一次执行 shell 命令时shell 面板应该从隐藏变为可见第一次导航浏览器时browser 面板才出现。如果所有面板一开始就全部显示说明default_visible_panels配置没生效。还有一个验证点是模型对话的连通性。你可以用 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite 这个入口直接测试模型是否能正常回复确认 Key 和模型 ID 的对应关系没问题。这个入口适合快速验证不用写代码。5. 本篇常见错排查401、local proxy failed、reading choices、OAuth排障部分我按真实报错来写每个报错对应一个具体的配置问题。401 Unauthorized最常见的原因是 Key 没传或传错。检查Authorizationheader 是不是Bearer sk-xxx格式注意 Bearer 后面有一个空格。如果你用的是环境变量引用确认环境变量在当前 shell 里已经 export。另一个原因是 Key 被撤销或过期去控制台重新生成一个。local proxy failed这个报错通常出现在 Base URL 配置错误时。TaoToken 的 Base URL 是https://taotoken.net/api不是https://taotoken.net/也不是https://taotoken.net/api/v1。如果你在 Cline 或 Claude Code 里填了带/v1的 Base URL工具可能会再拼一次/v1导致路径变成/api/v1/v1/chat/completions触发这个报错。把 Base URL 改成https://taotoken.net/api即可。reading choices 报错完整报错通常是Cannot read properties of undefined (reading choices)。这说明 API 返回的 JSON 结构里没有choices字段大概率是请求根本没成功返回的是一个错误对象。先看 HTTP 状态码如果是 4xx 或 5xx按上面的 401 或 local proxy failed 排查。如果状态码是 200 但返回体里没有 choices检查请求体里的model字段是否拼写正确模型 ID 不存在时有些网关会返回非标准结构。OAuth 相关报错如果你在配置 Claude Code 或 Codex 时看到 OAuth 报错通常是因为工具默认走了 OAuth 流程而不是 API Key 流程。Claude Code 需要在 settings 里显式指定ANTHROPIC_BASE_URL和ANTHROPIC_API_KEYCodex 需要在auth.json里填api_base和api_key。不要走 OAuth 登录直接填 Key。状态恢复失败如果重启后 Agent 没有恢复状态检查restore_on_start是否为 truesqlite_path指向的文件是否存在且非空。如果 sqlite 文件存在但恢复失败可能是序列化格式不兼容清空 sessions.db 重新跑一次。渐进式披露不生效检查reveal_on_event的事件名是否和 Agent 实际触发的事件名一致。不同框架的事件名可能不同比如有的用shell_exec有的用run_command。在 Agent 的日志里看实际事件名然后改配置。排障时建议开 debug 日志把每次 API 请求的 URL、header、body 都打出来。TaoToken 的接入文档里有各语言的示例代码对照着看能快速定位问题https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。6. 从原型到长期运行Coding Plan 与接入文档原型跑通后下一步是让它能长期稳定运行。纪要里提到“通用性平台高频场景优化”的双轮驱动落到工程上就是先用通用 Agent 跑通主流程再把高频操作沉淀成预设能力。这个过程中API 调用的稳定性和成本控制是关键。如果你打算把 Agent 用于长期编码任务或持续运行的 Agent 场景可以关注 Coding Plan 的入口https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 。它适合需要持续调用模型、对上下文长度和调用频率有要求的场景。具体额度和限制在页面里有说明按你的实际用量选。接入文档是另一个必须反复看的地方。TaoToken 的文档覆盖了 OpenAI 兼容格式和 Anthropic 兼容格式的请求示例还有各语言 SDK 的配置方式。文档地址https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。遇到报错先查文档里的错误码说明大部分问题都有对应解释。API Key 的管理建议单独建一个 secret 配置文件不要和业务代码混在一起。控制台地址https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 。可以生成多个 Key 分别用于开发、测试、生产方便排查问题时定位是哪个环境的调用。最后回到纪要里张涛说的那句“一个旨在重新定义智能体、致力于成为人类强大心智延伸的探索之旅”。技术决策的价值不在于讨论时有多激动而在于能不能变成可运行的代码。状态持久化和云端浏览器这两个点只要有一个没落地Agent 就还是玩具。把上面的配置跑通重启会话后看到状态恢复的那一刻你大概能体会到纪要里团队为什么把 persistence 列为“一定要解决的事儿”。