[BUG] Subagent vision accuracy severely degraded compared to main conversation (~20% vs ~95%)

Resolved 💬 4 comments Opened Dec 29, 2025 by jonahparansky Closed Feb 14, 2026

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?

When using the Task tool to spawn subagents for vision/image analysis tasks, accuracy is dramatically lower than performing the same task in the main conversation. The same image and prompt produces ~95% accuracy in the main conversation but only ~20% accuracy in a subagent. The subagent can load and view images (confirms correct title, page number), but misreads nearly all numeric values from charts - fabricating wrong percentages, wrong dollar amounts, and inventing non-existent data points.

What Should Happen?

Subagent vision accuracy should match main conversation accuracy when using the same model (opus) and prompt on the same image.

Error Messages/Logs

No error messages - the subagent completes successfully but returns incorrect data. Example comparison:

Data Point	Main Conversation	Subagent	Ground Truth
Vendor A	$45M (17%)	$46M (17%)	$45M (17%) ✓
Vendor B	$27M (10%)	$46M (17%)	$27M (10%) ✗
Vendor C	$11M (4%)	$27M (10%)	$11M (4%) ✗
Vendor D	$33M (12%)	25%	$33M (12%) ✗
Vendor E	$12M (5%)	22%	$12M (5%) ✗
Main conversation: ~10/11 values correct
Subagent: ~1/11 values correct

Steps to Reproduce

Steps to Reproduce

  1. Obtain any consulting-style PDF slide with a complex stacked bar chart containing multiple labeled data points (dollar amounts and percentages)
  1. Render a page to PNG using pypdfium2:
import pypdfium2 as pdfium
pdf = pdfium.PdfDocument("your_file.pdf")
page = pdf[0]  # or whichever page has the chart
bitmap = page.render(scale=3)
pil_image = bitmap.to_pil()
pil_image.save("/path/to/test_image.png", "PNG")
  1. In the main Claude Code conversation, use Read to view the image, then paste this prompt:
<task>
Extract all content from this PDF page to structured markdown format.
</task>
<context>
This is a slide from a consulting deck. The goal is 100% accurate extraction
suitable for use as context in future conversations. Accuracy is critical -
wrong data is worse than missing data.
</context>
<instructions>
Follow these steps in order:
1. IDENTIFY: List every content block you see on the page (e.g., title,
   subtitle, chart, table, callout boxes, bullet points, footnotes,
   source line, page number).
2. DESCRIBE: For each content block, describe what you see in detail.
   - For charts: describe the chart type, what the axes represent,
     and read every visible label and data value
   - For data labels: read paired values like "$45M (17%)" as a unit
   - For tables: describe the structure and read each cell value
   - Quote text exactly as written
3. EXTRACT: Convert your descriptions into structured markdown.
4. VERIFY: Where values should add up (e.g., percentages to 100%,
   segments to a total), check the math. Note any discrepancies.
</instructions>
<constraints>
- Extract ONLY what is visible on the page - never invent, estimate, or infer values
- If a value is unclear or illegible, mark it as [unclear] or [illegible]
- If values don't add up, still extract them accurately and note the discrepancy
- It is better to say "cannot read this value" than to guess
- Do not summarize - extract complete content
</constraints>
<output_format>
Structure your response as:
## Step 1: Content Blocks Identified
[List of content blocks]
## Step 2: Detailed Description
[Description of each block with exact values you observe]
## Step 3: Markdown Extraction
[Final markdown output]
## Step 4: Verification
[Math checks and any notes about unclear content]
</output_format>

Note the accuracy of extracted chart values.

  1. Spawn a Task subagent with the same prompt:
<invoke name="Task">
<parameter name="subagent_type">general-purpose</parameter>
<parameter name="model">opus</parameter>
<parameter name="prompt">
<task>
Extract all content from this PDF page to structured markdown format.
</task>
<context>
This is a slide from a consulting deck. The goal is 100% accurate extraction
suitable for use as context in future conversations. Accuracy is critical -
wrong data is worse than missing data.
</context>
<instructions>
Follow these steps in order:
1. IDENTIFY: List every content block you see on the page (e.g., title,
   subtitle, chart, table, callout boxes, bullet points, footnotes,
   source line, page number).
2. DESCRIBE: For each content block, describe what you see in detail.
   - For charts: describe the chart type, what the axes represent,
     and read every visible label and data value
   - For data labels: read paired values like "$45M (17%)" as a unit
   - For tables: describe the structure and read each cell value
   - Quote text exactly as written
3. EXTRACT: Convert your descriptions into structured markdown.
4. VERIFY: Where values should add up (e.g., percentages to 100%,
   segments to a total), check the math. Note any discrepancies.
</instructions>
<constraints>
- Extract ONLY what is visible on the page - never invent, estimate, or infer values
- If a value is unclear or illegible, mark it as [unclear] or [illegible]
- If values don't add up, still extract them accurately and note the discrepancy
- It is better to say "cannot read this value" than to guess
- Do not summarize - extract complete content
</constraints>
<output_format>
Structure your response as:
## Step 1: Content Blocks Identified
[List of content blocks]
## Step 2: Detailed Description
[Description of each block with exact values you observe]
## Step 3: Markdown Extraction
[Final markdown output]
## Step 4: Verification
[Math checks and any notes about unclear content]
</output_format>

<image_path>
/path/to/test_image.png
</image_path>

Read the image at the path above and extract its content.
</parameter>
</invoke>
  1. Compare subagent results to main conversation results - subagent accuracy will be significantly lower on chart data values.

Claude Model

Opus

Is this a regression?

I don't know

Last Working Version

_No response_

Claude Code Version

2.0.65

Platform

Anthropic API

Operating System

macOS

Terminal/Shell

Terminal.app (macOS)

Additional Information

_No response_

View original on GitHub ↗

This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗