Bug type
Behavior bug (incorrect output/state without crash)
Summary
The gateway's searchSkillsFromClawHub function in skills-clawhub-YOAxk_cv.js never passes the ClawHub auth token (from ~/.config/clawhub/config.json) when calling listClawHubSkills or searchClawHubSkills. All gateway-initiated ClawHub API requests are unauthenticated, hitting the global 120 req/min rate limit instead of the per-user 600 req/min authenticated limit. This causes the ClawControl "Available Skills" tab to permanently show "No skills found on ClawHub" once the global rate limit is exhausted.
Additionally, the /api/v1/skills list endpoint returns empty results when authenticated (it filters to the user's own published skills only), so even if the token were passed to listClawHubSkills, the "browse all" flow would still return nothing. The /api/v1/search endpoint works correctly with auth.
Steps to reproduce
- Install OpenClaw v2026.3.22 and log into ClawHub via
clawhub login
-
- Start the gateway (
openclaw gateway start)
-
- Open ClawControl → Skills → Available tab
-
- Observe "No skills found on ClawHub"
-
- Check gateway logs:
openclaw logs | grep -i clawhub — shows ClawHubRequestError: ClawHub /api/v1/skills failed (429): Rate limit exceeded
-
- Run
curl -sv https://clawhub.ai/api/v1/skills from the VPS — confirms ratelimit-remaining: 0 (global 120 limit exhausted)
-
- Run
curl -s -H "Authorization: Bearer <clawhub_token>" https://clawhub.ai/api/v1/skills — returns {"items":[],"nextCursor":null} (empty, because authenticated list filters to user's own published skills)
Expected behavior
The gateway should read the ClawHub auth token from ~/.config/clawhub/config.json and pass it to all ClawHub API calls (listClawHubSkills, searchClawHubSkills, fetchClawHubSkillDetail, downloadClawHubSkillArchive). The "Available Skills" tab in ClawControl should display the full ClawHub skill catalog. Authenticated requests should use the per-user 600 req/min rate limit instead of the global 120 req/min unauthenticated limit.
Actual behavior
- All gateway ClawHub API requests are unauthenticated, consuming the global 120 req/min rate limit shared across all users.
-
- The gateway hits 429 rate limits within seconds of starting, causing "No skills found on ClawHub" in ClawControl.
-
- Even if the token were passed,
listClawHubSkills calls /api/v1/skills which returns empty {"items":[]} when authenticated (filters to user's own published skills).
-
- The
/api/v1/search endpoint works correctly with auth and returns the full catalog.
Workaround applied: Patched skills-clawhub-YOAxk_cv.js to load token from ~/.config/clawhub/config.json and route the "no query" browse path through /api/v1/search?q=* instead of /api/v1/skills.
OpenClaw version
2026.3.22
Operating system
Ubuntu 22.04
Install method
npm global
Model
N/A (this bug affects ClawHub skill browsing, not model inference)
Provider / routing chain
N/A (ClawHub API integration, not model routing)
Additional provider/model setup details
N/A — this bug is in the ClawHub skill marketplace integration, not model routing. The gateway's skills-clawhub-YOAxk_cv.js module makes unauthenticated HTTP requests to https://clawhub.ai/api/v1/skills and /api/v1/search without reading the locally stored ClawHub auth token.
Logs, screenshots, and evidence
Impact and severity
- Affected: All ClawControl users who have logged into ClawHub — the "Available Skills" tab is completely broken
-
- Severity: Blocks workflow — users cannot browse or install skills from ClawHub via ClawControl
-
-
- Frequency: Always reproducible (100%) — the global 120 req/min rate limit is easily exhausted by any active gateway
-
-
-
- Consequence: ClawHub skill marketplace is unusable from ClawControl; users must use CLI
clawhub search as a workaround, which also hits rate limits quickly
Additional information
Root cause: In skills-clawhub-YOAxk_cv.js, the functions searchSkillsFromClawHub, listClawHubSkills, fetchClawHubSkillDetail, and downloadClawHubSkillArchive all accept a token parameter, but the gateway never passes it. The token is stored locally at ~/.config/clawhub/config.json after clawhub login, but the gateway code doesn't read it.
Two separate issues:
- Without the token, requests use the global 120 req/min rate limit (shared across all unauthenticated users). Authenticated requests get 600 req/min per user.
-
- Even if the token is passed, the
/api/v1/skills list endpoint returns only the user's own published skills when authenticated (empty for most users). The /api/v1/search endpoint works correctly with auth and returns the full catalog.
Workaround applied: Patched skills-clawhub-YOAxk_cv.js to load the token from ~/.config/clawhub/config.json and route the "no query" browse path through /api/v1/search?q=* instead of /api/v1/skills.
Bug type
Behavior bug (incorrect output/state without crash)
Summary
The gateway's
searchSkillsFromClawHubfunction inskills-clawhub-YOAxk_cv.jsnever passes the ClawHub auth token (from~/.config/clawhub/config.json) when callinglistClawHubSkillsorsearchClawHubSkills. All gateway-initiated ClawHub API requests are unauthenticated, hitting the global 120 req/min rate limit instead of the per-user 600 req/min authenticated limit. This causes the ClawControl "Available Skills" tab to permanently show "No skills found on ClawHub" once the global rate limit is exhausted.Additionally, the
/api/v1/skillslist endpoint returns empty results when authenticated (it filters to the user's own published skills only), so even if the token were passed tolistClawHubSkills, the "browse all" flow would still return nothing. The/api/v1/searchendpoint works correctly with auth.Steps to reproduce
clawhub loginopenclaw gateway start)openclaw logs | grep -i clawhub— showsClawHubRequestError: ClawHub /api/v1/skills failed (429): Rate limit exceededcurl -sv https://clawhub.ai/api/v1/skillsfrom the VPS — confirmsratelimit-remaining: 0(global 120 limit exhausted)curl -s -H "Authorization: Bearer <clawhub_token>" https://clawhub.ai/api/v1/skills— returns{"items":[],"nextCursor":null}(empty, because authenticated list filters to user's own published skills)Expected behavior
The gateway should read the ClawHub auth token from
~/.config/clawhub/config.jsonand pass it to all ClawHub API calls (listClawHubSkills,searchClawHubSkills,fetchClawHubSkillDetail,downloadClawHubSkillArchive). The "Available Skills" tab in ClawControl should display the full ClawHub skill catalog. Authenticated requests should use the per-user 600 req/min rate limit instead of the global 120 req/min unauthenticated limit.Actual behavior
listClawHubSkillscalls/api/v1/skillswhich returns empty{"items":[]}when authenticated (filters to user's own published skills)./api/v1/searchendpoint works correctly with auth and returns the full catalog.Workaround applied: Patched
skills-clawhub-YOAxk_cv.jsto load token from~/.config/clawhub/config.jsonand route the "no query" browse path through/api/v1/search?q=*instead of/api/v1/skills.OpenClaw version
2026.3.22
Operating system
Ubuntu 22.04
Install method
npm global
Model
N/A (this bug affects ClawHub skill browsing, not model inference)
Provider / routing chain
N/A (ClawHub API integration, not model routing)
Additional provider/model setup details
N/A — this bug is in the ClawHub skill marketplace integration, not model routing. The gateway's
skills-clawhub-YOAxk_cv.jsmodule makes unauthenticated HTTP requests tohttps://clawhub.ai/api/v1/skillsand/api/v1/searchwithout reading the locally stored ClawHub auth token.Logs, screenshots, and evidence
Impact and severity
clawhub searchas a workaround, which also hits rate limits quicklyAdditional information
Root cause: In
skills-clawhub-YOAxk_cv.js, the functionssearchSkillsFromClawHub,listClawHubSkills,fetchClawHubSkillDetail, anddownloadClawHubSkillArchiveall accept atokenparameter, but the gateway never passes it. The token is stored locally at~/.config/clawhub/config.jsonafterclawhub login, but the gateway code doesn't read it.Two separate issues:
/api/v1/skillslist endpoint returns only the user's own published skills when authenticated (empty for most users). The/api/v1/searchendpoint works correctly with auth and returns the full catalog.Workaround applied: Patched
skills-clawhub-YOAxk_cv.jsto load the token from~/.config/clawhub/config.jsonand route the "no query" browse path through/api/v1/search?q=*instead of/api/v1/skills.