Skip to content
v1.4.4MIT

Ship a change or coordinate an approved plan through independent issues, adversarial gates, PRs, CI, Copilot review, and merge.

ship-it

Take one change from request to merged pull request autonomously: explore the repository, implement and test the change, red-team it with code review and manual testing, open a PR, address Copilot feedback, wait for green CI, and merge. The change can be a plain description, a GitHub issue, or a Jira ticket. An approved complex plan or an umbrella issue with implementation subissues runs as a coordinated set of separate issues.

The plugin is a portable Agent Plugin with one Agent Skill, so the same package works in Claude Code, Codex, Copilot CLI and opencode.

ship-it replaces ship-issue. To upgrade, uninstall ship-issue@sai and install ship-it@sai.

Installation

Claude Code (Copilot CLI is the same with copilot in place of claude):

claude plugin marketplace add smykla-skalski/sai
claude plugin install ship-it@sai

Codex:

codex plugin marketplace add smykla-skalski/sai
codex plugin add ship-it@sai

opencode, or any agent that reads Agent Skills, loads skills/ship-it/ directly:

ln -s /path/to/sai/plugins/ship-it/skills/ship-it ~/.config/opencode/skills/ship-it

Local checkout: claude --plugin-dir /path/to/sai/plugins/ship-it/

Install adversarial-review and adversarial-test too: ship-it uses them as its review and testing gates. Without them it runs the same passes itself.

Usage

In Claude Code and Copilot CLI use /ship-it, in Codex $ship-it:

/ship-it <task description>
/ship-it --issue <task description>
/ship-it https://github.com/owner/repo/issues/123
/ship-it https://your-site.atlassian.net/browse/KEY-123
InputWhat happens
Task descriptionImplements it and opens a PR. No issue is created
--issue + descriptionCreates a GitHub issue first, then ships it and closes it on merge
GitHub issue URLShips the issue; the PR body has Closes #N, so merging closes it
Jira URLReads the ticket through Atlassian MCP tools, acli, or the jira CLI, whichever is available, and asks you to paste it when none is. The Jira key goes in the PR title or body. The ticket is never transitioned, commented on, or edited unless you ask
Approved complex plan or umbrella issueReuses or creates a ☂️ umbrella and independent subissues, then dispatches up to three eligible workers. Dependencies wait for prerequisite PRs to merge. The parent only coordinates

Input it cannot recognize or read stops with a message before any code changes.

The skill pushes and merges, so Codex runs it only when invoked by name. Outside Sail, agents without a subagent tool run the review and test passes inline. In Sail mode, unavailable worker or gate subagents pause the run. A child completes only after clean adversarial review, passing manual test, green CI, Copilot review, resolved threads, merge, and issue closure.

It merges the way the repository documents (for example a squash PR comment where a bot merges), otherwise with a squash merge. After the first push it never force-pushes or rebases.

The skill owns the full lifecycle and stops only for genuine ambiguity, branch-protection requirements, persistent review/test failures, or product decisions that the request and repository cannot answer.

License

MIT