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 (browse them by typing / at the praisonai code prompt), or programmatically through SkillManager.invoke().
Sharing skills across a team? See Remote Skill Sources — declare a git URL once and every project stays in sync.
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

Skill files are read as UTF-8. Run praisonai skills validate --path ./my-skill to catch encoding issues before deploy.

Discover skills in the interactive menu

Inside praisonai code (the REPL and the async TUI), type / at the prompt to see every installed skill listed alongside built-ins and your custom .praisonai/commands/*.md files. Each entry uses the skill’s description from SKILL.md frontmatter, so a well-written description doubles as menu help.
Pressing Enter on /deploy staging prod runs the same code path as agent.skill_manager.invoke("deploy", raw_args="staging prod") — the SKILL.md body is rendered with $ARGUMENTS substituted and passed as the next turn’s prompt.
For the full list of command sources behind the / menu, see Slash Commands → Unified Command Registry.

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

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.
boolean
default:"true"
When false, the skill is hidden from the interactive / menu in praisonai code (REPL and async TUI) and from praisonai "/name" --skills …. It stays in the system-prompt listing so the LLM can still auto-trigger it. Use for background knowledge or model-only helpers that should never surface as a user command.

Where each skill shows up

Two independent flags decide where a skill appears — one axis for the LLM, one for the user. The interactive / menu is the completion list you see when you type / inside praisonai code (REPL or async TUI). “Absent from the / menu” means both completion and dispatch — typing the name falls through to “Unknown command”. A /deploy skill (both flags default) and a model-only pricing-lookup skill (user-invocable: false) live side by side. Type / in praisonai code and only one shows:
Flip the flag back off and the same list gains the model-only skill:

Allowed Tools Pre-approval

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.
The pre-approval is scoped to the agent instance that activated the skill — it never leaks onto other agents in the same process, even other unnamed agents that share the default name="Agent". See Tool Approval → Scope of a skill grant.

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

Remote cache

~/.praisonai/cache/remote-skills/<source>/current/ — populated by praisonai skills sync (see Remote Skill Sources)
5

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. It stays available to the LLM but never appears in the / menu inside praisonai code, so users cannot run it by mistake.
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

Remote Skill Sources

Declare a git URL once and every project stays in sync

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