A method (and Claude Code skill) for writing software specifications as a living knowledge base in Obsidian — linked notes, ADRs, status separation, and embedded Mermaid diagrams — instead of one big linear document.
It combines a few well-worn ideas into one operating model:
- Zettelkasten — atomic, densely linked notes instead of one monolith.
- Domain-Driven Design — entities + ubiquitous language, never modeled without scenarios.
- ADRs (Architecture Decision Records) — every decision recorded with context and alternatives.
- Trigger-driven deferral — every deferred idea carries the exact signal that means "build it now", so decisions are postponed on purpose, not forgotten.
This is Obsidian-first. The value comes from [[wikilinks]], backlinks, graph view,
properties, and tags. It works in plain Markdown, but you lose most of the payoff.
Also need it on GitHub or Confluence? Use relative Markdown links
([Note Name](path/Note%20Name.md)) instead of wikilinks — they resolve in both Obsidian
and those viewers, and Mermaid renders natively on GitHub. The cost is losing Obsidian's
rename-aware links. See Rendering outside Obsidian in SKILL.md.
skills/spec-rules/
SKILL.md The method, as an agent skill (skills.sh entrypoint)
templates/ Note templates, installed with the skill
Entity Template.md
Scenario Template.md
ADR Template.md
Diagram Template.md
Future Candidate Template.md
- Copy
skills/spec-rules/templates/into your vault'sTemplates/folder. - Create the status folders
Current/,Future/,Archive/and the MOC index notes (00 Home,Current Index, ...). See the recommended vault structure inSKILL.md. - Point Obsidian's core Templates plugin at your
Templates/folder. - Start capturing entities, scenarios, and ADRs as linked notes.
Install with the skills.sh CLI (works with Claude Code, Codex, Cursor, OpenCode, and others):
npx skills add sedlukha/spec-rulesThis installs skills/spec-rules/ — SKILL.md plus its templates/. Or copy that
folder manually into your skills directory (e.g. .claude/skills/spec-rules/).
The skill is explicit-invocation only (disable-model-invocation: true) — call it when
you want help building or maintaining an Obsidian spec vault. To let the model trigger
it automatically, remove that line from the frontmatter.
Scenarios explain why.
Architecture explains how.
Entities explain what.
ADR explains why this way.
Diagrams explain visually.
Future notes preserve what is not current yet.
Obsidian links connect everything.