[Bug] `ScheduleWakeup` tool called outside `/loop` with missing required `prompt` field
Bug Description
Title: ScheduleWakeup tool call omits required prompt field when invoked outside /loop — reproducible in 16+ sessions
Summary
Claude repeatedly calls the ScheduleWakeup tool while waiting on background subagents, in plain
interactive sessions that were never invoked via /loop. The call is always shaped{delaySeconds, noop, reason} — stop and prompt are both omitted. Since the tool's schema requiresprompt whenever stop isn't true, every one of these calls fails validation with:
prompt is required when stop is not true.
The raw validation error then leaks into the visible transcript as unexplained error text.
Why this is notable
ScheduleWakeup's own tool description already says, verbatim:
"Do NOT schedule a short-interval wakeup to poll for background work you started — when
harness-tracked work finishes, you are re-invoked automatically, so polling is wasted."
So this isn't a missing-instruction problem — the correct guidance is present in the tool's own spec,
in-context, every time, and the model reaches for the tool anyway.
Reproduction pattern
- In a plain session (not started via
/loop), launch 2+ background agents via theAgenttool. - Wait for them to complete.
- On or near a completion, Claude spontaneously calls
ScheduleWakeupto "check back" — using it as
a generic sleep/heartbeat mechanism rather than the /loop-only pacing tool it's designed to be.
- The call omits
prompt(andstop) → validation rejects it with the error above. - Claude's next turn self-corrects ("that tool isn't the right fit here, I'll just wait") and
proceeds normally. Background agents still complete and notify correctly — no data loss, no stall.
Verbatim examples of the malformed input (from 4 separate, unrelated sessions)
{"delaySeconds":90,"noop":true,"reason":"Waiting on 2 more parallel Explore agents ... before drafting the plan"}
{"delaySeconds":180,"noop":false,"reason":"Waiting on 2 background subagents ... before finishing X"}
{"delaySeconds":1200,"noop":true,"reason":"Fallback heartbeat while three subagents run in the background; primary wake signal is their completion notifications."}
{"delaySeconds":180,"reason":"Waiting on 7 background subagents to complete; checking back if no completion notification arrives first.","noop":true}
Every occurrence has the identical shape: delaySeconds + noop + reason present, stop absent orfalse, prompt absent.
Scope / frequency
Found via rg across local session transcripts: the exact error string
"prompt is required when stop is not true." appears in 16 distinct top-level sessions, across
many unrelated projects/tasks, spanning multiple weeks. This rules out a one-off fluke — it's a stable,
recurring tool-selection habit tied to "waiting on backgrounded work," not to any specific skill,
project, or prompt.
Impact
- Severity: low — self-correcting, no data loss, background work completes and notifies normally.
- Cost: one wasted turn + confusing raw error text surfaced to the user, per occurrence.
- Signal: because it recurs identically across totally unrelated contexts, it looks like a generalized
model habit rather than an isolated bug in one session.
Suggested directions (not prescriptive — just what's visible from the outside)
- Gate
ScheduleWakeup's tool-availability to true/loopdynamic-mode contexts only, so it can't be
reached for in a plain session.
- Have the harness treat a
prompt-missing /stop-absent call as a soft no-op instead of surfacing a
raw validation error to the end user.
- Reinforce (training-side) that "waiting on backgrounded work" should never route through this tool,
given the description already explicitly warns against it and is evidently not sufficient on its own.
Environment
Claude Code CLI, model claude-sonnet-5, both default and high-reasoning-effort interactive sessions,
macOS. Not tied to any particular skill/slash-command — observed during plain multi-agent waits.
Environment Info
- Platform: darwin
- Terminal: ghostty
- Version: 2.1.237
- Feedback ID: 617431e1-2535-41ea-a7e5-60cd6155c786
Errors
[]