Last Updated: 2026-03-10
Status: ✅ Complete
Maps the SKILL.md portable format to pf_ai_skills columns for the import/export pipeline.
SKILL.md Format
Based on.cursor/skills and agentskills.io conventions. A SKILL.md file consists of:
- YAML frontmatter delimited by
--- - Markdown body with
## System Promptand optional## Constraints/## Examplessections
Example
Field Mapping: SKILL.md ↔ pf_ai_skills
Serializer
Location:src/platform/ai/utils/skill-md-serializer.tsFunction:
skillToSkillMd(skill: AISkill): string
Produces a valid SKILL.md string from an AISkill object. YAML values are escaped when they contain special characters. Arrays use inline flow style [item1, item2].
Parser
Location:src/platform/ai/utils/skill-md-parser.tsFunction:
parseSkillMd(content: string): ParseSkillMdResult
Uses regex-based frontmatter extraction (no gray-matter dependency). Returns { data, errors, warnings }. Fatal errors (missing frontmatter, missing name) prevent import; warnings (unknown fields) are informational.
Import Conflict Resolution
When importing, ifskill_code already exists for the current org:
Hook:
useImportAISkill at src/platform/ai/hooks/useImportAISkill.ts
Round-Trip Fidelity
The serializer and parser are tested for round-trip fidelity:serialize → parse → compare preserves all mapped fields. See tests/unit/platform/ai/skill-md-parser.test.ts and tests/unit/platform/ai/skill-md-serializer.test.ts.
References
- Parent spec:
specs/pf/specs/PF-62-PHASE-2-3-EXPANSION.md - Serializer:
src/platform/ai/utils/skill-md-serializer.ts - Parser:
src/platform/ai/utils/skill-md-parser.ts - Import hook:
src/platform/ai/hooks/useImportAISkill.ts - UI:
src/platform/ai/components/ImportSkillDialog.tsx,src/platform/ai/components/CreateSkillWizard.tsx