current
计划模式会写todo,但是转化为build模式后,todo清空使得用户感知不明显todo作用,且按照市面普遍,计划模式是不会写todo的
Summary
将当前行为改为:plan 模式只负责研究、澄清和输出可读计划草案,不创建或维护执行态 session.Todos;build 模式在真正开始执行复杂任务时才通过 todo_write 生成和推进 todo。这样更接近主流 coding agent:计划是交互/审批产物,todo 是执行进度状态。
Key Changes
- 移除
plan 模式对 todo_write 的可见性和执行许可:只保留只读工具与 ask_user。
- 修改 plan prompt:不再要求
plan_spec.todos 非空,不再要求 summary_candidate.active_todo_ids,计划输出聚焦 goal / steps / constraints / open_questions。
- 修改 runtime plan 落库逻辑:
PlanSpec.Todos 不再自动灌入 session.Todos;旧 plan revision 替换时也不再通过 plan-owned todo 做取消/继承。
- 保留 build bootstrap:当 build 模式没有 active todos 时,由现有
todoBootstrapRequiredReminder 引导模型在执行前用 todo_write action=plan/add 创建当前 run 的执行 todo。
- 更新 plan/build 文档与测试预期,明确
CurrentPlan 是计划上下文,Todo State 是 build 执行状态,两者不再在 plan 模式自动绑定。
Implementation Notes
- 重点修改
internal/tools/mode_filter.go,从 read-only 可见工具和 read-only write 例外中移除 ToolNameTodoWrite。
- 重点修改
internal/promptasset/templates/context/plan_mode_plan.md、internal/promptasset/templates/core/capabilities_plan.md、internal/runtime/todo_bootstrap.go 中 plan bootstrap 文案。
- 重点修改
internal/session/plan.go 和 internal/runtime/planning.go:允许 PlanSpec.Todos 为空,并停止 applyCurrentPlanRevision 向 session.Todos 补写 plan todo。
- 被触碰的乱码中文注释/提示文案按 UTF-8 无 BOM 修复,避免继续提交 mojibake。
Test Plan
- 更新并新增
internal/tools 测试:plan/read-only 模式下 todo_write 不可见且执行会被阻断,ask_user 仍可用。
- 更新
internal/runtime plan 模式测试:输出 plan JSON 后只持久化 CurrentPlan,不新增 session.Todos。
- 更新 build 模式测试:无 plan/无 todo 时仍触发 build todo bootstrap;有
CurrentPlan 但无 todo 时,build 仍应创建当前 run todo。
- 更新
internal/context / internal/promptasset 测试:plan prompt 不再包含强制 plan_spec.todos must be non-empty、summary_candidate.active_todo_ids 等要求。
- 运行
go test ./...,必要时补充覆盖 plan/build 切换、旧会话迁移、plan revision 替换不污染 todo 的回归场景。
Assumptions
- 采用“Build 写 Todo”语义:plan 模式不写执行态 todo。
- 暂不删除
PlanSpec.Todos 字段,以降低迁移风险;字段可兼容旧数据,但新 prompt 和 runtime 不再依赖它。
CurrentPlan 仍可在 build 模式作为上下文指导执行,但是否拆成 todo 由 build 阶段模型通过 todo_write 明确完成。
current
计划模式会写todo,但是转化为build模式后,todo清空使得用户感知不明显todo作用,且按照市面普遍,计划模式是不会写todo的
Summary
将当前行为改为:
plan模式只负责研究、澄清和输出可读计划草案,不创建或维护执行态session.Todos;build模式在真正开始执行复杂任务时才通过todo_write生成和推进 todo。这样更接近主流 coding agent:计划是交互/审批产物,todo 是执行进度状态。Key Changes
plan模式对todo_write的可见性和执行许可:只保留只读工具与ask_user。plan_spec.todos非空,不再要求summary_candidate.active_todo_ids,计划输出聚焦goal / steps / constraints / open_questions。PlanSpec.Todos不再自动灌入session.Todos;旧 plan revision 替换时也不再通过 plan-owned todo 做取消/继承。todoBootstrapRequiredReminder引导模型在执行前用todo_write action=plan/add创建当前 run 的执行 todo。CurrentPlan是计划上下文,Todo State是 build 执行状态,两者不再在 plan 模式自动绑定。Implementation Notes
internal/tools/mode_filter.go,从 read-only 可见工具和 read-only write 例外中移除ToolNameTodoWrite。internal/promptasset/templates/context/plan_mode_plan.md、internal/promptasset/templates/core/capabilities_plan.md、internal/runtime/todo_bootstrap.go中 plan bootstrap 文案。internal/session/plan.go和internal/runtime/planning.go:允许PlanSpec.Todos为空,并停止applyCurrentPlanRevision向session.Todos补写 plan todo。Test Plan
internal/tools测试:plan/read-only 模式下todo_write不可见且执行会被阻断,ask_user仍可用。internal/runtimeplan 模式测试:输出 plan JSON 后只持久化CurrentPlan,不新增session.Todos。CurrentPlan但无 todo 时,build 仍应创建当前 run todo。internal/context/internal/promptasset测试:plan prompt 不再包含强制plan_spec.todos must be non-empty、summary_candidate.active_todo_ids等要求。go test ./...,必要时补充覆盖 plan/build 切换、旧会话迁移、plan revision 替换不污染 todo 的回归场景。Assumptions
PlanSpec.Todos字段,以降低迁移风险;字段可兼容旧数据,但新 prompt 和 runtime 不再依赖它。CurrentPlan仍可在 build 模式作为上下文指导执行,但是否拆成 todo 由 build 阶段模型通过todo_write明确完成。