Skip to main content
Skills can be invoked three ways: auto-triggered by the LLM from the system-prompt listing, manually via /skill-name slash commands, or programmatically through SkillManager.invoke().
The user sends a slash command or normal prompt; the agent routes to skill invoke or LLM handling.

Quick Start

1

Slash command

2

Auto-trigger


How It Works

ModeWhen to use
Auto-triggerSkill description is in the system prompt; the LLM decides when to follow it
Slash commandUser types /deploy staging; body is rendered with $ARGUMENTS substituted
Skill files are read as UTF-8. Run praisonai skills validate --path ./my-skill to catch encoding issues before deploy.

Argument Substitution

Inside SKILL.md bodies you can reference arguments passed after the skill name:
/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.

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.

Common Patterns

Programmatic invoke

YAML

CLI

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.

Best Practices

Set disable-model-invocation: true on deploy, restart, or delete skills so the LLM cannot trigger them accidentally — users invoke them explicitly with /skill-name.
Set user-invocable: false when a skill should only auto-activate from the system prompt, not appear as a slash command.
Leave shell_exec=False (default) in production. Pass shell_exec=True only in trusted environments where inline !`cmd` blocks are required.
Save SKILL.md as UTF-8. Run praisonai skills validate --path ./my-skill to catch Windows encoding issues early.

Agent Skills

Author SKILL.md files and configure skills on agents

Skill Bundles

Select a named, reusable set of skills with a single @bundle marker

Skill Manage

Create, edit, and approve agent-proposed skills

Approval Protocol

How allowed-tools pre-approval plugs into the approval registry

Skills Config

SkillsConfig options for discovery and paths