#model doesnt recognize tools

1 messages Β· Page 1 of 1 (latest)

fiery matrix
#

after changing the model, no matter how much i try it says that it doesnt have access to any tools, i checked the config 1000 times, the profile is full. i restarted gateway too
gemini 3 flash

near streamBOT
#

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

hollow forumBOT
#

This usually means the Gateway is no longer offering any tools to the model (so the model correctly says β€œI don’t have tool access”), and it often happens right after a model/provider switch because of tool policy (allow/deny/profile/byProvider) or sandbox tool policy.

Can you paste these 3 things?

  1. Version (first!)
openclaw --version
  1. Status dumps (safe to share; redacts secrets)
openclaw status --all
openclaw models status
  1. The tool-policy part of your config (only this section is enough):
  • tools.profile
#
  • tools.allow / tools.deny
  • tools.byProvider (if present)
  • and if you use sandboxing: tools.sandbox.tools.allow / tools.sandbox.tools.deny
  • plus any per-agent overrides: agents.list[].tools...

Quick self-checks while you grab that

  • If you have any allowlist at all, remember it’s restrictive. For example:

    • tools.profile: "minimal" β‡’ basically no tools.
    • tools.byProvider.google (or google/gemini-…) set to minimal/empty β‡’ tools disappear only on Gemini.
    • tools.sandbox.tools.deny: ["*"] (or an empty allowlist) β‡’ tools disappear only in sandboxed chats (common if your Discord threads are β€œnon-main” sessions).
  • Also check logs for tool-policy warnings:

openclaw logs --follow

Look for lines like β€œunknown tools in allowlist” / β€œtool policy” / β€œallowlist ignored” around the time you send a message.

#

Once you paste the outputs/config snippet, I can tell you exactly which setting is stripping the tools for Gemini 3 Flash.

fiery matrix
#

version 2026.3.2
Config : ~/.openclaw/openclaw.json
Agent dir : ~/.openclaw/agents/main/agent
Default : google-gemini-cli/gemini-3-pro-preview
Fallbacks (8) : opencode/claude-opus-4-6, opencode/minimax-m2.5-free, qwen-portal/coder-model, qwen-portal/vision-model, openrouter/auto, openrouter/openrouter/auto, google-gemini-cli/gemini-3.1-pro-preview, openrouter/arcee-ai/trinity-large-preview:free
Image model : -
Image fallbacks (0): -
Aliases (3) : Opus -> opencode/claude-opus-4-6, qwen -> qwen-portal/coder-model, OpenRouter -> openrouter/auto
Configured models (9): opencode/claude-opus-4-6, opencode/minimax-m2.5-free, qwen-portal/coder-model, qwen-portal/vision-model, google-gemini-cli/gemini-3-pro-preview, openrouter/auto, openrouter/openrouter/auto, google-gemini-cli/gemini-3.1-pro-preview, openrouter/arcee-ai/trinity-large-preview:free

Auth overview
Auth store : ~/.openclaw/agents/main/agent/auth-profiles.json
Shell env : off
Providers w/ OAuth/tokens (2): google-gemini-cli (1), qwen-portal (1)

  • google-gemini-cli effective=profiles:~/.openclaw/agents/main/agent/auth-profiles.json | profiles=1 (oauth=1, token=0, api_key=0) | google-gemini-cli:redacted@gmail.com=OAuth (redacted@gmail.com)
  • opencode effective=profiles:~/.openclaw/agents/main/agent/auth-profiles.json | profiles=1 (oauth=0, token=0, api_key=1) | opencode:default=sk-leBBu...piAhjB33
  • openrouter effective=profiles:~/.openclaw/agents/main/agent/auth-profiles.json | profiles=1 (oauth=0, token=0, api_key=1) | openrouter:default=sk-or-v1...2887df1b
  • qwen-portal effective=profiles:~/.openclaw/agents/main/agent/auth-profiles.json | profiles=1 (oauth=1, token=0, api_key=0) | qwen-portal:default=OAuth | models.json=qw...th | source=models.json: ~/.openclaw/agents/main/agent/models.json

OAuth/token status

#

OpenClaw status --all

Overview
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Item β”‚ Value β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Version β”‚ 2026.3.2 β”‚
β”‚ OS β”‚ linux 6.18.13-arch1-1 (x64) β”‚
β”‚ Node β”‚ 25.7.0 β”‚
β”‚ Config β”‚ ~/.openclaw/openclaw.json β”‚
β”‚ Dashboard β”‚ http://192.168.31.176:18789/ β”‚
β”‚ Tailscale β”‚ off β”‚
β”‚ Channel β”‚ stable (default) β”‚
β”‚ Update β”‚ pnpm Β· npm latest 2026.3.2 β”‚
β”‚ Gateway β”‚ local Β· ws://127.0.0.1:18789 (local loopback) Β· β”‚
β”‚ β”‚ reachable 113ms Β· auth password β”‚
β”‚ Security β”‚ Run: openclaw security audit --deep β”‚
β”‚ Gateway self β”‚ user-crestlineich8m (192.168.31.176) app 2026.3.2 linux β”‚
β”‚ β”‚ 6.18.13-arch1-1 β”‚
β”‚ Gateway service β”‚ systemd installed Β· enabled Β· running (pid 19262) β”‚
β”‚ Node service β”‚ systemd not installed β”‚
β”‚ Agents β”‚ 1 total Β· 0 bootstrapping Β· 1 active Β· 8 sessions β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

#

Diagnosis (read-only)

Gateway connection details:
Gateway target: ws://127.0.0.1:18789
Source: local loopback
Config: /home/user/.openclaw/openclaw.json
Bind: lan

βœ“ Config: /home/user/.openclaw/openclaw.json
βœ“ Restart sentinel: none
βœ“ Port 18789
! Tailscale: off Β· unknown
error: Error: spawn tailscale ENOENT
βœ“ Skills: 10 eligible Β· 0 missing Β· /home/user/.openclaw/workspace
βœ“ Channel issues (none)

Pasteable debug report. Auth tokens redacted.

hollow forumBOT
#

Your models status output is the key clue: you’re not on the normal Gemini API provider (google/...) β€” you’re on Gemini CLI:

  • Default: google-gemini-cli/gemini-3-pro-preview

That’s a different integration path (β€œshell out to a local gemini binary”) and it’s known to behave differently re: streaming/tool support and schema quirks. (Docs call this out explicitly.)
Source: https://docs.openclaw.ai/help/testing (see the β€œGemini API vs Gemini CLI” note)

1) Fastest fix (if you want reliable tool-calling)

Use the Gemini API key provider instead:

  • Provider: google
  • Model: google/gemini-3-flash-preview (or pro)

Setup path from docs:

#

2) If you want to debug what’s happening on google-gemini-cli/...

Run this and paste the output:

openclaw status --all

And also do:

openclaw logs --follow

Then send a message that would normally use a tool. In the logs, look for:

  • google tool schema snapshot (it prints toolCount)

If toolCount: 0 β†’ your tool policy is stripping everything (even if you think β€œprofile is full”). Then paste just your tools: { ... } block from ~/.openclaw/openclaw.json.

#

If toolCount > 0 but the model still claims β€œno tools” β†’ it’s almost certainly the Gemini CLI path ignoring/struggling with tool calling, and switching to google/... (API) is the pragmatic fix.

If you paste openclaw status --all + a ~20 line log snippet around google tool schema snapshot, I can tell which branch you’re in immediately.

#

That’s only the overview slice of status --all β€” the bit we need is further down.

Can you scroll a bit more and paste just these sections from openclaw status --all (they’re safe; secrets are redacted):

  1. Models (shows the effective provider/model + any provider quirks)
  2. Tools / Tool policy (this is the smoking gun: it’ll show whether your allow/deny/profile/byProvider collapsed to β€œno tools”)
  3. Any Warnings block (often includes β€œunknown tool names” / β€œtool allowlist ignored” / etc.)

Also: one log line will answer this immediately

Run:

openclaw logs --follow

Then send a message to your bot that would normally require a tool (anything like β€œfetch https://example.com” / β€œread file …” / β€œlist sessions”).

#

In the logs, copy/paste the line that contains:

  • google tool schema snapshot

It prints toolCount. If that says toolCount: 0, it’s 100% tool-policy/config. If it’s >0, then the Gemini CLI path is receiving tools but not using them (schema/tool-calling mismatch).

Paste those bits and I’ll tell you the exact fix (usually either a tools.allow/deny issue, or you need to switch from google-gemini-cli/... to the normal google/... Gemini API provider for tool calling).

#

Got it β€” that status --all snippet still doesn’t include the tools policy, so we’re missing the one thing that decides whether the model even gets tools.

1) Please paste your tools config block

From ~/.openclaw/openclaw.json, copy/paste only the parts that match:

  • top-level tools: { ... }
  • and (if present) agents: { defaults: { tools: ... } } or any agents.list[].tools

I’m specifically looking for anything like:

  • tools.allow / tools.deny
  • tools.profile
  • tools.byProvider (this often bites people right after switching to a Google/Gemini provider)

Docs reference (so we’re talking about the same keys): https://docs.openclaw.ai/tools

2) Get one log line: google tool schema snapshot (it shows toolCount)

Right now we’re guessing whether the Gateway is sending 0 tools vs β€œtools are sent but Gemini ignores them”.

#

Make sure your file logs include info (otherwise this line won’t show up):

// in openclaw.json
{
  logging: { level: "info" },
}

Restart gateway, then:

openclaw logs --follow --json

Send one message that would use a tool, and paste the single log event containing:

#
  • "google tool schema snapshot"

It’ll include toolCount.

  • If toolCount: 0 β†’ config/tool policy issue (almost always tools.byProvider or an allowlist)
  • If toolCount > 0 β†’ provider/tool-calling mismatch (then the practical fix is usually switching from google-gemini-cli/... to the normal google/... Gemini API provider)

Post the tools block + that one log event and we can pin this down in one round trip.

fiery matrix
#

"tools": {
"profile": "full",
"allow": [
"group:openclaw",
"group:runtime",
"group:fs",
"exec",
"bash",
"process"
],
"loopDetection": {
"enabled": true,
"warningThreshold": 10
},
"message": {
"allowCrossContextSend": true,
"crossContext": {
"allowWithinProvider": true,
"allowAcrossProviders": true
},
"broadcast": {
"enabled": true
}
},
"exec": {
"host": "node",
"security": "full",
"ask": "off"
}
},

hollow forumBOT
#

That tools block looks basically β€œwide open” β€” so if you’re still getting β€œI don’t have access to any tools”, it’s almost certainly not because tools.allow is empty.

Two important gotchas I do see:

A) Your exec is configured to run on a node, but you have no node service

You have:

tools: {
  exec: { host: "node", security: "full", ask: "off" }
}

…and your status --all earlier said β€œNode service: systemd not installed”.

So if what you’re testing is β€œrun a command”, the bot may act like it has no tools because the only tool you care about (exec) can’t run anywhere.

#

Quick fix (test): change that to run on the gateway host:

tools: { exec: { host: "gateway" } }

(Also: security:"full" + ask:"off" is pretty dangerous with tool-capable models. At least for testing, I’d recommend ask:"on-miss".)

B) You’re using google-gemini-cli/... (Gemini CLI), which can be flaky with tool calling

This provider path is explicitly called out in the docs as having β€œtool support/version skew” quirks vs the normal google/... Gemini API.
Source: https://docs.openclaw.ai/help/testing

The one log line that will tell us which it is

Please run:

  1. Set file logs to info (so the line actually appears):