Skip to main content
Out of the box, your OpenClaw agent can chat — but that’s about it. Skills are what turn it from a chatbot into something useful. Web search, browser control, code execution, image generation — they’re all skills you can install with a single API call. Skills come from ClawHub, the OpenClaw package registry. Think of it like npm, but for agent capabilities.
Your instance needs to be in running status for all of these endpoints to work. If it’s stopped, start it first.

Set up

export CHOWDER_KEY="chd_org_your_key_here"
export INSTANCE_ID="your-instance-id"
1
Browse available skills
2
List what’s available for your instance. Pass eligible_only=true to filter down to skills that are ready to install:
3
curl "https://api.chowder.dev/v1/instances/$INSTANCE_ID/skills?eligible_only=true" \
  -H "Authorization: Bearer $CHOWDER_KEY"
4
[
  {
    "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
  }
]
5
ready: false means it’s not installed yet. Let’s fix that.
6
Drop the eligible_only param to see all skills, including ones already installed.
7
Install a skill
8
Let’s install web search. Skills are identified by their ClawHub slug — the format is @org/skill-name:
9
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"
  }'
10
{
  "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
}
11
"status": "installed" — it’s live. The agent can now search the web. Try it:
12
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?"
  }'
13
The agent will use the web-search skill to fetch current results and summarize them.
14
Handle skills that need environment variables
15
Some skills require API keys or config. When that’s the case, the install response tells you:
16
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"
  }'
17
{
  "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"
}
18
Notice "status": "installed_missing_env" and the required_env array. The skill is installed but won’t work until you provide those vars.
19
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.
20
Set environment variables
21
Use the PATCH endpoint to configure the skill’s env vars:
22
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"
  }'
23
This returns 204 No Content. The key is written to the OpenClaw config and the skill is now fully activated.
24
You can also pass env vars at install time to skip the extra step:
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",
    "env": {
      "OPENAI_API_KEY": "sk-your-openai-key-here"
    }
  }'
{
  "skill": "image-gen",
  "status": "installed",
  "output": "✔ OK. Installed image-gen -> ...",
  "env_applied": ["OPENAI_API_KEY"],
  "required_env": ["OPENAI_API_KEY"],
  "message": null
}
When env_applied matches required_env, everything’s good.
25
Verify a skill is ready
26
Check the status of any installed skill:
27
curl https://api.chowder.dev/v1/instances/$INSTANCE_ID/skills/web-search \
  -H "Authorization: Bearer $CHOWDER_KEY"
28
{
  "name": "web-search",
  "description": "Search the web using multiple providers",
  "source": "clawhub",
  "path": "/home/sandbox/.openclaw/workspace/skills/web-search",
  "ready": true
}
29
"ready": true means the skill is installed, enabled, and has all required env vars configured. The agent will use it when relevant.
30
Uninstall a skill
31
Changed your mind? Remove a skill with DELETE:
32
curl -X DELETE https://api.chowder.dev/v1/instances/$INSTANCE_ID/skills/web-search \
  -H "Authorization: Bearer $CHOWDER_KEY"
33
Returns 204 No Content. The skill files are removed from the workspace and the ClawHub lockfile is updated.

Enable and disable without uninstalling

Sometimes you want to temporarily disable a skill without removing it entirely. Use the PATCH endpoint:
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 '{"enabled": false}'
Both return 204 No Content. The skill files stay on disk but the agent won’t use a disabled skill.

Quick reference

ActionMethodEndpoint
List skillsGET/v1/instances/{id}/skills
List eligibleGET/v1/instances/{id}/skills?eligible_only=true
Skill infoGET/v1/instances/{id}/skills/{name}
InstallPOST/v1/instances/{id}/skills/install
ConfigurePATCH/v1/instances/{id}/skills/{name}
UninstallDELETE/v1/instances/{id}/skills/{name}

What’s next?