#Wrong Usage of API /Skill
1 messages · Page 1 of 1 (latest)
A couple things can cause this, but the big one is: skills aren’t “hard routing”. Even if you installed a Weather skill, the model can still decide “I’ll just search the web” (Brave) unless the skill is (a) actually loaded/eligible in the session and (b) the model chooses to follow it.
1) First confirm the Weather skill is actually eligible/loaded
On the machine running the gateway, run:
openclaw --version
openclaw skills list --eligible | rg -i weather
openclaw skills check
If weather doesn’t show up as eligible, it won’t be in the system prompt → the model will default to search.
Docs: https://docs.openclaw.ai/cli/skills and https://docs.openclaw.ai/tools/skills
2) If you just installed it: you need a new session (or refresh)
OpenClaw snapshots eligible skills when the session starts. So after installing/updating skills, either:
- start a new chat/session, or
- ask the agent to “refresh skills”, or
- restart the gateway.
3) Check you didn’t create skills.md (plural) and expect it to work
OpenClaw loads skills from folders containing SKILL.md (singular, exact filename), not a standalone skills.md.
4) If Weather is eligible but it still uses Brave: force it (or reduce overlap)
Options:
- Try invoking it explicitly (if it exposes a slash command):
/weather <location> - Or phrase it as: “Use the weather skill (wttr.in) for this.”
- If you want it to stop choosing Brave for weather questions, temporarily disable the Brave-search skill (or remove it from model-invocation) and retest.
If you paste the output of openclaw skills list --eligible + the tool call you’re seeing, I can tell you exactly which of the above is happening in your setup.
yeah weather is working and also in eligible list of skills
@lunar spear yeah weather is working and also in eligible list of skills
If it’s eligible but the model still answers “what’s the weather in X?” by doing Brave/web_fetch, that usually means one of these is true:
1) The skill is eligible, but not in the model prompt
Two common reasons:
A. disable-model-invocation: true on the weather skill
That makes it eligible (and manually invocable) but excluded from the model’s skills list.
Check:
openclaw skills info weather
…and/or open the skill’s SKILL.md and look for disable-model-invocation.
B. Skills list is getting truncated
Eligible just means “OpenClaw can include it” — it doesn’t force the model to pick it.
Quick clarifier: does /weather <location> work, but the plain message “what’s the weather in <location>?” sometimes goes to Brave/web_fetch instead? If yes, then it’s a routing / prompt-priority issue, not a “skill missing” issue.
Here are the two most common causes + what to check:
1) The weather skill is eligible, but not actually visible to the model in this session
In chat, run:
/context detail
Look for:
- “⚠️ Skills truncated …” (weather might be cut off)
- whether
weatherappears in the listed skills
(If it’s not there, the model can’t follow it.)
2) Your Brave/search skill is “too general” and is hijacking weather questions
If you have lots of skills, OpenClaw may truncate the skills block in the system prompt (so the model literally can’t “see” weather).
In chat, send:
/context list(or/context detail)
and look for a warning like “⚠️ Skills truncated …”, and confirm weather is actually listed there.
2) Your Brave skill instructions are too aggressive
Some Brave-search skills are written like “for any question, use Brave search” which will override weather unless the weather skill is very explicit.
Fix: edit the Brave skill SKILL.md to add an explicit exception, e.g. “If the user asks about weather, prefer the weather skill (wttr.in) and do not use Brave search.”
3) The weather skill says “use curl”, but your agent can’t/doesn’t use exec
If exec is not allowed by your tool policy, the model will “work around” by using web_fetch/Brave. In that case, update the weather skill to explicitly use web_fetch against wttr.in (same endpoint), instead of curl.
If you paste:
A lot of search skills say (implicitly or explicitly) “for any question, search the web” — and the model will comply.
To confirm, paste:
openclaw skills info weatheropenclaw skills info <your-brave-skill-name>(whatever it’s called inopenclaw skills list --eligible)
Quick workarounds (while you debug)
- Use
/weather <location>for deterministic behavior. - Or ask: “Use the weather skill (wttr.in) for this: weather in <location>”.
- If you want it to never use Brave for weather: add an explicit line to the Brave skill like “If the user asks about weather/forecast/temperature, use the
weatherskill and do not use Brave search.”
Docs that matter here:
- Skills behavior/precedence: https://docs.openclaw.ai/tools/skills
openclaw skills info/check: https://docs.openclaw.ai/cli/skills/context detailfor what the model actually sees: https://docs.openclaw.ai/concepts/session (see “Inspecting” →/context)
- the output of
openclaw skills info weather - and your Brave skill
SKILL.md(just the instruction part)
…I can tell you which of the above is happening and what exact line to change.
@lunar spear OpenClaw uses Brave Search as the default provider for web_search
🦞 OpenClaw 2026.2.17 (4134875) — I'll refactor your busywork like it owes me money.
📦 weather ✓ Ready
Get current weather and forecasts (no API key required).
Details:
Source: openclaw-workspace
Path: ~/.openclaw/workspace/skills/weather/SKILL.md
Homepage: https://wttr.in/:help
Tip: use npx clawhub to search, install, and sync skills.
đź§ Context breakdown (detailed)
Workspace: /home/ubuntu/.openclaw/workspace
Bootstrap max/file: 20,000 chars
Bootstrap max/total: 150,000 chars
Sandbox: mode=off sandboxed=false
System prompt (estimate): 19,106 chars (~4,777 tok) (Project Context 8,819 chars (~2,205 tok))
Injected workspace files:
AGENTS.md: OK | raw 7,804 chars (~1,951 tok) | injected 7,804 chars (~1,951 tok)
TOOLS.md: OK | raw 850 chars (~213 tok) | injected 850 chars (~213 tok)
Skills list (system prompt text): 2,052 chars (~513 tok) (6 skills)
Skills: discord, healthcheck, skill-creator, sonoscli, tmux, weather
Top skills (prompt entry size):
healthcheck: 491 chars (~123 tok)
skill-creator: 296 chars (~74 tok)
tmux: 255 chars (~64 tok)
discord: 215 chars (~54 tok)
sonoscli: 207 chars (~52 tok)
weather: 202 chars (~51 tok)
Lemme know if u need anything in specific