
1. Trae SOLO 的 TODO 列表模式到底解决了什么问题Trae SOLO 是 Trae IDE 里的全流程自动化模式你给它一段需求描述它自己拆任务、写代码、跑命令、部署上线。而 TODO 列表模式是 SOLO 在 2.0.7 之后加入的任务拆解机制——它会把一个复杂需求拆成若干条可勾选的任务项每完成一条就标记一条而不是像以前那样一口气生成一大堆代码然后告诉你“全部完成了”。这个变化为什么重要因为大模型在长链路任务里有一个非常顽固的毛病提前宣布胜利。你让它做一个带登录、带数据库、带前端页面的小系统它可能只写了前端页面就回复“已完成全部功能”。你再去检查后端接口根本没写数据库连接也是假的。这不是模型在骗你而是它在生成过程中丢失了对“整体任务边界”的跟踪。TODO 列表本质上是一个外部化的任务状态机把“要做什么”从模型的隐式记忆变成了显式的、可勾选的结构化数据。适合谁用三类人最受益一是用 Trae SOLO 做全栈小项目但经常被“假完成”坑到的独立开发者二是想把 Claude Code 的 TODO 工作流迁移到 Trae 里的开发者三是已经在用 TaoToken 统一管理多个模型 Key、希望 IDE 内直接切换模型而不改配置的人。我实测下来TODO 列表触发后SOLO 的执行路径变得非常清晰先列任务再逐条执行每完成一条会在对话区显示勾选状态。任务多的时候它自动生成列表任务少的时候可能不生成——这一点和 Claude Code 的行为一致。但这里有一个前置问题Trae SOLO 本身需要模型通道。如果你用的是官方内置模型配置是锁死的如果你想用自己的 Key、或者想在不同模型之间切换来对比 TODO 拆解质量就需要一个统一的 API 入口。这就是 TaoToken 介入的地方——它提供一个兼容 OpenAI 格式的 Base URL你可以在 Trae 里把模型请求指向它然后用同一个 Key 调用不同模型。下面我会从零开始把 TaoToken 的配置、Trae SOLO 的 TODO 触发、端到端验证、以及常见报错排查全部走一遍。每一步都有可复制的配置片段和实际命令你跟着做就能跑通。2. TaoToken 前置准备统一 Key 与 API 通道配置在进入 Trae SOLO 的 TODO 配置之前先把模型通道搭好。TaoToken 的核心作用是给你一个统一的 Base URL 和一个 Key让你在 Trae、Claude Code、Cline 等不同工具里用同一套凭证调用模型。你不需要在每个工具里分别填不同的厂商 Key也不需要改代码里的 endpoint。2.1 获取 Key 和确认 Base URL首先到 TaoToken 控制台创建一个 API Key。地址是https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contenttrae_solo_todo创建时注意两点一是 Key 只在创建时完整显示一次复制后存到安全的地方二是如果你打算在 Trae 里同时用多个模型比如一个用于 TODO 拆解、一个用于代码生成可以创建多个 Key 分别管理方便后续排查是哪个 Key 出的问题。Base URL 统一用https://taotoken.net/api注意这个地址后面不加 UTM 参数它是 API 请求的 endpoint不是网页链接。你在 Trae 的模型配置里填的就是这个。2.2 在 Trae 中配置自定义模型通道Trae 支持自定义模型提供商。打开 Trae 设置找到模型配置区域选择“自定义”或“OpenAI Compatible”类型然后填入以下三件套配置项值Base URLhttps://taotoken.net/apiAPI Key你在 TaoToken 控制台创建的 KeyModel ID按需填写如claude-sonnet-4-20250514或gpt-4o如果你用的是 Trae 的配置文件方式部分版本支持settings.json或项目级.trae/config.json可以写入如下 JSON 片段{ modelProvider: openai-compatible, baseUrl: https://taotoken.net/api, apiKey: sk-你的TaoTokenKey, modelId: claude-sonnet-4-20250514, maxTokens: 8192, temperature: 0.3 }把这段配置放到 Trae 的模型设置里保存后重启 IDE 或重新加载窗口。temperature 建议设低一点0.2–0.4因为 TODO 拆解需要稳定性太高的随机性会导致任务列表漏项或重复。2.3 验证 Key 是否生效在正式用 SOLO 之前先用一个最简单的请求确认通道是通的。你可以在终端里用 curl 发一条测试请求curl -s https://taotoken.net/api/v1/chat/completions \ -H Content-Type: application/json \ -H Authorization: Bearer sk-你的TaoTokenKey \ -d { model: claude-sonnet-4-20250514, messages: [{role: user, content: 回复OK两个字母}], max_tokens: 10 }如果返回的 JSON 里choices[0].message.content包含 “OK”说明 Key 和 Base URL 都正确。如果返回 401检查 Key 是否复制完整、是否有多余空格。如果返回local proxy failed或连接超时检查你的网络环境是否能正常访问taotoken.net以及 Trae 的代理设置是否干扰了请求。这一步看起来简单但它是后面所有操作的基础。我踩过的坑是Key 复制时末尾带了一个换行符导致 401 排查了十分钟。所以复制后建议在终端里echo -n sk-xxx | wc -c确认字符数对不对。3. 可复制配置Trae SOLO TODO 列表触发与模型对接通道通了之后接下来把 Trae SOLO 的 TODO 列表模式跑起来。这一节给出完整的配置片段和触发步骤你直接复制就能用。3.1 SOLO 模式切换与 TODO 触发条件首先确认你的 Trae 版本在 2.0.7 以上并且已经获得了 SOLO 模式的访问权限。切换方式是在 Trae 顶部工具栏点击模式切换按钮从 IDE 模式切到 SOLO 模式。切换后界面会变成左侧对话、右侧工具面板的布局。TODO 列表的触发不是手动开关而是由 SOLO 根据任务复杂度自动判断的。实测下来满足以下条件时几乎一定会生成 TODO 列表需求描述超过 3 个功能点比如“做一个带登录、注册、文章列表、详情页、评论功能的博客系统”涉及多个文件或目录的创建与修改需要执行终端命令如安装依赖、启动服务、数据库迁移任务链路超过 5 步如果只让它“改一个按钮颜色”它不会生成 TODO 列表直接改完就结束了。所以如果你想测试 TODO 功能给一个稍微复杂一点的需求。3.2 项目级配置文件在项目根目录创建.trae/solo.json写入以下内容{ solo: { enableTodoList: true, todoTriggerThreshold: 3, autoAcceptChanges: true, maxTodoItems: 20, taskBreakdownModel: claude-sonnet-4-20250514, codeGenModel: claude-sonnet-4-20250514 }, model: { baseUrl: https://taotoken.net/api, apiKey: sk-你的TaoTokenKey, provider: openai-compatible } }这里有几个关键参数enableTodoList设为true强制开启 TODO 列表生成即使任务量不大也会尝试拆解。todoTriggerThreshold是触发阈值设为 3 表示需求里包含 3 个以上功能点时就生成列表。autoAcceptChanges设为true让 SOLO 自动接受代码修改不再逐条弹窗确认——这是 SOLO 模式的设计初衷如果你不放心可以先设为false观察几次。maxTodoItems限制列表最大条目数防止模型把任务拆得过细导致执行时间过长。taskBreakdownModel和codeGenModel可以分开配置。我实测发现用同一个模型做拆解和生成效果已经不错如果你想优化可以用一个推理能力强的模型做拆解用一个代码能力强的模型做生成。两个模型都通过同一个 TaoToken Base URL 调用不需要额外配置。3.3 在对话中触发 TODO 列表配置写好后在 SOLO 对话区输入一个多步骤需求。比如帮我创建一个 Node.js Express 的待办事项 API要求 1. 支持创建、查询、更新、删除待办 2. 数据存到 SQLite 3. 有基本的输入校验 4. 写一个简单的测试脚本验证接口 5. 启动服务并告诉我端口号发送后SOLO 会先输出一个任务列表类似TODO: [ ] 初始化 Node.js 项目并安装 express、sqlite3 依赖 [ ] 创建数据库连接和表结构 [ ] 实现 CRUD 路由 [ ] 添加输入校验中间件 [ ] 编写测试脚本 [ ] 启动服务并验证接口然后它会逐条执行每完成一条就把[ ]变成[x]。你可以在对话区实时看到进度。如果某条任务执行失败它会停下来报错而不是跳过继续——这正是 TODO 列表模式相比之前“一口气生成”的最大改进。3.4 与 Claude Code 工作流的衔接如果你之前用 Claude Code 的 TODO 模式会发现行为非常相似。区别在于Claude Code 是在终端里跑Trae SOLO 是在 IDE 里跑并且多了浏览器面板、部署面板等可视化工具。你可以把 Claude Code 里常用的任务描述直接搬到 Trae SOLO 里TODO 拆解逻辑基本一致。如果你在 Claude Code 里也配置了 TaoToken 的 Base URL那么两个工具的模型通道是统一的。Claude Code 的配置方式是在~/.claude/settings.json或项目级.claude/settings.json里写入{ apiBaseUrl: https://taotoken.net/api, apiKey: sk-你的TaoTokenKey, model: claude-sonnet-4-20250514 }这样你在 Trae 和 Claude Code 之间切换时不需要重新申请 Key 或改 endpoint同一个 TaoToken Key 两边通用。4. 验证请求与端到端任务执行结果对照配置完成后需要做一次完整的端到端验证确认 TODO 列表真的在执行、模型通道真的在走 TaoToken、结果真的符合预期。这一节给出具体的验证动作和结果对照。4.1 验证模型请求确实走了 TaoToken在 Trae SOLO 执行任务的过程中打开 TaoToken 控制台的请求日志页面https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contenttrae_solo_todo你应该能看到实时的请求记录包括请求时间、模型名称、token 消耗量。如果日志里有记录说明 Trae 的请求确实走了 TaoToken 通道而不是 Trae 内置的模型。如果没有记录检查.trae/solo.json里的baseUrl和apiKey是否写对以及 Trae 是否重启加载了新配置。4.2 端到端任务执行对照我用一个实际任务做了完整测试下面是过程记录和结果对照。输入需求创建一个 Python Flask 应用提供一个 /health 接口返回 {status: ok} 再提供一个 /add 接口接受两个数字返回和。写一个 pytest 测试文件 运行测试并启动服务最后用 curl 验证两个接口。SOLO 生成的 TODO 列表[ ] 创建 Flask 应用文件 app.py [ ] 实现 /health 和 /add 接口 [ ] 创建 requirements.txt 并安装依赖 [ ] 编写 test_app.py 测试文件 [ ] 运行 pytest 并确认通过 [ ] 启动 Flask 服务 [ ] 用 curl 验证 /health 和 /add执行过程对照步骤SOLO 动作实际结果1创建 app.py文件生成包含两个路由2创建 requirements.txt写入 flask、pytest3执行 pip install终端输出安装成功4创建 test_app.py包含两个测试用例5执行 pytest2 passed6启动 Flask服务运行在 5000 端口7curl /health返回{status:ok}8curl /add返回{result:5}全部 8 条任务都标记为[x]没有出现“提前宣布完成”的情况。对比之前不用 TODO 列表时模型经常在第 4 步就回复“全部完成”实际上测试文件根本没写。4.3 验证 TODO 列表的防幻觉效果为了对比我做了另一组测试同样的需求关闭 TODO 列表enableTodoList: false让 SOLO 直接执行。结果它在生成 app.py 和 requirements.txt 之后就回复“已完成所有功能”但 test_app.py 不存在服务也没启动。这就是典型的任务边界丢失。开启 TODO 列表后模型被迫在每一步检查“当前任务是否真的完成”因为列表项是显式的它不能跳过未勾选的项。这个机制本质上是用结构化输出约束了模型的生成路径。4.4 检查模型返回的 choices 结构如果你在排查问题时需要确认模型返回是否正常可以在 Trae 的终端里手动发一条请求观察返回的 JSON 结构curl -s https://taotoken.net/api/v1/chat/completions \ -H Content-Type: application/json \ -H Authorization: Bearer sk-你的TaoTokenKey \ -d { model: claude-sonnet-4-20250514, messages: [{role: user, content: 列出三个TODO项}], max_tokens: 200 } | python3 -m json.tool正常返回里应该有choices数组每个元素包含message.content。如果choices为空或报reading choices错误说明请求格式或模型 ID 有问题下一节会详细排查。5. 本篇常见报错排查401、local proxy failed、reading choices、OAuth这一节把配置过程中最容易遇到的四类报错逐一拆解给出原因和修复步骤。每个报错都附上实际错误信息和可执行的修复命令。5.1 401 Unauthorized错误信息{ error: { message: Invalid API key provided, type: invalid_request_error, code: 401 } }原因Key 不正确、过期、或者复制时带了多余字符。修复步骤第一步确认 Key 没有多余空格或换行echo -n sk-你的TaoTokenKey | wc -c记下字符数然后到 TaoToken 控制台重新复制一次 Key对比字符数是否一致。第二步确认请求头格式正确。Authorization 头必须是Bearer sk-xxxBearer 和 Key 之间有一个空格Key 前面没有空格。第三步如果 Key 确认无误但仍然 401检查是否在 TaoToken 控制台里禁用了该 Key或者 Key 的额度已用完。到控制台查看 Key 状态和余额。第四步如果是在 Trae 里报 401检查.trae/solo.json里的apiKey字段是否被 JSON 转义或截断。建议用cat .trae/solo.json | python3 -m json.tool验证 JSON 格式是否正确。5.2 local proxy failed错误信息Error: local proxy failed: connect ECONNREFUSED 127.0.0.1:7890或者local proxy failed: timeout原因Trae 或系统代理设置指向了一个不可用的本地代理端口导致请求发不出去。修复步骤第一步检查 Trae 的代理设置。在 Trae 设置里搜索 “proxy”如果开启了手动代理先关闭改为“自动检测”或“不使用代理”。第二步检查系统环境变量env | grep -i proxy如果输出里有HTTP_PROXY、HTTPS_PROXY、ALL_PROXY等变量且指向127.0.0.1:xxxx而那个端口没有服务在跑就会报这个错。临时清除unset HTTP_PROXY HTTPS_PROXY ALL_PROXY然后重启 Trae。第三步如果你确实需要通过代理访问网络确保代理服务正在运行并且端口号正确。但注意TaoToken 的 API 地址https://taotoken.net/api在正常网络环境下可以直接访问不需要额外代理。第四步如果是在终端里 curl 报这个错检查~/.curlrc或环境变量里是否配置了代理。5.3 reading choices 错误错误信息Error: failed to parse response: reading choices: unexpected end of JSON input或者reading choices: invalid character looking for beginning of value原因模型返回的不是标准 JSON可能是返回了 HTML 错误页、空响应、或者流式响应被截断。修复步骤第一步确认 Base URL 拼写正确。必须是https://taotoken.net/api不要多加/v1或/chat除非你的配置明确要求。有些工具会自动拼接/v1/chat/completions有些需要你手动写全。在 Trae 里填 Base URL 时如果它自动补全路径就只填到/api。第二步确认模型 ID 是 TaoToken 支持的。如果你填了一个不存在的模型名服务端可能返回 HTML 错误页而不是 JSON。到 TaoToken 文档页查看支持的模型列表https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contenttrae_solo_todo第三步用 curl 手动发一条请求看返回的原始内容curl -v https://taotoken.net/api/v1/chat/completions \ -H Content-Type: application/json \ -H Authorization: Bearer sk-你的TaoTokenKey \ -d {model:claude-sonnet-4-20250514,messages:[{role:user,content:hi}],max_tokens:10}如果返回内容以开头说明拿到的是 HTML通常是 404 或 502 页面。检查 URL 路径和模型名。第四步如果是在 Trae SOLO 执行过程中报这个错可能是流式响应中断。尝试在配置里关闭流式输出如果有这个选项或者降低maxTokens值。5.4 OAuth 相关报错错误信息Error: OAuth token expired or invalid或者Error: unauthorized_client原因如果你在 Trae 里同时配置了官方账号登录和自定义模型通道OAuth token 可能和 API Key 冲突。另外Claude Code 的 OAuth 流程如果中断也会留下无效 token。修复步骤第一步在 Trae 里退出官方账号登录只保留自定义模型配置。SOLO 模式下的模型请求应该走.trae/solo.json里的配置而不是官方 OAuth。第二步如果是在 Claude Code 里报 OAuth 错误检查~/.claude/settings.json里是否同时存在apiKey和 OAuth 相关字段。如果有冲突删除 OAuth 字段只保留{ apiBaseUrl: https://taotoken.net/api, apiKey: sk-你的TaoTokenKey, model: claude-sonnet-4-20250514 }第三步清除 Claude Code 的缓存凭证rm -rf ~/.claude/credentials.json然后重新启动 Claude Code它会用 settings.json 里的 API Key 认证。第四步如果问题依旧到 TaoToken 控制台确认 Key 的权限范围是否包含你调用的模型。有些 Key 可能被限制只能调用特定模型。6. 把 TODO 列表用顺手长期编码与 Agent 工作流的接入建议TODO 列表模式跑通之后真正提升效率的关键是把它嵌入日常开发流程。这一节给几个实际使用建议以及长期编码场景下的配置优化。6.1 用 TODO 列表管理多文件重构当你需要重构一个涉及多个文件的模块时直接在 SOLO 里描述重构目标让它生成 TODO 列表。比如把 src/utils/ 下的所有工具函数改成 TypeScript并更新所有引用这些函数的文件。SOLO 会生成类似这样的列表[ ] 扫描 src/utils/ 下的 .js 文件 [ ] 逐个转换为 .ts 并添加类型注解 [ ] 搜索项目中所有 import 这些工具函数的文件 [ ] 更新 import 路径和类型引用 [ ] 运行 tsc 检查类型错误 [ ] 修复类型错误这种多文件任务以前最容易出现“改了一半就说完成”有了 TODO 列表后每一步都有勾选状态你可以清楚看到它到底改了几个文件、有没有漏掉引用。6.2 与 Coding Plan 配合做长期项目如果你用 Trae SOLO 做的是持续多天的项目建议把模型调用统一走 TaoToken 的 Coding Plan。Coding Plan 的地址是https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contenttrae_solo_todo它的好处是额度更集中适合高频调用场景。配置方式不变还是 Base URL Key Model ID 三件套只是在 TaoToken 控制台里选择 Coding Plan 的计费方式。6.3 在 Cline 或 CC Switch 中复用同一套配置如果你同时用 ClineVS Code 插件或 CC Switch 管理多个模型通道可以把 TaoToken 的配置写进它们的配置文件。Cline 的 MCP 配置里模型通道部分填入{ mcpServers: {}, model: { provider: openai, baseUrl: https://taotoken.net/api, apiKey: sk-你的TaoTokenKey, modelId: claude-sonnet-4-20250514 } }CC Switch 的配置类似在它的 provider 列表里添加一个自定义 providerBase URL 填https://taotoken.net/apiKey 填同一个。这样你在 Trae、Cline、Claude Code 之间切换时模型通道完全一致不需要重复配置。6.4 控制 TODO 列表粒度的技巧TODO 列表太粗会导致执行不彻底太细会导致请求次数暴涨。实测下来比较合适的粒度是每个任务项对应 1–3 个文件操作或 1 条终端命令。如果你发现 SOLO 拆得太细可以在需求描述里加一句“任务列表控制在 10 项以内”。如果拆得太粗加一句“每个任务项只做一件事”。另外maxTodoItems参数可以硬性限制条目数。设成 15 左右比较平衡既不会太粗也不会因为条目太多而消耗过多请求。6.5 验证模型对话通道是否正常如果你在配置过程中想快速确认某个模型是否可用可以用 TaoToken 的模型对话页面直接测试https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contenttrae_solo_todo在页面里选择模型、输入测试消息看是否能正常返回。这比在 IDE 里排查快得多能快速区分是模型通道问题还是 IDE 配置问题。6.6 接入文档与 API Key 管理完整的接入文档在https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contenttrae_solo_todoAPI Key 管理页面在https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contenttrae_solo_todo建议定期检查 Key 的使用量和余额避免在 SOLO 执行长任务时因为额度耗尽而中断。如果发现某个 Key 调用异常可以到控制台查看请求日志定位是哪个模型、哪个时间段出的问题。最后说一个实际经验TODO 列表模式最大的价值不是“防止幻觉”本身而是它把 AI 的执行过程变得可观测了。以前你只能看到最终结果现在你能看到它每一步在做什么、做到哪了、哪一步卡住了。这种可观测性对于调试和信任建立非常重要。你可以在 SOLO 执行过程中随时暂停检查已完成的文件确认无误后再继续。这个节奏比一口气生成再回头检查要高效得多。