#"media": { "models": [ { "type": "provider", "provider": "anthropic", "model

1 messages ยท Page 1 of 1 (latest)

elfin dove
#

My tools.media config has a model set with image capability but the agent says imageModel is not set. Screenshots arrive as file paths but vision content isn't being passed to the model. Here's my config:

solemn archBOT
gilded sleetBOT
#

To help others find answers, you can mark your question as solved via Right click solution message -> Apps -> โœ… Mark Solution

solemn archBOT
winged helmBOT
#

Let me verify the exact split between tools.media and agents.defaults.imageModel, because I think thatโ€™s the gotcha here.

#

First, what does openclaw --version show?

The likely issue is that these are two different config paths:

  • tools.media.* = inbound media understanding only
  • agents.defaults.imageModel = the image tool / vision fallback model

So having an image-capable model under tools.media.models does not satisfy imageModel.

Also, screenshots being passed as actual image content depends on the active reply model being marked vision-capable. That comes from the model catalog (input: ["text", "image"]) for the current session/default model, not from tools.media.

So the fix is usually one of these:

  1. If you want the main agent model to see screenshots directly
    • make sure the active model is vision-capable
    • and, for custom provider/model definitions, declare:
#
   input: ["text", "image"]
  1. If you want a separate vision fallback / image tool model

    • set:
    agents: {
      defaults: {
        imageModel: {
          primary: "your-provider/your-vision-model"
        }
      }
    }
    
  2. Keep tools.media.models only if you want pre-summary of inbound attachments before reply routing.

elfin dove
#

"media": {
"models": [
{
"type": "provider",
"provider": "anthropic",
"model": "claude-opus-4-5",
"capabilities": [
"image"
]
}
]
}

winged helmBOT
#

Yep, with only that config, imageModel is not set is expected.

That snippet does not set the agent image model. It only configures inbound media understanding for user-sent attachments:

tools: {
  media: {
    models: [
      { provider: "anthropic", model: "claude-opus-4-5", capabilities: ["image"] }
    ]
  }
}

Two important gotchas here:

  • tools.media is for inbound attachments before reply routing
#
  • it is not the config used by the image tool
  • it is also not what makes tool-produced screenshots get injected as image content

So for screenshots from tools, you want:

agents: {
  defaults: {
    imageModel: {
      primary: "anthropic/claude-opus-4-5"
    }
  }
}

And if you want the main reply model to see screenshots directly, the active model itself also needs to be vision-capable. For custom model catalogs, that means the model entry needs:

#
input: ["text", "image"]

So the rule of thumb is:

  • user uploads / inbound media โ†’ tools.media
  • agent image analysis / screenshot inspection โ†’ agents.defaults.imageModel
  • direct vision in the main chat model โ†’ active model must support input: ["text", "image"]

If you paste agents.defaults.model, I can tell you which of those two paths youโ€™re hitting. Also, what does openclaw --version show?

Docs:

elfin dove
#

where do i find agents.defaults.model?

winged helmBOT
#

Fastest way is from the CLI:

openclaw config get agents.defaults.model
openclaw config get agents.defaults.imageModel
openclaw config file
openclaw --version

What those do:

  • agents.defaults.model = your default reply model
  • agents.defaults.imageModel = the image-tool / vision fallback model
  • config file = shows the actual config file path OpenClaw is reading

If openclaw config get agents.defaults.model prints nothing, it probably isnโ€™t explicitly set in config.

elfin dove
#

๐Ÿฆž OpenClaw 2026.3.7 (42a1394)
I'm not saying your workflow is chaotic... I'm just bringing a linter and a helmet.

{
"primary": "anthropic/claude-sonnet-4-6"
}

๐Ÿฆž OpenClaw 2026.3.7 (42a1394)
Your AI assistant, now without the $3,499 headset.

Config path not found: agents.defaults.imageModel

๐Ÿฆž OpenClaw 2026.3.7 (42a1394)
Open source means you can see exactly how I judge your config.

โ”‚
โ—‡ Doctor warnings โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚ โ”‚
โ”‚ - channels.telegram.groupPolicy is "allowlist" but groupAllowFrom (and โ”‚
โ”‚ allowFrom) is empty โ€” all group messages will be silently dropped. โ”‚
โ”‚ Add sender IDs to channels.telegram.groupAllowFrom or โ”‚
โ”‚ channels.telegram.allowFrom, or set groupPolicy to "open". โ”‚
โ”‚ โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ
~/.openclaw/openclaw.json
2026.3.7
johnurban@Johns-Mac-mini ~ %

winged helmBOT
#

Nice, that confirms it.

Right now you have:

  • agents.defaults.model.primary = anthropic/claude-sonnet-4-6
  • no agents.defaults.imageModel

So the โ€œimageModel is not setโ€ part is real, not a false alarm.

Add imageModel in the same config file, ~/.openclaw/openclaw.json, next to model:

{
  "agents": {
    "defaults": {
      "model": {
#
        "primary": "anthropic/claude-sonnet-4-6"
      },
      "imageModel": {
        "primary": "anthropic/claude-sonnet-4-6"
      }
    }
  }
}

Or via CLI:

openclaw config set agents.defaults.imageModel.primary "anthropic/claude-sonnet-4-6"
#

A couple notes:

  • your Telegram doctor warning is unrelated to this issue
  • tools.media.models is still a separate path, it does not fill in agents.defaults.imageModel
  • youโ€™re on 2026.3.7, so if screenshots still only arrive as paths after setting imageModel, Iโ€™d update next because there may be version drift here

If you want, paste your full agents.defaults block and Iโ€™ll sanity-check it.

elfin dove
#

images from Telegram arriving as file paths but not being processed as vision content. They'll know the exact config fix.

winged helmBOT
#

Yep, the exact fix is:

{
  agents: {
    defaults: {
      model: {
        primary: "anthropic/claude-sonnet-4-6"
      },
      imageModel: {
        primary: "anthropic/claude-sonnet-4-6"
      }
    }
  }
}
#

Key point:

  • tools.media.models does not set the agentโ€™s vision model
  • agents.defaults.imageModel is the missing piece

So for Telegram images arriving as file paths, OpenClaw needs agents.defaults.imageModel to have an actual image-analysis route available.

You can set it with:

openclaw config set agents.defaults.imageModel.primary "anthropic/claude-sonnet-4-6"

Then keep your existing tools.media block only if you also want inbound media summarization.

If it still only shows file paths after that, Iโ€™d update from 2026.3.7 first, because that build is a bit behind current behavior.

#

If this fixed it, please right-click the solution message โ†’ Apps โ†’ โœ… Mark Solution so Answer Overflow can index it.

elfin dove
#

"I ran openclaw config set agents.defaults.imageModel.primary "anthropic/claude-sonnet-4-6" and restarted the gateway but screenshots are still coming through as file paths, not images."

winged helmBOT
#

Iโ€™m checking one more likely cause: a custom provider/model definition can override the built-in vision metadata, so OpenClaw treats the model as text-only even though the model itself supports images.

#

Okay, that means imageModel was only half the fix.

The next likely cause is that OpenClaw is still treating your active reply model as text-only, so it keeps passing paths instead of injecting image content.

Please check this:

openclaw config get models.providers.anthropic --json

If you have a custom Anthropic model definition there, make sure the model entry includes:

{
  models: {
    providers: {
#
      anthropic: {
        models: [
          {
            id: "claude-sonnet-4-6",
            input: ["text", "image"]
          }
        ]
      }
    }
  }
}

Why this matters:

  • on custom provider entries, if input is omitted, OpenClaw defaults to ["text"]
#
  • then even a vision-capable model gets treated like text-only
  • result: screenshots stay as file paths instead of being passed as image content

So at this point, the two things to verify are:

  1. agents.defaults.imageModel.primary is set, which you already did
  2. the active model is marked with input: ["text", "image"] if you have a custom provider/model block

If models.providers.anthropic is empty or unset, then Iโ€™d strongly suspect 2026.3.7 itself and update next.

Paste the output of:

openclaw config get models.providers.anthropic --json

and Iโ€™ll tell you the exact next line to change.

elfin dove
#

"Output was empty โ€” models.providers.anthropic is not set"

winged helmBOT
#

I want to verify the exact shape for an explicit models.providers.anthropic.models[] entry before I suggest it as a workaround.

#

That helps a lot.

If models.providers.anthropic is empty and imageModel is set, then this really looks like 2026.3.7 behavior, not just a missing key.

On current builds, Anthropic should not need extra config for image understanding. On your build, Iโ€™d try this explicit workaround:

{
  agents: {
    defaults: {
      model: {
        primary: "anthropic/claude-sonnet-4-6"
      },
      imageModel: {
        primary: "anthropic/claude-sonnet-4-6"
      }
#
    }
  },
  models: {
    mode: "merge",
    providers: {
      anthropic: {
        models: [
          {
            id: "claude-sonnet-4-6",
            input: ["text", "image"]
          }
        ]
      }
    }
  }
#
}

Then restart the gateway again.

Why this is worth trying:

  • with no custom Anthropic provider block, current OpenClaw normally knows Claude supports images
  • your older build may not be materializing that capability correctly
  • explicitly adding input: ["text", "image"] forces OpenClaw to treat the model as vision-capable

So my recommendation is:

  1. keep agents.defaults.imageModel.primary
  2. add the explicit models.providers.anthropic.models[] block above
  3. restart
elfin dove
#

didnt work

winged helmBOT
#

Yeah, at this point I would stop chasing config.

You already tried the right knobs:

  • agents.defaults.imageModel.primary
  • explicit Anthropic input: ["text", "image"]
  • gateway restart

If that still doesnโ€™t work on 2026.3.7, Iโ€™m pretty confident this is an old-build bug / version issue, not a missing config key.

Next move

  1. Update OpenClaw
  2. Retest with the same minimal setup
  3. If it still fails, file a GitHub issue: https://github.com/openclaw/openclaw/issues

Include this in the issue

  • openclaw --version