mcpField
S
skills-docs

skills-docs

github.com/editframeDevelopment1971 installsUpdated 2w ago
Repository

About skills-docs

skills-docs maintains skill content as a single source for web documentation and LLM-consumable files. It is intended for contributors authoring or rendering skills, with a generation pipeline that transforms metadata and content for each output.

Key features

  1. 01Shared source for web and LLM docs
  2. 02Generate LLM skill files
  3. 03Frontmatter transformation rules
  4. 04Markdown rendering conventions
  5. 05Navigation and API reference support

Use cases

  1. 01Author skill documentation in one location
  2. 02Preview changes in web documentation
  3. 03Generate files for an LLM-consumable repository

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/editframe/skills --skill skills-docs

After installing, type/skills-docsin Claude Code to confirm it loaded.

Bundled filesconventions.mdfrontmatter.md

Details

From the project README

Skills Documentation System

Single source of truth for both human-readable web docs and LLM agent consumption.

Architecture

skills/skills/{skill-name}/
  SKILL.md                    # Overview + quick start (LLM entry point)
  references/
    {name}.md                 # Reference, tutorial, how-to, or explanation

Two build targets from one source:

  • Web docs: Telecine reads skills/skills/ directly, renders with MDX + convention-based component mapping
  • LLM skills: generate-skills.ts strips human-only metadata, converts API metadata to prose, outputs to skills/skills-generated/ (gitignored build artifact)

Authoring Workflow

  1. Edit source files in skills/skills/
  2. Preview on web — telecine reads source directly, no build step needed
  3. Generate LLM files: npx tsx scripts/generate-skills.ts
  4. Push to skills remote: ./scripts/push-skills [--branch name]

Steps 3-4 only needed when publishing to the LLM-consumable repository. During development, web preview validates changes immediately.

Never edit skills/skills-generated/ — overwritten on every build.

Frontmatter Quick Reference

SKILL.md files
FieldRequiredSurvives generation
nameyesyes
descriptionyesyes
licensenoyes
metadata (author, version)noyes
Reference files
FieldRequiredSurvives generationPurpose
titleyesyes (as name)Display name
descriptionyesyesBrief description
typeyesnoreference | tutorial | how-to | explanation
navnonoTree sidebar: parent, priority, related
topicnonoTopic-grouped sidebar category
ordernonoSort order within topic group
tracknonoLearning path identifier
track_stepnonoPosition in learning path
track_titlenonoDisplay title for track nav
prerequisitesnonoRequired reading references
next_stepsnonoSuggested next references
apinoconverted to proseStructured API metadata
sectionsnonoSplit into multiple web pages

For complete field documentation, see frontmatter.md.

Critical Constraints

YAML Parser Limitations

The generation script uses a hand-rolled YAML parser (scripts/generate-skills.ts) that supports only:

  • Top-level scalar fields (key: value)
  • One level of object nesting (key:\n subkey: value)
  • Arrays of objects at 4-space indent ( - name: value)
  • Object properties at 6+ space indent within array items

Not supported (silently produces wrong output):

  • Multi-line strings (| or > block scalars)
  • Flow sequences inline ([a, b, c])
  • YAML comments
  • Nesting deeper than 3 levels
  • Quoted keys

Always test generation locally after frontmatter changes:

npx tsx scripts/generate-skills.ts
# Inspect skills/skills-generated/ to verify output
Sections-Heading Coupling

The sections frontmatter references markdown H2 headings via the heading field. The match must be exact. If you rename an H2, update the corresponding sections[].heading.

sections:
  - slug: tutorial
    heading: Video Tutorial    # Must match "## Video Tutorial" in body
Nav Parent Paths

nav.parent uses /-delimited paths (with spaces around slash) to build the sidebar tree:

nav:
  parent: "Elements / Media"   # Creates: Elements > Media > this page

Misspelling a parent path creates a silently orphaned node. Check existing references for established paths before inventing new ones.

Rendering Conventions

The web renderer detects markdown patterns and upgrades them to interactive components. See conventions.md for authoring details.

PatternWeb renderingLLM output
```html liveInteractive preview + filmstripPlain code block
```mermaidRendered Mermaid diagramPlain code block
> **Note:** ...Blue callout boxStandard blockquote
> **Warning:** ...Gold callout boxStandard blockquote
Attribute/Type/Description tableEnhanced PropertyDoc stylingStandard table
### Step N: in tutorialsStep-indicator stylingStandard heading
[references/X.md](references/X.md)React Router linkRelative link
api frontmatterCard-based ApiReference after H1Prose list after H1

Generation Transform

What generate-skills.ts does to each source file:

  • title → becomes name in output frontmatter
  • description, license, metadata → preserved
  • nav, track, track_*, prerequisites, next_steps, type, topic, order, sections → stripped
  • api → converted to prose and injected after H1:
## Attributes
- **src** (string) (required) - URL or path to video source
- **volume** (number, default: 1.0) - Audio volume

## Properties
- **sourceIn** (string) - Absolute start time

## Methods
- **play()** - Start playback
  - Returns: void

## Functions
- **createRender(client, payload)** - Create a new render job
  - Returns: CreateRenderResult

Markdown body is preserved unchanged.

API Metadata Types

The api frontmatter supports four sub-keys for different API surface types:

  • attributes: HTML element attributes (e.g., <ef-video src="...">)

    • Use for: Custom elements, web components
    • Fields: name, type, required, default, description, values
  • properties: React component props (e.g., <Preview className="...">)

    • Use for: React components, TypeScript interfaces
    • Fields: name, type, required, default, description, values
  • methods: Instance methods on objects or elements (e.g., element.play())

    • Use for: Methods that exist on instances, DOM APIs
    • Fields: name, signature, description, returns
  • functions: Standalone exported functions (e.g., createRender(client, payload))

    • Use for: SDK functions, utility functions, top-level exports
    • Fields: name, signature, description, returns

All four types render as card grids on the web and convert to indented prose lists for LLM consumption.

Key File Locations

Skills content
  • skills/skills/ — source files (edit these)
  • skills/skills-generated/ — build artifacts (never edit, gitignored)
  • skills/BUILD.md — build process documentation
Build pipeline
  • scripts/generate-skills.ts — generation script
  • scripts/push-skills — generate + push to skills remote
Web renderer (telecine)
  • telecine/services/web/app/utils/skills.server.ts — loading, nav building, section extraction
  • telecine/services/web/app/utils/skills-mdx-components.tsx — convention-based MDX components
  • telecine/services/web/app/routes/skills/reference-detail.tsx — reference page
  • telecine/services/web/app/routes/skills/skill-detail.tsx — skill overview page + sidebar tree
  • telecine/services/web/app/components/skills/ApiReference.tsx — API reference cards
  • telecine/services/web/app/components/skills/OnThisPage.tsx — auto-generated TOC from H2/H3
Legacy docs (content migration source)
  • telecine/services/web/app/content/docs/ — MDX files to draw content from
  • telecine/services/web/app/components/docs/ — legacy components (Demonstration, PropertyDoc)

When Modifying the Renderer

The convention-based rendering lives in skills-mdx-components.tsx:

  • SkillsPreBlock — detects html live via data-meta attribute (set by remarkCodeMeta plugin)
  • LiveDemo — renders raw HTML inside Preview/FitScale/FocusOverlay/Filmstrip from @editframe/react
  • SkillsTable — detects Attribute/Type/Description column headers for enhanced styling
  • SkillsBlockquote — detects Note/Warning prefixes for callout boxes
  • getSkillsMDXComponents(skillName, api?) — returns the full component mapping; when api is provided, wraps H1 to inject ApiReference

Both skill-detail.tsx and reference-detail.tsx use the shared component mapping.

Navigation is built in skills.server.ts:

  • getSkillNavTree() — builds tree from nav.parent paths
  • getSkillNav() — builds topic groups from topic field
  • Type ordering: tutorial → how-to → explanation → reference

Content Guidelines

Length Targets
TypeTargetFocus
reference60-100 linesAttributes, basic usage, common patterns
tutorial~90 linesStep-by-step with html live demos, minimal intro
how-to20-40 linesSingle task, actions only, no rationale
explanation60-80 linesConceptual deep-dive, no code/config
Writing Principles

One mode per document. Each file fits one type. If content belongs in another mode, link to it instead of including it. Tutorials don't explain architecture. References don't include rationale. How-tos don't teach concepts.

Don't repeat across files. If a concept is explained in one reference, link to it from others. If a sentence shares meaning with another sentence in the same document, remove one.

Neutral, technical language. Describe platform constraints and outcomes, not prescriptive commands or comparative critiques:

  • "Native playback requires full file download" not "You must download the entire file"
  • "Direct file playback presents these constraints" not "Traditional workflows are slow"
  • Qualify absolutes: "typically within seconds" not "immediately"

Effects over implementation. Explain what the user sees, not internal machinery. "The player is reactive and incremental" not "The backend segments the file."

Show, don't describe. Use html live blocks to demonstrate. Every tutorial step and how-to solution should have a working demo. Reference files show basic usage, not just attribute lists.

Real assets. Use URLs from https://assets.editframe.com/ for demos (e.g., bars-n-tone.mp4).

Comments

Markdown supported