Bundled workflows (deep-research, code-review) are not enumerated in model context — model falsely tells users the slash command doesn't exist

Status Open
Reported on v2.1.222
Maintainer reply None cached
Activity 5 comments · opened Aug 8, 2026

Summary

Bundled workflows (deep-research, code-review) are invocable via Workflow({name: "..."}) and are exposed to users as slash commands, but their names are never enumerated in the model's context. Every other invocable surface is: skills, MCP tools, agent types, and deferred tools all arrive as explicit inventories. Workflows arrive as a bare name parameter with no directory.

The result is that the model cannot distinguish "this workflow does not exist" from "I have no list of workflows" — and it reliably resolves that ambiguity the wrong way, telling the user the command is unavailable.

This has happened to me multiple times across sessions.

What happens

I typed /deep-research alongside another request. The model responded:

/deep-research isn't available in this session — it's not among the installed skills, so I can't invoke it.

It then substituted a hand-authored workflow instead.

deep-research is in fact a bundled workflow that was available the entire time. When I pushed back, the model searched the filesystem and found it immediately — including 15 persisted deep-research-wf_*.js scripts across 13 distinct sessions in my own transcript history. It had been running it for weeks.

Expected

The model should either (a) receive an enumeration of available workflow names the way it receives skills, MCP tools, and agent types, or (b) be told explicitly that the workflow registry is not enumerated in context, so "not listed" carries no information about existence.

Either fixes the failure. Silence about the registry's existence is what produces a confident false denial.

Why it happens

Two mechanisms compound:

  1. No inventory. The Workflow tool description says name is the "Name of a predefined workflow (built-in or from .claude/workflows/)" and then lists none. There is no way for the model to check.
  1. An adjacent instruction that over-generalizes. The session prompt instructs: "Only use skills listed in the user-invocable skills section — don't guess." That rule is correct and well-scoped for Skills, and deep-research is correctly absent from the skills list because it is not a skill. But it has no counterpart for workflows, so the model applies skill-shaped reasoning to a workflow and concludes non-existence rather than "wrong lookup table."

The failure is quiet, which is what makes it costly — the user gets a plausible-sounding denial and a substituted approach rather than an error.

Reproduction

  1. Invoke /deep-research (or /code-review) in a session where the model has not previously used it.
  2. Observe whether the model invokes Workflow({name: "deep-research"}) or claims the command is unavailable.

Not deterministic, but recurring. The denial is more likely when the workflow is requested alongside other work rather than as the sole instruction.

Related

  • #73731 — Workflow({name}) does not discover saved workflows under .claude/workflows/. Related but distinct: that is a runtime resolution failure for user-saved workflows. This report is about bundled workflows resolving fine while being invisible to the model's context, so it declines to call them. If triage disagrees and considers these one issue, they share a root cause in workflow-name discoverability.
  • #78994 — confirms deep-research and code-review are bundled workflows.

Suggested fix

Emit available workflow names into context alongside the existing skills/agents/MCP inventories. A one-line-per-workflow listing with whenToUse would be enough — deep-research's meta already carries a usable description.

Environment

  • Claude Code 2.1.222
  • Windows 11 Pro 26200
  • Model: Opus 5

View original on GitHub ↗

3 Comments

wshallwshall · 2 months ago

Still reproduces on 2.1.232 (filed against 2.1.222). Re-verified today in a fresh Opus 5 session, Windows 11 Pro 26200. Nothing about the mechanism has changed:

  • The Workflow tool's name parameter still reads "Name of a predefined workflow (built-in or from .claude/workflows/)" and still enumerates zero names.
  • The skills inventory still (correctly) omits deep-research, and the instruction "Only use skills listed in the user-invocable skills section — don't guess" is still present verbatim, still with no workflow counterpart.

Two details I did not have when I filed, both of which sharpen the case:

1. A listed skill's own description points at an unenumerated command. The review skill's description reads: "Review a GitHub pull request; for your working diff use /code-review". Context actively directs the model toward a command it is given no listing for — the same command in the title of this issue. A model that trusts its inventories has been handed a contradiction.

2. The session prompt now carries a hand-written paragraph for exactly one workflow variant:

If the user asks about "ultrareview" or how to run it, explain that /code-review ultra launches a multi-agent cloud review of the current branch (or /code-review ultra <PR#> for a GitHub PR) […] It is user-triggered and billed; you cannot launch it yourself.

That paragraph is the fix in this report, applied by hand, to one case. It's good evidence that injecting workflow facts into context is both necessary and an accepted remedy — it just doesn't generalize to the other workflows, or to anything under .claude/workflows/ (#73731).

One enumeration of the workflow registry would cover deep-research, code-review, and user-saved workflows at once, and would let that special-cased paragraph shrink to a line in the listing.

wshallwshall · 1 month ago

Still open and still unaddressed. The re-verification above stands, and nothing about the mechanism has changed.

The asymmetry is the whole bug. Skills, MCP tools, agent types and deferred tools all arrive in context as explicit inventories. Workflows arrive as a bare name parameter whose description points at "built-in or from .claude/workflows/" and enumerates nothing. So the model has no way to tell "no such workflow" from "I was given no list", and it reliably resolves that ambiguity by telling the user the command does not exist.

Commenting because this crosses the 14-day sweep threshold today.

wshallwshall · 1 month ago

Still open. The specific asymmetry here is that every other invocable surface reaches the model as an explicit inventory. Skills, MCP tools, agent types and deferred tools all arrive as lists. Workflows arrive as a bare name parameter with no directory.

The consequence is that the model cannot tell "this workflow does not exist" from "I have no list of workflows", and it resolves that ambiguity the wrong way. I typed /deep-research and was told it was not available in the session and not among the installed skills. It was a bundled workflow, available the whole time. When I pushed back, a filesystem search found 15 persisted deep-research-wf_*.js scripts across 13 of my own prior sessions. It had been running it for weeks.

Either fix works. Enumerate the workflow names the way skills and agent types are enumerated, or state in context that the registry is not enumerated, so "not listed" stops being read as "not present".

Showing cached comments. Read the full discussion on GitHub ↗