OpenSpec Bulk Change Archiver
Fission-AI/OpenSpec
Archives several completed OpenSpec changes in one operation, checking the codebase to resolve spec conflicts rather than archiving blindly.
Walk through spec-driven development, design then requirements, producing a local .spec.md and .requirements.md for one feature.
$ npx skills add strands-agents/box --skill spec -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install strands-agents/box spec --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/strands-agents/box.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/spec .claude/skills/spec && rm -rf skills-srcUse ~/.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/
Install the "spec" agent skill from https://github.com/strands-agents/box/tree/main/.agents/skills/spec into .claude/skills/spec/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "spec", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/strands-agents/box/tree/main/.agents/skills/specType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add strands-agents/box --skill spec -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install strands-agents/box spec --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/strands-agents/box.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/spec .agents/skills/spec && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "spec" agent skill from https://github.com/strands-agents/box/tree/main/.agents/skills/spec into .agents/skills/spec/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "spec", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add strands-agents/box --skill spec -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install strands-agents/box spec --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/strands-agents/box.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/spec .cursor/skills/spec && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "spec" agent skill from https://github.com/strands-agents/box/tree/main/.agents/skills/spec into .cursor/skills/spec/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "spec", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/strands-agents/box.git --path .agents/skills/spec--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add strands-agents/box --skill spec -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install strands-agents/box spec --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/strands-agents/box.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/spec .gemini/skills/spec && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "spec" agent skill from https://github.com/strands-agents/box/tree/main/.agents/skills/spec into .gemini/skills/spec/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "spec", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install strands-agents/box specInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add strands-agents/box --skill spec -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/strands-agents/box.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/spec .github/skills/spec && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "spec" agent skill from https://github.com/strands-agents/box/tree/main/.agents/skills/spec into .github/skills/spec/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "spec", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add strands-agents/box --skill spec -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install strands-agents/box spec --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/strands-agents/box.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/spec .opencode/skills/spec && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "spec" agent skill from https://github.com/strands-agents/box/tree/main/.agents/skills/spec into .opencode/skills/spec/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "spec", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
specWalk through spec-driven development, design then requirements, producing a local .spec.md and .requirements.md for one feature.
Spec is an agent skill from strands-agents/box. Walk through spec-driven development, design then requirements, producing a local .spec.md and .requirements.md for one feature. Both files are local working material and are never committed. Use when planning a feature before building it.
Its SKILL.md is about 4.1k 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 Spec-driven development. The repository describes itself as: Run AI agents in a sandbox that restricts what they can execute, read, write, and reach on the network. Box combines OS isolation with default-deny Dogwood policies and… The licence is Apache-2.0.
2 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 2c874ea. It shows what the files ask for, not the result of running them.
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.
No scripts in the folder and no shell commands in SKILL.md (its code samples are markdown, mermaid and rust).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Spec loads about 4.1k tokens when it runs. Until then it costs about 61 tokens; SKILL.md has 1,524 words of instructions outside code blocks.
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.
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.
The full file from strands-agents/box at commit 2c874ea, republished under its Apache-2.0 licence (© strands-agents). 1,524 words, ~4,122 tokens.
.claude/skills/spec/SKILL.md (or your agent's skills folder).Walk a feature through spec-driven development: two phases, each with a user approval gate.
Design ──[approve]──> Requirements ──[approve]──> buildA spec is local working material, and it is never committed or promoted. It guides one piece of work while that work is being built. When the work lands, the spec has done its job:
| What the spec held | Where it goes when the work lands |
|---|---|
| Behaviour and its contract | The code and its tests. A test is the durable form of an acceptance criterion. |
| A decision someone would later ask "why" about | One entry in docs/design/decisions.md, through /kd, once the user decides it. |
| Everything else: options, task lists, open questions, history | Nowhere. It stays in the local draft. |
docs/design/ pages are written for a reader who was not in the discussion. Write one fresh
from the code when one is needed. Never copy or adapt a spec into one.
When implementing a feature, strictly honour its spec. The design (.spec.md) defines the
architecture and the decisions, and the requirements define testable behaviour.
/spec {area}/{feature}
Start at any phase or resume where you left off:
/spec policy/temporal-history: start or continue the spec/spec policy/temporal-history --phase requirements: jump to the requirements phase.agents/drafts/spec/
{area}/
YYYY-MM-DD-{desc}.spec.md
YYYY-MM-DD-{desc}.requirements.md.gitignore holds /.agents/drafts/, so nothing here is committed. The area names a component,
such as box, containment, credentials, egress-gateway, monty, policy, shell, or
telemetry. The date and description match across the two files for one effort.
Because the folder is local, a spec exists only in the working tree that wrote it. A second agent or a second clone does not see it. Hand off a spec by path, in chat.
Before anything else, read what already owns this area:
ls .agents/drafts/spec/{area}/: a spec effort already in progress here.docs/design/decisions.md: the decisions already made in this area. A spec does not
re-decide one silently. To change one, run /kd on it.AGENTS.md, its module docs, and its tests. The code owns behaviour.Then decide scope, and say it to the user:
Write every sentence of both artifacts in it: the .spec.md prose and the .requirements.md
prose.
WHEN … THE {System_Component} SHALL … exactly as the pattern table specifies. SHALL
stays; do not rewrite it to the present tense. Apply the style to the words you choose
inside each clause: keep the trigger and the response short, concrete, and free of
metaphor.As a {role}, I want {functionality}, so that {benefit}. is a fixed shape.Title_Case terms, type names, config
keys, file paths, JSON field names, and status values keep their exact spelling. The
three-word noun-cluster limit does not apply to them.Apply the style as a pass over each artifact before the approval gate, not while drafting.
Read for a sentence over 25 words, the passive voice, a paragraph over six sentences, metaphor,
idiom, and one meaning per word. Use docs/design/terminology.md
for the word to use for each thing.
.spec.md)The design document captures what the system does and why — architecture, key decisions, component interactions, data flow.
Gather information — ask the user (one question at a time):
Draft the design — write Key Decisions with diagrams
Present to user for approval — "Here's the design. Want to adjust anything, or should I proceed to requirements?"
# {Feature} — Design
## Overview
{1-3 sentences: what this feature does and why it's needed}
## Architecture
```mermaid
{high-level architecture diagram showing major components and relationships}Context: {What situation led to this decision}
Decision: {What the system does — 1-3 normative sentences only. No reasoning, no alternatives, no history. A reader who stops here knows the behavior.}
Rationale: {Why this over alternatives. All reasoning, tradeoffs, prior art, and justification goes here — clearly separated from the normative Decision above.}
{diagram illustrating this decision}{...}
Purpose: {What this component does}
Interface:
// src/path.rs — trait / struct / public fn signature{Data structures, schemas, entity definitions — structs, enums, serde shapes}
{Error categories, error enums / Result types, recovery strategies}
{Authentication, authorization, data protection, input validation implications}
| Change | Backward Compatible? | Migration |
|---|---|---|
| {API/field/behavior change} | Yes / No | {How existing callers/data are handled} |
Key questions:
None mean? (Document explicitly — a field name is an implicit contract.){What this spec explicitly does NOT cover and why. Every gap should be intentional and stated — silence about a topic reads as "covered" when it may be "out of scope." List each residual with a brief rationale for exclusion.}
{Threads not yet resolved. Each must annotate which requirements it would affect if resolved differently than currently assumed.}
### Key Decision Guidelines
Each KD should be **self-contained**: a reader can understand the decision from just that section.
**Every KD must have a mermaid diagram.** Choose the right type:
| When showing... | Use |
|---|---|
| Data flow or request path | `flowchart LR` or `flowchart TD` |
| State transitions | `stateDiagram-v2` |
| Sequence of operations | `sequenceDiagram` |
| Component relationships | `flowchart TD` with subgraphs |
| Decision tree | `flowchart TD` with diamond nodes |
**Good KD titles** are decision-shaped:
- "Decoder borrows the input buffer (zero-copy)" (not "Decoder")
- "Builder returns `Result` on invalid config" (not "Builder API")
- "Snapshots are append-only" (not "Storage Backend")
**Decision vs Rationale separation:** The Decision field is normative — it states what the system does in 1-3 sentences. A reader scanning KDs for "what does this system do" should be able to read only Decision fields and get a complete picture. All reasoning, tradeoffs, internal research, prior art, LOC estimates, PRD reconciliation, and alternatives go in Rationale. Never mix mechanism justification into the Decision field.
**Backward compatibility:** Every KD that changes existing behavior must state whether the change is backward compatible and what happens to existing data/callers. If the answer is "absence = legacy behavior," document what `None`/missing means explicitly — a field name is an implicit contract.
**KD numbering:** Sequential within each doc (KD-1, KD-2, ...). When extending, continue from the last number. A spec's KD number is local to that spec, so **never cite it from code, a test, or a committed doc**: the spec is not committed, so the citation is dead for every reader. Code cites a decision by its `docs/design/decisions.md` anchor.
**Mermaid tips:**
- One concept per diagram, not the entire system
- Label edges with the important detail (latency, protocol, data format)
- **Quote every edge label**: `A -.->|"read(2)"| B`. Measured: unquoted labels fail the lexer when
they contain `(` or `|`, and quoting always parses.
- Use subgraphs to group related components
- Prefer `flowchart` over `graph`
**Compile every block — a grep check cannot see a lexer error:**
```sh
export PUPPETEER_EXECUTABLE_PATH="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
mmdc -i block.mmd -o /tmp/block.svgmmdc drives a headless browser and finds none by default, so without that variable it reports a
launch failure that reads like "mermaid is unavailable". The output path needs a real extension;
-o /dev/null fails on every input and proves nothing.
.requirements.md)Requirements transform the design into testable, formal specifications using EARS notation. Each requirement is traced back to the design and structured as user stories with acceptance criteria.
.spec.md) — extract every behavior, constraint, and edge case# {Feature} — Requirements
## Introduction
{Overview of the feature, what problem it solves, why it's needed. Reference the design doc.}
## Glossary
{Define technical terms, acronyms, component names used in requirements. Use Title_Case for terms that appear in EARS statements to make them unambiguous. A term the whole product uses belongs in docs/design/terminology.md, and this glossary defines spec-specific terms only.}
- **{Term_Name}**: {Definition}
### Scope
{What is included and excluded from this requirements document. All terms used here MUST be defined in the Glossary above.}
## Requirements
### Requirement 1: {Capability Title}
**User Story:** As a {role}, I want {desired functionality}, so that {benefit/value}.
#### Acceptance Criteria
1. WHEN {specific event or trigger} THE {System_Component} SHALL {specific system response}
2. IF {condition or state} THE {System_Component} SHALL {required behavior}
3. WHILE {precondition} WHEN {trigger} THE {System_Component} SHALL {response}
#### Example
{One concrete input → expected output illustrating the happy path. Enough for a test author to see what pass/fail looks like without reverse-engineering the prose.}
### Requirement 2: {Capability Title}
**User Story:** As a {role}, I want {feature}, so that {benefit}.
#### Acceptance Criteria
1. WHEN ...
2. IF ...
#### Example
{...}
{... more requirements ...}
## Non-Functional Requirements
### Backward Compatibility
- WHEN {an existing crate consumer calls without the new field} THE {System} SHALL {behave identically to the current behavior}
- IF {rollback is triggered} THE {System} SHALL {return to previous behavior without manual data migration}
- WHEN {a record serialized before this change is deserialized} THE {System} SHALL {handle absent/None new fields as legacy behavior}
### Performance
{Latency, throughput, allocation, resource consumption requirements}
### Security
{Authentication, authorization, input validation, encryption requirements}
## Definition of Done
- [ ] All acceptance criteria are met
- [ ] Non-functional requirements are satisfied
- [ ] Design decisions are honored
- [ ] Each acceptance criterion is pinned by a named test
- [ ] Each decision a reader would ask "why" about is offered to the user for `/kd`
- [ ] User-facing behaviour that changed is reflected in `docs/user/`
- [ ] Accepted Residuals in the spec are not accidentally implemented or contradicted| Pattern | Syntax | Use when... |
|---|---|---|
| Ubiquitous | THE {System} SHALL {response} | Always true, no trigger needed |
| Event-driven | WHEN {trigger} THE {System} SHALL {response} | Triggered by a specific event |
| State-driven | WHILE {precondition} THE {System} SHALL {response} | Behavior depends on system state |
| Conditional | IF {condition} THE {System} SHALL {response} | Unwanted/exceptional behavior |
| Optional | WHERE {feature} THE {System} SHALL {response} | Feature-dependent behavior |
| Combined | WHILE {state} WHEN {trigger} THE {System} SHALL {response} | Complex multi-condition behavior |
Guidelines:
{N}.{M} (e.g., 1.1, 2.3) for traceability inside the spec only. Never put Req 1.1 in a code comment or a test: name the test instead.After each phase, explicitly ask for approval before proceeding:
Design → Requirements:
"The design is ready at
.agents/drafts/spec/{area}/YYYY-MM-DD-{desc}.spec.md. Review the key decisions and architecture. Want to adjust anything, or should I proceed to requirements?"
Requirements → build:
"The requirements are ready at
.agents/drafts/spec/{area}/YYYY-MM-DD-{desc}.requirements.md. Review the acceptance criteria. Want to adjust anything, or should I start building?"
When the work lands, close the spec out in chat rather than in a file:
/kd. Record nothing in decisions.md until the user decides it;docs/user/ page the change made stale.When extending an existing feature's specs:
© strands-agents, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/spec of strands-agents/box.
Open the folder on GitHubat commit 2c874ea
Spec 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Spec this skillstrands-agents/box | 110 | — | ~4.1k | Automated safety check: Pass | Apache-2.0 | |
| OpenSpec Bulk Change ArchiverFission-AI/OpenSpec | 71k | 3 repos | ~5.6k | Automated safety check: Pass | MIT | |
| Speckit ConstitutionWeihanLi/WeihanLi.Common | 242 | 11 repos | ~2.1k | Automated safety check: Pass | Apache-2.0 | |
| Speckit Taskstoissueskunstmusik/blue | 154 | 19 repos | ~2k | Automated safety check: Pass | GPL-3.0 | |
| Speckit Analyzekunstmusik/blue | 154 | 18 repos | ~3k | Automated safety check: Pass | GPL-3.0 | |
| Review Spdzhu1090093659/spec_driven_develop | 984 | — | ~1.5k | Automated safety check: Pass | MIT |
Fission-AI/OpenSpec
Archives several completed OpenSpec changes in one operation, checking the codebase to resolve spec conflicts rather than archiving blindly.
WeihanLi/WeihanLi.Common
Create or update the project constitution from interactive or provided principle inputs, ensuring all dependent templates stay in sync.
kunstmusik/blue
Convert existing tasks into actionable, dependency-ordered GitHub issues for the feature based on available design artifacts.
kunstmusik/blue
Perform a non-destructive cross-artifact consistency and quality analysis across spec.md, plan.md, and tasks.md after task generation.
zhu1090093659/spec_driven_develop
Findings-first code review workflow for AI coding agents. An agent skill from zhu1090093659/spec_driven_develop.
kunstmusik/blue
Execute the implementation planning workflow using the plan template to generate design artifacts.
strands-agents/box
Author or edit a Strands Box policy (policy.dw) — turn an operator's natural-language allow/deny intent into a validated Dogwood policy over the box's fixed action vocabulary, including when…
strands-agents/box
Debug a CI failure on an OS you are not on (you are on Linux, it fails on macos-latest, or the reverse) without opening a pull request per attempt.
strands-agents/box
Find the gaps in the Box documentation and produce a prioritized backlog for docs/user/ and docs/design/.
strands-agents/box
Draft or rewrite a Box documentation page in docs/user/ (tutorial, how-to, or reference for an operator) or docs/design/ (explanation for a security evaluator or a contributor), or a crate README.md…
strands-agents/box
Deep-dive a SINGLE key decision. An agent skill from strands-agents/box.
strands-agents/box
Assess an existing Box documentation page (docs/user/, docs/design/, or a crate README.md) for accuracy against the code and its tests, placement, and voice, and recommend what to fix.
Categories
Walk through spec-driven development, design then requirements, producing a local .spec.md and .requirements.md for one feature. Spec is an agent skill from strands-agents/box.md for one feature.
Spec fits situations like: planning a feature before building it; tasks that involve Spec-driven development.
Run `npx skills add strands-agents/box --skill spec -a claude-code`. Or copy the skill folder (.agents/skills/spec in strands-agents/box) into .claude/skills/spec in your project. Claude Code loads it when a task matches its description.
Run `npx skills add strands-agents/box --skill spec -a codex`. Or copy the skill folder (.agents/skills/spec in strands-agents/box) into .agents/skills/spec in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add strands-agents/box --skill spec -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, .gemini/skills/spec, .github/skills/spec and .opencode/skills/spec in your project.
SKILL.md names no scripts, command-line tools or credentials: Spec is instructions for the agent only.
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.
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.
Spec is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.1k tokens (SKILL.md is roughly 16k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Spec: OpenSpec Bulk Change Archiver (Fission-AI/OpenSpec, 71k stars), Speckit Constitution (WeihanLi/WeihanLi.Common, 242 stars), Speckit Taskstoissues (kunstmusik/blue, 154 stars) and Speckit Analyze (kunstmusik/blue, 154 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
strands-agents (a GitHub organization) maintains it in strands-agents/box, which has 110 GitHub stars. The repository holds 10 skills in this directory. The repository was last updated on October 8, 2026.
Source: strands-agents/box on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.