Skip to content

model "claude-opus-4.6" not supported for vision #14289

Closed as not planned
Closed as not planned

Description

@technoch1ef

Description

The Claude Opus 4.6 is latest anthropic model. I expected that it would support vision capabilities:
https://ai.azure.com/catalog/models/claude-opus-4-6

Image

Plugins

opencode-beads

OpenCode version

1.2.6

Steps to reproduce

  1. Start opencode
  2. Select claude-opus-4.6 model from Github Copilot provider
  3. Drop an image
  4. See the message "model "claude-opus-4.6" not supported for vision"

Screenshot and/or share link

Image

(I'm pasting Figma link here, but dropping screenshot provides the same result)

Operating System

macOS Tahoe 26.2

Terminal

iTerm2

Activity

  1. github-actions commented on Feb 19, 2026

    @github-actions
    Contributor

    This issue might be a duplicate of existing issues. Please check:

    • [Github Copilot] Anthropic models can't see images? #5291: Same error message pattern (model "claude-*" not supported for vision) with Anthropic models via the GitHub Copilot provider — the prior issue covered claude-haiku/sonnet/opus 4.5 and was closed with 18 comments. This may be a continuation of the same underlying problem with the newer 4.6 model.
  2. added
    coreAnything pertaining to core functionality of the application (opencode server stuff)
    on Feb 19, 2026
  3. R44VC0RP commented on Feb 19, 2026

    @R44VC0RP
    Contributor

    Can you try to add this (adding modalities)

    #5291 (comment)

  4. technoch1ef commented on Feb 19, 2026

    @technoch1ef
    Author

    @rekram1-node I added modalities which did not help. I also have "Editor Preview Features" disabled in my org. I'm talking to org admin to enable that

    Also, what's weird to me is that vision works for "GPT-5.2", but I can't get Anthropic models to work. Same provider

    Image
  5. technoch1ef commented on Feb 19, 2026

    @technoch1ef
    Author

    Here is my config;

    {
      "$schema": "https://opencode.ai/config.json",
      "default_agent": "mayor",
      "provider": {
        "github-copilot": {
          "models": {
            "claude-opus-4.6": {
              "modalities": {
                "input": ["text", "image"],
                "output": ["text"]
              }
            },
            "claude-opus-4.5": {
              "modalities": {
                "input": ["text", "image"],
                "output": ["text"]
              }
            },
            "claude-opus-41": {
              "modalities": {
                "input": ["text", "image"],
                "output": ["text"]
              }
            },
            "claude-sonnet-4.6": {
              "modalities": {
                "input": ["text", "image"],
                "output": ["text"]
              }
            },
            "claude-sonnet-4.5": {
              "modalities": {
                "input": ["text", "image"],
                "output": ["text"]
              }
            },
            "claude-sonnet-4": {
              "modalities": {
                "input": ["text", "image"],
                "output": ["text"]
              }
            },
            "claude-haiku-4.5": {
              "modalities": {
                "input": ["text", "image"],
                "output": ["text"]
              }
            }
          }
        }
      },
      "plugin": ["opencode-beads"],
      "skills": {
        "paths": ["{env:HOME}/.config/opencode/skills-private"]
      },
      "permission": {
        "bash": {
          "*": "allow",
          "bd *": "ask",
          "bd ready*": "allow",
          "bd list*": "allow",
          "bd show*": "allow"
        },
        "skill": {
          "*": "allow"
        }
      },
      "agent": {
        "github": {
          "description": "GitHub-focused agent for repository management, PRs, issues, and automation",
          "prompt": "You are a GitHub expert. Help with repository management, pull requests, issue triage, branch management, and GitHub automation. Use GitHub tools to perform operations. Always provide clear feedback about what was done and next steps.",
          "tools": {
            "bash": true,
            "edit": true,
            "write": true,
            "read": true,
            "grep": true,
            "glob": true,
            "github_*": true,
            "gh_*": true
          }
        }
      },
      "instructions": [".opencode/github-rules.md"],
      "command": {
        "village:work": {
          "description": "Trigger the village work loop for your role",
          "template": "Claim the next bead assigned to you and start working on it.\n\nUse this workflow:\n1. Claim deterministically by calling `village_claim` (single in_progress guard):\n   - `existing in_progress: <id> | ...` => continue that bead\n   - `claimed: <id> | ...` => start that bead\n   - `no ready beads for worker` / `no ready beads for overseer` => report and wait\n2. Read the bead details and handoff packet: `bd show <id> --json`\n3. Load skills listed under `## Skills`\n4. Do the work for your role (worker: implement + local commit; overseer: run checks + approve/return)\n5. Update bead status/comments and repeat from step 1\n\nImportant: do not claim work via `bd ready` + `bd update ... in_progress`; use `village_claim` so the single in_progress guard is enforced."
        },
        "village:orphans": {
          "description": "Report and optionally fix unassigned village beads",
          "template": "Find orphan and suspect-assignee beads from open + in_progress work.\n\nBehavior:\n1. Graceful preflight:\n   - If `bd` is unavailable, return: `bd not available; cannot inspect beads.`\n   - If beads DB is missing in this repo, return: `No .beads database found; nothing to inspect.`\n2. Read data:\n   - Run `bd list --status open --json`\n   - Run `bd list --status in_progress --json`\n   - Combine both lists.\n3. Filter and track scope:\n   - `ignored_epics`: `issue_type == \"epic\"`.\n   - `scanned_non_epic`: all non-epic items.\n4. Build groups from `scanned_non_epic` only:\n   - `orphans`: assignee is missing/empty.\n   - `suspect`: assignee is present but not `worker` or `overseer`.\n5. Build ignored-epic observability groups:\n   - `ignored_epics_unassigned`: epics with missing/empty assignee.\n   - `ignored_epics_suspect`: epics whose assignee is present but not `worker` or `overseer`.\n   - `ignored_epics_attention`: union of the two groups above (deduplicated).\n6. Report output (concise):\n   - Print counts: `Scanned (non-epic): <n> | Ignored epics: <n> | Ignored epics (unassigned): <n> | Orphans: <n> | Suspect: <n>`.\n   - Print up to 20 total issue rows for non-epic `orphans` + `suspect` with: `id | title | status | assignee`.\n   - If `ignored_epics_attention` is non-empty, print a separate `Ignored epics` section (do not mix with orphan/suspect rows), listing up to 5 rows as: `id | title | status | assignee | reason` where reason is `unassigned` or `suspect assignee`.\n\nArgs:\n- `/village:orphans` -> report only.\n- `/village:orphans fix` -> after report, auto-assign only non-epic `orphans` (never `suspect`, never epics).\n\nFix mode rules (`fix` only):\n- For each non-epic orphan, inspect lowercase title + description.\n- If it matches any keyword `review|verify|verification|check|checks|overseer|approve`, assign `overseer`.\n- Otherwise assign `worker`.\n- Apply with `bd update <id> --assignee <worker|overseer>`.\n- Print a short `Applied` section listing each updated issue and chosen assignee.\n\nSafety:\n- Never reassign issues that already have an assignee.\n- Never modify epics."
        }
      }
    }
  6. stevoland commented on Feb 23, 2026

    @stevoland
    Contributor

    Seems like a regression since the official copilot auth? ie: now opencode has its own client id, github can limit models/capabilities for it - see also 5.3-codex.

    Would be great if this could be confirmed.

  7. stevoland commented on Feb 23, 2026

    @stevoland
    Contributor

    Just fyi, copilot cli has same error for opus-4.6 and sonnet-4.6 github/copilot-cli#1555

    However, image does work with sonnet-4.5 in copilot cli, don't know how

  8. malachibazar commented on Feb 23, 2026

    @malachibazar

    I am hitting this issue too. I'm getting it on the desktop mac app.

    Image
  9. soyukke commented on Feb 25, 2026

    @soyukke

    Workaround: deny image file reads in permission config.

    {
      "$schema": "https://opencode.ai/config.json",
      "permission": {
        "read": {
          "*": "allow",
          "*.png": "deny",
          "*.jpg": "deny",
          "*.jpeg": "deny",
          "*.gif": "deny",
          "*.webp": "deny",
          "*.svg": "deny",
          "*.bmp": "deny",
          "*.ico": "deny"
        }
      }
    }
  10. jamesforwardnwboxed commented on Feb 25, 2026

    @jamesforwardnwboxed

    Workaround: deny image file reads in permission config.

    {
    "$schema": "https://opencode.ai/config.json",
    "permission": {
    "read": {
    "": "allow",
    "
    .png": "deny",
    ".jpg": "deny",
    "
    .jpeg": "deny",
    ".gif": "deny",
    "
    .webp": "deny",
    ".svg": "deny",
    "
    .bmp": "deny",
    "*.ico": "deny"
    }
    }
    }

    How is denying image reads a workaround for the problem which is that images cannot be read for a model which does support it?

  11. soyukke commented on Feb 25, 2026

    @soyukke

    Workaround: deny image file reads in permission config.
    {
    "$schema": "https://opencode.ai/config.json",
    "permission": {
    "read": {
    "": "allow",
    "
    .png": "deny",
    ".jpg": "deny",
    "
    .jpeg": "deny",
    ".gif": "deny",
    "
    .webp": "deny",
    ".svg": "deny",
    "
    .bmp": "deny",
    "*.ico": "deny"
    }
    }
    }

    How is denying image reads a workaround for the problem which is that images cannot be read for a model which does support it?

    You're right, that doesn't really help with the core issue. I was trying to avoid a secondary problem where opencode becomes unusable after an image read error, but denying image reads entirely defeats the purpose if you actually need to read images. My bad.

  12. stevoland commented on Feb 25, 2026

    @stevoland
    Contributor

    Our workaround is remove to image modality from the unsupported models and provide an image-looker subagent with gpt-5.2 (description and prompt nicked from oh-my-opencode). The main agent will use it automatically or ask if you want to use it or tell you you can use it - but it's an improvement.

    {
      "$schema": "https://opencode.ai/config.json",
      "agent": {
        "image-looker": {
          "description": "Analyze image files. Describes visual content. Use when you need analyzed/extracted data rather than literal file contents.",
          "mode": "subagent",
          "model": "github-copilot/gpt-5.2",
          "prompt": "You interpret image files that cannot be read as plain text.\n\nYour job: examine the attached file and extract ONLY what was requested.\n\nWhen to use you:\n- Media files the Read tool cannot interpret\n- Extracting specific information or summaries from documents\n- Describing visual content in images or diagrams\n- When analyzed/extracted data is needed, not raw file contents\n\nWhen NOT to use you:\n- Source code or plain text files needing exact contents (use Read)\n- Files that need editing afterward (need literal content from Read)\n- Simple file reading where no interpretation is needed\n\nHow you work:\n1. Receive a file path and a goal describing what to extract\n2. Read and analyze the file deeply\n3. Return ONLY the relevant extracted information\n4. The main agent never processes the raw file - you save context tokens\n\nFor images: describe layouts, UI elements, text, diagrams, charts\nFor diagrams: explain relationships, flows, architecture depicted\n\nResponse rules:\n- Return extracted information directly, no preamble\n- If info not found, state clearly what's missing\n- Match the language of the request\n- Be thorough on the goal, concise on everything else\n\nYour output goes straight to the main agent for continued work.",
          "temperature": 0.1
        },
      },
      "provider": {
        "github-copilot": {
          "models": {
            "claude-haiku-4.5": {
              "modalities": {
                "input": ["text"],
                "output": ["text"]
              }
            },
            "claude-opus-4.5": {
              "modalities": {
                "input": ["text"],
                "output": ["text"]
              }
            },
            "claude-opus-4.6": {
              "modalities": {
                "input": ["text"],
                "output": ["text"]
              }
            },
            "claude-sonnet-4.5": {
              "modalities": {
                "input": ["text"],
                "output": ["text"]
              }
            },
            "claude-sonnet-4.6": {
              "modalities": {
                "input": ["text"],
                "output": ["text"]
              }
            },
            "gemini-2.5-pro": {
              "modalities": {
                "input": ["text"],
                "output": ["text"]
              }
            }
          }
        }
      }
    }
  13. technoch1ef commented on Feb 26, 2026

    @technoch1ef
    Author

    Enabling "Editor Preview Features" helped me 👍

  14. stevoland commented on Feb 27, 2026

    @stevoland
    Contributor

    Enabling "Editor Preview Features" helped me 👍

    @technoch1ef just for clarity, could you confirm that it works for opus 4.6 in opencode with "Editor Preview Features"

    Our org won't turn on preview features atm so it would be really appreciated, thanks

  15. Leksat commented on Mar 13, 2026

    @Leksat

    Confirming: enabling Editor Preview Features in Copilot settings made the image vision work with Opus

  16. juliobellano commented on Mar 30, 2026

    @juliobellano
    Image

    Another confirmation: it's configurable from the org's settings.

  17. yogeek commented on Apr 15, 2026

    @yogeek

    I do not have permission to update the Github Copilot org's settings to enable the "Editor Preview Features", and the company does not want to : is there another solution on opencode side to fix this please ?

  18. yogeek commented on Apr 17, 2026

    @yogeek

    Root cause analysis

    I traced this in the opencode source on dev. The bug is in how the GitHub Copilot plugin rebuilds model capabilities and overwrites user config.

    Load order in packages/opencode/src/provider/provider.ts:

    1. Lines 1107-1161: config from opencode.json is merged into the model database. A user override like:

      "github-copilot": {
        "models": {
          "claude-sonnet-4.6": { "modalities": { "input": ["text"], "output": ["text"] } }
        }
      }

      correctly sets capabilities.input.image = false (via model.modalities?.input?.includes("image") ?? ...).

    2. Lines 1285-1310: the plugin models() hook runs after and fully replaces provider.models:

      provider.models = await models(provider, { auth: pluginAuth })
    3. For Copilot this calls CopilotModels.get() in packages/opencode/src/plugin/github-copilot/models.ts, which runs build() on every model.

    The actual bug is in build() (around lines 75-85):

    capabilities: {
      temperature: prev?.capabilities.temperature ?? true,
      reasoning:   prev?.capabilities.reasoning   ?? reasoning,
      attachment:  prev?.capabilities.attachment  ?? true,
      toolcall:    remote.capabilities.supports.tool_calls,
      input: {
        text:  true,
        audio: false,
        image,           // <-- derived from remote, prev is IGNORED
        video: false,
        pdf:   false,
      },

    Every other capability honors prev?.capabilities.X (preserving config overrides), but input.image is unconditionally written from the Copilot /models response. The user's explicit modalities: { input: ["text"] } is silently destroyed.

    Why this is wrong: the Copilot /models endpoint reports supports.vision: true at the model level for Claude, but "vision enabled" is enforced at the organization level via "Editor Preview Features". opencode conflates model-level capability with org-level entitlement, so for orgs that can't enable previews there is no working configuration.

    Why the session stays broken after the error: unsupportedParts() in packages/opencode/src/provider/transform.ts (lines 267-303) strips/rewrites image parts only when model.capabilities.input.image === false. Since Copilot+Claude reports it as true, the image stays in conversation history, and every subsequent turn retriggers the same 400 from the Copilot API. Switching to a provider the user has configured as text-only finally lets unsupportedParts rewrite the image into a text error, which is why that workaround unblocks the session.

    Proposed fix

    Minimal, one-line change in build() in packages/opencode/src/plugin/github-copilot/models.ts:

    input: {
      text:  true,
      audio: false,
      image: prev?.capabilities.input.image ?? image,
      video: false,
      pdf:   false,
    },

    This makes the plugin consistent with how it treats temperature, reasoning, and attachment: user/config value wins, remote default is the fallback. Users whose org has not enabled vision previews can then force text-only and opencode's unsupportedParts will correctly strip incoming images before they are sent.

    A more general fix would be to re-apply config overrides after the plugin models() hook in provider.ts:1285-1310, which would protect any plugin-derived provider from silently overwriting user config in the same way.

    Happy to open a PR if a maintainer confirms the approach.

  19. technoch1ef commented on Apr 21, 2026

    @technoch1ef
    Author

    @stevoland Confirming: enabling Editor Preview Features in Copilot settings made the image vision work with Opus

  20. removed
    bugSomething isn't working
    coreAnything pertaining to core functionality of the application (opencode server stuff)
    on May 3, 2026
  21. yogeek commented on Jun 18, 2026

    @yogeek

    @rekram1-node may I ask why you closed this please ? many of us have their github organization managed at corporate level and cannot use the workaround to enable preview features. Can you please take a look at the proposal ? Thank you for your time

  22. andreasntr commented on Aug 30, 2026

    @andreasntr

    Can you try to add this (adding modalities)

    #5291 (comment)

    Worked with open models as well, before 1.15 image capability was derived by the model itself, but it looks like it should be explicited now

    EDIT: Server is llamacpp with model router (maybe this was my issue, previously i was using plain llamacpo so the model config was preloaded instead of being loaded on request)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions