> ## Documentation Index
> Fetch the complete documentation index at: https://docs.chowder.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Skills

> Give your agent superpowers — web browsing, code execution, image generation, and more — by installing skills from ClawHub.

# Skills

Skills are plugins that give your agent new capabilities. Want it to browse the web? Install a skill. Generate images? Install a skill. Execute code, search the internet, read PDFs? Skills.

They come from [ClawHub](https://clawhub.dev) — the package registry for OpenClaw. Think npm, but for agent capabilities.

## Installing a skill

Pass the skill's slug and Chowder handles the rest:

```bash theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
curl -X POST https://api.chowder.dev/v1/instances/{id}/skills \
  -H "Authorization: Bearer $CHOWDER_KEY" \
  -H "Content-Type: application/json" \
  -d '{"slug": "@openclaw/web-search"}'
```

Chowder runs `clawhub install` inside the instance's sandbox, enables the skill in the gateway config, and reports back. The agent can use it immediately.

<Tip>
  You can pass environment variables at install time if the skill needs them:

  ```bash theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
  curl -X POST https://api.chowder.dev/v1/instances/{id}/skills \
    -H "Authorization: Bearer $CHOWDER_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "slug": "@openclaw/web-search",
      "env": {
        "SERP_API_KEY": "your-key-here"
      }
    }'
  ```
</Tip>

## Installed vs. ready

There's an important distinction between a skill that's **installed** and one that's **ready**:

<CardGroup cols={2}>
  <Card title="Installed" icon="download">
    The skill's code is in the workspace. It's registered with OpenClaw. But it might not work yet — it could be missing required API keys or configuration.
  </Card>

  <Card title="Ready" icon="circle-check">
    The skill is installed **and** all its required environment variables are set. The agent can actually use it.
  </Card>
</CardGroup>

When you install a skill, Chowder reads its `SKILL.md` to figure out what env vars it needs. If any are missing, the response will tell you:

```json theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
{
  "skill": "web-search",
  "status": "installed_missing_env",
  "message": "Missing env vars: SERP_API_KEY",
  "required_env": ["SERP_API_KEY"]
}
```

You can set the missing vars later via the skill config endpoint:

```bash theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
curl -X PATCH https://api.chowder.dev/v1/instances/{id}/skills/web-search \
  -H "Authorization: Bearer $CHOWDER_KEY" \
  -H "Content-Type: application/json" \
  -d '{"env": {"SERP_API_KEY": "your-key-here"}}'
```

## Listing skills

```bash theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
# List all skills on an instance
curl https://api.chowder.dev/v1/instances/{id}/skills \
  -H "Authorization: Bearer $CHOWDER_KEY"

# Get details about a specific skill
curl https://api.chowder.dev/v1/instances/{id}/skills/web-search \
  -H "Authorization: Bearer $CHOWDER_KEY"
```

The list response includes each skill's name, description, source, and whether it's ready:

```json theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
[
  {
    "name": "web-search",
    "description": "Search the web using SERP API",
    "source": "@openclaw/web-search",
    "ready": true
  },
  {
    "name": "browser",
    "description": "Control a headless browser",
    "source": "@openclaw/browser",
    "ready": true
  }
]
```

## Popular skills

Here are some commonly used ones to get you started:

| Skill            | Slug                    | What it does                                       |
| ---------------- | ----------------------- | -------------------------------------------------- |
| Web Search       | `@openclaw/web-search`  | Search the internet via SERP API                   |
| Browser          | `@openclaw/browser`     | Control a headless Chromium browser                |
| Code Execution   | `@openclaw/code-runner` | Run Python/JS/shell code in a sandbox              |
| Image Generation | `@openclaw/image-gen`   | Generate images via DALL-E, Stable Diffusion, etc. |
| File Reader      | `@openclaw/file-reader` | Parse PDFs, CSVs, DOCX, and other file formats     |

<Note>
  The skills available on ClawHub are community-maintained and constantly growing. Check [clawhub.dev](https://clawhub.dev) for the full catalog.
</Note>

## Uninstalling a skill

```bash theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
curl -X DELETE https://api.chowder.dev/v1/instances/{id}/skills/web-search \
  -H "Authorization: Bearer $CHOWDER_KEY"
```

This removes the skill from the workspace, cleans up the ClawHub lockfile, and the agent can no longer use it.

## Skills are instance-scoped

Skills belong to the instance, not to a session. When you install a skill, every session on that instance can use it. There's no way to restrict a skill to a specific session — if you need that level of isolation, use separate instances.

<Accordion title="Can I install custom skills that aren't on ClawHub?">
  Not through the Chowder API currently. You'd need to use the files API to manually place skill files in the workspace's `skills/` directory and configure them through the instance config. ClawHub is the supported path.
</Accordion>

<Accordion title="Do skills persist when I stop and start an instance?">
  Yes. Skills are installed into the workspace filesystem, which is preserved when the sandbox hibernates. When you start the instance again, all your skills are still there and ready.
</Accordion>

<Accordion title="How do I know what env vars a skill needs?">
  The install response includes a `required_env` field listing all required environment variables. You can also check the skill's page on ClawHub or call `GET /v1/instances/{id}/skills/{name}` for details.
</Accordion>
