skill
writing-specs
Use when a workflow step drafts or revises a spec artifact — a goal-and-requirements, an architecture, or a module SPEC — or when a workflow skill names it at such a step. The shared quality bar for s
Set up
Skills are installed by placing their folder where your agent loads skills.
Part of the collection jetbrains/thinkrail.
npx skills add jetbrains/thinkrail --skill writing-specs
Or by hand: Copy the folder packages/pi-thinkrail-workflow/skills/writing-specs from github.com/jetbrains/thinkrail into ~/.claude/skills/writing-specs/ (Claude Code) or your agent's skills folder. Check the collection's own README for other agents.
README
synced Oct 14, 2026Use when a workflow step drafts or revises a spec artifact — a goal-and-requirements, an architecture, or a module SPEC — or when a workflow skill names it at such a step. The shared quality bar for specs — not a workflow, nothing to execute.
Writing Specs
The workflow family's shared bar for every spec a workflow produces: short, honest, on-rails.
Process skills name this concept at the steps that draft or revise specs; what to draft and when
stays with the referencing skill. Graph mechanics — frontmatter, link kinds, the spec_* tools — are
the spec-graph skill's ground; this concept carries the quality bar the family holds on top of them,
and is where the family's rules for specs and the spec graph accrue.
Short
- Small enough to read in one sitting. Target signal, not completeness.
- Explain intent, not inventory: what the thing is for, what it owns, where its boundary runs — never a file listing or a restatement of the code.
Honest
- Only settled content appears. Never pad with
[TBD]or placeholder sections — a section that hasn't been settled simply doesn't exist yet. - Anything inferred rather than confirmed is marked unconfirmed, inline, where it stands.
- New and inferred specs are
status: draftuntil the user has reviewed them — the flip out ofdraftfollows the user's review, never the drafting agent's own judgment. A reviewed durable spec goesactive, neverdone: it stays in force and evolves with the project.
On-rails
- High-signal enough that a future agent (or human) lands on the decisions without re-deriving them.
- The spec is the only home for rationale: decisions, invariants, trade-offs, and bug post-mortems are recorded here, never as code comments — a rationale paragraph found in code is content to promote into the owning spec, leaving at most a one-line pointer where misediting would silently break something.
- Say each thing once: link by
idinstead of restating; the dependency edges between sibling modules live in the parent's spec, not in each leaf. - One spec per genuine boundary — not per directory, not per file.
The goal doc describes the product, not a plan
goal-and-requirements is the living record of what the product is and why: its goal, problem,
audience, capabilities, and non-goals, plus any durable principles.
- No versions, releases, phases, MVP/v1/v2 splits, or "later" lists. Sequencing is not a spec's job: an idea cut from scope goes back to the user to track wherever they plan work, and never into the doc.
- Capabilities state what the product does, or for a new project what its smallest useful first build will do.
- Non-goals hold only what is excluded by decision. Something neither listed nor excluded is open, not forbidden.
- It evolves with the product: a change that adds a capability or overturns a principle updates the goal doc in the same change.