One paragraph in.
A ship gate out.
A free Claude Code plugin. Type /vision and one paragraph about a product; it plans, builds, reviews, scans and writes, then stops at a ship gate only you can lift.
A real run, from the first line to the stop.
Recorded 4 November 2026 in Claude Code 2.1.310 on a three-file demo CLI: 8 turns, 2 min 22 s, $1.28 of usage as reported by Claude Code. The paragraph asked for a small change, so the kit took its direct path. A ground-up paragraph goes through GSD and takes longer.
First, the paragraph.
> /vision "notesite is a tiny CLI that turns a folder of markdown notes into a static
site. Add a --version flag that prints the version from package.json and exits 0,
and a --help flag that prints one line of usage. Keep it to cli.mjs and a test in
cli.test.mjs."
I'll run the vision flow: preflight, pick the path, add the two flags with a test,
then stop at the ship gate.
Bash git rev-parse --git-dir && git remote -v && ls -la
Bash test -f ~/.claude/commands/gsd/new-project.md && cat ~/.claude/get-shit-done/VERSION
Preflight passes: local git repo with no remote, GSD 1.20.4 installed.
Writing the planning files, then the code.
Bash mkdir -p .planning && cat > .planning/VISION.md
Bash cat > .planning/VISION-STATE.md
# /vision state
Product: notesite
Started: 2026-11-04
Path: direct because single-file feature (two flags + one test) on an existing repo
# Vision decisions (2026-11-04)
- Path: direct. Single-file feature (two flags in cli.mjs, one test file) on an
existing repo; no planner, plan-check or executor wave.
- Name check: skipped. The paragraph introduces no new name; "notesite" is the
existing package name. Not a trademark clearance.
- Flag handling: --version / -v and --help / -h are checked before any filesystem
work, so they never create site/. Both exit 0.
All 5 tests pass and the build path still works. Committing, then running the
step 3 checks on the touched files (code review agent, gitleaks) in parallel.
Bash git commit -q -m "cli: add --version and --help flags with tests"
Agent Review notesite flag change (ecc-code-reviewer, sonnet)
Bash gitleaks git . && gitleaks dir .
Review approved with low-severity nits. Applying the three mechanical ones
(path building, temp-dir cleanup, stricter help test), leaving flag-position
as an owner decision.
Bash git commit -q -m "cli: tidy path handling and test cleanup after review"
19bf5f9 cli: tidy path handling and test cleanup after review
7dfd0e6 cli: add --version and --help flags with tests
c01a633 notesite: first cut
Writing the ship gate and final state file now.
Bash cat > .planning/SHIP-GATE.md
Bash git commit -q -m "planning: ship gate and state for flags task"
Done. The two flags are in, tested, reviewed and committed locally. Nothing was
pushed, published or deployed, and the repo has no remote.
Path: direct because the paragraph asks for a single-file feature on an existing
repo, so no GSD planner or executor wave ran.
## Next
owner reads .planning/SHIP-GATE.md; nothing further runs without a tap
█
What landed, run afterwards by hand
$ node cli.mjs --help
usage: notesite [notes-dir] [out-dir] (defaults: notes site)
$ node cli.mjs --version
0.1.0
$ git diff c01a633 19bf5f9 --stat
.planning/VISION-DECISIONS.md | 8 +++++++
.planning/VISION-STATE.md | 17 +++++++++++++++
.planning/VISION.md | 3 +++
cli.mjs | 18 +++++++++++++++-
cli.test.mjs | 49 ++++++++++++++++++++++++++++++++++++++++++-
5 files changed, 93 insertions(+), 2 deletions(-)
$ npm test
ok 1 - --version prints the package.json version and exits 0
ok 2 - -v prints the package.json version and exits 0
ok 3 - --help prints one usage line and exits 0
ok 4 - -h prints one usage line and exits 0
ok 5 - --help wins when both flags are given
# tests 5
# pass 5
# fail 0
Then it stops.
The last thing a run prints is the ship gate, in four parts: what was verified, with each command and its result; what this flow cannot check; the decisions only you can make; and the taps it leaves to you.
It never pushes to a public remote, publishes a package, deploys, or creates a public repo. Those are your taps, one per public action.
It also says, every time, what it cannot do: judge taste, clear a name, confirm a policy fits the law, test with real users, or see production. Scanners and checklists are a floor, not a guarantee.
# Ship gate: notesite (2026-11-04)
Path taken: direct because the paragraph asks for a single-file feature (two flags in cli.mjs plus a test) on an existing repo.
This gate was produced by a workflow, not a release authority. Nothing below has been published, deployed or pushed to a public remote. The repo has no remote at all.
## 1. Verified (command → result)
- build: `node cli.mjs notes <tmp-out>` → pass, wrote 1 page; `node cli.mjs --version` → `0.1.0`, exit 0; `node cli.mjs --help` → one usage line, exit 0
- tests: `npm test` → 5 passed, 0 failed (version via `--version`/`-v`, help via `--help`/`-h`, help-wins ordering; each also asserts no `site/` directory is created and stderr is empty). The old placeholder test was replaced.
- code review (ecc-code-reviewer, sonnet): APPROVE, 0 critical/high. 5 low nits; 3 fixed in commit 19bf5f9 (package.json path via fileURLToPath, temp-dir cleanup, stricter help test). 2 left as owner decisions below.
- security pass: CLI only, no network, no endpoints, no URL fetching, zero dependencies, no `.github/workflows`; abuse-prevention and gha-security-review not applicable. Flags are handled before any filesystem write. `npm audit` not applicable (no dependencies, no lockfile).
- secret scan: `gitleaks git .` → no leaks (3 commits); `gitleaks dir .` → no leaks
- legal pass (touched files only): no third-party code added, no tracking, no claims text added. Repo-wide gaps noted under owner decisions.
- name check: skipped; no new name introduced. "notesite" is the existing package name and was not searched. This is not a trademark clearance.
## 2. Unverified (this flow cannot check these)
- Real users: nobody outside this session has used it.
- Production: not run through `npm link` / the `bin` symlink, not run on Windows.
- Trademark: no name search ran at all this round; "notesite" may collide on npm.
- Legal sufficiency: the legal pass is a checklist, not advice.
- Taste: no logo, intro image or product page was produced (out of the paragraph's scope).
- Whether the package.json version will be bumped before any publish.
## 3. Owner decisions
- Name: keep "notesite" (unchecked against npm); run step 1 before any publish.
- Public or private: private/local (no remote exists).
- Pricing: none.
- Cut list: nothing to cut.
- Accepted by default, worth a look:
- Flags match anywhere in argv (`notesite notes -v` prints the version). Default kept for convention; switch to first-arg-only if positional dirs named `-v`/`-h` matter.
- Usage line does not list `--help`/`--version` themselves. Kept to "one line of usage" as asked.
- Pre-existing, outside this task's scope: no LICENSE file (package.json says MIT), no README, note bodies are inserted into HTML without escaping. All three would need fixing before a public release.
## 4. Next taps (owner runs these; the flow does not)
- create or set repo visibility · push · publish · deploy · announce
.planning/SHIP-GATE.md as the recorded run wrote it. Unedited.What a ground-up run does.
The recorded run above took the short path. A new project, or a big new phase of one, goes through all seven steps.
- Preflight
- Checks you are in a git repo (or inits one), refuses to run against a repo whose remote is already public, checks that GSD is installed, and writes
.planning/VISION.mdand a state file so the run can resume. - Path choice
- Says which path it is taking and why. Ground-up work goes through GSD. A small local task is done directly or with one small agent, with no planner or executor ceremony.
- Name knockout
- Looks the name up on npm, PyPI, GitHub and the web if a search tool is available, and records the date. A same-name hit in the same category is the one thing it stops and asks about. A scripted search, not a trademark clearance.
- GSD in auto mode
- Writes a lean config (yolo, quick depth, balanced models, 3 concurrent agents) and runs
/gsd:new-project --auto. One plan-check round, not three. Executors run 2 or 3 in parallel, the mid model for execution, the small model for mechanical fixes, a commit lock so parallel commits do not clobber each other. - Review, security, legal
- A code-review agent over the full diff, the security-hardening pass (plus abuse-prevention where there are endpoints and gha-security-review where there are workflows), a secret scan with gitleaks, and the legal-compliance pass: licences in every distributable, a claims audit of every README and page, free and as-is wording, consent before tracking, accessibility basics.
- Face and words
- An original SVG logo, an intro image rendered from HTML, a README, and a product page draft built with product-site-design.
- Ship gate
- Writes and prints
.planning/SHIP-GATE.md. Then it stops./vision statusshows where a run is;/vision resumepicks up after a usage limit or a closed session without restarting finished steps.
What is inside.
Eleven skills and ten agents: vision, studio-playbook, token-economy, product-site-design, ui-style-picker, apple-motion, game-feel, security-hardening, abuse-prevention, legal-compliance, gha-security-review, ecc-planner, ecc-architect, ecc-code-reviewer, ecc-typescript-reviewer, ecc-react-reviewer, ecc-database-reviewer, ecc-security-reviewer, ecc-tdd-guide, ecc-build-error-resolver, ecc-silent-failure-hunter.
Agents carry a model pin
Each job runs on the right model without anyone choosing by hand. The frontier model only where a wrong call is expensive to undo; the mid model for execution and review; the small model for mechanical fixes.
| Model | Agents |
|---|---|
| opus | ecc-planner, ecc-architect |
| sonnet | ecc-code-reviewer, ecc-typescript-reviewer, ecc-react-reviewer, ecc-database-reviewer, ecc-security-reviewer, ecc-tdd-guide |
| haiku | ecc-build-error-resolver, ecc-silent-failure-hunter |
The playbook, in eleven rules
Design first. Plan, then build. Test before commit. Debug by observing. Neutral wording for security and legal fixes. Nothing public without the owner. Release gates before any publish. Skill and plugin intake. Pick the model per task. Every repo gets a face. Saving tokens with GSD.
No savings figure is quoted anywhere in the kit, because none has been measured with a repeatable method.
Scanned before it shipped.
Every skill and agent went through NVIDIA SkillSpector v2.13.3 and SkillEvaluator v0.7.1 on 4 November 2026, and every high or critical finding was read by hand. Three skills came back DO_NOT_INSTALL, including vision itself. Each hit was a detection pattern, a defensive blocklist, or a recipe that deletes its own temp file. The table says so instead of hiding it.
Same day: gitleaks git . and gitleaks dir . found no leaks, and claude plugin validate . --strict passed on Claude Code 2.1.310.
| Item | SkillSpector | SkillEvaluator | The high findings, read by hand |
|---|---|---|---|
| studio-playbook | SAFE, risk 0 | 79 C, high 1 | Metadata only. |
| product-site-design | SAFE, risk 0 | 82 B, high 1 | Metadata only. |
| ui-style-picker | SAFE, risk 3 | 88 B, high 1 | Metadata only. |
| game-feel | SAFE, risk 3 | 86 B, high 1 | Metadata only. |
| apple-motion | CAUTION, risk 0 | 86 B, high 1 | Metadata only. |
| security-hardening | CAUTION, risk 24 | 83 B, high 2 | The phrase "personal access token" in advice to use a scoped token. Text only. |
| legal-compliance | CAUTION, risk 49 | 82 B, high 2 | The static parser hit its size limit on one script. Read by hand: reads local files, writes one text file; no network, no exec. |
| abuse-prevention | DO_NOT_INSTALL, risk 91 | 83 B, high 5 | All hits are the SSRF blocklist and its tests: addresses that must be refused. Defensive code; tests pass. |
| gha-security-review | DO_NOT_INSTALL, risk 100 | 88 B, high 32 | Attack examples in the reference docs that the skill teaches you to find. Markdown only. Kept. |
| token-economy | CAUTION, risk 28 | 88 B, high 3 | Two hits on the commit-lock recipe deleting its own temp index. Third is metadata. |
| vision | DO_NOT_INSTALL, risk 68 | 81 B, high 4 | A plain-text phrase flagged as "memory poisoning"; the same commit-lock recipe; metadata. The skill's own rules forbid push, publish and deploy. |
| ecc-* agents (10) | SAFE or CAUTION, risk 9 to 21 | 87 to 90 B | Metadata only. |
From SECURITY-SCAN.md in the repo. Scanners give a signal, not a guarantee.
Two commands, then /vision.
What it needs
- Claude Code 2.1 or newer. The kit was checked with 2.1.310.
- For
/vision: GSD installed globally at the pinned version,npx get-shit-done-cc@1.20.4 --claude --global. Its upstream is archived as of May 2026; the pinned version works and will not receive fixes. Leave its update-check hook off. - Used when present:
gitleaksfor secret scans,ghfor the repo-visibility and GitHub name checks, a headless browser for the intro image. - To try it without installing: clone the repo and run
claude --plugin-dir ./shipatmidnight-kit.
Questions.
Is this affiliated with Anthropic?
No. The kit is an independent, free, non-commercial project. It runs inside Claude Code as a plugin. Claude and Claude Code are trademarks of Anthropic, PBC, named here only to say where the kit works.
Will it push, publish or deploy for me?
No. The gate lists those as your next taps and the run ends there. It also refuses to start against a repo whose remote is already public. If you then say “ship it”, the playbook's release rules still apply, one tap per public action.
What can it not do?
Judge taste, clear a name, confirm a policy fits the law, test with real users, or see production. The name check is a scripted search, the legal pass is a checklist, and the gate says so every time.
Why GSD, and why a pinned version?
GSD gives the ground-up path its discuss, plan and execute phases. The kit pins 1.20.4 because its upstream is archived; that version works but gets no fixes. It is linked rather than bundled because its installer writes absolute paths into the agent files. A maintained fork exists; scan it with audit.sh before adopting it.
How much does it save?
No figure is quoted, because none has been measured with a repeatable method. The run on this page took 8 turns, 2 min 22 s and $1.28 of usage for two flags and a test; a ground-up run costs more. The token-economy rules exist because usage limits stop every running agent at once.
What does it send anywhere?
The kit is files: skills, agents and markdown. It makes no network requests of its own. When a run does its name check it calls npm, PyPI and GitHub; audit.sh fetches the two scanners at pinned tags on first run. This page sets no cookies, has no analytics and loads nothing from other sites.
What is the licence?
The kit's own files are MIT. Bundled third-party pieces keep their own licences: the ten ECC agents (MIT), game-feel (Apache-2.0), gha-security-review (Apache-2.0), apple-motion (MIT) and the style database inside ui-style-picker (MIT). The authoritative list is THIRD_PARTY_NOTICES.md.