[Bug] Ultraplan ready notification fires before cloud agent completes execution
Bug Description
Bug: ◆ ultraplan ready notification fires prematurely, before the cloud agent has
finished
Severity: Medium — causes wasted user trust and incorrect downstream actions in
local Claude Code.
Reproduction:
- From local Claude Code, trigger an Ultraplan session (either via /ultraplan
slash command or by creating a RemoteTrigger routine).
- Wait until the local CLI shows ◆ ultraplan ready ·
https://claude.ai/code/session_<id>?from=cli.
- Open the session URL in the browser.
Expected: The notification arrives only after the cloud agent has finished its
work — at minimum, the agent's final message is written and (if applicable) the
commit/branch the agent was asked to produce is pushed.
Actual: The ◆ ready notification arrives while the agent is still running. The
system-reminder text accompanying it (The remote ultraplan session produced a
plan and is waiting for approval. Tell the user to open <URL> to review it.) is
also factually incorrect at that point — no plan has been produced yet.
Consequences in local Claude Code:
- The local instance reads the system-reminder literally and tells the user the
plan is ready.
- It then exits plan mode and proposes to start implementation — based on a plan
that doesn't exist yet.
- In one observed case (2026-05-27), the cloud agent eventually timed out
(Ultraplan terminated: no approval after 90 minutes) without ever producing
output, meaning the local instance had already moved past a plan that never
materialized.
Suggested fix (any of these would help):
- Only emit ◆ ready after the cloud agent's terminal turn completes. If the
agent is asked to commit work, only after the push succeeds.
- Change the system-reminder text so it doesn't assert "produced a plan" when
that hasn't been verified — e.g. The remote ultraplan session is open for review
at <URL>. Status: <running|finished|timed-out>.
- Include a machine-readable status (running / completed / timed-out) in the
notification payload so local Claude can branch on it rather than trusting prose.
Environment:
- Local Claude Code CLI on Linux
- Triggered both via /ultraplan slash command and via RemoteTrigger API
(run_once_at schedule mode) — both surfaces show the bug.
Environment Info
- Platform: linux
- Terminal: ghostty
- Version: 2.1.152
- Feedback ID: c59d602b-9752-47d8-9217-3fcbdc9635b8
Errors
[{"error":"Error: Tool Glob not found\n at n44 (/$bunfs/root/src/entrypoints/cli.js:4005:14126)\n at Bf (/$bunfs/root/src/entrypoints/cli.js:551:21158)\n at Yj (/$bunfs/root/src/entrypoints/cli.js:551:39928)\n at HKH (/$bunfs/root/src/entrypoints/cli.js:551:50740)\n at q9 (/$bunfs/root/src/entrypoints/cli.js:551:87775)\n at E$ (/$bunfs/root/src/entrypoints/cli.js:551:86741)\n at BWH (/$bunfs/root/src/entrypoints/cli.js:551:86562)\n at IJ (/$bunfs/root/src/entrypoints/cli.js:551:82895)\n at j$ (/$bunfs/root/src/entrypoints/cli.js:551:6442)\n at FM6 (/$bunfs/root/src/entrypoints/cli.js:544:5415)","timestamp":"2026-05-27T20:19:40.734Z"},{"error":"Error: Tool Glob not found\n at n44 (/$bunfs/root/src/entrypoints/cli.js:4005:14126)\n at Bf (/$bunfs/root/src/entrypoints/cli.js:551:21158)\n at Yj (/$bunfs/root/src/entrypoints/cli.js:551:39928)\n at HKH (/$bunfs/root/src/entrypoints/cli.js:551:50740)\n at q9 (/$bunfs/root/src/entrypoints/cli.js:551:87775)\n at E$ (/$bunfs/root/src/entrypoints/cli.js:551:86741)\n at BWH (/$bunfs/root/src/entrypoints/cli.js:551:86562)\n at IJ (/$bunfs/root/src/entrypoints/cli.js:551:82895)\n at j$ (/$bunfs/root/src/entrypoints/cli.js:551:6442)\n at FM6 (/$bunfs/root/src/entrypoints/cli.js:544:5415)","timestamp":"2026-05-27T20:19:41.193Z"},{"error":"Error: Tool Glob not found\n at n44 (/$bunfs/root/src/entrypoints/cli.js:4005:14126)\n at Bf (/$bunfs/root/src/entrypoints/cli.js:551:21158)\n at Yj (/$bunfs/root/src/entrypoints/cli.js:551:39928)\n at HKH (/$bunfs/root/src/entrypoints/cli.js:551:50740)\n at q9 (/$bunfs/root/src/entrypoints/cli.js:551:87775)\n at E$ (/$bunfs/root/src/entrypoints/cli.js:551:86741)\n at BWH (/$bunfs/root/src/entrypoints/cli.js:551:86562)\n at IJ (/$bunfs/root/src/entrypoints/cli.js:551:82895)\n at j$ (/$bunfs/root/src/entrypoints/cli.js:551:6442)\n at FM6 (/$bunfs/root/src/entrypoints/cli.js:544:5415)","timestamp":"2026-05-27T20:19:41.662Z"}]This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗