Skip to main content
Version: 1.0
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:
  1. YAML frontmatter delimited by ---
  2. Markdown body with ## System Prompt and optional ## Constraints / ## Examples sections

Example


Field Mapping: SKILL.md ↔ pf_ai_skills


Serializer

Location: src/platform/ai/utils/skill-md-serializer.ts
Function: 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.ts
Function: 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, if skill_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