Idle "task tools haven't been used recently" nudge omits the deferred-tool ToolSearch step, so acting on it fails with InputValidationError
What's Wrong?
The periodic idle system-reminder that nudges agents to use the task tools —
The task tools haven't been used recently. If you're working on tasks that would benefit from tracking progress, consider using TaskCreate to add new tasks and TaskUpdate to update task status (set to in_progress when starting, completed when done). Also consider cleaning up the task list if it has become stale. Only use these if relevant to the current work. This is just a gentle reminder - ignore if not applicable.
— recommends calling TaskCreate/TaskUpdate, but in sessions where those are deferred tools their schemas are not loaded. Calling them directly (the exact action the nudge invites) fails with InputValidationError. The nudge does not mention that the tools must first be discovered via ToolSearch.
The deferred-tool requirement is stated once, in the SessionStart system-reminder that lists all deferred tools by name. The idle nudge is injected many turns later — typically long after that initial list has scrolled out of the model's recent context — and does not repeat or reference the ToolSearch requirement. An agent that acts on the nudge without independently recalling the deferred-tool list from conversation start reaches for TaskCreate directly and misfires on the first call, every time.
This is the same defect class already fixed for the bgIsolation guard message in #62372 ("error tells agents to call EnterWorktree, which is a deferred tool" — closed, "Addressed by a merged fix"). That fix enriched the guard message to reference ToolSearch, but the same treatment was not applied to the idle task-tool nudge, which still omits it on the current version.
What Should Happen?
Acting on the idle nudge should not deterministically fail. Either:
- Enrich the nudge text to reference the load step (mirroring the #62372 fix), e.g. append: "(TaskCreate/TaskUpdate are deferred tools — if their schemas aren't loaded yet this conversation, first call
ToolSearchwith queryselect:TaskCreate,TaskUpdate, then retry.)", or - Pre-load the
TaskCreate/TaskUpdateschemas before/at the moment the idle nudge is injected. Since the runtime is already deciding to prompt for their use, silently loading their schemas at that point removes the misfire entirely and needs no text change.
Either removes the guaranteed first-call failure.
Error Messages/Logs
InputValidationError: TaskCreate failed due to the following issues:
The required parameter `subject` is missing
The required parameter `description` is missing
An unexpected parameter `tasks` was provided
TaskCreate creates ONE task per call and has no `tasks` or `todos` parameter. ...
This tool's schema was not sent to the API — it was not in the discovered-tool set
derived from message history. Without the schema in your prompt, typed parameters
(arrays, numbers, booleans) get emitted as strings and the client-side parser rejects
them. Load the tool first: call ToolSearch with query "select:TaskCreate", then retry
this call. ...
The error text confirms the root cause: the schema was never loaded, and the correct recovery is a ToolSearch hop the nudge never mentioned. (Note the error conflates two independent problems — a wrong parameter shape AND a missing schema — which makes it non-obvious to agents which fix actually resolves it; but even a correctly-shaped single-task call fails pre-ToolSearch-load.)
Steps to Reproduce
- Start a long-running session in which
TaskCreate/TaskUpdateare deferred tools (their schemas are NOT loaded at start — confirmed by theSessionStartdeferred-tools system-reminder listing them). - Do NOT call
ToolSearchfor the task tools. - Continue working long enough (many turns) that the idle "task tools haven't been used recently" system-reminder fires.
- Act on the nudge: call
TaskCreatedirectly (without a precedingToolSearch). - Observe: the call fails with
InputValidationErrorbecause the schema was never loaded. AToolSearch({query: "select:TaskCreate,TaskUpdate"})round-trip is required before the intended calls can succeed.
Reproduced independently across multiple autonomous coding-agent sessions on the current version (three separate sessions over 2026-07-15 → 2026-07-16), each with a different malformed-call flavor (guessed tasks: [...] batch array; guessed Agent-tool-shaped subagent_type/prompt params) — confirming agents guess the parameter shape entirely wrong without the schema in context, not merely wrong values.
Environment
- Claude Code version: 2.1.212
- Model: Multiple (Sonnet + Opus)
- OS: Linux
- Terminal/Shell: Non-interactive / autonomous (headless
claude -p) sessions - Is this a regression? Unknown — the idle nudge and the deferred-tool/
ToolSearchmechanism are both current features; their interaction fails on the current version. The analogousbgIsolation→EnterWorktreecase (#62372) was fixed 2026-05-27, but that fix did not cover this nudge.
Additional Information
- Precedent (already-merged fix, same defect class): #62372 —
bgIsolationguard message referenced the deferredEnterWorktreetool without aToolSearchstep; fixed by enriching the message. This issue is that same pattern applied to the idle task-tool nudge, which the #62372 fix did not touch. - Related but distinct (same artifact, different defect): #64192 (open) requests a suppression knob for this nudge (cost/noise) — orthogonal to the deferred-tool misfire; its body quotes the current nudge text, confirming it still omits any
ToolSearch/deferred-tool mention. #55669 (closed) — "System prompt directs deferred tools; end-of-turn rule conflict."