Write the requirements before you write the code. Spec First gives you a workflow with three steps. First, define what to build. Then implement it from the spec. Last, generate the documentation. All steps run in your terminal.
What's inside
FAQ
sf is a Claude Code plugin with 3 hand-picked skills for development work, indexed on Flowy. Install it with the command on its page. It includes document, implement, spec. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.
> /plugin marketplace add bitcraft-apps/spec-first> /plugin install sf@spec-first
Write the requirements before you write the code. Spec First gives you a workflow with three steps. First, define what to build. Then implement it from the spec. Last, generate the documentation. All steps run in your terminal.
Give an agent a vague prompt, and the agent decides the requirements for you. You find out what it decided when you read the diff. A wrong decision then costs you the whole change.
Spec First puts the requirements in a file first. You read that file and correct it. The agent builds from the file you approved.
Use Spec First if you want your coding agent to build from clear requirements.
On Claude Code, add the marketplace. Then install the plugin:
claude plugin marketplace add bitcraft-apps/spec-first
claude plugin install sf@spec-first
On another host, install the skills with ./scripts/install.sh. The host
table below gives the command for each host.
New to Spec First? Getting Started walks through your first spec.
Each command gives the same steps and the same checks to every host.
/sf:spec writes .sf/spec.md. You read that file and
correct it before the agent writes code./sf:spec and /sf:document run as
workflow scripts. Every other host does the same steps in order.The spec stays on your machine. Team Workflow shows how a team shares it through the ticket.
The table shows the typical range for each phase. The example is a small CLI tool with approximately 500 lines.
| Phase | Input tokens | Output tokens |
|---|---|---|
| spec | 10kโ30k | 2kโ6k |
| implement | 30kโ120k | 5kโ30k |
| document | 20kโ60k | 3kโ10k |
Your token counts change with the size of the codebase, the complexity of the feature, and the number of iterations. For current prices, see Claude pricing.
| Command | Purpose |
|---|---|
/sf:spec [REQUIREMENTS] | Define what to build and why |
/sf:implement [--isolate] [SPEC_OR_PATH] | Build the minimal working solution |
/sf:document [PATHS] | Generate documentation for the change |
| Host | Install | What runs |
|---|---|---|
Claude Code โ reads ~/.claude/skills | claude plugin install sf@spec-first | The three commands, parallel subagents, and validation hooks |
Hosts that read .agents/skills: pi, opencode, Codex CLI, GitHub Copilot CLI, Gemini CLI, Cursor, Zed, Amp, Goose, Crush, Kilo Code, Warp, Factory Droid, OpenHands | ./scripts/install.sh | The three commands in order. The skills call the validation scripts, so the same checks run. |
Hosts that read their own directory: Cline (~/.cline/skills), Qwen Code (~/.qwen/skills), iFlow CLI (~/.iflow/skills) | ./scripts/install.sh --dir <that directory> | Same as above |
| Any other host with a skills directory | ./scripts/install.sh --dir <dir> | Same as above |
Supported hosts gives the directory each host reads, the documentation it
came from, and the version it was read at. A host not listed there: check its skill documentation
for the directory it reads, then pass that with --dir.
.claude-plugin/
marketplace.json
plugin.json
.github/
dependabot.yml
ISSUE_TEMPLATE/
bug_report.yml
feature_request.yml
workflows/
ci.yml
release-please.yml
.gitignore
.gitmodules
.release-please-manifest.json
agents/
AGENTS.md
implement-minimal.md
CHANGELOG.md
docs/
getting-started.md
supported-hosts.md
team-workflow.md
technical-reference.md
examples/
csv-summary-cli/
output/
.sf/
implementation-summary.md
research/
artifacts-summary.md
criteria.md
docs-inventory.md
implementation-summary.md
pattern-example.md
risks.md
scope.md
technical-docs.md
user-docs.md
spec.md
csv_summary.py
demo.csv
docs.md
test_csv_summary.py
README.md
rate-limiter/
output/
.sf/
implementation-summary.md
research/
artifacts-summary.md
criteria.md
docs-inventory.md
implementation-summary.md
pattern-example.md
risks.md
scope.md
technical-docs.md
user-docs.md
spec.md
docs.md
package.json
rate-limiter-middleware.ts
rate-limiter.test.ts
rate-limiter.ts
tsconfig.json
README.md
README.md
search-input/
output/
.sf/
implementation-summary.md
research/
artifacts-summary.md
criteria.md
docs-inventory.md
implementation-summary.md
pattern-example.md
risks.md
scope.md
technical-docs.md
user-docs.md
spec.md
docs.md
package.json
SearchInput.test.tsx
SearchInput.tsx
tsconfig.json
vitest.config.ts
README.md
hooks/
hooks.json
validate-implementation.sh
validate-spec.sh
LICENSE
Makefile
README.md
release-please-config.json
scripts/
check-bats-assertions.sh
check-bats-assertions.test.bats
check-script-permissions.sh
check-script-permissions.test.bats
check-version-changes.sh
check-version-requirements.sh
check-version-sync.sh
check-version-sync.test.bats
check-workflow-scripts.sh
check-workflow-scripts.test.bats
doc-gates.sh
doc-gates.test.bats
install.sh
install.test.bats
spec-dir.sh
spec-dir.test.bats
validate-implementation.sh
validate-implementation.test.bats
validate-plugin.sh
validate-plugin.test.bats
validate-spec.sh
validate-spec.test.bats
version.sh
version.test.bats
skills/
document/
scripts/
doc-gates.sh
SKILL.md
implement/
scripts/
validate-implementation.sh
SKILL.md
spec/
scripts/
spec-dir.sh
validate-spec.sh
SKILL.md
spec-template.md
tests/
e2e/
error-recovery.bats
helpers/
assertions.bash
integration/
directory-isolation.bats
dynamic-context.bats
hooks.bats
plugin-validation.bats
plugin.bats
workflow-paths.bats
workflow.bats
README.md
run-tests.sh
workflow-harness.mjs
VERSION
workflows/
document.js
spec.jsยฉ 2026 Flowy ยท Free and open source
Built for Claude Code ยท Not affiliated with Anthropic