A specialist is a directory inDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/jorgeferrando/sdd-skills/llms.txt
Use this file to discover all available pages before exploring further.
specialists/{name}/ with a manifest.yaml and one or more .md convention files. Custom specialists let you codify domain expertise specific to your stack, team, or organization — and have /sdd-apply, /sdd-audit, and /sdd-verify enforce those conventions automatically, exactly as they do for the built-in specialists.
Directory structure
Every specialist requires exactly two things in its directory:.md file if your domain naturally separates into sub-areas (for example, a graphql specialist might ship both conventions-graphql-schema.md and conventions-graphql-resolvers.md). Every file listed in manifest.yaml will be copied to openspec/steering/ on install.
manifest.yaml format
The manifest is a small YAML file that tells the installer what to copy and where. Here is the real manifest for theasync-node specialist:
| Field | Required | Description |
|---|---|---|
name | ✅ | Machine-readable identifier. Must match the directory name. |
description | ✅ | Human-readable summary shown by ./install-specialist.sh. Shown in the installer listing — be specific about what domain expertise this adds. |
applies_to | ✅ | Scope hint. Use all for universal applicability, or a descriptor like node-projects, typescript-projects, or a list such as ["react", "vue", "svelte"]. Skills use this to decide whether to load the specialist for a given task. |
files | ✅ | One entry per convention file, in the format source.md → openspec/steering/target.md. The source path is relative to the specialist directory. |
The
→ separator in the files list is cosmetic — the installer uses it to show you where each file lands, but the actual copy is driven by cp source target. Keep the naming convention conventions-{name}.md so it stays consistent with the built-in specialists.Convention file format
A convention file is plain Markdown with RFC 2119 rules grouped into sections. Here is the actualconventions-async.md from the async-node specialist — use this as your template:
/sdd-audit a concrete, enumerated checklist rather than leaving detection to interpretation.
Guidelines for writing specialist rules
Follow the same conventions as the built-in specialists to keep everything consistent and enforceable.Use RFC 2119 levels
Write
**MUST**, **MUST NOT**, **SHOULD**, **SHOULD NOT**, or **MAY** — bold, uppercase. MUST is a hard requirement; SHOULD is a strong recommendation with room for justified exceptions.Include 'How to detect violations'
End every convention file with a numbered checklist of what to look for in code. This is what
/sdd-audit works from. Concrete patterns (function names, keywords, structural anti-patterns) are more useful than general descriptions.Classify violations correctly
Default to Important (technical debt, non-blocking). Reserve Critical for genuine hard gates — security vulnerabilities, TDD violations. Overusing Critical trains the model to ignore it.
Keep rules actionable
**MUST** use X for Y is better than consider using X. Each rule should specify the required action clearly enough that there is no ambiguity about compliance.Include the why
Follow each rule with a brief reason after a dash.
**MUST NOT** use readFileSync — blocks the event loop and degrades throughput under load. The reason helps the model make better decisions when the rule’s edge cases arise.Don't duplicate conventions.md
Specialists add domain-specific knowledge. If a rule already exists in your project’s
conventions.md, skip it here. Duplication creates confusion about which file is authoritative and inflates context on every skill invocation.Installing your custom specialist
Once the files are in place, the workflow is identical to installing a built-in specialist:openspec/steering/ (for example, you installed a previous version), the installer will skip it and print skip (already exists). Remove the old file first with --remove or delete it manually, then re-install.
Once installed, the specialist is picked up automatically on the next skill invocation — no need to reference it explicitly in your prompts or steering files. Skills read all
.md files in openspec/steering/ whose names match the expected conventions-*.md pattern, so your custom specialist is treated identically to any built-in one.Complete example: a custom GraphQL specialist
To illustrate the full workflow end to end, here is what a minimalgraphql specialist looks like:
specialists/graphql/manifest.yaml
specialists/graphql/conventions-graphql.md
/sdd-apply will enforce DataLoader usage whenever it writes GraphQL resolvers, and /sdd-audit will flag any resolvers that bypass it.