Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Using TodoListMiddleware for task planning and tracking progress with the write_todos tool in Deep Agents for complex multi-step workflows.
.claude/skills/majiayu000-deepagents-todolist/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-17 | ✗→✓ | ▲ Improved | 45% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 8% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 20% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 28% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 39% | 0% |
TodoListMiddleware 通过 write_todos 工具为代理提供任务规划和进度跟踪功能。它自动包含在每个深度代理中,帮助代理将复杂的多步骤任务分解为可管理的部分。
| 使用 TodoList 的场景 | 跳过 TodoList 的场景 | |------------------|-------------------| | 需要协调的复杂多步骤任务 | 简单的单动作任务 | | 进度可见性很重要的长时间运行操作 | 快速操作(< 3 步) | | 可能需要计划调整的任务 | 固定的、预定义的工作流 |
typescriptimport { createDeepAgent } from "deepagents"; // TodoListMiddleware 默认包含在内 const agent = await createDeepAgent({}); // 代理将自动使用 write_todos 处理复杂任务 const result = await agent.invoke({ messages: [{ role: "user", content: "创建一个 TypeScript 网络爬虫,提取产品数据,存储到数据库中,并生成报告。" }] });
typescriptimport { createAgent, todoListMiddleware } from "langchain"; const agent = createAgent({ model: "claude-sonnet-4-5-20250929", middleware: [ todoListMiddleware({ systemPrompt: `使用 write_todos 工具来规划您的工作: 1. 将任务分解为 3-5 个主要步骤 2. 开始时将任务标记为 'in_progress' 3. 完成后将任务标记为 'completed' 4. 如果计划发生变化,更新列表 `, }), ], });
| 任务类型 | Todo List 策略 | 示例 | |-----------|-------------------|---------| | 顺序步骤 | 预先创建所有待办事项,按顺序完成 | 构建应用:设置 → 编码 → 测试 → 部署 | | 探索式任务 | 根据需要添加待办事项 | 研究:初始搜索 → 后续跟进 → 综合 | | 并行工作 | 允许多个 "in_progress" 项目 | 数据处理:提取 + 转换 + 加载 |
typescriptimport { createDeepAgent } from "deepagents"; const agent = await createDeepAgent({}); const result = await agent.invoke({ messages: [{ role: "user", content: `为待办事项应用创建 REST API: 1. 设计数据模型 2. 实现 CRUD 端点 3. 添加身份验证 4. 编写测试 5. 创建 API 文档 ` }] }); // 代理的内部规划(通过 write_todos): // [ // { content: "为 Todo 项目设计数据模型", status: "pending" }, // { content: "实现 CRUD 端点(GET、POST、PUT、DELETE)", status: "pending" }, // { content: "添加 JWT 身份验证中间件", status: "pending" }, // { content: "编写单元测试和集成测试", status: "pending" }, // { content: "生成 OpenAPI 文档", status: "pending" } // ]
typescriptimport { createAgent, todoListMiddleware } from "langchain"; import { tool } from "langchain"; import { z } from "zod"; const runTests = tool( async ({ testSuite }: { testSuite: string }) => { return `${testSuite} 中的测试已通过`; }, { name: "run_tests", description: "运行测试套件", schema: z.object({ testSuite: z.string() }), } ); const deployCode = tool( async ({ environment }: { environment: string }) => { return `已部署到 ${environment}`; }, { name: "deploy_code", description: "将代码部署到环境", schema: z.object({ environment: z.string() }), } ); const agent = createAgent({ model: "gpt-4", tools: [runTests, deployCode], middleware: [ todoListMiddleware({ systemPrompt: `对于部署任务,始终: 1. 创建带有安全检查的待办事项列表 2. 在部署前运行测试 3. 在继续之前将每个步骤标记为已完成 `, }), ], }); const result = await agent.invoke({ messages: [{ role: "user", content: "将应用程序部署到生产环境" }] });
typescriptimport { createDeepAgent } from "deepagents"; const agent = await createDeepAgent({}); const result = await agent.invoke( { messages: [{ role: "user", content: "创建数据处理流水线" }] }, { configurable: { thread_id: "session-1" } } ); // 从最终状态访问待办事项列表 const todos = result.todos || []; for (const todo of todos) { console.log(`[${todo.status}] ${todo.content}`); }
✅ 创建具有自定义内容和结构的待办事项列表 ✅ 更新待办事项状态(pending → in_progress → completed) ✅ 在工作进展时添加新的待办事项 ✅ 删除变得不相关的待办事项 ✅ 重新组织或重新确定待办事项的优先级 ✅ 对任何任务复杂度级别使用待办事项
❌ 将工具名称从 write_todos 更改 ❌ 使用自定义状态值(必须是 pending/in_progress/completed) ❌ 在没有 thread_id 的情况下访问来自其他线程的待办事项 ❌ 在 createDeepAgent 中禁用 TodoListMiddleware(始终包含) ❌ 跨多个代理共享待办事项(每个代理有自己的状态)
typescript// ❌ 没有 thread_id 的待办事项列表不会持久化 await agent.invoke({ messages: [{ role: "user", content: "任务 1" }] }); await agent.invoke({ messages: [{ role: "user", content: "任务 2" }] }); // ✅ 使用 thread_id 进行持久化 const config = { configurable: { thread_id: "user-session" } }; await agent.invoke({ messages: [{ role: "user", content: "任务 1" }] }, config); await agent.invoke({ messages: [{ role: "user", content: "任务 2" }] }, config);
typescript// 您无法从 createDeepAgent 中移除 TodoListMiddleware // ❌ 这不会移除 TodoList const agent = await createDeepAgent({ middleware: [] }); // TodoList 仍然包含 // ✅ 如果需要完全控制,使用 LangChain 的 createAgent import { createAgent } from "langchain"; const agent2 = createAgent({ model: "gpt-4", middleware: [] // 完全没有中间件 });
typescript// 代理不会总是对简单任务使用 write_todos // 简单任务 - 代理可能不会创建待办事项 const result1 = await agent.invoke({ messages: [{ role: "user", content: "2+2 等于几?" }] }); // 状态中没有待办事项 // 复杂任务 - 代理可能会创建待办事项 const result2 = await agent.invoke({ messages: [{ role: "user", content: "构建一个网络爬虫并分析数据" }] }); // 状态中存在待办事项
Other measured skills in the registry, with their headline benchmark lift.