with one click
agent-ci
// Run GitHub Actions CI locally with Agent CI to validate changes before pushing. Use when testing, running checks, or validating code changes.
// Run GitHub Actions CI locally with Agent CI to validate changes before pushing. Use when testing, running checks, or validating code changes.
Run GitHub Actions workflows locally with pause-on-failure for AI-agent-driven CI iteration
Run local CI via the in-tree dev build of agent-ci (`pnpm agent-ci-dev`) to verify changes to this repo before completing work. Runs `pnpm agent-ci-dev run --all` in the background, watches the log for step failures, and retries failed runners after fixes. Use before reporting work as complete, or whenever the user asks to validate, run CI, or check that changes pass. Distinct from the published `agent-ci` skill, which targets downstream users via `npx @redwoodjs/agent-ci`.
| name | agent-ci |
| description | Run GitHub Actions CI locally with Agent CI to validate changes before pushing. Use when testing, running checks, or validating code changes. |
| license | MIT |
| compatibility | Requires Node.js 18+ and Docker |
| metadata | {"author":"redwoodjs","version":"1.0.0"} |
Run the full CI pipeline locally before pushing. CI was green before you started — any failure is caused by your changes.
npx @redwoodjs/agent-ci run --quiet --all --pause-on-failure
Pipes are safe — pause-on-failure works through | tee log, > log.txt, etc. When stdout isn't a TTY the launcher detaches the run and the foreground process exits 77 the moment a step pauses, freeing the pipe while the container stays paused for retry.
When a step fails, the run pauses automatically. Fix the issue, then retry:
npx @redwoodjs/agent-ci retry --name <runner-name>
To re-run from an earlier step:
npx @redwoodjs/agent-ci retry --name <runner-name> --from-step <N>
Repeat until all jobs pass. Do not push to trigger remote CI when agent-ci can run it locally.
--json)For programmatic monitoring, add --json (or set AGENT_CI_JSON=1) to emit an NDJSON event stream on stdout — one JSON object per line. Events:
run.start (with schemaVersion: 1, runId)job.start, job.finish (status: passed|failed)step.start, step.finish (status: passed|failed|skipped)run.paused (carries runner + retry_cmd)run.finish (status: passed|failed)diagnostic--json is decoupled from --quiet, and the diff renderer is auto-suppressed under --json so ANSI sequences don't collide with the stream. Combined with the exit-77 pause signal above, this gives agents a robust contract: parse run.paused events, react, and call retry — no plaintext grep required.