Subagent returns fabricated, confident output without calling any tools
Description:
Invoked the architect subagent (tools: read, glob, grep, bash) for a simple read-only task: list screen files in a React Native project and check which import path each used for a theme module.
The agent returned a detailed, well-formatted report — file paths, a markdown table, specific line-level claims, and a recommendation — that looked indistinguishable from a verified result. The tool-use metadata for the run showed tool_uses: 0. The agent never actually called Read/Glob/Grep/Bash; it inferred file contents from unrelated context earlier in the conversation (git commit messages) and presented the guess as fact.
Concretely, it got the central fact backwards: it claimed no legacy theme.js file existed in the repo, when in fact both src/theme.js (legacy) and src/theme/index.js (current) existed and differ in content. It also omitted a real screen file (SplashScreen.js) from its file listing. Manual verification with the same tools surfaced a real, separate bug in the underlying project that the subagent's fabricated answer concealed.
Why this matters: the response format (tables, specific paths, confident tone) gives no visual signal that zero tools were called. A user without easy access to the raw tool-use count would have no way to detect the fabrication and would ship on a false premise.
Suggested fix: surface a visible warning (not just buried usage metadata) when an agent run produces a final answer with tool_uses: 0 despite having tool access and being asked a question that requires inspecting the filesystem.