---
title: "Skills · intentic sandbox API"
description: "The instruction packs an agent can be handed. Every route in the skills group of the intentic sandbox API, with its input, its answer and a playground."
url: "https://intentic.dev/api/skills/"
---

Agent setup

# Skills

The instruction packs an agent can be handed

**On this page (4 sections)**

- [What the agent knows how to do](#skills-list)
- [Write a skill](#skills-save)
- [Read one skill](#skills-read)
- [Delete a skill](#skills-remove)

What is available and whether each is on, the text of one, and writing or deleting one. The list joins four separate sources into a single answer.

**GET`/skills` What the agent knows how to do**

Every skill available here and whether it is switched on, joined from all four places they come from: the owner's own, the settings, plugins a connection installed, and folders inside extensions.

### What you send

Nothing. Call it as it is.

### What comes back

| Field | Type |
| --- | --- |
| `id` Its handle, which reading and deleting… | string |
| `name` Its name | string |
| `description` What it is for, which is… | string |
| `origin` Where it came from | "builtin" | "own" | "capability" | "extension" … (7) |
| `owner` Who ships it, as the row… | string |
| `enabled` Whether the agent can reach it | boolean |
| `switchable` Whether this surface can switch it | boolean |
| `editable` Whether it can be rewritten here | boolean |
| `removable` | boolean |

Try it answered in this tab

curl

```bash
curl "$SANDBOX/skills" \
 -H "x-intentic-control: $INTENTIC_TOKEN"
```

TypeScript

```typescript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.skills.list();
```

**POST`/skills` Write a skill**

Creates or rewrites a skill by name, and switches it on, because you wrote it in order to use it. Renaming is saving under the new name and deleting the old.

### What you send

| Field | Type | Where |
| --- | --- | --- |
| `name` required What to call it | string | body |
| `description` required What it is for, which is… | string | body |
| `body` required The skill itself | string | body |

### What comes back

| Field | Type |
| --- | --- |
| `ok` Always true | true |

Try it answered in this tab

curl

```bash
curl -X POST "$SANDBOX/skills" \
 -H "x-intentic-control: $INTENTIC_TOKEN" \
 -H "content-type: application/json" \
 -d '{"name":"nightly changelog","description":"Runs every night and opens a pull request when anything changed.","body":"…"}'
```

TypeScript

```typescript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.skills.save({
 "name": "nightly changelog",
 "description": "Runs every night and opens a pull request when anything changed.",
 "body": "…"
});
```

**GET`/skills/read` Read one skill**

The full text of a single skill. The name travels in the query rather than the address, because a name can carry the owner it came from and that will not fit in a path.

### What you send

| Field | Type | Where |
| --- | --- | --- |
| `id` required Which skill | string | query |

### What comes back

| Field | Type |
| --- | --- |
| `id` The skill's id, which can carry… | string |
| `name` Its name | string |
| `body` The instructions themselves, as written | string |

Try it answered in this tab

curl

```bash
curl "$SANDBOX/skills/read?id=a1b2c3d4" \
 -H "x-intentic-control: $INTENTIC_TOKEN"
```

TypeScript

```typescript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.skills.read({
 "id": "a1b2c3d4"
});
```

**POST`/skills/remove` Delete a skill**

Removes the text and takes it off the enabled list in one step, so a screen never has to sequence two calls and never leaves one half done.

### What you send

| Field | Type | Where |
| --- | --- | --- |
| `name` required Which skill to delete | string | body |

### What comes back

| Field | Type |
| --- | --- |
| `ok` Always true | true |

Try it answered in this tab

curl

```bash
curl -X POST "$SANDBOX/skills/remove" \
 -H "x-intentic-control: $INTENTIC_TOKEN" \
 -H "content-type: application/json" \
 -d '{"name":"nightly changelog"}'
```

TypeScript

```typescript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.skills.remove({
 "name": "nightly changelog"
});
```

More in Agent setup

[Previous ← Personas](https://intentic.dev/api/personas/)[Next Extensions →](https://intentic.dev/api/extensions/)
