Feature: iterate on a proposed plan, reject/delete it, and attach a todo checklist (Cursor/Claude Code CLI parity)
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 23k
- Forks
- 5.9k
- Avg merge
- 11h 14m
- Merged PRs (30d)
- 357
Description
Summary
Compared to Cursor and Claude Code CLI, T3 Code's proposed-plan flow (ProposedPlanCard / proposedPlans) is missing three things: a real iterate-until-right loop, a way to reject/delete a plan, and a todo checklist attached to the plan itself.
Current behavior
The composer's plan follow-up prompt (ChatComposer.tsx, shouldShowPlanFollowUpPrompt in ChatView.logic.ts) only supports two outcomes once a plan is proposed:
if (showPlanFollowUpPrompt) {
return prompt.trim().length > 0 ? "plan:refine" : "plan:implement";
}
- Typing feedback + send →
plan:refine, which sends another turn and replaces the card content. There's no diff or history across revisions, so you can't easily see what changed between iterations or roll back to an earlier version. - Leaving it blank + send →
plan:implement, which spawns a new thread viaonImplementPlanInNewThreadwithPLEASE IMPLEMENT THIS PLAN:\n<plan>. - There is no third path.
ComposerPlanFollowUpBanner.tsxis a static "Plan ready:<title>" label with no dismiss/reject affordance, andProposedPlanCard's own menu only has Copy / Download / Save to workspace (ProposedPlanCard.tsx).hasActionableProposedPlan(session-logic.ts) only ever flips to false via implementation (implementedAtbeing set) — there's no reject path that sets it false without implementing. - Separately, ACP already has a task-checklist concept (
sessionUpdate: "plan",publishTaskPlan/taskStateToPlanEntriesinclaude-agent-acp/src/acp-agent.ts) surfaced viaactiveTasksProgress/activeTaskSteps, but that's a live execution checklist for a running turn — it isn't attached toproposedPlansat the proposal stage.
Expected (Cursor / Claude Code CLI parity)
- Iterate: refining a plan should feel like a real conversation about the plan — visible history/diff of revisions, not a silent full replace, so you can converge on the right plan before committing.
- Reject/delete: an explicit action to discard a proposed plan without implementing it (distinct from just not responding), setting
hasActionableProposedPlanback to false and clearing the card/banner. - Attached todo list: the plan itself should carry a checklist (like Cursor's plan+todo breakdown or Claude Code CLI's
TodoWrite), generated alongside the plan and visible inProposedPlanCard, not only as a transient execution-time checklist.
Notes
This is a UX/state-machine gap in the plan feature itself, independent of provider. Mapping additional providers' native plan RPCs (e.g. Cursor's cursor/create_plan) into proposedPlans is only useful once this loop actually supports iterate/reject/todos — otherwise those providers inherit the same limited two-branch flow.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with ChatComposer.tsx, shouldShowPlanFollowUpPrompt in ChatView.logic.ts, ComposerPlanFollowUpBanner.tsx, ProposedPlanCard.tsx, and hasActionableProposedPlan in session-logic.ts. Trace how proposedPlans and implementation state flow through these entry points, then compare the existing ACP task-plan handling in claude-agent-acp/src/acp-agent.ts. Done means plans support revision history, explicit rejection, and a visible attached checklist without requiring implementation.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- frontend
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100