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

# skills

> Discover IXO skill capsules — the caller's published private skills first, then the public registry.

**Source:** [`packages/oracle-runtime/src/plugins/skills/`](https://github.com/ixoworld/ixo-oracles-boilerplate/blob/main/packages/oracle-runtime/src/plugins/skills/)

| Attribute     | Value                            |
| ------------- | -------------------------------- |
| Visibility    | `always`                         |
| Stability     | `stable`                         |
| Category      | `data`                           |
| Default state | On                               |
| Depends on    | `sandbox` (hard dep — see below) |

## Summary

Discover IXO skill capsules. Both `list_skills` and `search_skills` mint an `ixo:skills` UCAN invocation per call so the registry surfaces the caller's own published private skills alongside public ones. When minting fails the tools degrade to public-only — they never throw on auth issues. Pairs with [`sandbox`](/build-an-oracle/reference/bundled-plugins/sandbox) for execution (see [Plugin vs Skill](/build-an-oracle/understand/plugins-vs-skills)).

## Environment variables

| Var                        | Required | Description                                                                              |
| -------------------------- | -------- | ---------------------------------------------------------------------------------------- |
| `SKILLS_CAPSULES_BASE_URL` | no       | Defaults to `https://capsules.skills.ixo.earth`.                                         |
| `NETWORK`                  | no       | Read but not owned (declared by the core base env schema). Forwarded as `X-IXO-Network`. |

## Depends on

Hard-depends on [`sandbox`](/build-an-oracle/reference/bundled-plugins/sandbox) — skill *execution* runs through `sandbox_run`, which `sandbox` owns (listing/search is HTTP-only). But `sandbox` is auto-detect (`SANDBOX_MCP_URL`) and off by default, while `skills` is on by default. If `sandbox` is not loaded — e.g. `SANDBOX_MCP_URL` is unset — the loader **cascades `skills` off silently** (a `boot.plugin.cascaded_off` warning), it does **not** fail boot. A true boot failure only occurs if `sandbox` is removed from the plugin set entirely while `skills` still requires it.

## What it contributes

* **Tools:** `list_skills`, `search_skills`.
* **Sub-agents:** none.
* **Middleware:** none.
* **HTTP routes:** none.
* **Shared state:** none.

## Opt out / Opt in

```ts theme={"system"}
const app = await createOracleApp({
  config,
  features: { skills: false }, // never load
  // features: { skills: true }, // force load (default)
});
```

## When to use it

* User asks "what skills are available?" or "what can you do?".
* User asks the agent to find a skill for a specific task ("a skill for invoices", "is there a skill for KYC?").
* Before running a skill via the sandbox, list or search to obtain its `cid` and path.

## When NOT to use it

* Executing a skill — that goes through [`sandbox`](/build-an-oracle/reference/bundled-plugins/sandbox) (`sandbox_run`), not the skills tools.
* General web search — use [`firecrawl`](/build-an-oracle/reference/bundled-plugins/firecrawl).

## Where to read next

<CardGroup cols={2}>
  <Card title="Plugin vs Skill" icon="scale-balanced" href="/build-an-oracle/understand/plugins-vs-skills">
    Why `skills` discovers and `sandbox` executes.
  </Card>

  <Card title="Declare dependencies" icon="link" href="/build-an-oracle/develop/plugin-recipes/declare-dependencies">
    Pattern used here to require `sandbox`.
  </Card>
</CardGroup>
