Tolaria 的 Laputa 任务调度命令:用 Claude Code 与 Todoist API 实现 AI Agent 自驱循环
发布时间:2026/9/13 12:37:38 锦皓数字建站

Tolaria 的 Laputa 任务调度命令用 Claude Code 与 Todoist API 实现 AI Agent 自驱循环【免费下载链接】tolariaDesktop app to manage markdown knowledge bases项目地址: https://gitcode.com/GitHub_Trending/to/tolaria导读本文聚焦 Tolaria一个基于 Tauri React 的桌面端 Markdown 知识库管理应用为 AI Agent 设计的一套自动化任务调度机制.claude/commands/laputa-next-task.md定义了一个可被 Claude Code 反复执行的 Slash Command它从 Todoist 的两个待办分区拉取任务、按优先级排序、取首项移入 In Progress并自动添加 started 评论从而让 AI Agent 在没有人工干预的情况下持续领取并推进开发任务。读完本文你将掌握这条自驱流水线的完整命令流、Todoist API 的调用细节、优先级排序规则以及它与 Tolaria 仓库内 push-to-main 工作流、质量门禁和 QA 验收机制的衔接方式。1. 命令是什么一个供 AI Agent 长期存活的任务领取器在 Tolaria 仓库的 .claude/commands/laputa-next-task.md 中定义了一个名为/laputa-next-task的 Claude Code Slash Command。它的职责一句话可以概括从 Todoist 中挑选下一个要做的 Laputa 任务并把它移动到 In Progress 状态。这个命令不是给人类用户设计的普通菜单命令而是整个「AI Agent 自驱开发循环」的核心入口。与之配套的还有两个兄弟命令共同构成完整的闭环/laputa-next-task领取下一个任务本文主体/laputa-done标记任务完成——追加完成评论、移入 In Review、随后自动再次运行/laputa-next-task领取新任务/create-adr在任务过程中需要记录架构决策时按 Nygard 格式生成 ADR 文档。从 AGENTS.md 的「Start working on a task」章节可以看到Tolaria 团队要求 Agent 在开始写代码前读取任务描述与全部评论并在 Todoist 任务上添加一条 Starting work on this task. [Brief description of approach]评论——这正是/laputa-next-task中步骤 5 用 API 自动完成的工作。值得一提的是「Laputa」这个名字在仓库中有着历史渊源demo 仓库demo vault中的 24q4-laputa-start.md 记录了最初证明 Tolaria 能读取 Markdown vault、渲染笔记元数据、支持键盘优先导航的原型验证项目随后演进为 25q1-laputa-v1.md首个可日常使用的版本和 25q2-laputa-v2.md当前 QA 打磨项目。因此Todoist 中的 Laputa 任务指的就是这条产品线的开发任务。2. 任务来源与排序规则To Rework 优先p1 优先2.1 两个固定的任务分区命令从 Todoist 的两个分区section拉取任务分区section_id含义To Rework6g6QqvR9rRpvJWvv需要返工的任务通常是 QA 失败退回Open6g3XjWR832hVHhCM待办任务池In Progress6g3XjWjfmJFcGgHM领取后任务的去向In Review6g3XjX33FF4Vj86M完成后任务去向见 laputa-done2.2 强制排序规则命令强调排序是强制的mandatory因为 Todoist API 返回的任务顺序是任意的。规则如下先取 To Rework 分区再取 Open 分区To Rework 的任务永远排在 Open 之前与优先级无关在同一分区内按 Todoist 的priority字段降序排序Todoist 优先级字段的映射关系是4 p1紧急、3 p2、2 p3、1 p4只要同一分区内存在 p1/p2 任务就绝不允许选取 p3/p4 任务。换句话说真正的取任务顺序是To Rework 的全部任务按优先级降序 → Open 的全部任务按优先级降序然后取整个排序列表的第一项。这条规则与 AGENTS.md 中的描述一致For To Rework: the ❌ QA failed comment tells you exactly what to fix——即 To Rework 任务上的「❌ QA failed」评论直接说明了要修复什么因此它们拥有最高领取优先级。3. 领取任务的完整 API 流程3.1 移动到 In Progress命令的第 4 步通过 Todoist API 将任务移动到 In Progress 分区curl -s -X POST https://api.todoist.com/api/v1/tasks/task_id/move \ -H Authorization: Bearer $TODOIST_API_KEY \ -H Content-Type: application/json \ -d {section_id: 6g3XjWjfmJFcGgHM}要点API Key 通过环境变量$TODOIST_API_KEY注入命令本身不硬编码密钥请求体中的section_id固定为 In Progress 分区 ID使用curl -s静默模式避免输出污染 Agent 的上下文。3.2 添加 started 评论第 5 步向任务追加启动评论为后续的 Agent 和人类协作者留下上下文curl -s -X POST https://api.todoist.com/api/v1/comments \ -H Authorization: Bearer $TODOIST_API_KEY \ -H Content-Type: application/json \ -d {task_id: task_id, content: Starting work. [Brief description of approach or what needs to be fixed]}评论内容模板中的方括号部分需要替换为对实现思路或待修复问题的简要描述——这与 AGENTS.md 要求的 Starting work on this task. [...]评论格式一致。3.3 拉取完整任务详情第 6 步原文存在两个第 6 步实际是连续的取数动作通过两个 GET 请求获取任务的完整描述与评论以便 Agent 拿到足够的开工上下文curl -s https://api.todoist.com/api/v1/tasks/task_id \ -H Authorization: Bearer $TODOIST_API_KEY curl -s https://api.todoist.com/api/v1/comments?task_idtask_id \ -H Authorization: Bearer $TODOIST_API_KEY3.4 对 To Rework 任务的特殊处理如果领取的是 To Rework 任务命令要求读取任务上的「❌ QA failed」评论——它精确描述了需要修复的问题Agent 无需自行猜测。3.5 输出约定命令的最终输出必须包含任务 ID、标题、完整描述使 Agent 可以立刻开始工作而不必再查询。4. 空任务时的循环逻辑让 Agent 保持存活命令的最后一段明确要求如果两个分区都没有可用任务不要退出而是等待 10 分钟后重试循环执行while true; do # ... check tasks ... if no_tasks; then sleep 600 # 10 minutes else break # got a task, proceed fi done文档特别强调了一句关键设计意图This keeps Claude Code alive permanently — the watchdog is a safety net only, not the primary dispatcher.即这套命令循环本身才是任务分发的主通道外部 watchdog 进程只是兜底安全网。这解释了为什么命令宁可无限轮询也不退出——Claude Code 会话需要借此保持常驻随时准备接单。5. 与仓库工作流的衔接领取之后要做什么/laputa-next-task只是链条的起点。领取任务后Agent 需要遵循 AGENTS.md 定义的开发纪律这些规则与命令的设计意图一脉相承开工前置检查阅读任务描述与全部评论对照docs/adr/、docs/ARCHITECTURE.md、docs/ABSTRACTIONS.md 了解架构约束涉及架构决策时用 /create-adr 记录。TDD 与直接推送Red → Green → Refactor → Commit每个 commit 一个循环本地工作可发生在main或临时状态上最终成果直接推送到origin/main不走 PR 分支流参见 ADR-0021: Push-to-main workflow。质量门禁pre-commit 只做轻量 lintpre-push 执行完整检查套件build tests coverage 核心 Playwright smoke CodeScene。一个任务在git push origin main成功之前都不算完成——这正是/laputa-done命令开头那段警告的由来如果 push 被 pre-push 钩子拦截必须读错误、修复禁止使用--no-verify、重新提交并重推直到 push 以退出码 0 结束。完成闭环QAPlaywright 核心流程 原生应用 QA全部通过且 push 成功后运行/laputa-done task_id——追加 ✅ 完成评论含改动摘要、ADR 引用、Playwright 结果、原生 QA 观察、移入 In Review 分区、然后自动再次调用/laputa-next-task进入下一轮。从 src/types/laputaTestBridge.ts 等源码还可以看到Laputa 这个名字甚至渗透进了前端测试基础设施window.__laputaTest测试桥暴露了dispatchAppCommand、openDeepLink、triggerShortcutCommand、seedBlockNoteTable等接口供 Playwright/单元测试驱动真实应用行为。这从侧面说明Laputa 既是产品代号也是整套「Agent 驱动开发 自动化 QA」工程文化的载体。6. 与其他命令及 AI Agent 架构的配合/laputa-next-task并不是孤立存在的。它与仓库中的 AI Agent 架构决策相互呼应ADR-0012: Claude CLI subprocess for AI agentAI Agent 面板通过子进程方式调用 Claude CLIclaude_cli.rs由 CLI 原生承担工具调用循环、MCP 工具集成与 NDJSON 流式输出前端解析事件流实时渲染。.claude/commands/下的 Slash Command 正是这套「以 CLI 为 Agent 运行时」思路在开发流程侧的延伸。ADR-0092: Vault-scoped AI agent permission modesAgent 在 vault 内以safe/power_user两种权限模式运行遵循最小权限原则。Todoist 上的任务领取与执行同样应当在这个权限边界内进行。ADR-0148: Cancellable AI agent streams长时间运行的 CLI Agent 流可以被前端取消避免子进程在用户停止响应后继续运行。一句话总结这套架构Todoist 是任务队列与验收记录的外部事实源.claude/commands/是 Agent 与队列之间的协议层AGENTS.md 定义了队列里的任务如何被正确地做完并推回主线。7. 关键参数速查参数值用途To Rework section_id6g6QqvR9rRpvJWvv返工任务来源Open section_id6g3XjWR832hVHhCM待办任务来源In Progress section_id6g3XjWjfmJFcGgHM领取后移入In Review section_id6g3XjX33FF4Vj86M完成后移入laputa-doneTodoist priority 字段4p1,3p2,2p3,1p4排序依据降序API 认证Authorization: Bearer $TODOIST_API_KEY所有请求空任务重试间隔600 秒10 分钟无限循环等待8. 适用前提与限制本命令依赖环境变量TODOIST_API_KEY已被注入到 Claude Code 的运行环境中且相应 Todoist 账户对上述分区拥有读写权限文中涉及的 section_id 是当前仓库文档中记录的固定值若 Todoist 项目结构发生调整需要同步更新命令文件/laputa-next-task是给 AI Agent 使用的开发流程命令与 Tolaria 应用本身的用户功能无关其「keep looping」设计也意味着它只应在期望 Agent 常驻的场景下运行例如 CI/Agent 工作机避免在一次性会话中无限空转。【免费下载链接】tolariaDesktop app to manage markdown knowledge bases项目地址: https://gitcode.com/GitHub_Trending/to/tolaria创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。