Agent skill

Spec Writer

by ewhauser in ewhauser/shuck

Write and update technical design specifications. An agent skill from ewhauser/shuck.

MITAuto-check passedDevelopment

Install Spec Writer

skills CLI
$ npx skills add ewhauser/shuck --skill spec-writer -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install ewhauser/shuck spec-writer --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/ewhauser/shuck.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/spec-writer .claude/skills/spec-writer && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
spec-writer
GitHub stars
137
Token cost
~1.7k tokens
SKILL.md length
789 words
Files
1
Skills in repo
8
Repo updated
First seen
Licence
MIT

At a glance

Write and update technical design specifications. An agent skill from ewhauser/shuck.

  • Works in 5 steps: Discover project conventions → Interview → Draft the spec → …
  • The user wants to create a new spec
  • SKILL.md covers When to create vs. update, Process, Updating existing specs and Numbering
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Spec Writer is an agent skill from ewhauser/shuck. Write and update technical design specifications. Use this skill whenever the user wants to create a new spec, design doc, or technical specification, update an existing spec, or says things like "spec out X", "write a spec for Y", "create a design doc", "let's design Z", "add a spec", or "update the spec for W". Also trigger when the user is about to implement a significant feature and there's no spec for it yet — suggest writing one first.

Its SKILL.md is about 1.7k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Development, covering Architecture decision records. The repository describes itself as: A lightning fast shell linter/formatter/LSP server with zsh support. The licence is MIT.

When your agent uses it

  • The user wants to create a new spec
  • Technical specification
  • Update an existing spec
  • Says things like spec out X

Example prompts

  • “spec out X”
  • “write a spec for Y”
  • “create a design doc”
  • “/spec-writer”

Workflow steps

5 steps, taken from the step headings in SKILL.md.

  1. Discover project conventions
  2. Interview
  3. Draft the spec
  4. Iterate
  5. After the spec

What it can do on your machine

Read from SKILL.md and the folder at commit 904974e. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are markdown).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Spec Writer loads about 1.7k tokens when it runs. Until then it costs about 114 tokens; SKILL.md has 789 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~114
When it runs · the whole SKILL.md, loaded when a task matches
~1.7k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from ewhauser/shuck at commit 904974e, republished under its MIT licence (© ewhauser). 789 words, ~1,666 tokens.

Download SKILL.mdSave it as .claude/skills/spec-writer/SKILL.md (or your agent's skills folder).
name
spec-writer
description
Write and update technical design specifications. Use this skill whenever the user wants to create a new spec, design doc, or technical specification, update an existing spec, or says things like "spec out X", "write a spec for Y", "create a design doc", "let's design Z", "add a spec", or "update the spec for W". Also trigger when the user is about to implement a significant feature and there's no spec for it yet — suggest writing one first.

Spec Writer

Write and maintain technical design specifications that serve as the source of truth for architectural decisions.

Specs answer three questions: what are we building, why this approach over alternatives, and how do we verify it works. They're living documents — they start as proposals and evolve as implementation reveals new constraints.

When to create vs. update

  • New spec: The user wants to design something that doesn't have a spec yet, or is proposing a significant new feature/system.
  • Update spec: The user is changing behavior that an existing spec covers, or implementation has diverged from what the spec describes.

Before writing anything, check the project's existing specs to understand the local conventions — numbering scheme, section structure, level of detail, and tone. Match what's already there.

Process

1. Discover project conventions

Before drafting, read the project's existing specs to learn:

  • Where specs live — look for a specs/ directory, docs/design/, rfcs/, or similar
  • Naming convention — numbered prefixes (001-name.md), date prefixes, or plain names
  • Section structure — what sections exist and in what order
  • Style — terse vs. prose-heavy, how much code is inline, whether there are diagrams
  • Status tracking — do specs have a Status field? What values are used?

If the project has no existing specs, use the default structure below. If it does, match the existing style exactly — consistency across specs matters more than any "ideal" format.

2. Interview

Gather enough context to write a solid first draft. The goal is to understand the design space, not to exhaustively specify every detail — that comes through iteration.

Ask about:

  • What problem does this solve? What's the motivation? Who benefits?
  • What's the proposed approach? High-level design, key components, APIs
  • What alternatives were considered? Why were they rejected?
  • What are the constraints? Performance, compatibility, security, dependencies
  • How will we verify it works? Tests, benchmarks, manual checks
  • What's the scope? What's explicitly out of scope?

Don't ask all of these as a checklist — have a conversation. Some answers will be obvious from context, others will emerge as you discuss. If the user already has a clear picture, move quickly to the draft. If they're still figuring things out, the interview process helps them think through the design.

3. Draft the spec

Write the spec using the project's existing conventions. If there are no existing conventions, use this default structure:

markdown
# NNN: Title

## Status

Proposed | Accepted | Implemented | Deprecated

## Summary

One paragraph: what this spec covers and why it exists.

## Motivation

Why is this needed? What problem does it solve? What's the current state?

## Design

The technical details. Use subsections as needed. Include:
- Architecture and component relationships
- API surfaces (with code examples)
- Data models and schemas
- Key algorithms or workflows
- Tables for structured comparisons
- ASCII diagrams for visual relationships

## Alternatives Considered

### Alternative A
Why it was rejected.

### Alternative B
Why it was rejected.

## Security Considerations

If applicable — threat model implications, trust boundaries, input validation.

## Verification

How to verify the spec is correctly implemented:
- Commands to run
- Tests to check
- Behaviors to observe

Guidelines for the draft:

  • Be concrete, not abstract. Show code examples, API signatures, data structures. A spec that says "the system will handle errors gracefully" is useless. One that shows the error type and how callers handle it is useful.
  • Decisions over descriptions. Every section should capture a decision and its rationale. If you're just describing how something works without explaining why it works that way, add the why.
  • Right-size the detail. A 50-line spec for a simple feature is fine. A 500-line spec for a complex system is also fine. Match the complexity of the document to the complexity of the problem.
  • Include verification. Every spec should end with concrete steps to verify the implementation matches the spec — specific commands, test names, observable behaviors.
  • Alternatives Considered is mandatory. Even if the choice seems obvious, documenting what you didn't do (and why) prevents future engineers from relitigating the same decisions. If there truly were no alternatives, say so and explain why the approach was the only viable path.
Show full SKILL.md (239 more words)Show less
4. Iterate

Share the draft and refine based on feedback. Common iteration patterns:

  • User spots a missing edge case — add it to Design and possibly Verification
  • User disagrees with an alternative's rejection — discuss and update
  • Implementation reveals the design doesn't work — update the spec to match reality rather than leaving it stale
  • Scope changes — update Summary and add/remove sections as needed
5. After the spec

Once the spec is accepted, offer to begin implementation if appropriate. The spec serves as the implementation plan — work through it section by section. As implementation progresses and the design evolves, keep the spec in sync. A spec that doesn't match the code is worse than no spec at all.

Updating existing specs

When updating rather than creating:

  1. Read the existing spec fully before making changes
  2. Preserve the existing structure and style
  3. Update the Status if the change warrants it (e.g., "Implemented" back to "Accepted" if redesigning)
  4. Add to Alternatives Considered if a previously-rejected approach is now being adopted — explain what changed
  5. Keep the Verification section current — if new behavior is added, add verification steps

Numbering

When creating a new spec in a numbered series:

  • Check existing specs for the highest number
  • Use the next available number
  • If multiple specs share a number prefix (e.g., 008-foo.md and 008-bar.md), that's OK — follow the project's convention
  • Update any index or table of contents that references specs (like an AGENTS.md or README)

© ewhauser, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .claude/skills/spec-writer of ewhauser/shuck.

Open the folder on GitHubat commit 904974e

Compare with similar skills

Spec Writer next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Spec Writer compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Spec Writer this skillewhauser/shuck137—~1.7kAutomated safety check: PassMIT
PR Design DocOpenHands/OpenHands90k—~2.4kAutomated safety check: PassMIT
Cto AdvisorIbrahim-3d/orchestrator-supaconductor3804 repos~2.4kAutomated safety check: PassMIT
Improve Codebase Architectureywwynm/EverythingDone14415 repos~1.3kAutomated safety check: PassGPL-3.0
Domain Modelingbrim-borium/spotify_sdk1665 repos~806Automated safety check: PassApache-2.0
Design Doc MermaidSpillwaveSolutions/design-doc-mermaid1751 repos~5.6kAutomated safety check: PassNone

Similar skills

  • PR Design Doc

    OpenHands/OpenHands

    For a non-trivial pull request, write a self-contained HTML design doc under the temporary .pr/ directory and link a visibility-appropriate preview in the PR description, so maintainers grasp the…

    90k GitHub stars~2.4k tokensUpdated today
    DevelopmentAuto-check passed
  • Cto Advisor

    Ibrahim-3d/orchestrator-supaconductor

    Technical leadership guidance for engineering teams, architecture decisions, and technology strategy.

    380 GitHub starsUsed in 4 repos~2.4k tokens
    DevelopmentAuto-check passed
  • Improve Codebase Architecture

    ywwynm/EverythingDone

    Find deepening opportunities in a codebase, informed by the domain language in CONTEXT.md and the decisions in docs/adr/.

    144 GitHub starsUsed in 15 repos~1.3k tokens
    DevelopmentAuto-check passed
  • Domain Modeling

    brim-borium/spotify_sdk

    Build and sharpen a project's domain model. An agent skill from brim-borium/spotify_sdk.

    166 GitHub starsUsed in 5 repos~806 tokens
    DevelopmentAuto-check passed
  • Design Doc Mermaid

    SpillwaveSolutions/design-doc-mermaid

    Create Mermaid diagrams (flowchart, sequence, class, ER, state, C4, architecture) from text or source code.

    175 GitHub starsUsed in 1 repo~5.6k tokens
    DevelopmentAuto-check passed
  • Learning Opportunities

    DrCatHicks/learning-opportunities

    Facilitates deliberate skill development during AI-assisted coding.

    2.5k GitHub stars~2.5k tokensUpdated 1 mo ago
    DevelopmentAuto-check passed

More from ewhauser/shuck

All 8 skills in this repo
  • Profile Shuck Script

    ewhauser/shuck

    Profile shuck scripts and large-corpus fixtures, especially requests to profile a corpus script/fixture, reprofile after a shuck performance change, or produce a hotspot table from a samply profile.

    137 GitHub stars~1.3k tokensUpdated 3 days ago
    Auto-check passed
  • Bench Compare

    ewhauser/shuck

    Compare benchmark performance between two git worktrees (or the current worktree vs main).

    137 GitHub stars~2.4k tokensUpdated 3 days ago
    Auto-check passed
  • Conformance Check

    ewhauser/shuck

    Verify ShellCheck conformance for a shuck rule by running the large corpus test, analyzing deltas, and producing a structured bug document in docs/bugs/.

    137 GitHub stars~3.1k tokensUpdated 3 days ago
    Auto-check passed
  • Fix Rule

    ewhauser/shuck

    Fix a shuck lint rule that has conformance deltas against ShellCheck.

    137 GitHub stars~3.2k tokensUpdated 3 days ago
    Auto-check passed
  • Implement Fix

    ewhauser/shuck

    Implement an autofix for an existing shuck-rs lint rule. An agent skill from ewhauser/shuck.

    137 GitHub stars~3.1k tokensUpdated 3 days ago
    Auto-check passed
  • Implement Rule

    ewhauser/shuck

    Implement a shuck-rs lint rule from its YAML definition in docs/rules/.

    137 GitHub stars~4.8k tokensUpdated 3 days ago
    Auto-check passed

Categories

Questions about Spec Writer

What does Spec Writer do?

Write and update technical design specifications. An agent skill from ewhauser/shuck. Spec Writer is an agent skill from ewhauser/shuck. Write and update technical design specifications.

When should I use Spec Writer?

Spec Writer fits situations like: the user wants to create a new spec; technical specification; update an existing spec; says things like spec out X.

How do I install Spec Writer in Claude Code?

Run `npx skills add ewhauser/shuck --skill spec-writer -a claude-code`. Or copy the skill folder (.claude/skills/spec-writer in ewhauser/shuck) into .claude/skills/spec-writer in your project. Claude Code loads it when a task matches its description.

How do I install Spec Writer in Codex?

Run `npx skills add ewhauser/shuck --skill spec-writer -a codex`. Or copy the skill folder (.claude/skills/spec-writer in ewhauser/shuck) into .agents/skills/spec-writer in your project. Codex loads it when a task matches its description.

Can I use Spec Writer in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add ewhauser/shuck --skill spec-writer -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/spec-writer, .gemini/skills/spec-writer, .github/skills/spec-writer and .opencode/skills/spec-writer in your project.

What does Spec Writer need to run?

SKILL.md names no scripts, command-line tools or credentials: Spec Writer is instructions for the agent only.

Does Spec Writer access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Spec Writer safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Spec Writer use?

Spec Writer is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Spec Writer use?

About 1.7k tokens (SKILL.md is roughly 6.7k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Spec Writer?

Skills that share tags, products or a category with Spec Writer: PR Design Doc (OpenHands/OpenHands, 90k stars), Cto Advisor (Ibrahim-3d/orchestrator-supaconductor, 380 stars), Improve Codebase Architecture (ywwynm/EverythingDone, 144 stars) and Domain Modeling (brim-borium/spotify_sdk, 166 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Spec Writer?

ewhauser (a GitHub user) maintains it in ewhauser/shuck, which has 137 GitHub stars. The repository holds 8 skills in this directory. The repository was last updated on October 5, 2026.

Source: ewhauser/shuck on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.