Your instance needs to be in
running status for all of these endpoints to work. If it’s stopped, start it first.Set up
List what’s available for your instance. Pass
eligible_only=true to filter down to skills that are ready to install:curl "https://api.chowder.dev/v1/instances/$INSTANCE_ID/skills?eligible_only=true" \
-H "Authorization: Bearer $CHOWDER_KEY"
[
{
"name": "web-search",
"description": "Search the web using multiple providers",
"source": "clawhub",
"ready": false
},
{
"name": "browser",
"description": "Full browser control via Playwright",
"source": "clawhub",
"ready": false
},
{
"name": "image-gen",
"description": "Generate images with DALL-E or Stable Diffusion",
"source": "clawhub",
"ready": false
},
{
"name": "code-runner",
"description": "Execute code in a sandboxed environment",
"source": "clawhub",
"ready": false
}
]
Let’s install web search. Skills are identified by their ClawHub slug — the format is
@org/skill-name:curl -X POST https://api.chowder.dev/v1/instances/$INSTANCE_ID/skills/install \
-H "Authorization: Bearer $CHOWDER_KEY" \
-H "Content-Type: application/json" \
-d '{
"slug": "@openclaw/web-search"
}'
{
"skill": "web-search",
"status": "installed",
"output": "✔ OK. Installed web-search -> /home/sandbox/.openclaw/workspace/skills/web-search",
"env_applied": null,
"required_env": null,
"message": null
}
curl -X POST https://api.chowder.dev/v1/instances/$INSTANCE_ID/responses \
-H "Authorization: Bearer $CHOWDER_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-20250514",
"input": "What are the top news stories today?"
}'
curl -X POST https://api.chowder.dev/v1/instances/$INSTANCE_ID/skills/install \
-H "Authorization: Bearer $CHOWDER_KEY" \
-H "Content-Type: application/json" \
-d '{
"slug": "@openclaw/image-gen"
}'
{
"skill": "image-gen",
"status": "installed_missing_env",
"output": "✔ OK. Installed image-gen -> /home/sandbox/.openclaw/workspace/skills/image-gen",
"env_applied": null,
"required_env": ["OPENAI_API_KEY"],
"message": "Missing env vars: OPENAI_API_KEY"
}
Notice
"status": "installed_missing_env" and the required_env array. The skill is installed but won’t work until you provide those vars.A skill in
installed_missing_env status is installed on disk but won’t be invoked by the agent. Set the required env vars to activate it.curl -X PATCH https://api.chowder.dev/v1/instances/$INSTANCE_ID/skills/image-gen \
-H "Authorization: Bearer $CHOWDER_KEY" \
-H "Content-Type: application/json" \
-d '{
"apiKey": "sk-your-openai-key-here"
}'
This returns
204 No Content. The key is written to the OpenClaw config and the skill is now fully activated.You can also pass env vars at install time to skip the extra step:When
env_applied matches required_env, everything’s good.curl https://api.chowder.dev/v1/instances/$INSTANCE_ID/skills/web-search \
-H "Authorization: Bearer $CHOWDER_KEY"
{
"name": "web-search",
"description": "Search the web using multiple providers",
"source": "clawhub",
"path": "/home/sandbox/.openclaw/workspace/skills/web-search",
"ready": true
}
"ready": true means the skill is installed, enabled, and has all required env vars configured. The agent will use it when relevant.curl -X DELETE https://api.chowder.dev/v1/instances/$INSTANCE_ID/skills/web-search \
-H "Authorization: Bearer $CHOWDER_KEY"
Enable and disable without uninstalling
Sometimes you want to temporarily disable a skill without removing it entirely. Use the PATCH endpoint:204 No Content. The skill files stay on disk but the agent won’t use a disabled skill.
Quick reference
| Action | Method | Endpoint |
|---|---|---|
| List skills | GET | /v1/instances/{id}/skills |
| List eligible | GET | /v1/instances/{id}/skills?eligible_only=true |
| Skill info | GET | /v1/instances/{id}/skills/{name} |
| Install | POST | /v1/instances/{id}/skills/install |
| Configure | PATCH | /v1/instances/{id}/skills/{name} |
| Uninstall | DELETE | /v1/instances/{id}/skills/{name} |