autopilot
Autopilot
Run approved pipeline work until it is complete or reaches a genuine human gate. Keep wayfinder, to-spec, to-tickets, and implement authoritative; this skill adds a fresh-process loop around them.
Start the loop
- Require a reference to a
wayfindermap, a spec, or a ticket. Run from the target Git repository. - Select the current harness as the provider:
claudein Claude Code,codexin Codex,grokin Grok. When running directly from a terminal, require the user to choose. - Resolve this skill's installed directory, then run the bundled script by absolute path while keeping the target repository as the working directory:
bash <autopilot-skill-dir>/scripts/autopilot.sh --provider <claude|codex|grok> --root <ref>
Pass --repo <path> when the target is not the current repository, --max-iterations <n> to replace the default limit of 50, and --log-file <path> to mirror the per-run log to another path.
Run the script as a background task: one iteration is a full build lifecycle and routinely outlasts a foreground shell-command timeout. Its exit is the completion signal (for a --tmux run, one background --wait). Immediately report the run ID, worker session model and effort, log path, and printed observer commands. Then report worker milestones and five-minute heartbeats as they arrive; leave routine tool events in the log. Stream them by running --follow 2>&1 | grep --line-buffered -E 'Autopilot: (iteration |selected |next |worker(:| alive)|ticket )|quiet threshold|gate|failed|invalid|interrupted|stopped' under Monitor where available (re-arm when it expires; every --follow line is <timestamp> Autopilot: <message>); otherwise read --status and the log tail each time the turn resumes, and when the run exits. On exit 2 (needs input), 3 (blocked), 4, or 5 (failure), ping the user (PushNotification where available, otherwise in the chat report) with the status and reason.
Foreground run mode prints progress to stderr and one terminal result object to stdout; completion is exit code 0 with status: complete. Observer modes keep their operational messages on stderr: --status prints one state object, --history prints an array of retained states, --tmux prints one launch object, and --follow streams the human-readable run log to stdout, and --wait blocks until the run leaves running, prints the final state object, and exits with the run's terminal code (below). To wait on a run you did not start in this shell, prefer one --wait call with run_in_background over any sleep or /loop polling of --status. With no run for the root, --status prints {"status":"none",…} and exits 1.