Skills are agent-neutral behaviors rendered into each agent’s native instruction format. This page covers the per-agent specifics and walks one real change through the loops.
Per-agent targets
| Agent | Install command | What the agent reads |
|---|---|---|
| Claude Code | shipmoor skills install claude | A managed block in CLAUDE.md |
| Codex | shipmoor skills install codex | A managed block in AGENTS.md |
| Cursor | shipmoor skills install cursor | .cursor/rules/shipmoor.md |
| Aider | shipmoor skills install aider | .aider.conf.yml (+ .aider.shipmoor.yml include) |
After install, the skills are just there — the agent picks them up from its instruction file on the next session. In Claude Code, shipmoor-review also responds to slash-style triggers like /shipmoor, /shipmoor-changed, /shipmoor-gate, and /shipmoor-explain.
The agent needs the shipmoor binary on PATH (skills shell out to it; they contain no detection logic of their own). If your agent runs in a sandbox or CI, install the CLI there too: curl -fsSL https://dl.shipmoor.dev/install.sh | bash.
A worked loop
Here’s the shape of a real session (this mirrors our own end-to-end testing of shipmoor 0.4.0 with Claude Code on a Flask checkout):
1. The task. You ask the agent: “Add a helper that attaches a unique X-Request-ID header to a Flask response.” With shipmoor-agent-guard loaded, the agent checks the manifest before importing anything and avoids placeholder logic from the start.
2. The agent implements, then shipmoor-review kicks in before it declares done:
shipmoor scan --changed --fail-on high
# ✓ gate pass · 0 blockers exit 0
3. The claim check. shipmoor-intent-contract records the task in .shipmoor/intent.yaml and runs the change-scoped claim check:
shipmoor scan --changed --intent "Add a helper that attaches a unique X-Request-ID header to a Flask response" \
--json --output .shipmoor/report.json
If the diff matches the task, the verdict says so; if the agent drifted — say the helper quietly logs request bodies instead of setting the header — the gap is named before any human reviews it. See Reading the verdict.
4. If something was found, shipmoor-fix drives the bounded repair loop:
shipmoor explain <finding-id> --from .shipmoor/report.json
# patch → re-scan → report before/after delta
5. Ready to ship. shipmoor-pr-preflight runs the merge-base diff with the gate and produces a PR note:
shipmoor scan --diff main...HEAD --fail-on high --markdown-summary pr-note.md
Agent-specific notes
- Claude Code — the richest target: the skill block, the slash triggers, and (with the Agent Harness (preview)) lifecycle hooks that scan after every edit. Skills and harness write separate managed regions and never conflict.
- Codex — same bundle via
AGENTS.md; the harness adds a wrapped runtime (shipmoor-harness codex -- …) (preview). - Cursor — reads
.cursor/rules/shipmoor.md; pairs with the harness’s watch mode (preview) for scan-on-change. - Aider — configured through
.aider.conf.yml; the natural pairing is alint-cmdrunningshipmoor scan --changed --fail-on high, so exit code1drives Aider’s own repair loop.
Next
- The five skills — each behavior in detail.
- Installing skills — the command surface and entitlement gating.
- Agent Harness (preview) — from static behavior to a runtime loop.