spec — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited spec (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
The user has an idea — either fresh, or already pressure-tested via /ank:third-degree. Your job is to freeze that idea into a single SPEC.md that's sharp enough to drive task breakdown and implementation without further interrogation.
You are not writing tasks. You are not writing code. You are not even sketching the package layout in chat — you put it in the file.
/ank:third-degree → /ank:spec → /ank:tasks → (build with Claude Code) → /ank:review-board
(interview) (this) (issues + (implementation) (post-feature
scaffold) walkthrough)If the conversation already contains a third-degree summary, use it as the analysis input — do not re-interview. If it doesn't, do the deep analysis pass yourself (Stage 1 below) but resist the urge to ask more than 2-3 clarifying questions. The spec itself is the place to surface assumptions, via the Open Questions section.
| Scope | Path | Trigger |
|---|---|---|
| Product-level (the whole thing) | ./SPEC.md at repo root | Default. Use when the idea defines a new product, library, service, or app. |
| Feature-level (one slice) | ./docs/spec/<slug>.md | Use when the user explicitly says "feature spec" or the work is scoped inside an existing product that already has a SPEC.md. |
If SPEC.md already exists at root and the user is starting fresh, ask once whether to overwrite or write the new one to docs/spec/<slug>.md. Never silently overwrite.
The required section list below is the union of what a strong library/SDK spec and a strong SaaS/app spec each need. Different products lean on different sections:
A strong spec borrows discipline from both shapes regardless of product type. Even a SaaS spec benefits from a sharp Is/Isn't; even a library benefits from naming its target user.
Synthesize the idea into a short structured analysis. Cover:
Print the analysis in chat. Stop and let the user redirect. Do not write the file yet. If they say "looks right, draft it" (or equivalent — "go", "ship the spec", "lgtm"), move to Stage 2.
Before drafting, resolve which conditional sections apply. If not obvious from Stage 1, ask once via AskUserQuestion with concrete options:
Use Stage 1's analysis to skip this step entirely when the answer is clear (e.g., user said "I want to build a CLI" → no UI, no DB, no pricing).
Write the file. Use descriptive section names with numbers (## 1. Problem & users, ## 2. Is / Isn't, …). Plain Markdown, no HTML, no inline images.
#### Required sections — every spec, in this order
main.py example. For a CLI: a command session. For a SaaS: the canonical user journey in 4-6 steps. The reader should understand the product after reading this section alone.✅ Resolved: prefix with a one-line rationale. The decision log lives in the spec, not in chat.#### Conditional sections — include only when triggered
| Section | Trigger | Shape |
|---|---|---|
| Tech stack rationale | ≥2 candidate technologies for any layer where the choice isn't obvious | Table with "Layer / Choice / Why not the alternative" columns; one row per non-obvious decision |
| Data model | Persistent storage present | Table-by-table SQL where the schema matters; fold payload shapes (JSONB, message envelopes) into the module that owns them rather than top-level |
| API endpoints | HTTP/RPC routes exposed | Flat list grouped by resource; one route per line (GET /api/foo/:id) |
| Frontend / UX architecture | UI present | Project structure tree + one canonical layout (ASCII or prose) + visual treatment rules |
| Pricing / business model | Commercial product | Tier table with price + key limits per tier |
| Success metrics | Always recommended; required if commercial | PMF/adoption signals for SaaS; install count / adoption metrics for libraries |
| Glossary | Spec >10 printed pages OR introduces ≥5 domain terms | Flat term:definition list |
| Reference mapping | Spec is a rewrite/extraction of prior art | Old-concept → new-equivalent table |
Place conditional sections after the required nine, in the order listed.
After writing the file:
Written: SPEC.md (or docs/spec/<slug>.md)./ank:tasks. Do not propose tasks. Do not write code. Do not touch other files.Review the spec and reply with "approved" to lock it in (then run /ank:tasks when ready), or send edits and I'll revise.Anything other than explicit approval ("approved", "lgtm", "ship it", "lock it in") is treated as edits — revise the file and stop again. Repeat until approved.
docker-compose.yml, dependency lists belong in TASKS.md Phase 0, not in the spec. The spec says what gets built; tasks say how to set it up.Common requests to refuse:
/ank:tasks. The hard stop is the point.If you find yourself thinking through tradeoffs in chat ("we could either A or B…"), stop and put the tradeoff in the spec — usually as an Open Question with the two branches, or as a Design Principle if you've decided. Conversation-only reasoning evaporates; the spec is the durable artifact.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.