---
question: Which visibility does a new skill get by default?
kind: task
via_web: available
via_cli: na
via_python: na
via_api: available
via_config: na
ref_web: Settings › Skills
ref_api: POST /api/skills/
prereq: You have access to the Nexus workspace the skill goes in.
next:
  - /capabilities/build/skills/run-a-skill
  - /capabilities/build/skills/change-or-delete-a-skill
---

# Create a skill

A skill is saved in a Nexus workspace and is live at once: `/<slug>` runs it, and the agent sees it on the next chat turn. A new skill is **Private (only me)** unless you pick **Workspace** or **Organization**.

The slug is the chat command. It defaults to the name, in lowercase with hyphens: `Weekly report` becomes `weekly-report`. Two skills you can see in the same workspace cannot share a slug. `skills` and `create-skill` are built-in commands: a new skill that asks for one gets the slug of its name instead.

## Web UI

Write it yourself in Settings › Skills, or let the Skills agent write it from the chat.

### Open Settings › Skills

In the workspace, open Settings › Skills, or click the **Skills** heading in the chat sidebar.

### Fill in the form

Click **Add Skill**. Fill in **Name** and **Prompt**; both are required. **Slug**, **Description** and **Visibility** are optional.

![Workspace Settings on Skills: the Add New Skill form](/abi/Screenshot_Add_Skill.png)

*Settings › Skills › Add skill: name, slug, description, prompt and visibility.*

### Save it

Click **Add Skill** under the form. The skill shows in the list, enabled, with its command in the **Command** column. A slug already in use shows `A skill with slug '/<slug>' already exists` above the buttons.

### Or ask the Skills agent

In the chat, type `/create-skill` and what the skill should do:

```text
/create-skill every Monday, summarize last week's closed deals by owner
```

The message goes to the agent, which hands it to the **Skills** agent of `naas_abi`. That agent writes the prompt, saves the skill as **Private (only me)** unless you ask for another visibility, and replies with the command to type. When the hand-off is not possible, the agent points you to Settings › Skills.

## CLI

Not applicable. No `abi` command creates a skill, and the Skills agent in `abi chat` has no Nexus workspace to save it to. Use Nexus or the REST API on this page.

## Python

Not applicable. A skill is a Nexus record, not module code, and ABI has no Python API for it. From Python, call the REST API on this page.

## REST API

The Skills routes of the Nexus API. Auth: a Nexus session with access to the workspace (`POST /api/auth/login` returns the access token).

### Find the workspace id

`GET /api/workspaces` lists your workspaces. The id is also the segment after `/workspace/` in the Nexus URL.

### Create the skill

```bash title="Create a skill"
curl -X POST "http://localhost:9879/api/skills/" \
  -H "Authorization: Bearer $NEXUS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "workspace_id": "<workspace-id>",
    "name": "Weekly report",
    "prompt": "Summarize the deals closed last week by owner, as a table.",
    "scope": "workspace"
  }'
```

`workspace_id`, `name` and `prompt` are required. Optional: `slug` (the name's slug by default), `description`, `scope` (`user` by default, `workspace` or `organization`) and `enabled` (`true` by default). The response is the skill, with its `id` and final `slug`. A slug in use or an unknown `scope` answers 409.

## Config

Not applicable. `config.yaml` has no key that creates a skill. Skills are created in Nexus or with the REST API.
