***

title: Custom Skills
slug: /reference/python/agents/skills/custom-skills
description: Create custom skills and register them from external directories or via pip packages.
---------------------

For a complete index of all SignalWire documentation pages, fetch https://signalwire.com/docs/llms.txt

[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.
</Note>

### 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].