PromptScript language expert for reading, writing, modifying, and troubleshooting .prs files. Use when working with PromptScript syntax, creating or editing .prs files, adding blocks like @identity, @standards, @restrictions, @shortcuts, @skills, or @agents, configuring promptscript.yaml, resolving compilation errors, understanding inheritance (@inherit) and composition (@use, @extend), or migrating AI instructions to PromptScript. Also use when asked about compilation targets (GitHub Copilot, Claude Code, Cursor, Antigravity, Factory AI, and 30+ other AI coding agents).
PromptScript language expert for reading, writing, modifying, and troubleshooting .prs files. Use when working with PromptScript syntax, creating or editing .prs files, adding blocks like @identity, @standards, @restrictions, @shortcuts, @skills, or @agents, configuring promptscript.yaml, resolving compilation errors, understanding inheritance (@inherit) and composition (@use, @extend), or migrating AI instructions to PromptScript. Also use when asked about compilation targets (GitHub Copilot, Claude Code, Cursor, Antigravity, Factory AI, and 30+ other AI coding agents).
PromptScript is a domain-specific language that compiles .prs files into native instruction formats for AI coding assistants (GitHub Copilot, Claude Code, Cursor, Antigravity, Factory AI, OpenCode, Gemini CLI). One source of truth, multiple outputs.
File Structure
A .prs file is made of blocks. Order doesn't matter except @meta should come first by convention.
PromptScript has three content types inside blocks:
Text Content
Use triple quotes (three double-quote characters) to wrap multiline text.
Text is automatically dedented - leading whitespace from source indentation is stripped.
Use for prose, markdown, or freeform content.
Example: @identity with a text block describing an AI persona starting with "You are..."
Defines AI persona. Start with "You are..." for consistent output across all formatters.
Contains a triple-quoted text block with the persona description.
@context
Project context with structured properties (project, team, languages, runtime)
plus optional triple-quoted text for architecture details, diagrams, etc.
@standards
Category-based conventions. Any category name is valid:
Allowed file types: .md, .json, .yaml, .yml, .txt, .csv. Paths are resolved relative
to the .prs file. Formatters emit referenced files alongside SKILL.md in the output directory.
Parameterized Skills
Skills in .promptscript/skills/<name>/SKILL.md support template parameters via
YAML frontmatter. Define params in frontmatter and use {{variable}} in content:
---name:reviewdescription:"Review {{language}} code for {{standard}}"params:language:type:stringstandard:type:stringdefault:"best practices"references:-references/architecture.md---Reviewthecodeusing {{language}} conventionsfollowing {{standard}}.
The references field in SKILL.md frontmatter lists files to attach to the skill's context.
Paths are relative to the SKILL.md file.
The validator (PS016) checks that required skills exist, detects self-references,
and catches circular dependency chains.
Skill Contracts (Inputs/Outputs)
Skills can declare typed inputs and outputs in SKILL.md frontmatter:
---name:security-scandescription:"Scan for vulnerabilities"inputs:files:description:"Files to scan"type:stringseverity:description:"Minimum severity"type:enumoptions: [low, medium, high]
default:mediumoutputs:report:description:"Scan report"type:stringpassed:description:"Whether scan passed"type:boolean---
Field types: string, number, boolean, enum (with options list).
The validator (PS017) checks field types, ensures enum fields have options,
and warns if param names collide with input names.
Shared Resources
Skills in a folder can share common resources via .promptscript/shared/:
.promptscript/
shared/
templates.md # Shared across all skills
style-guide.md
skills/
review/
SKILL.md # Gets @shared/templates.md, @shared/style-guide.md
deploy/
SKILL.md # Also gets shared resources
Files in shared/ are automatically included in every skill with @shared/ prefix.
@agents
Custom subagent definitions. Compiles to .claude/agents/ for Claude Code,
.github/agents/ for GitHub Copilot, .factory/droids/ for Factory AI, etc.
Supports mixed models per agent: specModel sets a different model for
Specification/planning mode (GitHub, Factory), specReasoningEffort sets reasoning
effort for the spec model (Factory only, values: "low", "medium", "high").
Factory AI droids support additional properties: model (any model ID or "inherit"),
reasoningEffort ("low", "medium", "high"), and tools (category name like "read-only"
or array of tool IDs).
@examples
Structured few-shot examples for AI assistants (requires syntax 1.2.0):
@meta {
id: "commit-style"
syntax: "1.2.0"
}
@examples {
feat-commit: {
description: "Feature commit with scope"
input: "Added user authentication with JWT tokens"
output: "feat(auth): add JWT-based user authentication"
}
}
Each entry is a named example with input and output (both required),
plus optional description. Multi-line content uses triple-quoted strings.
Examples can also be attached to skills via the examples property:
Content detection: PromptScript blocks in .md are parsed as a .prs fragment;
YAML frontmatter with name/description is loaded as a skill definition;
otherwise content is treated as free-form knowledge.
Path matching is normalized ("!./foo.md" matches "foo.md"). Only works in @extend blocks
on references and requires. Validator PS028 warns about ! in base definitions.
Overlay consistency warnings
The resolver emits warnings during compile when an overlay drifts from its base. Always shown
(not gated by --verbose):
Orphaned extend — @extend target "X" not found — overlay will be ignored. Triggered when
the targeted block doesn't exist (base removed or renamed).
Stale skill target — @extend creates new skill "X" — base does not define it. Triggered
when an @extend inside @skills would create a new skill instead of extending an existing one.
Negation orphan — Negation "!path" did not match any base entry — it may be stale.
Triggered when a !entry in references/requires doesn't match anything in the base.
These come from the resolver, not the validator (PS0XX rules). They appear during prs compile,
not prs validate.
Sealed properties
Prevent @extend from overriding specified replace-strategy properties:
@skills {
deploy: {
content: (triple-quoted text with critical workflow)
sealed: ["content", "description"]
}
}
sealed: true seals all replace-strategy properties. Attempting to override a sealed
property is a hard compilation error. Only the base skill author can set sealed —
overlays cannot add or modify it. Append-strategy properties remain extendable.
Validator PS029 warns about invalid entries in sealed.
Skill composition (inline @use)
Import sub-skills within a @skills block to compose multi-phase workflows:
@skills {
ops: {
description: "Production triage"
content: (triple-quoted text with orchestrator instructions)
}
@use ./phases/health-scan
@use ./phases/triage
@use ./phases/code-fix as autofix
}
Each @use resolves the referenced .prs file, extracts its skill definition and context
blocks, and flattens them as numbered phase sections into the parent skill's content. The
as alias form controls the phase display name. Validator PS027 checks composition validity.
Parameterized Inheritance (Template Variables)
Use {{variable}} placeholders in a parent/template file, and pass values
from the child file via @inherit or @use with (key: value) syntax.
IMPORTANT: Variables are NOT set from promptscript.yaml or CLI. They are
passed from one .prs file to another through @inherit or @use.
Step 1: Create the template (parent file with params in @meta):
# base.prs - reusable template
@meta {
id: "service-template"
syntax: "1.0.0"
params: {
serviceName: string
port?: number = 3000
}
}
@identity {
"""
You are working on {{serviceName}} running on port {{port}}.
"""
}
Step 2: Inherit with values (child file passes params):
This skill is automatically included when compiling with prs compile. No manual copying needed.
To disable, set includePromptScriptSkill: false in your promptscript.yaml.
When remote imports are used, prs compile automatically generates a lockfile
recording the exact resolved commit for each dependency. Integrity hashes
(SHA-256) are included for registry references to detect tampering or drift.
This enables reproducible builds across machines and CI. Commit promptscript.lock
to version control.
Use --ignore-hashes on prs compile or prs validate to skip integrity
hash verification when needed.
Policy Engine
Define organizational policies in promptscript.yaml to validate skill extensions:
policies:-name:adjacent-layers-onlykind:layer-boundarydescription:"Only adjacent layers can extend each other"severity:errorlayers: ["@core", "@team", "@project"]
maxDistance:1-name:protect-contentkind:property-protectiondescription:"Content override requires explicit approval"severity:warningproperties: ["content", "description"]
-name:approved-registrieskind:registry-allowlistdescription:"Extensions must come from approved registries"severity:errorallowed: ["@core", "@team"]
Policy kinds: layer-boundary (controls layer distance), property-protection
(prevents overriding specific properties), registry-allowlist (restricts extension sources).
Severity: error (fails validation) or warning (reported only).
Skip with --skip-policies during development (never in CI).
Syntax Version Validation
The syntax field in @meta declares the PromptScript language version (semver).
Adds @agents (plus internal @workflows, @prompts - not user-facing)
1.2.0
Adds @examples (few-shot input/output pairs)
Block Version Requirements
Block
Minimum Syntax Version
@agents
1.1.0
@examples
1.2.0
All other built-in blocks are available from 1.0.0.
Validation Rules
PS018 (syntax-version-compat): warns when blocks used in a file require a higher syntax version than declared. For example, @agents with syntax: "1.0.0" triggers PS018. Suggestion: run prs validate --fix.
PS019 (unknown-block-name): warns when a block name is not a known PromptScript type, with fuzzy-match suggestions for typos.
PS021 (use-block-filter): errors when only and exclude are both specified in @use parameters.
PS025 (valid-skill-references): errors when a references entry points to a file with a disallowed extension or a path that cannot be resolved.
PS026 (safe-reference-content): warns when a referenced file contains potentially sensitive content (e.g., secrets, credentials).
PS027 (valid-skill-composition): warns about conflicting phase names or excessive phases in composed skills.
PS028 (valid-append-negation): warns when negation prefix ! appears in base skill definitions (only effective in @extend).
PS029 (valid-sealed-property): warns when sealed contains non-replace-strategy property names.
PS030 (policy-compliance): validates skill extensions against organizational policies defined in promptscript.yaml.
Fixing Syntax Versions
prs validate --fix # Auto-fix syntax versions in .prs files
prs upgrade # Upgrade all .prs files to the latest version
--fix rewrites the syntax: "..." line in each file's @meta block to match the minimum version required by the blocks used. It only upgrades, never downgrades.
prs upgrade upgrades all files to the latest known syntax version regardless of what blocks they use.
CLI Commands
prs init # Initialize project (auto-detects existing files)
prs init --auto-import # Initialize + static import of existing files
prs migrate # Interactive migration flow
prs migrate --static # Non-interactive static import
prs migrate --llm # Generate AI-assisted migration prompt
prs compile # Compile to all targets
prs compile --watch # Watch mode
prs compile --ignore-hashes # Skip integrity hash verification
prs build <name> # Compile a named build profile
prs validate --strict # Validate syntax
prs validate --fix # Auto-fix syntax version declarations
prs validate --skip-policies # Skip policy engine evaluation
prs upgrade # Upgrade all .prs files to latest syntax version
prs import CLAUDE.md # Import existing AI instructions
prs import --dry-run # Preview import conversion
prs inspect <skill> # Show skill composition provenance
prs inspect <skill> --layers # Show layer-level breakdown
prs hooks install # Install auto-compilation hooks for AI tools
prs hooks install claude # Install hooks for a specific tool
prs skills add <source> # Add a remote skill (@use + lock update + SKILL.md validation)
prs skills add <source> --strict # Treat validation warnings as errors
prs skills add <source> --skip-validation # Bypass Agent Skills spec checks (not recommended)
prs skills remove <name> # Remove a skill (@use line + lock entry)
prs skills list # List all imported skills
prs skills update # Re-resolve markdown-imported skills (re-validates + re-hashes)
prs pull # Update registry
prs diff --target claude # Show compilation diff
prs lock # Generate/update promptscript.lock
prs lock --dry-run # Preview lockfile changes
prs update # Re-resolve all remote imports to latest
prs update <url> # Update a specific registry
prs vendor sync # Copy cached deps to .promptscript/vendor/
prs vendor check # Verify vendor matches lockfile
prs resolve @alias/path # Debug: show how an import resolves
prs registry list # Show configured registries and aliases
prs registry add <alias> <url> # Add a registry alias
Output Targets
38+ supported targets. Key examples:
Target
Main File
Skills
GitHub
.github/copilot-instructions.md
.github/skills/*/SKILL.md
Claude
CLAUDE.md
.claude/skills/*/SKILL.md
Cursor
.cursor/rules/project.mdc
.cursor/commands/*.md
Antigravity
.agent/rules/project.md
.agent/rules/*.md
Factory
AGENTS.md
.factory/skills/*/SKILL.md, .factory/droids/*.md
OpenCode
OPENCODE.md
.opencode/skills/*/SKILL.md
Gemini
GEMINI.md
.gemini/skills/*/skill.md
Windsurf
.windsurf/rules/project.md
.windsurf/skills/*/SKILL.md
Cline
.clinerules
.agents/skills/*/SKILL.md
Roo Code
.roorules
.roo/skills/*/SKILL.md
Codex
AGENTS.md
.agents/skills/*/SKILL.md
Continue
.continue/rules/project.md
.continue/skills/*/SKILL.md
+ 26 more
See full list in documentation
Formatter Documentation
For detailed information about each formatter's output paths, supported features, quirks, and example outputs:
Full formatter reference:docs/reference/formatters/ (7 dedicated pages + index of all 37)
llms-full.txt: Available at the docs site root - contains all documentation in a single file for LLM consumption
All 37 formatters indexed at:docs/reference/formatters/index.md with output paths, tier, and feature flags
Auto-Compilation Hooks
Instead of running prs compile --watch manually, install hooks so your AI tool
triggers compilation automatically when you edit .prs files:
prs hooks install # Auto-detect and install for all detected tools
prs hooks install claude # Install for a specific tool
prs hooks install --all # Install for all supported tools
Hooks also protect generated files from direct edits — when an AI agent tries
to edit a compiled output (e.g., CLAUDE.md), the write is blocked with a message
pointing to the source .prs file. Supported tools: Claude Code, Factory AI,
Cursor, Windsurf, Cline, GitHub Copilot, Gemini CLI.
Using {{var}} in the root file without @inherit - template variables only work
in a parent file that defines params in @meta, with values passed by the child
via @inherit ./parent(key: value) or @use ./fragment(key: value). They are NOT
set from promptscript.yaml or CLI flags
Using @examples with syntax: "1.0.0" or "1.1.0" - @examples requires
syntax version 1.2.0. Run prs validate --fix to auto-upgrade
Migrating Existing AI Instructions to PromptScript
Automated: prs import
The fastest way to convert existing AI instructions to PromptScript:
prs import CLAUDE.md # Convert a single file
prs import .github/copilot-instructions.md
prs import AGENTS.md --output ./imported.prs
prs import --dry-run CLAUDE.md # Preview without writing
prs import automatically:
Detects the source format (Claude, GitHub Copilot, Cursor, Factory, etc.)
Maps content to appropriate PromptScript blocks (@identity, @standards, etc.)
Generates a valid .prs file with @meta block
Preserves the original intent and structure
Supported source formats:
CLAUDE.md (Claude Code)
.github/copilot-instructions.md (GitHub Copilot)
.cursorrules or .cursor/rules/*.mdc (Cursor)
AGENTS.md (Factory AI / Codex)
.clinerules (Cline), .roorules (Roo Code)
.windsurf/rules/*.md (Windsurf)
Any Markdown-based AI instruction file
Manual Migration
For complex migrations or when prs import needs refinement:
Source Pattern
PromptScript Block
"You are..." persona text
@identity
Project description, tech stack
@context
Coding conventions, style rules
@standards
"Never...", "Always...", hard rules
@restrictions
/command definitions
@shortcuts
Skill/tool definitions
@skills
Agent/subagent configs
@agents
Reference docs, API specs
@knowledge
After import, split into modular files (context.prs, standards.prs, etc.)
and compose with @use in project.prs. Run prs validate --strict then
prs compile to verify output matches the original.