***

title: claude_skills
slug: /reference/python/agents/skills/claude-skills
description: Load Claude Code-style SKILL.md files as agent tools.
---------------------

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

Load Claude Code-style SKILL.md files as agent tools. Each SKILL.md file in the
configured directory becomes a SWAIG function, with YAML frontmatter parsed for
metadata.

**Tools:** Dynamically created from SKILL.md files

**Requirements:** `PyYAML`

**Multi-instance:** Yes

<ParamField path="skills_path" type="str" required={true} toc={true}>
  Path to the directory containing Claude skill folders. Each subfolder must
  contain a `SKILL.md` file.
</ParamField>

<ParamField path="include" type="list" default="[&#x22;*&#x22;]" toc={true}>
  Glob patterns for skill folder names to include.
</ParamField>

<ParamField path="exclude" type="list" default="[]" toc={true}>
  Glob patterns for skill folder names to exclude.
</ParamField>

<ParamField path="tool_prefix" type="str" default="claude_" toc={true}>
  Prefix for generated function names. Use an empty string for no prefix.
</ParamField>

<ParamField path="prompt_title" type="str" default="Claude Skills" toc={true}>
  Title for the prompt section that lists available skills.
</ParamField>

<ParamField path="prompt_intro" type="str" default="You have access to specialized skills. Call the appropriate tool when the user's question matches:" toc={true}>
  Introductory text for the prompt section.
</ParamField>

<ParamField path="skill_descriptions" type="dict" default="{}" toc={true}>
  Override descriptions for specific skills. Keys are skill names, values are
  description strings.
</ParamField>

<ParamField path="response_prefix" type="str" default="" toc={true}>
  Text to prepend to skill results.
</ParamField>

<ParamField path="response_postfix" type="str" default="" toc={true}>
  Text to append to skill results.
</ParamField>

<ParamField path="allow_shell_injection" type="bool" default="False" toc={true}>
  Enable shell command preprocessing in skill bodies.
  **Security warning:** allows arbitrary shell execution.
</ParamField>

<ParamField path="allow_script_execution" type="bool" default="False" toc={true}>
  Discover and list `scripts/` and `assets/` files in prompt sections.
</ParamField>

<ParamField path="ignore_invocation_control" type="bool" default="False" toc={true}>
  Override `disable-model-invocation` and `user-invocable` frontmatter flags.
  When `True`, all discovered skills are registered regardless of invocation control.
</ParamField>

<ParamField path="shell_timeout" type="int" default="30" toc={true}>
  Timeout in seconds for shell injection commands.
</ParamField>

```python
from signalwire import AgentBase

class MyAgent(AgentBase):
    def __init__(self):
        super().__init__(name="assistant", route="/assistant")
        self.set_prompt_text("You are a helpful assistant.")
        self.add_skill("claude_skills", {
            "skills_path": "/path/to/skills/directory",
            "tool_prefix": "skill_"
        })

agent = MyAgent()
agent.serve()
```