Plan-review widget shows stale/wrong plan content (survives full app restart)

Status Open
Maintainer reply None cached
Activity 1 comment · opened Jul 21, 2026

Summary

Calling ExitPlanMode to present a plan for approval sometimes shows the user a different, older plan than the one just written to the plan file — not the plan that was actually drafted for the current request. This happened twice in one session, with two different stale plans, and survived a full application restart.

What I observed (from the assistant's side)

  1. Wrote a new plan to the session's plan file (e.g. ~/.claude/plans/<name>.md), confirmed via direct Read/md5 that its on-disk content was correct.
  2. Called ExitPlanMode.
  3. User reported the plan view showed an unrelated, already-completed older plan instead.
  4. Re-read the plan file again — content was still correct on disk.
  5. Called ExitPlanMode again — user reported it was now showing a different, even older plan (from several turns earlier in the same session, matching a second stale plan file's own title sitting in the same ~/.claude/plans/ directory).
  6. User fully quit and restarted the application. The bug persisted — same stale plan still shown.
  7. Workaround: pasted the plan's own text directly into the chat response instead of relying on the widget; the user reviewed and approved via plain text, and a subsequent ExitPlanMode call (after the user replied "Proceed"/"go ahead") then correctly returned the right plan content in its own tool result.

This happened a second time, later in the same session, with yet another plan — same symptom (widget shows a stale/wrong plan even though the underlying file is correct), same workaround (paste as text) resolved it.

Environment detail that may be relevant

There were two files in ~/.claude/plans/: the one referenced by the current turn's system reminder (containing the correct, current plan), and an older one from a previous planning round earlier in the same conversation. The content shown in the broken widget matched the older file's title, suggesting the review UI may be resolving to a stale plan file reference/identifier for the conversation rather than the one the harness told the assistant to use for that turn.

Impact

  • Blocks the normal plan-approval flow — the user cannot trust what they're reviewing matches what was actually planned.
  • Not fixed by restarting the app.
  • Only reliable workaround found: have the assistant paste the plan as plain chat text and get approval that way instead of via the plan-review UI.

Expected behavior

The plan-review widget should always render the plan file's current, actual on-disk content for the active conversation turn, and should not persist/serve stale content across either repeated ExitPlanMode calls or a full application restart.

View original on GitHub ↗

This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗