Skip to main content
Skills can be invoked three ways: auto-triggered by the LLM from the system-prompt listing, manually by the user via /skill-name slash commands, or programmatically through SkillManager.invoke().
This page covers the invocation layer added in v1.5+. For how to author skills, see Agent Skills.

How invocation works

Auto-trigger

Skill description is included in the system prompt. The LLM decides when to follow it.

Slash command

/deploy staging renders the skill body with $ARGUMENTS substituted and short-circuits the LLM call path.

Argument substitution

Inside SKILL.md bodies you can reference arguments passed after the skill name:
Deploy $ARGUMENTS now.
/deploy staging prod becomes Deploy staging prod now.

Inline shell substitution

Disabled by default. Skills that embed !`cmd` blocks render as [shell execution disabled] until you explicitly opt in.
from praisonaiagents.skills import SkillManager

mgr = SkillManager()
mgr.add_skill("./skills/pr-summary")
rendered = mgr.invoke("pr-summary", raw_args="42", shell_exec=True)
Current branch: !`git rev-parse --abbrev-ref HEAD`
```!
node --version
npm --version
```

Invocation policy

disable-model-invocation
boolean
default:"false"
When true the skill is hidden from the system-prompt listing, so the LLM cannot auto-trigger it. Users can still invoke it via /skill-name. Use for side-effecting commands like /deploy.
user-invocable
boolean
default:"true"
When false the slash-router ignores the skill. Use for background knowledge you want auto-triggered by the LLM but not exposed as a user command.

Allowed tools pre-approval

allowed-tools
string | list[str]
Space-separated string (Read Grep) or YAML list. When a user invokes the skill, those tool names are pre-approved via the approval registry for the current agent so the LLM can run them without the interactive confirmation prompt.

Python API

from praisonaiagents import Agent

agent = Agent(
    name="assistant",
    skills=["./skills/deploy"],
)

# Slash command
agent.start("/deploy staging prod")

# Or directly
rendered = agent.skill_manager.invoke("deploy", raw_args="staging prod")

YAML

# agents.yaml
agents:
  assistant:
    role: Helper
    goal: Help the user
    backstory: You are helpful.
    skills:
      - ./skills/deploy
      - ~/.praisonai/skills/csv-summary

CLI

praisonai skills list
Set PRAISONAI_DISABLE_SKILL_TOOLS=1 to stop the agent from auto-injecting run_skill_script and read_file when skills are configured. Useful for hermetic tests and hosts that want full control over the tool surface.

Precedence

Skills are discovered in this order (first wins on name collision):
1

Project

./.praisonai/skills/ or ./.claude/skills/
2

Ancestors

Every .praisonai/skills or .claude/skills in a parent directory (monorepo support)
3

User

~/.praisonai/skills/
4

System

/etc/praison/skills/
Collisions are logged at INFO level so you can see which skill won.

See also