/ijfw-ship
Use when the user says 'ship it', 'ship this', 'release', 'publish', 'launch', 'deploy', 'go live', 'wrap this up', 'time to ship', or invokes '/ijfw-ship'. Domain-aware release — software (test → tag → push → publish), book (final edit → format → KDP / agent / Substack),
$ npx -y skills add FerroxLabs/ijfw --skill ijfw-ship --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/ijfw-ship
Context preview
The summary Claude sees to decide when to auto-load this skill.
Use when the user says 'ship it', 'ship this', 'release', 'publish', 'launch', 'deploy', 'go live', 'wrap this up', 'time to ship', or invokes '/ijfw-ship'. Domain-aware release — software (test → tag → push → publish), book (final edit → format → KDP / agent / Substack),
SKILL.md
ijfw-ship.SKILL.mdname: ijfw-ship
description: "Use when the user says 'ship it', 'ship this', 'release', 'publish', 'launch', 'deploy', 'go live', 'wrap this up', 'time to ship', or invokes '/ijfw-ship'. Domain-aware release — software (test → tag → push → publish), book (final edit → format → KDP / agent / Substack), campaign (review → schedule → launch → first-24h monitor), landing page (deploy → analytics → mobile + a11y re-check), design system (publish → announce → adoption). Reads the issue ledger, runs the SHIP gate, requires the user's push-word for irreversible ops."
since: '1.5.0'
allowed-tools: Read, Write, Edit, Bash, Grep, Glob, AskUserQuestion, Agent
IJFW Ship — domain-aware release closer
You are the orchestrator-facing trigger that closes a slice and pushes it into the world. Same closing arc across domains: pre-flight → execute the release → confirm in the wild → update memory. The verb "ship" differs by domain; the discipline doesn't.
This skill is the body for the `/ijfw-ship` slash command. Both paths land here.
When to fire
1. User explicitly asks: "ship it", "release", "publish", "launch", "deploy", "go live", "wrap this up", "time to ship". 2. `/ijfw-ship` slash command is invoked. 3. ijfw-workflow Deep path enters the Ship gate after Verify.
Domain detection
Detect from project layout + brief language:
| Domain | Signals | Ship verb | |----------------|--------------------------------------------------------|-----------------| | software | `package.json` / `pyproject.toml` / `Cargo.toml` | tag + publish | | book / chapter | `manuscript/`, `chapters/`, agent / KDP / Substack ref | format + submit | | campaign | `campaign/`, `calendar.md`, channel language | schedule + send | | landing page | `next.config.*`, `astro.config.*`, deploy host configs | deploy + verify | | design system | `tokens/`, `components/`, registry / npm package | publish + announce |
If the domain is ambiguous, ask one AskUserQuestion: `What are we shipping?` with the five options above. Never guess.
Pre-ship checklist (domain-aware)
Software
- CHANGELOG.md updated with what's in this release.
- Test suite green (`npm test` / `pytest` / `cargo test`) — fresh run, this
session, raw output.
- Version bumped in `package.json` / equivalent.
- Tag drafted (`v<MAJOR>.<MINOR>.<PATCH>`); push deferred until push-word.
- Rollback plan documented (`npm deprecate` / `cargo yank` / revert + retag).
Book / chapter
- Manuscript final edit pass done.
- Format pass complete (epub / pdf / docx, depending on channel).
- Front-matter (title page, copyright, dedication, ISBN if owned) present.
- Cover + back-cover copy finalised.
- Target channel decided: Amazon KDP, agent submission, Substack, direct.
- Rollback plan = unpublish window noted (KDP allows ~72h unpublish; agent
withdrawal letter ready if submitted).
Campaign / launch
- All assets reviewed against brand voice + legal compliance.
- Send schedule locked (calendar + timezone).
- Tracking confirmed (UTMs in place; analytics pixel firing; conversion
goal mapped).
- First-24h monitoring plan + owner identified.
- Rollback plan = kill switch (pause sends; revert nav links; statement
ready).
Landing page
- Production deploy command identified (`vercel --prod`, `netlify deploy
--prod`, etc).
- Analytics live and verified (real pageview registered in dashboard).
- Mobile re-check: iPhone + Android viewport screenshot.
- Accessibility re-check: keyboard navigation, screen-reader labels, color
contrast.
- Rollback plan = previous deployment URL pinned for instant promote-back.
Design system
- Package version bumped + CHANGELOG entry written.
- Visual regression suite green (Chromatic / Loki / Percy).
- Migration guide drafted for consumers if breaking change.
- Announcement copy drafted (Slack / Discord / mailing list).
- Rollback plan = `npm deprecate <pkg>@<version>` script ready.
Donahoe principles enforced at ship
- **P15:** Updates invisible to users — no action required from them.
- **P20:** Works on all target platforms.
- **P21:** Pricing respects the user (no surprise costs introduced).
Ledger gate (BLOCKS ship)
Before the SHIP gate proper, read `.ijfw/state/execute-issues.json`:
read_issues() {
local f=".ijfw/state/execute-issues.json"
[ -f "$f" ] || { printf '{"issues":[]}'; return; }
cat "$f"
}If any entry has `status: unresolved` (any `kind`), ship is refused:
ISSUE: ship-blocked-by-unresolved-issues
count: <N>
ids: [iss_001, iss_002]
action: resolve all issues before shipping
Missing file = zero issues (day-1 fresh-install protection).
SHIP gate — brief reconciliation
Before any push / send / publish, re-read `.ijfw/memory/brief.md` and confirm what was built matches what was asked. If gaps remain, ship is held until they close.
Cross-audit gate (Trident, optional but recommended)
Before irreversible release ops, recommend invoking `ijfw-cross-audit` as a second-opinion gate on the release diff / final draft / campaign brief. Consensus findings BLOCK ship; contested findings surface to the user for an explicit go / no-go.
Confidence declaration (required before push / publish)
Every ship-readiness claim is tagged VERIFIED / LIKELY / GUESSING / ISSUE. Ship proceeds only when every blocking claim is VERIFIED (live-run command with raw output) or LIKELY with explicit user acknowledgement. GUESSING or ISSUE halts the ship.
Publish operations (`git push`, `git tag v*`, `npm publish`, KDP submit, campaign send, `vercel --prod`) require the user's explicit push-word — "push it" / "ship it" / "send it" / "go live" — no substitute authorization accepted. See `feedback_push_back_on_irreversible.md`.
Release-mechanics offload (software domain)
For software releases, dispatch `ijfw-release-eng` so version-bump / tag / push / publish-watch / smok
Read more
name: ijfw-ship description: "Use when the user says 'ship it', 'ship this', 'release', 'publish', 'launch', 'deploy', 'go live', 'wrap this up', 'time to ship', or invokes '/ijfw-ship'. Domain-aware release — software (test → tag → push → publish), book (final edit → format → KDP / agent / Substack), campaign (review → schedule → launch → first-24h monitor), landing page (deploy → analytics → mobile + a11y re-check), design system (publish → announce → adoption). Reads the issue ledger, runs the SHIP gate, requires the user's push-word for irreversible ops." since: '1.5.0' allowed-tools: Read, Write, Edit, Bash, Grep, Glob, AskUserQuestion, Agent
IJFW Ship — domain-aware release closer
You are the orchestrator-facing trigger that closes a slice and pushes it into the world. Same closing arc across domains: pre-flight → execute the release → confirm in the wild → update memory. The verb "ship" differs by domain; the discipline doesn't.
This skill is the body for the `/ijfw-ship` slash command. Both paths land here.
When to fire
1. User explicitly asks: "ship it", "release", "publish", "launch", "deploy", "go live", "wrap this up", "time to ship". 2. `/ijfw-ship` slash command is invoked. 3. ijfw-workflow Deep path enters the Ship gate after Verify.
Domain detection
Detect from project layout + brief language:
| Domain | Signals | Ship verb | |----------------|--------------------------------------------------------|-----------------| | software | `package.json` / `pyproject.toml` / `Cargo.toml` | tag + publish | | book / chapter | `manuscript/`, `chapters/`, agent / KDP / Substack ref | format + submit | | campaign | `campaign/`, `calendar.md`, channel language | schedule + send | | landing page | `next.config.*`, `astro.config.*`, deploy host configs | deploy + verify | | design system | `tokens/`, `components/`, registry / npm package | publish + announce |
If the domain is ambiguous, ask one AskUserQuestion: `What are we shipping?` with the five options above. Never guess.
Pre-ship checklist (domain-aware)
Software
- CHANGELOG.md updated with what's in this release.
- Test suite green (`npm test` / `pytest` / `cargo test`) — fresh run, this
session, raw output.
- Version bumped in `package.json` / equivalent.
- Tag drafted (`v<MAJOR>.<MINOR>.<PATCH>`); push deferred until push-word.
- Rollback plan documented (`npm deprecate` / `cargo yank` / revert + retag).
Book / chapter
- Manuscript final edit pass done.
- Format pass complete (epub / pdf / docx, depending on channel).
- Front-matter (title page, copyright, dedication, ISBN if owned) present.
- Cover + back-cover copy finalised.
- Target channel decided: Amazon KDP, agent submission, Substack, direct.
- Rollback plan = unpublish window noted (KDP allows ~72h unpublish; agent
withdrawal letter ready if submitted).
Campaign / launch
- All assets reviewed against brand voice + legal compliance.
- Send schedule locked (calendar + timezone).
- Tracking confirmed (UTMs in place; analytics pixel firing; conversion
goal mapped).
- First-24h monitoring plan + owner identified.
- Rollback plan = kill switch (pause sends; revert nav links; statement
ready).
Landing page
- Production deploy command identified (`vercel --prod`, `netlify deploy
--prod`, etc).
- Analytics live and verified (real pageview registered in dashboard).
- Mobile re-check: iPhone + Android viewport screenshot.
- Accessibility re-check: keyboard navigation, screen-reader labels, color
contrast.
- Rollback plan = previous deployment URL pinned for instant promote-back.
Design system
- Package version bumped + CHANGELOG entry written.
- Visual regression suite green (Chromatic / Loki / Percy).
- Migration guide drafted for consumers if breaking change.
- Announcement copy drafted (Slack / Discord / mailing list).
- Rollback plan = `npm deprecate <pkg>@<version>` script ready.
Donahoe principles enforced at ship
- **P15:** Updates invisible to users — no action required from them.
- **P20:** Works on all target platforms.
- **P21:** Pricing respects the user (no surprise costs introduced).
Ledger gate (BLOCKS ship)
Before the SHIP gate proper, read `.ijfw/state/execute-issues.json`:
read_issues() {
local f=".ijfw/state/execute-issues.json"
[ -f "$f" ] || { printf '{"issues":[]}'; return; }
cat "$f"
}If any entry has `status: unresolved` (any `kind`), ship is refused:
ISSUE: ship-blocked-by-unresolved-issues count: <N> ids: [iss_001, iss_002] action: resolve all issues before shipping
Missing file = zero issues (day-1 fresh-install protection).
SHIP gate — brief reconciliation
Before any push / send / publish, re-read `.ijfw/memory/brief.md` and confirm what was built matches what was asked. If gaps remain, ship is held until they close.
Cross-audit gate (Trident, optional but recommended)
Before irreversible release ops, recommend invoking `ijfw-cross-audit` as a second-opinion gate on the release diff / final draft / campaign brief. Consensus findings BLOCK ship; contested findings surface to the user for an explicit go / no-go.
Confidence declaration (required before push / publish)
Every ship-readiness claim is tagged VERIFIED / LIKELY / GUESSING / ISSUE. Ship proceeds only when every blocking claim is VERIFIED (live-run command with raw output) or LIKELY with explicit user acknowledgement. GUESSING or ISSUE halts the ship.
Publish operations (`git push`, `git tag v*`, `npm publish`, KDP submit, campaign send, `vercel --prod`) require the user's explicit push-word — "push it" / "ship it" / "send it" / "go live" — no substitute authorization accepted. See `feedback_push_back_on_irreversible.md`.
Release-mechanics offload (software domain)
For software releases, dispatch `ijfw-release-eng` so version-bump / tag / push / publish-watch / smok
IJFW — It Just F*cking Works. Ferrox Labs' local-first infrastructure for AI coding agents: shared memory, smart routing, multi-AI cross-audits, disciplined workflow.
Repo: FerroxLabs/ijfw
Other skills on ijfw.
- /ijfw-agents-md
Maintain canonical AGENTS.md (open spec). Trigger: 'agents.md', 'update AGENTS.md', or auto-fired by ijfw-team after agent generation.
Open skill - /ijfw-auto-memorize
Session-end auto-extraction of lessons, errors, fixes, and user feedback into structured memory. Fires at session end. Requires consent on first run.
Open skill - /ijfw-commit
Terse conventional commits. Trigger: commit, git commit, /ijfw-commit
Open skill - /ijfw-complete-milestone
Use when a milestone is shipping and you need to archive its artifacts, generate a summary, and seed the next milestone. Trigger: 'milestone complete', 'ship milestone', 'wrap milestone', 'complete milestone <id>', /ijfw-complete-milestone.
Open skill - /ijfw-compress
Compress memory/context files into terse form. Trigger: /compress, compress file
Open skill - /ijfw-compute
Use when the user says: 'compute', 'crunch this', 'analyze logs', 'aggregate the data', 'run a script', 'dedupe', 'count by', 'top N', or any data-shaping ask. Replaces dumping raw data into context with sandboxed script execution.
Open skill

