[Bug] Ultraplan ready notification fires before cloud agent completes execution

Resolved 💬 2 comments Opened May 28, 2026 by cocodedk Closed Jun 29, 2026

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:

  1. From local Claude Code, trigger an Ultraplan session (either via /ultraplan

slash command or by creating a RemoteTrigger routine).

  1. Wait until the local CLI shows ◆ ultraplan ready ·

https://claude.ai/code/session_<id>?from=cli.

  1. 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):

  1. Only emit ◆ ready after the cloud agent's terminal turn completes. If the

agent is asked to commit work, only after the push succeeds.

  1. 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>.

  1. 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"}]

View original on GitHub ↗

This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗