Peter Pistorius c2bde4d2ec Merge pull request #61 from redwoodjs/changeset-release/main
chore: version packages
2026-03-17 22:37:44 +13:00
2026-03-17 08:41:15 +00:00
2026-03-12 22:35:26 +02:00
2026-03-17 21:30:04 +13:00
2026-02-24 18:43:43 +02:00
2026-03-12 22:35:26 +02:00
2026-03-12 22:35:26 +02:00
2026-03-17 08:41:15 +00:00
2026-03-12 22:35:26 +02:00
2026-02-19 21:50:55 +02:00
2026-03-09 21:18:19 +02:00
2026-03-16 18:24:38 +13:00
2026-03-12 22:35:26 +02:00
2026-03-12 22:35:26 +02:00

Agent CI

Agent CI is local CI for agents. It pauses when a workflow fails, allowing your agent to fix the issue and resume the workflow. Think of it as "live-reload for CI."

Agent CI runs your GitHub Actions workflows locally using the same official GitHub Action runners — the exact same binaries that power GitHub-hosted CI. What Agent CI emulates is the GitHub.com API itself, so actions like actions/checkout, actions/setup-node, and actions/cache work out of the box without hitting GitHub's servers.

Why Agent CI?

Traditional CI is a fire-and-forget loop: push, wait, fail, read logs, push again. Every retry pays the full cost of a new run.

Agent CI runs on any machine that can run a container. When a step fails the run pauses — the container stays alive with all state intact. Your edits are synced into the container on retry, so you can fix the issue and retry just the failed step — no checkout, no reinstall, no waiting. This makes it ideal for AI agents: point an agent at the failure, let it fix and retry in a tight loop — without the cost of a full remote CI cycle each time.

Prerequisites

  • Docker — A running Docker provider:
    • macOS: OrbStack (recommended) or Docker Desktop
    • Linux: Native Docker Engine

Installation

npm install -D @redwoodjs/agent-ci

Usage

# Run a specific workflow
npx agent-ci run --workflow .github/workflows/ci.yml

# Run all relevant workflows for the current branch
npx agent-ci run --all

Remote Docker

Agent CI connects to Docker via the DOCKER_HOST environment variable. By default it uses the local socket (unix:///var/run/docker.sock), but you can point it at any remote Docker daemon:

DOCKER_HOST=ssh://user@remote-server npx agent-ci run --workflow .github/workflows/ci.yml

agent-ci run

Run GitHub Actions workflow jobs locally.

Flag Short Description
--workflow <path> -w Path to the workflow file
--all -a Discover and run all relevant workflows for the current branch
--pause-on-failure -p Pause on step failure for interactive debugging
--quiet -q Suppress animated rendering (also enabled by AI_AGENT=1)

agent-ci retry

Retry a paused runner after fixing the failure.

Flag Short Description
--name <name> -n Name of the paused runner to retry (required)
--from-step <N> Re-run from step N, skipping earlier steps
--from-start Re-run all steps from the beginning

Without --from-step or --from-start, retry re-runs only the failed step (the default).

agent-ci abort

Abort a paused runner and tear down its container.

Flag Short Description
--name <name> -n Name of the paused runner to abort (required)

YAML Compatibility

See compatibility.md for detailed GitHub Actions workflow syntax support.

Debugging

Set the DEBUG environment variable to enable verbose debug logging. It accepts a comma-separated list of glob patterns matching the namespaces you want to see:

Value What it shows
DEBUG=agent-ci:* All debug output
DEBUG=agent-ci:cli CLI-level logs only
DEBUG=agent-ci:runner Runner/container logs only
DEBUG=agent-ci:dtu DTU mock-server logs only
DEBUG=agent-ci:boot Boot/startup timing logs only
DEBUG=agent-ci:cli,agent-ci:dtu Multiple namespaces
  • Output goes to stderr so stdout stays clean for piping.
  • If DEBUG is unset or empty, all debug loggers become no-ops (zero overhead).
  • Pattern matching uses minimatch globs, so agent-ci:* matches all four namespaces.
DEBUG=agent-ci:* npx agent-ci run
S
Description
Run GitHub Actions CI locally with Agent CI to validate changes before pushing. Use when testing, running checks, or validating code changes.
Readme MIT 11 MiB
Languages
TypeScript 59.3%
Rust 32.4%
JavaScript 5.9%
Shell 2.1%
CSS 0.3%