
Agent Ci
Run the same GitHub Actions CI jobs locally before push so failures are caught on your machine, not on remote runners.
Overview
Agent CI is an agent skill for the Ship phase that runs GitHub Actions CI locally with pause-on-retry so you validate changes before pushing.
Install
npx skills add https://github.com/redwoodjs/agent-ci --skill agent-ciWhat is this skill?
- Runs full CI via `npx @redwoodjs/agent-ci run` with quiet, all jobs, and pause-on-failure
- Retry failed steps with `retry --name <runner-name>` or `--from-step <N>` without re-pushing
- NDJSON event stream with `--json` for job/step lifecycle monitoring
- Exit code 77 when paused under pipes so agents can detach while the container stays retryable
- Explicit rule: do not push to trigger remote CI when agent-ci can run locally
- NDJSON schemaVersion 1 event stream (run.start, job.start/finish, step.start/finish, run.paused)
- Foreground exit code 77 when paused under non-TTY pipes
Adoption & trust: 1.1k installs on skills.sh; 700 GitHub stars; 2/3 security scanners passed (skills.sh audits).
What problem does it solve?
You keep pushing to GitHub only to discover CI failures on remote runners that you could have caught locally.
Who is it for?
Developers on repos with GitHub Actions who want Docker-backed local parity and agent-friendly JSON events.
Skip if: Projects without GitHub Actions workflows, or environments where Docker and Node 18+ cannot run.
When should I use this skill?
Testing, running checks, or validating code changes before pushing.
What do I get? / Deliverables
All CI jobs pass on a local Agent CI run so you can push once with confidence, using retry commands after each fix.
- Locally passed CI run
- Retryable paused runner state until all jobs green
Recommended Skills
Journey fit
How it compares
Use for Actions-parity local CI instead of ad-hoc `npm test` that skips workflow-defined jobs.
Common Questions / FAQ
Who is agent-ci for?
Solo and indie builders on GitHub Actions repos who use AI coding agents and want local CI with structured retry and optional NDJSON telemetry.
When should I use agent-ci?
In ship when testing or validating code changes before push—after build edits and before review or launch—especially when SKILL.md says not to trigger remote CI unnecessarily.
Is agent-ci safe to install?
It runs shell and Docker workloads like CI; review the Security Audits panel on this page and treat it like executing your own workflow scripts locally.
SKILL.md
READMESKILL.md - Agent Ci
# Agent CI Run the full CI pipeline locally before pushing. CI was green before you started — any failure is caused by your changes. ## Run ```bash 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`. ## Retry When a step fails, the run pauses automatically. Fix the issue, then retry: ```bash npx @redwoodjs/agent-ci retry --name <runner-name> ``` To re-run from an earlier step: ```bash 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. ## Machine-readable output (`--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.