From great-engineers
Produce a technical spec / design doc for a feature or system change. Reads the project specification (README, CLAUDE.md, manifest, ADRs, architecture docs), then dispatches an engineering persona to draft the spec in their register. Default persona auto-selected by signal — Hejlsberg for language/API, Carmack for performance, Knuth for algorithm correctness, DHH for pragmatic web app, etc. Override with --persona. Output saves to engineering/specs/<slug>.md. Use when a feature or system change needs a structured proposal before implementation.
How this skill is triggered — by the user, by Claude, or both
Slash command
/great-engineers:engineers-write-specThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Produce a technical spec for a feature or system change.
Produce a technical spec for a feature or system change.
This skill is the engineering equivalent of the publishers/marketers write-positioning skill — the upstream artifact that downstream work obeys. Before code is written, the spec establishes what's being built, what constraints apply, what alternatives were considered, what trade-offs were accepted, and what's still open.
The spec serves three downstream consumers:
Not for: line-level code reviews (use /engineers-design-review); craft conversations about a single function (use /engineers-channel <persona>); auto-generated documentation (this is craft work, not extraction).
When this skill is invoked with a <feature> argument and optional --persona:
Resolve the project root the same way /engineers-project-init does. Verify CLAUDE.md (or README.md) exists and the engineering/ directory is present. If engineering/ is missing, recommend running /engineers-project-init first; do not auto-create.
Read the project specification:
CLAUDE.md — orchestrator-mode notes, current spec slug, conventionsREADME.md — what the project doespackage.json, pyproject.toml, Cargo.toml, etc.) — declared dependencies, runtime versionsARCHITECTURE.md if present — system structure, load-bearing assumptionsADR/ if present — prior decisions that constrain or inform this one.great-authors/project.md if cross-craft projectResolve the persona to dispatch. If --persona is given, use it. Otherwise auto-select by signal:
| Signal in the feature description / project | Default persona |
|---|---|
| "type system", "API design", "language feature", TypeScript | anders-hejlsberg-engineer |
| "performance", "throughput", "memory", "latency", systems-level | john-carmack-engineer |
| "algorithm", "complexity", "correctness", "proof", math | don-knuth-engineer |
| "web platform", "browser API", "JavaScript", backwards compat | brendan-eich-engineer |
| "Rails", "monolith", "convention", pragmatic web app | dhh-engineer |
| "refactor", "OO design", "responsibility", clarity | sandi-metz-engineer |
| "kernel", "OS", "syscall", "ABI", low-level | linus-torvalds-engineer |
| "documentation", "legacy", "accessibility", maintenance | grace-hopper-engineer |
| "invariant", "concurrent", "formal", correctness proof | edsger-dijkstra-engineer |
| None of the above | don-knuth-engineer (the rigorous default) |
Document the choice in the spec's frontmatter.
Dispatch the persona via the Agent tool with subagent_type: "great-engineers:<persona-slug>-engineer". The brief must include:
<feature> argument, plus any context the user provided)engineering/specs/<slug>.mdThe output structure:
---
title: <Feature name>
slug: <slug>
persona: <persona-slug>
created: YYYY-MM-DD
status: draft | proposed | accepted | implemented | superseded
---
# Spec: <Title>
## Problem
<One paragraph. What is the problem? Who has it? Why now?>
## Constraints
<Bulleted list. Real constraints — runtime versions, backwards compatibility, team size, deadlines, budget. The constraints are part of the design.>
## Proposal
<2-4 paragraphs. The proposed solution, described concretely enough that the implementer can build it. Include API shapes, data structures, key code snippets where they clarify.>
## Alternatives considered
<2-4 alternatives with one paragraph each. What was rejected and why. The rejections are part of the proposal's defense.>
## Trade-offs
<Bulleted list. What the proposal costs in exchange for what it buys. Honest accounting, not advocacy.>
## Decision
<One paragraph. The chosen path, the reasoning in one or two sentences, the criterion that would invalidate the decision.>
## Open questions
<Bulleted list. Things the spec does not yet answer. The implementer is allowed to make these calls; the spec author is acknowledging the gaps.>
Save the doc to engineering/specs/<slug>.md. If the file exists, ask the user whether to overwrite, save as <slug>-v2.md, or skip.
Report:
📝 Saved to engineering/specs/<slug>.md (<word-count> words, drafted by <persona>).
Problem: <one-line summary>
Decision: <one-line summary>
Next:
- /engineers-design-review engineering/specs/<slug>.md to dispatch a panel for review
- /engineers-channel <other-persona> to refine specific sections (e.g., Knuth on the algorithm proof, Sandi Metz on the API ergonomics)
/agency-execute in great-minds.)CLAUDE.md's Current spec: field.--persona knuth or --persona dijkstra and request the ADR format explicitly. Filed for v1.0 as its own skill.Provides a checklist for code reviews covering functionality, security, performance, maintainability, tests, and quality. Use for pull requests, audits, team standards, and developer training.
npx claudepluginhub sethshoultes/great-minds-constellation --plugin great-engineers