RFC 0008: Skills Extension
RFC 0008: Skills Extension
- Status: Implemented
- Author(s): AltairaLabs Team
- Created: 2026-02-21
- Updated: 2026-02-21
- Related Issues: N/A
Summary
Extend the PromptPack specification with a skills field for progressive-disclosure knowledge loading, following the AgentSkills.io standard. The extension adds a top-level skills array that declares external skill sources (file paths, package references, or inline definitions) and a skills string field on WorkflowState for directory-scoped skill filtering within workflow states.
Motivation
As prompt packs grow in complexity, agents need access to domain-specific knowledge that goes beyond what fits in a system template. Skills represent modular, reusable knowledge units that can be loaded on demand — instructions for specific tasks, domain expertise, or behavioral patterns that an agent activates when relevant.
Current Limitations
Without a skills mechanism, developers must:
- Embed all domain knowledge directly in system templates, leading to bloated prompts
- Manually manage which knowledge is available in which context
- Duplicate instructions across prompts when multiple prompts need the same expertise
- Hardcode knowledge loading in runtime code, breaking PromptPack’s portability promise
This leads to:
- Prompt bloat — system templates grow unwieldy as domain knowledge accumulates
- Poor discoverability — no standard way to declare what knowledge an agent can access
- Tight coupling — knowledge management logic lives in runtime code, not the pack
- No progressive disclosure — all knowledge loads upfront rather than on demand
Goals
- Allow authors to declare skill sources (file paths, packages, or inline definitions) within a pack
- Enable directory-scoped skill filtering within workflow states
- Support progressive-disclosure loading where skills activate on demand
- Maintain full backward compatibility with existing packs
- Follow the AgentSkills.io standard for skill definition and discovery
Non-Goals
- Define skill execution semantics (how skills are interpreted at runtime)
- Specify skill resolution protocols (how packages are fetched)
- Replace or subsume the existing
agentssection — skills complement agents - Define skill versioning or dependency resolution
Detailed Design
Core Concept
A skill is a named, self-contained unit of knowledge or instructions that an agent can load on demand. Skills can be sourced from:
- File paths — local directories or files containing skill definitions
- Package references — external packages following the AgentSkills.io standard
- Inline definitions — skills defined directly in the pack with name, description, and instructions
Schema Changes
New Top-Level Field: skills
{ "skills": { "type": "array", "description": "Skill sources for progressive-disclosure knowledge loading. Each entry is either a string (path or package reference) or an object with detailed configuration.", "items": { "$ref": "#/$defs/SkillSource" } }}New Definition: SkillSource
{ "SkillSource": { "oneOf": [ { "type": "string", "description": "Path to a skill directory/file or a package reference (e.g., './skills', '@acme/billing-skills')." }, { "$ref": "#/$defs/SkillPathSource" }, { "$ref": "#/$defs/InlineSkill" } ] }}New Definition: SkillPathSource
{ "SkillPathSource": { "type": "object", "description": "A skill source with a path and optional preload configuration.", "required": ["path"], "additionalProperties": false, "properties": { "path": { "type": "string", "description": "Path to a skill directory, file, or package reference." }, "preload": { "type": "boolean", "description": "If true, load this skill source eagerly at pack initialization rather than on demand.", "default": false } } }}New Definition: InlineSkill
{ "InlineSkill": { "type": "object", "description": "A skill defined inline within the pack. Useful for small, pack-specific skills that don't warrant a separate file.", "required": ["name", "description", "instructions"], "additionalProperties": false, "properties": { "name": { "type": "string", "description": "Human-readable name for this skill.", "minLength": 1 }, "description": { "type": "string", "description": "Brief description of what this skill provides.", "minLength": 1 }, "instructions": { "type": "string", "description": "The skill's instructions or knowledge content. Loaded into the agent's context when the skill is activated.", "minLength": 1 } } }}New Field on WorkflowState: skills
{ "skills": { "type": "string", "description": "Skill filter for this workflow state. A path to a skill directory/file that scopes which skills are available in this state, or the literal 'none' to disable skills." }}How Skills Work
-
Declaration: The pack’s top-level
skillsarray declares available skill sources. These can be file paths, package references, or inline definitions. -
Resolution: At runtime, the runtime resolves each skill source:
- Strings are treated as paths or package references
- SkillPathSource objects provide a path with optional eager loading (
preload: true) - InlineSkill objects contain the skill definition directly
-
Activation: Skills are loaded progressively — by default, they activate on demand when relevant to the current context. Skills with
preload: trueload eagerly. -
State Scoping: When a
WorkflowStatedeclares askillsfield, it filters which skills are available in that state. The value"none"disables all skills for that state.
Specification Impact
- The
skillsfield is added to the top-level pack schema as an optional property - The
SkillSource,SkillPathSource, andInlineSkilldefinitions are added to$defs - A
skillsstring field is added toWorkflowState - All existing fields and definitions remain unchanged
- Packs without
skillsare unaffected
Validation Rules
- Inline skill uniqueness: Inline skill
namevalues should be unique within theskillsarray - Path validation: File paths in
SkillPathSourceand string entries should point to valid locations (runtime validation) - WorkflowState skills: The
skillsfield on a workflow state must be either a valid path/reference or the literal string"none" - Backward compatibility: The
skillsfield is optional; existing packs without it remain valid
Examples
Example 1: File Path Skills
{ "id": "customer-support", "name": "Customer Support Pack", "version": "1.3.1", "skills": [ "./skills/billing", "./skills/technical-support" ], "prompts": { "..." : "..." }}Example 2: Mixed Skill Sources
{ "id": "enterprise-support", "name": "Enterprise Support Pack", "version": "1.3.1", "skills": [ "./skills/common", { "path": "./skills/compliance", "preload": true }, { "name": "escalation-protocol", "description": "Steps for escalating unresolved customer issues", "instructions": "When a customer issue cannot be resolved within 3 exchanges:\n1. Acknowledge the complexity\n2. Collect case details\n3. Create an escalation ticket\n4. Provide the ticket reference to the customer" } ], "prompts": { "..." : "..." }}Example 3: Workflow State Skill Scoping
{ "id": "support-workflow", "name": "Support Workflow", "version": "1.3.1", "skills": [ "./skills/billing", "./skills/technical", "./skills/general" ], "workflow": { "version": 1, "entry": "triage", "states": { "triage": { "prompt_task": "triage", "on_event": { "billing": "billing_state", "technical": "tech_state" }, "skills": "./skills/general" }, "billing_state": { "prompt_task": "billing", "on_event": { "resolved": "closing" }, "skills": "./skills/billing" }, "tech_state": { "prompt_task": "technical", "on_event": { "resolved": "closing" }, "skills": "./skills/technical" }, "closing": { "prompt_task": "closing", "on_event": {}, "skills": "none" } } }, "prompts": { "..." : "..." }}Drawbacks
Minimal Runtime Specification
The design intentionally leaves skill resolution and execution to runtimes. This provides flexibility but means different runtimes may handle skills differently.
Mitigation: The AgentSkills.io standard provides a reference implementation. PromptKit will serve as the canonical runtime.
Path-Based References
File paths are environment-dependent. A skill path that works locally may not resolve in a cloud deployment.
Mitigation: Package references (@scope/package) provide a portable alternative. Runtimes can also remap paths during deployment.
Alternatives
Alternative 1: Skills on Each Prompt
Add a skills array directly on each prompt definition.
Rejected: Skills are a pack-level concern — they represent shared domain knowledge. Per-prompt skills would lead to duplication. Workflow state scoping provides per-context filtering when needed.
Alternative 2: Extend the Fragments System
Reuse the existing fragments mechanism for skill content.
Rejected: Fragments are compile-time text substitutions. Skills are runtime knowledge units with progressive disclosure. They serve fundamentally different purposes.
Alternative 3: Embed in Agents Section
Add skills as a property of AgentDef.
Rejected: Skills are orthogonal to agents. A pack can use skills without agents, and vice versa. Coupling them would limit flexibility.
Adoption Strategy
Backward Compatibility
- Fully backward compatible
- Requires migration
- Breaking change
The skills field is entirely optional. Existing packs without it remain valid. Runtimes that don’t support skills ignore the field.
Migration Path
No migration required. Adoption is incremental:
- Phase 1: Continue using packs without skills (current behavior)
- Phase 2: Add top-level
skillswith file path references - Phase 3: Use inline skills for small, pack-specific knowledge
- Phase 4: Add
skillsto workflow states for context-scoped filtering
Runtime Support Levels
- Level 0: Ignore
skillsfield (backward compatible) - Level 1: Resolve skill sources and load at startup
- Level 2: Full progressive-disclosure loading with workflow state scoping
Unresolved Questions
1. Package Reference Format
Should package references follow npm-style (@scope/package) or a custom format? The current design accepts any string, leaving format interpretation to runtimes.
Proposal: Accept any string. Runtimes that support package resolution define their own conventions.
2. Skill Priority and Conflicts
When multiple skill sources provide conflicting instructions, which takes precedence?
Proposal: Last-declared wins (array order matters). Runtimes may provide more sophisticated conflict resolution.
3. Relationship with System Templates
Should skills append to or replace system template content?
Proposal: Skills supplement the system template. The system template defines core behavior; skills provide additional context-specific knowledge.
Future Considerations
Skill Dependencies
Skills that depend on other skills:
{ "name": "advanced-billing", "description": "Advanced billing procedures", "instructions": "...", "depends_on": ["basic-billing"]}Skill Conditions
Conditional skill activation based on runtime state:
{ "path": "./skills/premium-support", "condition": "customer.tier == 'enterprise'"}Skill Metrics
Track skill activation frequency and effectiveness via the existing evals/metrics system.
Revision History
- 2026-02-21: Initial draft