Prior search
What's the problem
When a Claude Code agent presents a plan (ExitPlanMode), the plan only lives in the
transient permission card. The moment I respond, it's gone from the conversation:
- Implement → the plan vanishes; I can't re-read what I just approved.
- Reject → same; no record of what was proposed.
- Type a follow-up instead of tapping a button → the plan also disappears.
So right at the one moment I'd most likely want to re-read the plan — just after deciding
on it — there's no way back to it. For any plan longer than a couple of lines, this is a
recurring papercut.
Steps to reproduce:
- Start a Claude Code agent in plan mode.
- Let it present a plan (the
ExitPlanMode permission card appears).
- Respond any way — Implement, Reject, or just type a message.
- The plan is no longer anywhere in the timeline.
What would solve it
Keep the resolved plan in the conversation as a collapsible card, at the position
where it was proposed:
- Collapsed: the plan's own title + an outcome badge — Approved / Rejected /
Dismissed (dismissed = I typed a follow-up instead of tapping a button).
- Tap to expand: the full plan, on demand.
- Durable: survives a daemon restart, so history stays complete.
No new plan view and no new data model — the card can come straight from the ExitPlanMode
tool_use + tool_result that's already in the session transcript, so it's cheap and stays
consistent live and after a reload.
I threw together a working prototype just to make these screenshots concrete (happy to park
it and go whichever way you prefer — wanted to check the idea first):
The plan, presented for approval:
After approving — it stays as a collapsed card with its outcome, right in the stream:
Tap to re-read the whole plan:
Same for a rejected plan:
Alternatives you considered
Known nuance: after a daemon restart, a plan dismissed by typing a follow-up currently
reloads as Rejected rather than Dismissed (the transcript records a typed
follow-up and a clicked Reject the same way). Live, before a restart, it shows
Dismissed. Flagging in case distinguishing them after reload matters.
Prior search
What's the problem
When a Claude Code agent presents a plan (
ExitPlanMode), the plan only lives in thetransient permission card. The moment I respond, it's gone from the conversation:
So right at the one moment I'd most likely want to re-read the plan — just after deciding
on it — there's no way back to it. For any plan longer than a couple of lines, this is a
recurring papercut.
Steps to reproduce:
ExitPlanModepermission card appears).What would solve it
Keep the resolved plan in the conversation as a collapsible card, at the position
where it was proposed:
Dismissed (dismissed = I typed a follow-up instead of tapping a button).
No new plan view and no new data model — the card can come straight from the
ExitPlanModetool_use + tool_result that's already in the session transcript, so it's cheap and stays
consistent live and after a reload.
I threw together a working prototype just to make these screenshots concrete (happy to park
it and go whichever way you prefer — wanted to check the idea first):
The plan, presented for approval:
After approving — it stays as a collapsed card with its outcome, right in the stream:
Tap to re-read the whole plan:
Same for a rejected plan:
Alternatives you considered
the timeline, so once it's answered it's unrecoverable.
view") is the bigger, related vision. This is a much smaller slice — just don't lose the
plan inside the existing timeline. It could stand alone or be a first step toward Proposal: surface plan as a first-class entity with live tracking and a dedicated view #615.