[BUG] Built-in Workflow tool description (~4k tokens) is injected as conversation content every turn, with no way to disable it
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
Environment
Claude Code via VSCode extension (Agent SDK), Windows 11
Model: Claude Opus 4.8
What happens
The built-in Workflow tool's full description (~4000 tokens, mentioning ultracode, FleetView, and the agent()/parallel()/pipeline()/phase() script hooks) appears as a regular conversation message on every turn, rather than being sent once in the request's cacheable tools parameter.
Why it's a problem
Position — tool definitions are designed to live in the cacheable tools prefix (billed once, ~10% on cache hits). Injected as conversation content, the ~4k tokens risk full re-billing whenever the cache breakpoint shifts.
Not disableable — Workflow is not documented in the public Claude Code docs (ultracode/FleetView return no official hits). There's no disabledTools/enabledTools setting, no --disallowedTools flag, no env var. permissions only gates invocation, not whether the description enters context. Related open issues: #1380, #7328.
Side effect — its constant presence pushes the model to repeatedly acknowledge/ignore it, wasting output tokens.
Requests (any one)
Move built-in tool descriptions (incl. Workflow) back into the cacheable tools parameter instead of conversation content; or
Provide a user-level switch to disable Workflow so its description never enters context; or
Confirm the block is correctly marked as a cacheable prefix to avoid per-turn re-billing.
What Should Happen?
Environment
Claude Code via VSCode extension (Agent SDK), Windows 11
Model: Claude Opus 4.8
What happens
The built-in Workflow tool's full description (~4000 tokens, mentioning ultracode, FleetView, and the agent()/parallel()/pipeline()/phase() script hooks) appears as a regular conversation message on every turn, rather than being sent once in the request's cacheable tools parameter.
Why it's a problem
Position — tool definitions are designed to live in the cacheable tools prefix (billed once, ~10% on cache hits). Injected as conversation content, the ~4k tokens risk full re-billing whenever the cache breakpoint shifts.
Not disableable — Workflow is not documented in the public Claude Code docs (ultracode/FleetView return no official hits). There's no disabledTools/enabledTools setting, no --disallowedTools flag, no env var. permissions only gates invocation, not whether the description enters context. Related open issues: #1380, #7328.
Side effect — its constant presence pushes the model to repeatedly acknowledge/ignore it, wasting output tokens.
Requests (any one)
Move built-in tool descriptions (incl. Workflow) back into the cacheable tools parameter instead of conversation content; or
Provide a user-level switch to disable Workflow so its description never enters context; or
Confirm the block is correctly marked as a cacheable prefix to avoid per-turn re-billing.
Error Messages/Logs
Steps to Reproduce
Environment
Claude Code via VSCode extension (Agent SDK), Windows 11
Model: Claude Opus 4.8
What happens
The built-in Workflow tool's full description (~4000 tokens, mentioning ultracode, FleetView, and the agent()/parallel()/pipeline()/phase() script hooks) appears as a regular conversation message on every turn, rather than being sent once in the request's cacheable tools parameter.
Why it's a problem
Position — tool definitions are designed to live in the cacheable tools prefix (billed once, ~10% on cache hits). Injected as conversation content, the ~4k tokens risk full re-billing whenever the cache breakpoint shifts.
Not disableable — Workflow is not documented in the public Claude Code docs (ultracode/FleetView return no official hits). There's no disabledTools/enabledTools setting, no --disallowedTools flag, no env var. permissions only gates invocation, not whether the description enters context. Related open issues: #1380, #7328.
Side effect — its constant presence pushes the model to repeatedly acknowledge/ignore it, wasting output tokens.
Requests (any one)
Move built-in tool descriptions (incl. Workflow) back into the cacheable tools parameter instead of conversation content; or
Provide a user-level switch to disable Workflow so its description never enters context; or
Confirm the block is correctly marked as a cacheable prefix to avoid per-turn re-billing.
Claude Model
Opus
Is this a regression?
I don't know
Last Working Version
_No response_
Claude Code Version
Claude Code via VSCode extension (Agent SDK), Windows 11 v2.1.163
Platform
AWS Bedrock
Operating System
Windows
Terminal/Shell
VS Code integrated terminal
Additional Information
_No response_
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗