Ship at Midnight kit Install

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.

Install the kit

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.
The recorded session, trimmed to the lines that matter. Every line is from the run; nothing was added.

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(-)
The two flags, in the demo repo after the run.
$ 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
The five tests the run wrote, passing.

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.md and 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 status shows where a run is; /vision resume picks 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.

The kit's intro image: the clock mark and the name on the left; on the right, the skills grouped as design, security and legal, intake, and the agents with their pinned models: planner and architect on opus, code, ts, react, db, security and tdd on sonnet, build-errors and silent-failures on haiku
The intro image from the kit's own README.

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.

ModelAgents
opusecc-planner, ecc-architect
sonnetecc-code-reviewer, ecc-typescript-reviewer, ecc-react-reviewer, ecc-database-reviewer, ecc-security-reviewer, ecc-tdd-guide
haikuecc-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.

ItemSkillSpectorSkillEvaluatorThe high findings, read by hand
studio-playbookSAFE, risk 079 C, high 1Metadata only.
product-site-designSAFE, risk 082 B, high 1Metadata only.
ui-style-pickerSAFE, risk 388 B, high 1Metadata only.
game-feelSAFE, risk 386 B, high 1Metadata only.
apple-motionCAUTION, risk 086 B, high 1Metadata only.
security-hardeningCAUTION, risk 2483 B, high 2The phrase "personal access token" in advice to use a scoped token. Text only.
legal-complianceCAUTION, risk 4982 B, high 2The static parser hit its size limit on one script. Read by hand: reads local files, writes one text file; no network, no exec.
abuse-preventionDO_NOT_INSTALL, risk 9183 B, high 5All hits are the SSRF blocklist and its tests: addresses that must be refused. Defensive code; tests pass.
gha-security-reviewDO_NOT_INSTALL, risk 10088 B, high 32Attack examples in the reference docs that the skill teaches you to find. Markdown only. Kept.
token-economyCAUTION, risk 2888 B, high 3Two hits on the commit-lock recipe deleting its own temp index. Third is metadata.
visionDO_NOT_INSTALL, risk 6881 B, high 4A 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 2187 to 90 BMetadata 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: gitleaks for secret scans, gh for 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.

Source on GitHub

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.