shipmates
Health Warn
- License Γ’β¬β License: MIT
- Description Γ’β¬β Repository has a description
- Active repo Γ’β¬β Last push 0 days ago
- Low visibility Γ’β¬β Only 5 GitHub stars
Code Pass
- Code scan Γ’β¬β Scanned 12 files during light audit, no dangerous patterns found
Permissions Pass
- Permissions Γ’β¬β No dangerous permissions requested
No AI report is available for this listing yet.
π’ A crew of IDE agnostic sub-agents, slash-command workflows and tools that drive a GitHub issue from open to a reviewed, CI-green pull request β autonomously. Flagship: /ship-issue.
π’ Shipmates
Custom subagents & command workflows β for Claude Code, opencode, Antigravity CLI, Codex, Cursor, GitHub Copilot, Windsurf, and Zed.
A crew of specialist AI agents that drives a GitHub issue from open to a reviewed, CI-green pull request β autonomously.
Illustrative β the actual stages /ship-issue runs, in order.
Stop being your AI's for-loop. Give it a crew. β
You know the drill: prompt, read the reply, prompt again, sigh, prompt again. You are the
control loop β the planner, the reviewer, the nagger. Shipmates hands that job to a crew of
specialist subagents and a workflow that actually finishes things.
One command β /ship-issue β takes a GitHub issue from "open" to a reviewed, CI-green pull
request, on its own: it plans the work, builds it in an isolated worktree, waits for CI to go
green, convenes an adversarial review board, loops on the fixes, and hands you a PR to merge.
You stay the captain. The shipmates do the twenty steps in between. π«‘
β Get the crew aboard β Β· one line, no clone β then just /ship-issue 42.
π shipmates website β Β· the crew, the commands, and how /ship-issue works.
π§ Meet the crew
Twelve domain-neutral specialists. They'll work on anything β a game engine, a web app, a CLI β
because the standard they hold your work to comes from your repo's README / CLAUDE.md, not
from anything hardcoded into the role.
| Shipmate | Rank & duty |
|---|---|
ποΈ architect |
Structure & schema β coupling, boundaries, migration safety, "does this actually fit?" |
π§ senior-engineer |
Builds to spec, fixes red CI, clears review defects |
π§ͺ sdet |
Runs the real tests/build and reports pass/fail with a proper defect list |
π‘οΈ security-engineer |
Threat-models the change β authz, injection, secrets, crypto, vulnerable deps |
π¨ site-reliability-engineer |
Reliability & failure modes, rollback/deploy safety β and bug root-cause |
β‘ performance-engineer |
Profiles, benchmarks, and proves the win β measure β optimise β measure |
π¦ devops-engineer |
Build & delivery β reproducibility, pinning, environment parity, does the gate gate? |
π product-manager |
Accepts or rejects against the acceptance criteria and your quality bar |
ποΈ ux-ui-designer |
Specs & reviews on-screen UI β tokens, responsive layout, focus, a11y |
π¨ art-director |
Directs & reviews rendered visuals β judges the picture, not the code that drew it |
π technical-writer |
Writes docs from the real code; proves them with a fresh-reader test |
π data-scientist |
Data/model work β metric choice, leakage & validation, reproducibility (domain-gated) |
π The commands
| Command | What it does |
|---|---|
/ship-issue <n>... |
Drives GitHub issue #n β or several at once, bundled into one PR β from open β reviewed, CI-green PR (β merged, opt-in), with the whole crew |
/fix-bug <n> |
Fixes a bug the honest way β reproduce as a failing test first, root-cause, minimal fix, redβgreen proof |
/plan-epics <brief> |
Turns a brief (or several) into GitHub epics + linked, labelled user stories, authored in parallel |
/harden <surface> |
Threat-models a surface and ranks every finding β read-only by default; remediation on a branch, opt-in |
/spike <question> |
De-risks a decision β prototypes the options in parallel, judges them, records the pick as an ADR |
/migrate <fromβto> |
Sweeps a mechanical migration across the codebase β every call site, verified, no remnants left |
/document <target> |
Writes docs from the real code, gated on a fresh reader actually completing the steps |
/release [version] |
Cuts a release β changelog from what merged, CI-green tag, SRE rollback pre-flight, opt-in publish |
/polish <target> |
Iterates a visual/UI/output artifact to a specialist's sign-off β render β critique β fix loop |
/pr-review <pr> |
Runs the board against a PR the crew didn't author β read-only, it reports and never repairs |
/onboard [path] |
Reads an unfamiliar repo and writes the agent-facing context file the whole crew runs on |
/refactor <target> |
Reshapes code without changing behaviour β characterization tests pinned first, then proved |
Where a command writes. Anything that changes your repo does it on its own branch, in its own
worktree, and hands you a pull request β your checkout is left as you left it. /release is the one
exception: the release commit has to land on the branch being tagged, so it commits, pushes and tags
straight in your checkout instead of an unmerged side branch. /pr-review and /harden's defaultreport mode write nothing at all. Writing straight into the working tree is opt-in
(MODE=edit-in-place); so are merging (MERGE_MODE=auto) and publishing (PUBLISH_MODE=auto).
There's deliberately no code-reviewer. Review is split by discipline instead of pooled into one
generalist: architect takes structure, sdet takes verification, product-manager takes acceptance,security-engineer takes threat modelling, devops-engineer takes delivery. Line-level craft β naming,
dead code, error handling β is senior-engineer's as it builds and architect's on review. If you're
arriving from another agent pack that ships a code-reviewer, reach for one of those instead: an
unresolved role name silently falls back to a generic agent rather than erroring.
More crew and more commands are on the way. β΅
π§° The tools
Beyond the crew and the commands there's a third kind of resource: tools. A command is
something you invoke with a slash. A tool is something the crew reach for on their own,
implicitly, when the intent of your prompt calls for it β never typed, never a slash command.
| Tool | What it does |
|---|---|
termgif |
Renders a polished animated terminal demo GIF of a workflow run from a small JSON spec |
social-card |
Renders a 1280Γ640 social / Open Graph share card from a small JSON spec |
pixelart |
Renders pixel-art icons β static PNG or animated GIF β the way the shipmates logo is made |
svgflow |
Renders a box-and-arrow flow, pipeline, or state diagram as a committed SVG |
badge |
Renders a shields-style status badge as an offline, committed SVG |
sparkline |
Renders a short number series as a tiny inline SVG trend chart |
scrub |
Redacts secrets and PII from a log or paste before it's shared |
fixtures |
Generates deterministic fake test data from a small JSON schema |
Tools are opt-in β a plain install ships only the crew and the commands. Add them with--with-tools (below), or run install in a terminal and pick from the list. Each tool maps to its
harness's own native tool surface: a genuine code tool on opencode (.opencode/tools/<name>.ts), and
an agent-invoked Agent Skill everywhere else β on Claude Code pinned agent-only withuser-invocable: false, so it never appears as a slash command. Defined once in toolbox/<name>/,
exactly like the crew and commands.
More tools are on the way. β΅
β Come aboard (install)
shipmates is a single Rust binary. Grab it any way you like:
macOS / Linux (Homebrew):
brew install saman-mb/tap/shipmates
Anywhere (Cargo):
cargo install shipmates
Binary Installer (cargo-dist):
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/saman-mb/shipmates/releases/download/vX.Y.Z/shipmates-installer.sh | sh
Then install the crew for a harness. By default it drops into the current directory; pass --dir
to target a specific project:
shipmates install --harness claude-code # the proven target
shipmates install --harness opencode # format-verified, not runtime-verified
shipmates install --harness codex
Tools are off by default. Run install in a terminal and it asks which you'd like; name them
up front with --with-tools to skip the prompt (or none to opt out non-interactively):
shipmates install --harness claude-code # prompts: pick tools, or Enter for none
shipmates install --harness claude-code --with-tools termgif
shipmates install --harness opencode --with-tools all
Which harnesses can you install? shipmates targets lists them β today all of:
claude-code .claude/ agents + skills
opencode .opencode/ agents + commands
antigravity .agents/ agents + skills (agy β the successor to the retired Gemini CLI)
codex .codex/ + .agents/ crew (TOML) at .codex/agents, skills at .agents/skills
cursor .agents/ skills only (shared open Agent Skills tree)
github-copilot .github/ + .agents/ crew (.agent.md) at .github/agents, skills at .agents/skills
windsurf .windsurf/ skills only (canonical .windsurf/skills)
zed .agents/ skills only (shared open Agent Skills tree)
Every harness compiles the same canonical crew and commands. Five have a native subagent directory
and receive the twelve specialists as agents; the other three ship the twelve commands as skills only.
Five harnesses (codex, zed, antigravity, cursor, github-copilot) read the open Agent Skills
location .agents/skills/, so their skills are rendered once, in a neutral dialect, and shared there β
one source of truth, byte-identical, so a multi-harness repo gets a single copy instead of five colliding
ones. Their crew still land in each harness's own native format. windsurf keeps its canonical.windsurf/skills/ (its docs make .agents/skills/ only a secondary scan) and claude-code its own.claude/skills/.
One caveat worth knowing before you pick Codex: it documents no per-agent tool allowlist, so its
crew inherit whatever the session can do rather than the least-privilege set every other target
enforces. Each harness records its evidence, and the date it was checked, intools/harness_matrix.json. Installing never touches your working tree β anything that
changes a repo does so on a branch β and shipmates uninstall is not (yet) implemented; delete the
tree the harness installed instead.
Why opencode gets commands/ and not skills/. opencode has both, and they are not the same
thing: its skills are model-invoked β it loads one on demand through a native skill tool β anddisable-model-invocation is not a frontmatter key a SKILL.md recognises there, so declaring it
would be silently dropped. The twelve create worktrees, push branches and open pull requests, so
shipping them as skills would let the model start one unprompted. commands/ is /-invoked only,
which keeps user-invoked-only structural rather than dependent on a key the target ignores.
Least privilege still holds, by inversion. opencode's defaults are permissive β effectively"*": "allow" β so listing the tools a role needs would grant nothing. Each generated agent emits
a "*": deny catch-all first and its specific allows after; opencode resolves permissions
last-match-wins, so the ordering is the mechanism. The result is marginally stronger than Claude's
allowlist: a tool a wildcard denies is hidden from the model rather than refused at call time.
β οΈ Only Claude Code is runtime-verified. Every other target's payload was checked against the
harness's own parsing source and first-party docs, not by installing and running it. Whether agents
resolve, whether argument passing behaves, and whether/ship-issuecompletes end to end are open
on those targets β for opencode, tracked in
#31 and
#32.
π First time a
skills/oragents/dir got created? Restart your harness so it spots them.
The exporter foundation
Portability work starts from the canonical commands/ and crew/ sources: full persona/workflow
bodies, semantic crew capabilities, and harness-neutral prose that names abstract locations
(agent-files/*.md, Harness-Session) and {{arguments}} instead of any harness's dialect. A
per-harness render layer rewrites that prose into each harness's real dialect β where its agents
live, what its session metadata is called, which project-instructions file it reads (CLAUDE.md,AGENTS.md), and how a role is spawned β and an adapter emits the harness's frontmatter shape.
The published site is generated from the rendered Claude Code payload, never the neutral source.
Build, check, or regenerate the reference digests:
cargo run -- build --target claude-code --out /tmp/shipmates-build
cargo run -- check --target claude-code
cargo run -- build --target claude-code --update # regenerate reference digests
tools/capability_registry.json is the semantic-to-harness tool map β including the scopes map
each adapter uses to honour role-level refinements. art-director declares web-scopes: search
once, and gets WebSearch without WebFetch on Claude Code and websearch: allow withoutwebfetch on opencode. tools/manifest.json declares every implemented target; an unknown target
is refused on that declared status, not on a hardcoded name in the exporter.
π Weigh anchor (use it)
/ship-issue 42
Then go get a coffee β. It plans, spins up a worktree, builds, waits for CI to go green, convenes
the board, loops on fixes, and hands you a reviewed PR. By default it stops at the PR for you to
merge β set MERGE_MODE=auto if you want it fully hands-off in a repo where that's fair game.
π οΈ How the voyage works
/ship-issue isn't a clever prompt β it's a state machine with gates:
- Plan πΊοΈ β a planner reads the issue + your docs β build plan, acceptance criteria, validation
plan, and flags for which specialists this story needs. - Design specs βοΈ (only if needed) β for UI / visual / architecture-heavy stories, the right
specialist writes a spec the builders must build to. - Isolate π¦ β all work in a throwaway
git worktree; your base branch never breaks. - Build π¨ β parallel
senior-engineerbuilders with non-overlapping file ownership. - Self-check β CI gate π¦ β the SDET runs the tests; then CI must go green on the pushed PR
before anything moves on. Red? It reads the logs and fixes β bounded to a few rounds. - Acceptance board βοΈ β
product-manager+sdet(+ gatedux-ui-designer/art-director/architect) review the pushed PR head, independently and adversarially. - Remediate π β any rejection loops back to a fixer, then re-reviews. Bounded, then escalates.
- Deliver π β files the non-blocking nits as follow-ups, names a
/hardenfollow-up if the
change touched a security-relevant surface (this board doesn't threat-model), and opens (or,
opt-in, merges) the PR.
The tricks that make the loop hold together:
- π― An explicit state machine, not a wish. Stages converge; "go fix it" drifts.
- π¦ An isolated sandbox. Autonomy is only safe when the blast radius is zero.
- π¦ Objective gates over vibes. Green CI beats "looks done to me."
- π₯ Reviewers can't grade their own homework. A fresh agent reviews the PR β never the builder.
- β±οΈ Bounded loops. Retry N, then tap the human. A loop with no cap just spins.
- ποΈ Capture, don't block. Nits become tickets, not roadblocks.
π§ Examples β putting the crew to work
Ship a single ticket, hands-off to a reviewed PR:
/ship-issue 142
The planner reads issue #142 and your README; a senior-engineer builds it in a worktree; CI has to
go green; then a product-manager and sdet review the pushed PR β a ux-ui-designer or art-director
joins automatically if the story is UI or art. Fixes loop until they pass, and you get a reviewed PR
to merge.
Ship it fully autonomously (merge included), where that's acceptable:
MERGE_MODE=auto /ship-issue 142 # or just say "auto-merge" in the prompt
Turn a one-line brief into a tracked backlog:
/plan-epics "User accounts: signup, login, password reset, and a profile page"
A product-manager scopes it into an epic, drafts INVEST user stories with acceptance criteria, and
files them as linked, labelled GitHub issues β ready to hand to /ship-issue one at a time.
Break a big vision into several epics at once (fan-out):
/plan-epics ./docs/product-brief.md
When the brief spans multiple epics, one product-manager subagent per epic drafts its stories in
parallel, then everything is created and cross-linked.
Preview a backlog without creating anything:
/plan-epics "checkout + payments + order history" β dry run
Polish a UI screen until it's actually right:
/polish the settings screen
The ux-ui-designer reviews the rendered screen (not the code), lists concrete fixes, asenior-engineer applies them, it re-renders, and the loop repeats until the designer signs off β or
hands you the outstanding notes after a few rounds. It never writes to your checkout: it decides
where the polish should land, not where you happen to be standing. Already inside a worktree β the
one /ship-issue left behind, say β it stays put and reuses it, refusing if the tree is dirty. On a
feature branch whose PR is already open, it works in a detached worktree and pushes back onto that
branch, so the polish joins the PR you already have instead of opening a second one. Otherwise it
cuts a polish/<slug> branch from HEAD and opens a PR of its own.
Polish rendered art the same way:
/polish the title-screen background β reviewer: art-director
Same loop, but the art-director judges the actual render β palette, composition, contrast β round after
round until it meets the bar.
Fix a bug β proven, not just patched:
/fix-bug 213
A failing regression test is written first to reproduce #213; a senior-engineer root-causes and fixes
it; the test flips redβgreen while the suite stays green; a fresh reviewer confirms it's the root cause,
not the symptom. You get a PR with the proof attached.
Threat-model and harden a surface:
/harden the auth + session flow
The security-engineer walks it with STRIDE / OWASP and ranks findings by severity with the exploit path.
That pass is read-only β it reports, it doesn't touch your tree. Ask for the fixes (MODE=pr)
and a senior-engineer remediates the blockers on a branch, re-reviewing until nothing Critical/High is
left open, then hands you a CI-gated PR.
De-risk a decision before committing to it:
/spike "job queue: Redis vs Postgres vs SQS"
Engineers prototype each option in parallel as throwaways, an architect judges them against your real
constraints (weighing reversibility), and you get a recommendation recorded as an ADR β not a hunch.
Sweep a migration across the whole codebase:
/migrate "moment.js β date-fns"
Every call site is inventoried, transformed in isolation, verified, and the run only closes when a re-grep
for the old pattern comes back empty and the suite is green. Nothing left half-migrated.
Write docs that actually work:
/document the getting-started guide
The technical-writer drafts from the real code, then a fresh agent follows the steps against the repo
like a newcomer β the docs ship only once that reader reaches the result. No drift, no dead ends.
Cut a release safely:
/release minor
The changelog is assembled from what actually merged, the version is bumped, CI must be green on the exact
tagged commit, and the site-reliability-engineer checks rollback + migration safety before it's tagged.
Chain them β scope the work, ship a story, polish its UI:
/plan-epics "settings redesign" # β creates the epic + stories
/ship-issue 148 # β builds & reviews one story to a PR
/polish the settings screen # β iterates the visuals to sign-off
Run that third step from the worktree /ship-issue left behind (../<repo>--issue-148), so the
polish lands on the same branch. Started from your base branch, /polish would begin from a baseline
that doesn't contain the new screen yet.
ποΈ Scopes & precedence
In Claude Code, both ~/.claude/ (global, every project) and <repo>/.claude/ (that project
only) are loaded. The two halves of the crew then resolve a name clash in opposite directions:
- Subagents β the project copy wins.
<repo>/.claude/agents/architect.mdoverrides~/.claude/agents/architect.md, so any repo can specialise a crew member without touching the
shared copy. - Skills β the personal copy wins.
~/.claude/skills/ship-issue/SKILL.mdoverrides<repo>/.claude/skills/ship-issue/SKILL.md. If you have installed globally and into a project
(via--dir), the global command is the one that runs β uninstall the one you don't want
rather than editing the loser.
A skill also beats a legacy .claude/commands/<name>.md of the same name.
Other harnesses resolve clashes on their own rules, so read this as a Claude Code fact, not a
universal one.
π What you'll need
- A supported harness (Claude Code is the proven one; the others build and are format-verified)
git+ an authenticatedghCLI, for the GitHub flow- A repo with CI (strongly recommended β the green-CI gate is what makes autonomy trustworthy)
π‘ Why it's built this way
- Agents are generic; your project supplies the bar. No role name-drops a stack or product β it
enforces whatever your README/CLAUDE.md says. That's what makes the crew reusable everywhere. - A loop is only as smart as its ground-truth signal. Tests and CI are solid gates; taste isn't β
so the visual specialists flat-out flag "needs a human visual pass" when they can't render.
π On the horizon
Where each harness stands. Every target's payload is compiled and digest-checked in CI; the
question is whether it's been run.
- Runtime-verified β Claude Code: the full crew and all 12 commands, and the only harness
Shipmates has actually been run on. - Builds, not runtime-verified β opencode, Antigravity CLI, Codex CLI, Cursor, GitHub Copilot,
Windsurf and Zed all build fromshipmates install --harness <name>, and each payload's format was
verified against that harness's parsing source and first-party docs. opencode and Antigravity get the full
crew + all 12 commands; the other five have no native subagent directory, so they ship the 12 skills
only. A live run has not been done on any of them; opencode's open questions are tracked in
#31 and
#32. The Gemini CLI is retired β the Antigravity
CLI (agy) is its successor and reads.agents/, so that is the target Shipmates builds for.
Why that's credible: the crew's system prompts name no harness, and the twelve commands ship in the
Agent Skills open-standard shape rather than a Claude-specific one β so most
of a port is mapping frontmatter fields and rendering dialect tokens, not rewriting the crew. The
opencode adapter is the first test of that claim: it reused every persona and workflow body unchanged,
and the work that remained was path mapping and translating Claude's tool allowlist into opencode's
permission map.
The crew also keeps signing on (a data-engineer, an ml-engineer, a mobile-engineerβ¦) and new
commands keep shipping. Want a role or a workflow aboard? Open an issue β ideas and PRs very welcome.
β FAQ
What is Shipmates?
A ready-made crew of subagents and command workflows. Instead of you playing
plannerβbuilderβreviewer in a loop, a board of specialist AI agents does it β the flagship/ship-issue takes a GitHub issue all the way to a reviewed, CI-green pull request. It ships for
eight harnesses β Claude Code, opencode, Antigravity CLI, Codex, Cursor, GitHub Copilot, Windsurf, and Zed;
see on the horizon for where each harness stands.
What are Claude Code subagents and skills?
Subagents are focused AI agents defined in .claude/agents/*.md; skills are reusable workflows defined
in .claude/skills/<name>/SKILL.md and invoked as commands, like /ship-issue. Shipmates ships 12 agents
and 12 commands you drop into a repo's .claude/ with shipmates install (or .opencode/ for opencode,.codex/ for codex, and so on). See install.
Is this an official Anthropic project?
No. Shipmates is an independent, MIT-licensed community project that builds on Claude Code's public
subagent and skill features. "Claude" and "Claude Code" are trademarks of Anthropic.
How is it different from just prompting Claude Code?
A raw prompt drifts; Shipmates is a state machine with gates β an isolated worktree, a mandatory
green-CI gate, and a fresh reviewer that never grades its own work β so an autonomous run converges
instead of wandering. See how the voyage works.
Which languages and frameworks does it work with?
Any. The agents are domain-neutral β they enforce the standard in your repo's README / CLAUDE.md,
so the same crew works on a game engine, a web app, or a CLI.
Do I have to configure each agent?
No. Install once, then /ship-issue 42. The crew picks up your project's quality bar automatically;
a project-level .claude/agents/ definition overrides the global one when you want to specialise a
crew member. Skills go the other way β see scopes & precedence.
π€ Contributing
See CONTRIBUTING.md. The one hard rule: keep agent roles domain-neutral so
they sail on anyone's project.
π License
MIT β take it, fork it, crew up. π’
Reviews (0)
Sign in to leave a review.
Leave a reviewNo results found