Skip to content

Skills

A skill is a small, focused prompt package with a deterministic trigger. When the model decides a skill is relevant, its contents are injected into context on the spot. Skills are how Ptah keeps expertise modular: one skill per topic, versioned, and reusable across providers.

skills/
└── review-security/
├── SKILL.md # Definition + trigger description
└── references/ # Optional lazy-loaded content
├── owasp-top-10.md
└── threat-model.md
SKILL.md
---
name: review-security
description: Security vulnerability review — OWASP-based assessment across any tech stack. Use when the user asks for a security review or mentions vulnerabilities, auth, or hardening.
---
# Security Review Protocol
## Phase 1: Authentication & authorization
...

Every skill’s description field is the trigger. The orchestrator scans available skills and picks the ones whose descriptions match the user’s intent. Matching is LLM-based, not keyword-based, so phrasing matters:

  • Good: “Use when the user writes Angular forms, reactive forms, or form validation.”
  • Poor: “Angular forms stuff.”

Harness sync — sharing across AI clients

Section titled “Harness sync — sharing across AI clients”

Ptah goes beyond its own sessions. It keeps one editable copy of each skill in the user layer at ~/.ptah/user/skills/<skill-name>/, then reconciles that layer out to every AI tool it detects on your machine.

The reconciler writes real files, not links. Earlier versions used symbolic links and Windows junctions. They are gone. Each target directory now holds a manifest-owned copy, so a tool that cannot follow a link still reads the skill.

Target(s)Directory
Claude.claude/skills/<slug>/
Codex and Antigravity.agents/skills/<slug>/ (shared)
Copilot.github/skills/<slug>/
Cursor.cursor/skills/<slug>/

Only the tools you have installed get a copy. An undetected tool is not a gap.

flowchart LR
A["~/.ptah/user/skills/orchestration/"] -- copy --> B[".claude/skills/orchestration/"]
A -- copy --> C[".agents/skills/orchestration/"]
A -- copy --> D[".github/skills/orchestration/"]
A -- copy --> E[".cursor/skills/orchestration/"]
EventPtah’s action
Plugin enabledCopy every skill in the plugin into each detected target
Plugin disabledDelete the copies (the source stays in the user layer)
Plugin updatedRewrite each copy whose content hash changed
Workspace first openedReconcile the workspace against the user layer

Ptah owns only the paths its manifest records. A skill directory you created by hand is foreign, and the reconciler leaves it alone. Ptah also writes a .gitignore entry for the directories it derives, because those copies must not be committed. Edit the source in ~/.ptah/user/skills/, never a copy.

SkillAgent
Knowledge pack injected into current contextSeparate sub-session with its own context window
No token isolationToken-isolated — good for large background work
Invoked automatically when description matchesInvoked explicitly via ptah_agent_spawn or orchestrator
Best for: patterns, checklists, reference materialBest for: multi-step execution, long-running tasks

Beyond hand-authored skills, Ptah can generate skills from your own usage. The Skill Synthesis pipeline watches sessions for repeated successful trajectories and, after the 3rd success, materialises a SKILL.md at ~/.ptah/skills/<slug>/. From that point the auto-skill participates in the same discovery, harness sync, and trigger-matching as any hand-authored skill — there’s no second runtime path.

You can review, force-promote, or reject candidates in Settings → Skill Synthesis.