> This page is for Server SDKs.

> Fetch clean Markdown by appending `.md` to any page URL under https://signalwire.com/docs or requesting it with the HTTP header `Accept: text/markdown`. The root index at https://signalwire.com/docs/llms.txt lists the available documentation indexes.

# Custom Skills

> Create custom skills and register them from external directories or via pip packages.

[skillbase]: /docs/server-sdks/reference/python/agents/skill-base

You can create custom skills and register them from external directories or via pip packages.

### External Directory

```python
from signalwire.skills.registry import skill_registry

skill_registry.add_skill_directory("/opt/custom_skills")
```

Or set the `SIGNALWIRE_SKILL_PATHS` environment variable (colon-separated paths):

```bash
export SIGNALWIRE_SKILL_PATHS=/path/to/skills1:/path/to/skills2
```

### Entry Points

Install skills as pip packages by defining entry points:

```python
# In setup.py
setup(
    name="my-skills-package",
    entry_points={
        "signalwire.skills": [
            "weather = my_package.skills:WeatherSkill",
            "stock = my_package.skills:StockSkill"
        ]
    }
)
```

> **Note**
>
> Entry-point skills cannot override built-in skills. If an entry-point skill uses the
> same `SKILL_NAME` as a built-in skill, it is skipped with an error log.

### Listing Available Skills

```python
from signalwire.skills.registry import skill_registry

# List all available skills
skills = skill_registry.list_skills()
for skill in skills:
    print(f"{skill['name']}: {skill['description']}")

# Get complete schema for all skills (includes parameters)
schema = skill_registry.get_all_skills_schema()
```

For creating custom skills, see [`SkillBase`][skillbase].