Engines — interchangeable terminal workers
One contract, three engines. The orchestrator (you, Claude) writes a bounded task prompt, dispatches it to an engine, then independently verifies, lands, and pushes the result. Engines never self-certify.
Invocation
| Engine | Command | Notes |
|---|---|---|
| Codex | node "${CLAUDE_PLUGIN_ROOT}/scripts/codex-companion.mjs" task --background [--write] "<prompt>" (via codex plugin / codex:codex-rescue agent) |
Poll with status, fetch with result <job-id> |
| Cursor | cursor-agent --trust -p "<prompt>" (run from the target repo) |
Headless print mode; --trust required for non-interactive |
| Devin | devin -p --permission-mode dangerous -- "<prompt>" (run from the target repo) |
Default permission mode is read-only for writes — build work NEEDS --permission-mode dangerous, so only run it in an isolated worktree. Also devin cloud for sessions that outlive this machine |
Picking an engine
- Codex — deep root-cause work, long autonomous builds, second-opinion diagnosis. Slowest; runs sandboxed.
- Cursor — fast bounded edits and refactors in a single repo.
- Devin — multi-step feature work; use
cloudwhen the run should survive laptop sleep. - Parallel builds across repos: one engine job per repo, never two engines writing the same checkout.
Prompt contract (every dispatch)
- Name the absolute repo path and tell the engine to
cdthere. - Bound the slice: one task, explicit exit criteria, the verify command to run.
- Git rules:
git statusfirst; stage only own files; never revert others' changes; never destructive git; work on a branchmember/<name>-<slug>or a worktree. - Require a final report: files changed, verify command + result, branch name.
Landing (orchestrator duties — never skip)
- Codex sandbox cannot reach github.com and may get read-only repo access. Expect temp clones /
git format-patchfallbacks under/private/tmp. Apply patches in a fresh worktree, re-run the verify command yourself, then push. - Cursor and Devin run unsandboxed — still re-run the verify command yourself before pushing.
- Engine task DBs and receipts written inside a sandbox are snapshots; reconcile against the live
atris taskplane after landing. - A stalled job (no log output for 30+ min) gets cancelled and taken over; don't wait on it.