ship
Skill9 starsChanged 7 days agoMITView on GitHub
Make finished work live on the deployed site (SITE_URL in scripts/brand.mjs is the authority). Commit, run the full verify, merge branch work into main when needed, push, watch CI go green, then prove the deployed site actually renders with the live hydration smoke. Use when asked to ship it, make it live, push to main, or deploy this. If asked to "merge and push" (a retired skill name), confirm the intended end state — ship, checkpoint, or land — before acting.
- Reads credentials
- Commits and pushes
194 other projects use a version of this.
Adopted by
Most recently taken up by
- wboayue/rust-ibapitheir own version, first seen Nov 9, 2026
- haiggoh/run-to-completiontheir own version, first seen Nov 8, 2026
- sanmidable/skillstheir own version, first seen Nov 8, 2026
- Yesterday-AI/ytstacktheir own version, first seen Nov 8, 2026
- gaoyu06/harnesstheir own version, first seen Nov 8, 2026
- PeanutGT/NutsSkillstheir own version, first seen Nov 8, 2026
Used with
Projects with it also use ios-sync, open-gstack-browser and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
Saqlain-811Skillios-sync
Regenerate the iOS debug bridge against the latest upstream gstack templates. (gstack)
Also in 6 projects that use this
seek888Skillopen-gstack-browser
Launch GStack Browser — AI-controlled Chromium with the sidebar extension baked in. Opens a visible browser window where you can watch every action in real time. The sidebar shows a live activity feed and chat. Anti-bot stealth built in. Use when asked to "open gstack browser", "launch browser", "connect chrome", "open chrome", "real browser", "launch chrome", "side panel", or "control my browser". Voice triggers (speech-to-text aliases): "show me the browser".
Also in 10 projects that use this
ayudaySkillsetup-deploy
Configure deployment settings for /land-and-deploy. Detects your deploy platform (Fly.io, Render, Vercel, Netlify, Heroku, GitHub Actions, custom), production URL, health check endpoints, and deploy status commands. Writes the configuration to CLAUDE.md so all future deploys are automatic. Use when: "setup deploy", "configure deployment", "set up land-and-deploy", "how do I deploy with gstack", "add deploy config".
Also in 19 projects that use this
ShreyRaviSkilllanding-report
Read-only queue dashboard for workspace-aware ship. Shows which VERSION slots are currently claimed by open PRs, which sibling Conductor workspaces have WIP work likely to ship soon, and what slot /ship would pick next. No mutations — just a snapshot. Use when asked to "landing report", "what's in the queue", "show me open PRs", or "which version do I claim next". (gstack)
Also in 9 projects that use this
zebbernSkilldebug-fix
Find and fix a bug or issue — from any source (GitHub issue, error message, user report, or observed behavior)
Also in 4 projects that use this
ramybarsoumSkilldocument-release
Post-ship documentation update. Reads all project docs, cross-references the diff, updates README/ARCHITECTURE/CONTRIBUTING/CLAUDE.md to match what shipped, polishes CHANGELOG voice, cleans up TODOS, and optionally bumps VERSION. Use when asked to "update the docs", "sync documentation", or "post-ship docs". Proactively suggest after a PR is merged or code is shipped.
Also in 23 projects that use this
Other versions194 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 194
- garrytan/gstack★ 141ksame name
- rtk-ai/rtk★ 86ksame name
- simstudioai/sim★ 30ksame name
- millionco/react-doctor★ 15ksame name
- BuilderIO/agent-native★ 7.6ksame name
- nightly-labs/openbot★ 6.3ksame name
- fallow-rs/fallow★ 5.3ksame name
- puncsky/system-design-and-architecture★ 3.6ksame name
- plugin87/ux-ui-agent-skills★ 3.1ksame name
- ShenSeanChen/waku-agent★ 2ksame name
184 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository33 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- accessibility-auditSkill
- animation-jump-checkSkill
- api-consistencySkill
- chat-qualitySkill
- checkpointSkill
- component-consistency-auditSkill
- component-doc-pageSkill
- content-auditSkill
- dependency-advisorySkill
- design-qaSkill
- dogfoodSkill
- drift-auditSkill
- first-deploySkill
- landSkill
- link-rotSkill
- new-componentSkill
- new-pageSkill
- new-presetSkill
- new-templateSkill
- new-tokenSkill
- new-validatorSkill
- parkSkill
- pre-deploySkill
- release-postSkill
- releaseSkill
- responsive-sweepSkill
- security-auditSkill
- seo-auditSkill
- super-shipSkill
- token-auditSkill
- token-renameSkill
- visual-reviewSkill
The file
We split this skill into the rules it gives an agent
10 rules. 0 are common, 6 are distinctive, and 4 are very specific to this project.
0
Common
Most of the 180 edited versions we read keep these.
6
Distinctive
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- could be automatic: a setting could enforce it
- Very specific: line 15
Use this skill when asked to make completed work live — phrases like "ship it", "make it live", "push to main", "deploy this".
- Very specific: line 22
On
main: follow steps 1–9 directly. - Distinctive: line 25
Survey the tree before touching anything: run git status --short and classify every entry:
- Distinctive: line 65
Confirm CI went green: after the push, watch the GitHub Actions run to completion:
- Very specific: line 71
Branch case, after CI is green: delete the merged branch — git branch -d <branch>, and git push origin --delete <branch> if it was pushed.
- Distinctive: line 78
If it hasn't changed from before the push, wait a moment and re-check — Vercel usually finishes before CI does.
- Distinctive: line 86
Every file deliberately left out and why
- Distinctive: line 92
Never force-push, never rewrite pushed history
- Very specific: line 93
Never commit .env* or anything credential-shaped — even if explicitly staged by mistake
- Distinctive: line 94
If there is nothing in scope to commit and nothing unmerged on the branch, say so and stop — don't invent a commit
“Common” is measured: kept by at least 6 in 10 of the 180 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
ship
Make finished work live on the live site (SITE_URL in scripts/brand.mjs is the authority for where that is) — builds green first, no unrelated files swept in, a clear report after. The end state is always the same: the work is on main, pushed, and deployed.
When invoked
Use this skill when asked to make completed work live — phrases like "ship it", "make it live", "push to main", "deploy this". This skill always ends with a deploy; to save progress without deploying, that's checkpoint (or park to also return to main).
If asked to "merge and push": that's the retired ambiguous skill name, and it now maps onto more than one verb. Confirm the intended end state before doing anything: ship (merge into main, push, deploy), checkpoint (push the branch, keep working), or land (combine several pieces of pending work into a local main, pushing nothing).
Instructions
- Check the branch:
git branch --show-current.- On
main: follow steps 1–9 directly. A push to main deploys the live site (SITE_URLinscripts/brand.mjsis the authority). - On any other branch: the work rides the branch into
main. Follow steps 1–4 on the branch (commit there), then merge in step 5. Never cherry-pick or copy files across branches to avoid a merge.
- On
Survey the tree before touching anything: run
git status --shortand classify every entry:- In scope — files created or modified as part of the work just completed in this session
- Out of scope — anything untracked or modified that predates the session, or that wasn't part of the requested work
Never run
git add -A,git add ., orgit addon a directory — always add explicit file paths. Out-of-scope files are excluded by default and named in the final report; if it's genuinely unclear whether something belongs, ask before including it.Run the full verify before committing:
npm run verify # the single local mirror of CI — the script entry in the root package.json is the step listThis one script is the single source of truth for local checks and mirrors the CI jobs in
.github/workflows/ci.yml— if CI gains a check (tests, a11y), it gets added toverify, never listed here separately, except the CI-only checks CLAUDE.md's CI & Local Verify section records as deliberate exceptions (its list is authoritative). The registry validators run automatically via the builds'prebuildhooks.A labs-only change (only
website/src/app/labs/and the few files a lab registers in;scripts/labs-only-change.mjsowns the allowlist) may runnpm run verify:labsinstead: CI's lighter labs path, which drops the story tests, the Storybook build, the package steps and the site-wide gesture and axe sweeps. It opens with the allowlist check and fails if anything outside labs changed, so it cannot stand in for a change that needs the full verify.Run it plainly and let its own exit status be the verdict. Never pipe verify through
tail,head, orgrep— a pipeline reports the last command's exit code, not verify's, and that exact mistake masked two red builds on 2026-07-26. If any step fails, stop — fix the failure if it was caused by this session's work, otherwise report it. Never push red.Note: the build regenerates the derived surfaces owned by the
validate-registrychain — the generator scripts at the front of thevalidate-registryentry in the rootpackage.jsonare the authoritative list of what gets rewritten. If a generated file changed after the builds, it changed because this session's work made it stale — treat it as in scope and commit it in the same push, either alongside the edits that caused it or as its ownchore(generated):commit when the regeneration is large enough to bury the real change (both are sanctioned; the 0.19.0 and 0.20.0 component drops used the split). CI's drift guard is agit diff --exit-codestep and an untracked-file check after the generators run in.github/workflows/ci.yml, so what it cares about is that no regeneration is left uncommitted, a newly generated file included, not which commit carries it.Delta-scoped prose check — the step that keeps drift audits boring. For the identifiers this session's diff touched (component names, prop names, script names, moved/deleted paths), grep the prose surfaces —
.claude/skills/,README.md, every root spec (the doc list inscripts/validate-doc-refs.mjsis the authoritative set; it includes tracked specs that are not published to /blueprints, which theFILESarray inscripts/sync-blueprints.mjsdeliberately omits), and the data registries whose text fields ship verbatim as prose (CLAUDE.md's Registries table names them; the component and widgetdescriptionfields insrc/components/registry.jsonandsrc/chat/registry.jsonare the ones most often missed, and they reach the MCP endpoint, the site chat's corpus, the consumer agent skill and page metadata word for word) — and judge whether any claim just became false (README.mdships in the npm tarball, so a false claim there reaches every consumer). Any prose the session wrote or rewrote also followscontent-design.md(run its Self-Review Tests on anything longer than a sentence). Fix what did in the same push;validate-doc-refscatches dead references mechanically, but only a reader catches a sentence that is now wrong.When the diff touches a
*Propsor*OwnPropstype undersrc/components/orsrc/chat/, two more checks. Run theapi-consistencyskill scoped to those components (its scoped mode reports only on them and their family). Then sweep internal callers (src/,website/src/, the stories) for every deprecated spelling of that component's API, older aliases included, not only the one this session retired: a caller still on a spelling two renames old renders today and fails the day the alias goes.- Group changes into logical commits — one commit per concern, not one giant commit. Match the repo's conventional style (
feat(scope):,fix(scope):,chore(scope):), with a 1–3 sentence body explaining the why. Checkgit log --oneline -5if unsure of the voice. - Merge (branch case only): with the branch committed and verify green:
A fast-forward or a merge commit are both fine. If the merge conflicts, stop and report — never resolve conflicts silently as part of a ship. Never force-push to make a merge "work".git checkout main git pull --ff-only git merge <branch> Push:
git pushonmain. Remember: a push to main deploys the live site via Vercel (SITE_URLinscripts/brand.mjsis the authority) — pushing is publishing.If the pushed work changed component CSS (the chat widget's under
src/chat/included), anything undersrc/tokens/, or.storybook/, offer to dispatch Chromatic (gh workflow run chromatic.yml) — once a Chromatic project is provisioned for this repo (none exists yet) —verifyproves nothing about pixels, and this is the decision point pre-deploy's Chromatic rule exists for. It bills cloud snapshots, so it's an offer, not an automatic step.Chromatic only snapshots Storybook, so it says nothing about the website. If the pushed work touched a site-wide background surface — the config (
website/src/data/shader-background.json), the site's composition of it (website/src/components/BlurBackground/, and the.blur-containerrules inwebsite/src/app/globals.cssthat place, mask and fade it), the renderer itself (src/components/ShaderField/), or the dotted ground (website/src/components/DotBackground/) under the immersive stages and inside the home page's chat frame — offer avisual-reviewpass instead: all but the last change the background on all of the site's pages at once, the last is the whole ground under the stage pages and the home page's chat frame (review/too), and no automated gate covers any of them.verifyproves the config validated and the shader compiled, not that the result looks right. The renderer is the easiest to miss, because it lives in the library rather than the website and Chromatic's Storybook snapshots do not cover a full-viewport site background.Same pattern for the chat: if the pushed work changed what the site chat answers from or how it answers — the corpus sources (page prose feeds
site-corpus.generated.tsby construction), the persona or guardrail configuration inwebsite/src/app/api/chat/, the handlers and guardrails the package ships insrc/chat/server.tsandsrc/chat/upstash.ts(the site's routes are thin callers of them), the route itself, or the shared lookup implementations inwebsite/src/lib/site-tools.ts(which also serve/api/mcp, so the same edit deserves an MCP spot-check) — offer to run the answer-quality eval (npm run eval:chat, ritual inevals/chat/README.md).verifyproves the corpus regenerated, not that the answers stayed good, and the eval costs real API spend — an offer, not an automatic step.Confirm CI went green: after the push, watch the GitHub Actions run to completion:
gh run watch $(gh run list --workflow=ci.yml --branch main --limit 1 --json databaseId --jq '.[0].databaseId') --exit-statusThe
--workflow=ci.ymlfilter is load-bearing: a push to main can trigger other workflows within the same second (CodeQL, if it is enabled for this repo — check rather than assume), and an unfiltered--limit 1can hand you one of those runs instead.--exit-statusmakes a red run exit non-zero rather than reporting and returning 0. CI runs in parallel with the Vercel deploy — it gates nothing, but a red run on main means something the local verify missed (or an environment difference) and must be investigated, not left as a red X.Branch case, after CI is green: delete the merged branch —
git branch -d <branch>, andgit push origin --delete <branch>if it was pushed. Its commits are onmain; the repo stays main-only by default. Name the deletion in the report.- Prove the deployed site renders — the step the 2026-09-06 outage was missing. A green verify, a green CI run, and an HTTP 200 all held that morning while every JS browser showed a blank page: the failure lived in Vercel's runtime rendering (the root route's ISR regeneration sees an internal pathname no local run can reproduce), so only the live site can prove itself. Read the URL from
scripts/brand.mjs(the authority), never from memory. First confirm the new deployment is what's serving — thedata-dpl-idin the homepage HTML changes with every deploy:
If it hasn't changed from before the push, wait a moment and re-check — Vercel usually finishes before CI does. Then run the live hydration smoke:SITE_URL="$(node -e "import('./scripts/brand.mjs').then(b=>console.log(b.SITE_URL))")" curl -s "$SITE_URL/" | grep -o 'data-dpl-id="[^"]*"'
The script's doc block owns what it asserts, and its passes are labelled in the output, so a red line names which one failed. A red result means the deploy may have taken the site down — treat it as an active outage, not a report line: diagnose immediately, and if the cause isn't quickly fixable, revert the deploy (node scripts/smoke-hydration.mjs "$(node -e "import('./scripts/brand.mjs').then(b=>console.log(b.SITE_URL))")"git revertthe pushed commits and push again) rather than leaving the site dark while investigating. Never skip this step because verify and CI were green — they were green during the outage too. - Report in the final message:
- Each pushed commit (hash + subject), confirmation
npm run verifypassed locally, the CI run result, and the live smoke result (step 8) - Every file deliberately left out and why
- Anything the deploy will visibly change on the live site
- Branch case: the merge and the branch deletion
- Each pushed commit (hash + subject), confirmation
Guardrails
- Never force-push, never rewrite pushed history
- Never commit
.env*or anything credential-shaped — even if explicitly staged by mistake - If there is nothing in scope to commit and nothing unmerged on the branch, say so and stop — don't invent a commit
- Shipping is the owner's call: only invoke this flow when asked to ship, and never chain into it automatically from other work
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

