freshcrate
Skin:/
Home > AI Agents > agent-ci

agent-ci

Agent-CI is local GitHub Actions for your agents.

Why this rank:Strong adoptionRecent releaseHealthy release cadence

Description

Agent-CI is local GitHub Actions for your agents.

README

Agent CI

Run GitHub Actions on your machine. Caching in ~0 ms. Pause on failure. Fix and retry — before you commit, before you push.

Agent CI demo — pause on failure, fix, retry

Agent CI is a ground-up rewrite of the GitHub Actions orchestration layer that runs entirely on your own machine. It doesn't wrap or shim the runner: it replaces the cloud API that the official GitHub Actions Runner talks to, so the same runner binary that executes your jobs on GitHub.com executes them locally, bit-for-bit.

Actions like actions/checkout, actions/setup-node, and actions/cache work out of the box — no patches, no forks, no network calls to GitHub. Dependencies that took a couple of minutes to install on GitHub's runners install in a few seconds on the second run, because the cache is bind-mounted — not uploaded, downloaded, or unpacked.


Why Agent CI?

Remote CI is the final gatekeeper — it runs on every push and decides what ships. That's its job. The problem is what happens when it fails: you push, you wait, you read logs, you push again. Every retry pays the full cost of a fresh run, and the gatekeeper ends up being used as a debugger.

Agent CI is a pre-flight check that runs on your own machine before you commit. Catch the failure in seconds, fix it locally, only push work that's already green — and let remote CI stay the gatekeeper.

Existing "run actions locally" tools either re-implement steps in a compatibility layer or require you to maintain a separate config. Agent CI does neither.

GitHub Actions Other local runners Agent CI
Runner binary Official Custom re-implementation Official
API layer GitHub.com Compatibility shim Full local emulation
Cache round-trip Network (~seconds) Varies ~0 ms (bind-mount)
On failure Start over Start over Pause → fix → retry the failed step
Container state on failure Destroyed Destroyed Kept alive
Requires a clean commit Yes Yes No — runs against working tree

~0 ms caching

Agent CI replaces GitHub's cloud cache with local bind-mounts. node_modules, the pnpm store, Playwright browsers, and the runner tool cache all live on your host filesystem and are mounted directly into the container — no upload, no download, no tar/untar. The first run warms the cache; every subsequent run starts with hot dependencies instantly.

Pause on failure

Step 6 failed. Fix the file. Retry just that step. Green. No checkout, no reinstall, no waiting.

When a step fails, Agent CI pauses instead of tearing down. The container stays alive with all state intact — environment variables, installed tools, intermediate build artifacts. Your edits on the host are synced into the container, so you (or your AI agent) can fix the issue and retry just the failed step.

Real GitHub Actions Runner, real compatibility

Agent CI does not re-implement GitHub Actions. It emulates the server-side API surface — the Twirp endpoints, the Azure Block Blob artifact protocol, the cache REST API — and feeds jobs to the unmodified, official runner. If your workflow runs on GitHub, it runs here.


Prerequisites

  • Docker — a running Docker provider:

    • macOS: OrbStack (recommended) or Docker Desktop
    • Linux: Native Docker Engine or Docker Desktop
  • Optional — for runs-on: macos-* jobs (Apple Silicon Macs only):

    • tart — brew install cirruslabs/cli/tart
    • sshpass — brew install hudochenkov/sshpass/sshpass

    Without both, macOS jobs are skipped with a reason. See macOS jobs below.

Quick start

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

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

Agent CI runs against your current working tree — uncommitted changes are included automatically. No need to commit or stash before running.

Committing is optional, but it's a useful pattern: commit → run → fail → fix with --pause-on-failure → retry → commit the fix. When you do commit, the commit becomes a save point you can return to if the fix makes things worse. Your AI agent benefits from the same pattern — it can roll back to a known-good state before trying a different fix.

Retry a failed step

npx @redwoodjs/agent-ci retry --name <runner-name>

CLI reference

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
--jobs <n> -j Max concurrent containers (overrides auto-detection)
--pause-on-failure -p Pause on step failure for interactive debugging
--quiet -q Suppress animated rendering (also enabled by AI_AGENT=1)
--no-matrix Collapse all matrix combinations into a single job (uses first value of each key)
--github-token [<token>] GitHub token for fetching remote reusable workflows (auto-resolves via gh auth token if no value given). Also available as AGENT_CI_GITHUB_TOKEN env var
--commit-status Post a GitHub commit status after the run (requires --github-token)

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)

Secrets

Workflow secrets (${{ secrets.FOO }}) are resolved in order:

  1. .env.agent-ci file in the repo root (KEY=VALUE syntax, # comments supported)
  2. Shell environment variables — any env var matching a required secret name acts as a fallback
  3. --github-token — automatically provides secrets.GITHUB_TOKEN
# All three approaches work:
# 1. .env.agent-ci file
echo "CLOUDFLARE_API_TOKEN=xxx" >> .env.agent-ci

# 2. Inline env vars
CLOUDFLARE_API_TOKEN=xxx agent-ci run -w .github/workflows/deploy.yml

# 3. --github-token for GITHUB_TOKEN specifically
agent-ci run -w .github/workflows/ci.yml --github-token

Vars

Workflow variables (${{ vars.FOO }}) are provided exclusively via the --var CLI flag. There's no file-based lookup and no fallback to shell environment variables — this keeps workflow vars distinct from shell env vars and ensures every value is explicit on the command line.

agent-ci run -w .github/workflows/deploy.yml \
  --var DEPLOY_ENV=production \
  --var API_URL=https://api.example.com

If a workflow references a var (${{ vars.FOO }}) and no matching --var FOO=... flag is passed, the run fails with a message listing the missing vars.


Environment variables

All configuration is available via environment variables. For persistent machine-local overrides, create a .env.agent-ci file in your project root — Agent CI loads it automatically (KEY=VALUE syntax, # comments supported).

Only AGENT_CI_*-prefixed keys from .env.agent-ci are applied to the CLI process environment (so they influence Docker/network resolution, etc.). Non-prefixed keys in the file are still resolved as workflow secrets via ${{ secrets.FOO }}. Shell environment variables always take precedence over .env.agent-ci entries.

General

Variable Default Description
GITHUB_REPO auto-detected from git remote Override the owner/repo used when emulating the GitHub API. Useful when the remote URL can't be detected automatically.
AI_AGENT unset Set to 1 to enable quiet mode (suppress animated rendering). Same effect as --quiet.
DEBUG unset Enable verbose debug logging. See Debugging for supported namespaces.
AGENT_CI_GITHUB_TOKEN unset GitHub token for fetching remote reusable workflows. Alternative to the --github-token CLI flag.

Docker

Variable Default Description
AGENT_CI_DOCKER_HOST unix:///var/run/docker.sock Docker daemon socket or URL. Set to ssh://user@host or tcp://â€Ļ to use a remote daemon. Note: the standard DOCKER_HOST env var is not honoured — setting it causes agent-ci to exit with a rename error.
AGENT_CI_DTU_HOST host.docker.internal Hostname or IP that runner containers use to reach the DTU mock server on the host.
AGENT_CI_DOCKER_EXTRA_HOSTS host.docker.internal:host-gateway Comma-separated host:ip entries passed to Docker ExtraHosts. Fully replaces the default when set.
AGENT_CI_DOCKER_HOST_GATEWAY host-gateway Override the default host-gateway token or IP for the automatic host mapping.
AGENT_CI_DOCKER_DISABLE_DEFAULT_EXTRA_HOSTS unset Set to 1 to disable the default host.docker.internal mapping.
AGENT_CI_DOCKER_BRIDGE_GATEWAY auto-detected Fallback gateway IP when Agent CI runs inside Docker and cannot detect its container IP.

Runner image

By default, jobs run inside ghcr.io/actions/actions-runner:latest — the official self-hosted runner image. It includes the runner agent, Node.js, git, curl, jq, and unzip, but not build toolchains, python3, xz, or other tools that GitHub's hosted ubuntu-latest VM ships.

If a workflow fails with a missing tool, create a Dockerfile to add it:

# .github/agent-ci.Dockerfile
FROM ghcr.io/actions/actions-runner:latest
RUN sudo apt-get update \
 && sudo apt-get install -y --no-install-recommends <your-packages> \
 && sudo rm -rf /var/lib/apt/lists/*

Agent CI picks it up automatically — no flags, no config. The image is built once and cached by content hash.

For the full guide — directory form with COPY support, per-job overrides, common recipes (Rust, Node native modules, Go, Ruby, Nix), the AGENT_CI_RUNNER_IMAGE escape hatch, and build caching details — see runner-image.md.


macOS jobs

Jobs with runs-on: macos-* run in a real, throwaway macOS VM on Apple Silicon hosts with tart and sshpass installed. On any other host (Linux, Intel Mac, or missing tools), macOS jobs are skipped with a clear reason message.

The VM uses the official cirruslabs images and is destroyed after the job finishes. The runner binary is fetched once and cached on the host.

Default image mapping:

runs-on: Image
macos-13 macos-ventura-xcode:latest
macos-14 macos-sonoma-xcode:latest
macos-15 macos-sequoia-xcode:latest
macos-26 macos-tahoe-xcode:latest
macos / macos-latest macos-sonoma-xcode:latest

Environment variables

Variable Default Description
AGENT_CI_MACOS_VM_IMAGE see table above Override the image (e.g. ghcr.io/cirruslabs/macos-sonoma-xcode:latest).
AGENT_CI_MACOS_VM_CONCURRENCY 2 Max concurrent macOS VMs. tart's free tier allows 2 simultaneously — raise only if you have a tart license.

Caveats

  • Only Apple Silicon hosts are supported — Virtualization.framework cannot run macOS guests on Intel Macs.
  • Windows jobs (runs-on: windows-*) are not yet supported and always skip.

Remote Docker

Agent CI connects to Docker via the AGENT_CI_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:

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

Note: the standard DOCKER_HOST env var is not honoured. If you have it set for the regular Docker CLI, agent-ci exits with an error asking you to rename to AGENT_CI_DOCKER_HOST. This lets agent-ci target a different daemon than your shell's docker CLI without the two colliding — and it lets the value live in .env.agent-ci.

Docker host resolution for job containers

By default, Agent CI uses host.docker.internal for container-to-host DTU traffic and adds a default Docker host mapping:

  • host.docker.internal:host-gateway

This keeps behavior OS-agnostic and works on Docker Desktop and modern native Docker.

If your setup is custom, use environment overrides:

  • AGENT_CI_DTU_HOST — override the hostname/IP used by runner containers to reach DTU
  • AGENT_CI_DOCKER_EXTRA_HOSTS — comma-separated host:ip entries passed to Docker ExtraHosts (full replacement for defaults)
  • AGENT_CI_DOCKER_HOST_GATEWAY — override the default host-gateway token/IP for automatic mapping
  • AGENT_CI_DOCKER_DISABLE_DEFAULT_EXTRA_HOSTS=1 — disable the default host.docker.internal mapping
  • AGENT_CI_DOCKER_BRIDGE_GATEWAY — fallback gateway IP used when Agent CI runs inside Docker and cannot detect its container IP, and as an explicit DTU host override outside Docker when AGENT_CI_DTU_HOST is not set

When using a remote daemon (AGENT_CI_DOCKER_HOST=ssh://...), host-gateway resolves relative to the remote Docker host. If DTU is not reachable from that host, set AGENT_CI_DTU_HOST and AGENT_CI_DOCKER_EXTRA_HOSTS explicitly for your network.


Concurrency

When running multiple workflows (--all), Agent CI limits how many containers run at the same time to avoid running out of memory.

The limit is auto-detected using two factors:

  • CPU: floor(cpuCount / 2)
  • Memory: floor(availableDockerMemory / 4GB)

Whichever is lower wins. For example, on a machine with 14 CPUs and a Docker VM with 12 GB of RAM, the CPU limit is 7 and the memory limit is 2 — so 2 containers run at a time.

To check available memory, Agent CI reads MemAvailable from /proc/meminfo inside the Docker VM. This accounts for the VM's kernel, daemon, and any other running containers. If that fails, it falls back to docker info total memory minus 4 GB.

You can override the auto-detected limit with --jobs:

# Run at most 4 containers at a time
npx @redwoodjs/agent-ci run --all --jobs 4

# Run one at a time (safest, slowest)
npx @redwoodjs/agent-ci run --all --jobs 1

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 @redwoodjs/agent-ci run --workflow .github/workflows/ci.yml

The agentic dev loop

The loop: commit → Agent CI runs → failure → your agent fixes the file in place with --pause-on-failure → retry the failed step → commit the fix → push. The bind-mounted cache and paused container are what make this loop tight enough to actually work — your agent isn't waiting minutes for a fresh install between attempts.

Install the agent skill:

npx skills add redwoodjs/agent-ci --skill agent-ci

This works with Claude Code, Cursor, Codex, and 40+ other agents. Then add to your agent instructions (CLAUDE.md, .cursorrules, AGENTS.md, etc.):

## CI

Install the agent-ci skill (one-time setup):

\`\`\`bash
npx skills add redwoodjs/agent-ci --skill agent-ci
\`\`\`

Before completing any work, run the `agent-ci` skill to validate your changes locally. If it fails, fix the issue and re-run. Do not report work as done until it passes.

Release History

VersionChangesUrgencyDate
@redwoodjs/agent-ci@0.16.2### Patch Changes - b619fc7: Avoid reusing runner numbers while stable log directories still exist, and clear stale per-run timeline/log artifacts when a runner name is reused, so old `timeline.json` records cannot be merged into a fresh run and reported as a false failure. Refs #341. - Updated dependencies [b619fc7] - dtu-github-actions@0.16.2 High5/22/2026
dtu-github-actions@0.16.0### Minor Changes - c8da13a: Add `agent-ci run --var-file <path|->` for loading workflow variables from JSON files or GitHub CLI `gh variable list --json name,value` output piped on stdin. Explicit `--var KEY=VALUE` flags override file-provided values. Refs #358. - ab075d9: chore: require Node 24 and drop `tsx` Node 24 ships native TypeScript stripping as a stable feature, so we no longer need the `tsx` runtime to execute `.ts` files. Every `tsx foo.ts` invocation in packHigh5/21/2026
@redwoodjs/agent-ci@0.15.1### Patch Changes - 63204ec: fix(macos-vm): let `waitForIp` retry on cold-boot `tart ip` timeouts `getIp` swallows the `runCommand` rejection that fires when `tart ip` hangs past 5s waiting for a DHCP lease, so `waitForIp` can keep polling for the full 90s budget instead of dying on the first iteration. Refs #329. - Updated dependencies [63204ec] - dtu-github-actions@0.15.1 High5/7/2026
dtu-github-actions@0.15.0### Minor Changes - daa536c: Colocate per-run log artifacts with the checks JSON under `<stateDir>/logs/` (override via `AGENT_CI_LOG_DIR`) so log paths recorded in the run-result JSON survive OS-level pruning of `os.tmpdir()`. Add an opportunistic, throttled cleanup that runs at the start of `agent-ci run` plus an explicit `agent-ci clean` command. Knobs: `AGENT_CI_LOG_RETAIN_DAYS` (default 7), `AGENT_CI_LOG_RETAIN_RUNS` (default 20), `AGENT_CI_LOG_PRUNE=0` to disable. Refs #312. Also fHigh4/29/2026
dtu-github-actions@0.14.0### Patch Changes - 44595b1: Surface degraded local runs when the host machine is smaller than the runner spec declared by `runs-on:` (e.g. `ubuntu-latest-8-cores`). The job is tagged `degraded`, a warning is printed before execution, and `[degraded]` appears in CLI output. Execution is never blocked — slow runs and OOMs now have a visible cause instead of being a mystery. Refs #229. - 76b46f9: Revert the opt-in smolvm backend (#287). The implementation proved too rough to keep inHigh4/28/2026
@redwoodjs/agent-ci@0.13.0### Minor Changes - 77ea148: Rename `DOCKER_HOST` to `AGENT_CI_DOCKER_HOST` and load `AGENT_CI_*` vars from `.env.agent-ci`. **Breaking:** agent-ci no longer honours the standard `DOCKER_HOST` env var. If it is set in the shell, agent-ci exits immediately with an error asking you to rename it. Rename it in your shell (or move it to `.env.agent-ci`) as `AGENT_CI_DOCKER_HOST`. This avoids the long-standing collision where users wanted agent-ci to target one daemon (e.g. a Lima/OrbStack VM)High4/22/2026
@redwoodjs/agent-ci@0.12.4### Patch Changes - e2fe576: Make `packages/cli/compatibility.json` the single source of truth for the YAML compatibility matrix. The `compatibility.md` document and the website's compatibility table are both derived from it — run `pnpm compat:gen` after editing the JSON. `pnpm check` fails if the `.md` drifts out of sync. - e2fe576: Add a `proof` field to `compatibility.json` rows pointing at the workflow files that exercise each feature end-to-end. Internal field — not rendered in the maHigh4/20/2026
dtu-github-actions@0.12.4### Patch Changes - e2fe576: Make `packages/cli/compatibility.json` the single source of truth for the YAML compatibility matrix. The `compatibility.md` document and the website's compatibility table are both derived from it — run `pnpm compat:gen` after editing the JSON. `pnpm check` fails if the `.md` drifts out of sync. - e2fe576: Add a `proof` field to `compatibility.json` rows pointing at the workflow files that exercise each feature end-to-end. Internal field — not rendered in the maHigh4/20/2026
@redwoodjs/agent-ci@0.12.3### Patch Changes - 2e7c844: Document and surface Docker Desktop's default-socket toggle. Docker Desktop 4.x ships with `/var/run/docker.sock` disabled, so a fresh install will hit `agent-ci couldn't use a Docker socket at /var/run/docker.sock` even when Docker Desktop is running. The `docker-socket.md` recipe now walks through the Settings → Advanced toggle, and the resolver error appends a one-shot hint pointing at it whenever it detects Docker Desktop's user-side socket (`~/.docker/run/docHigh4/19/2026
dtu-github-actions@0.12.3### Patch Changes - 2e7c844: Document and surface Docker Desktop's default-socket toggle. Docker Desktop 4.x ships with `/var/run/docker.sock` disabled, so a fresh install will hit `agent-ci couldn't use a Docker socket at /var/run/docker.sock` even when Docker Desktop is running. The `docker-socket.md` recipe now walks through the Settings → Advanced toggle, and the resolver error appends a one-shot hint pointing at it whenever it detects Docker Desktop's user-side socket (`~/.docker/run/docHigh4/19/2026
@redwoodjs/agent-ci@0.12.2### Patch Changes - e320288: fix(runner): nested agent-ci sibling containers collide on `agent-ci-1` when multiple outer runs execute in parallel. Each nested run has its own filesystem so it always allocated `agent-ci-1`, and the pre-spawn `docker rm -f` then killed a sibling belonging to a concurrent nested run. Include the outer container's hostname in the prefix when `/.dockerenv` is present so sibling names stay unique across nested runs. Fixes `smoke-bun-setup.yml` + `smoke-docker-buildHigh4/18/2026
dtu-github-actions@0.12.2### Patch Changes - e320288: fix(runner): nested agent-ci sibling containers collide on `agent-ci-1` when multiple outer runs execute in parallel. Each nested run has its own filesystem so it always allocated `agent-ci-1`, and the pre-spawn `docker rm -f` then killed a sibling belonging to a concurrent nested run. Include the outer container's hostname in the prefix when `/.dockerenv` is present so sibling names stay unique across nested runs. Fixes `smoke-bun-setup.yml` + `smoke-docker-buildHigh4/18/2026
dtu-github-actions@0.12.1### Patch Changes - 59d6c40: Fix `UnauthorizedAccessException` on `/home/runner/_diag` and workspace write failures when running on macOS with Colima or Docker Desktop (#263). On those Docker backends the bind-mounted `_diag` and `_work` directories surface as `root:root 0755` inside the container because host permissions don't translate through the VM mount layer. The runner user (uid 1001) then can't write its diag logs or scratch files and the job crashes on startup. We now `MAYBE_SUDHigh4/18/2026
@redwoodjs/agent-ci@0.12.1### Patch Changes - 59d6c40: Fix `UnauthorizedAccessException` on `/home/runner/_diag` and workspace write failures when running on macOS with Colima or Docker Desktop (#263). On those Docker backends the bind-mounted `_diag` and `_work` directories surface as `root:root 0755` inside the container because host permissions don't translate through the VM mount layer. The runner user (uid 1001) then can't write its diag logs or scratch files and the job crashes on startup. We now `MAYBE_SUDHigh4/18/2026
dtu-github-actions@0.12.0### Minor Changes - 12220be: Run `runs-on: macos-*` jobs in a real macOS VM via [tart](https://github.com/cirruslabs/tart) on Apple Silicon hosts. When the host is `darwin`/`arm64` with `tart` and `sshpass` installed, jobs whose `runs-on:` targets macOS launch a cirruslabs macOS VM, rsync in the macOS `actions-runner` binary, and connect the runner to the ephemeral DTU via the host bridge. Concurrency is capped at 2 VMs by default (override with `AGENT_CI_MACOS_VM_CONCURRENCY`). HosHigh4/18/2026
@redwoodjs/agent-ci@0.12.0### Minor Changes - 12220be: Run `runs-on: macos-*` jobs in a real macOS VM via [tart](https://github.com/cirruslabs/tart) on Apple Silicon hosts. When the host is `darwin`/`arm64` with `tart` and `sshpass` installed, jobs whose `runs-on:` targets macOS launch a cirruslabs macOS VM, rsync in the macOS `actions-runner` binary, and connect the runner to the ephemeral DTU via the host bridge. Concurrency is capped at 2 VMs by default (override with `AGENT_CI_MACOS_VM_CONCURRENCY`). HosHigh4/18/2026
@redwoodjs/agent-ci@0.11.0### Minor Changes - 372a47b: Support `env:` at workflow and job level (not just step level). Previously the workflow parser only read `env:` declared directly on a step. Workflow-level and job-level `env:` blocks were silently ignored, so any workflow that relied on them — including workflows that referenced `${{ vars.X }}` in a job-level env — saw empty values at runtime. The parser now merges `env:` from all three levels per the GitHub Actions spec: workflow → job → step, step-mosHigh4/18/2026
dtu-github-actions@0.11.0### Minor Changes - 9474fb5: Skip jobs with `runs-on: macos-*` or `windows-*` instead of silently running them in a Linux container Previously, jobs targeting macOS or Windows runners were silently routed to the Linux runner container and failed at the first OS-specific step (e.g. `Setup Xcode`), producing a confusing error. They now skip with a visible `[Agent CI]` warning that points at the tracking issues for real support. Linux and `self-hosted`-without-OS-hint jobs are unaffected. High4/18/2026
dtu-github-actions@0.10.7### Patch Changes - e482875: Fix `actions/setup-node` emitting "Bad credentials" and falling back to a slow nodejs.org download. The bundled `@actions/tool-cache` hardcodes `api.github.com` for its versions-manifest fetch; the DTU now rewrites the URL in setup-node's tarball at cache time and mocks the `/repos/:owner/:repo/git/trees|blobs` endpoints so the manifest call routes through the DTU (fixes #249). Also: when a step fails with `tar: ...: Cannot open: Permission denied` (typicallyHigh4/15/2026
@redwoodjs/agent-ci@0.10.7### Patch Changes - e482875: Fix `actions/setup-node` emitting "Bad credentials" and falling back to a slow nodejs.org download. The bundled `@actions/tool-cache` hardcodes `api.github.com` for its versions-manifest fetch; the DTU now rewrites the URL in setup-node's tarball at cache time and mocks the `/repos/:owner/:repo/git/trees|blobs` endpoints so the manifest call routes through the DTU (fixes #249). Also: when a step fails with `tar: ...: Cannot open: Permission denied` (typicallyHigh4/15/2026
@redwoodjs/agent-ci@0.10.6### Patch Changes - 64d654d: Auto-pull runner image on first run with visible progress output. Previously, first-time users saw a frozen spinner or a confusing "No such image" error because the pull happened silently and failures were only debug-logged. - Updated dependencies [64d654d] - dtu-github-actions@0.10.6 High4/13/2026
dtu-github-actions@0.10.6### Patch Changes - 64d654d: Auto-pull runner image on first run with visible progress output. Previously, first-time users saw a frozen spinner or a confusing "No such image" error because the pull happened silently and failures were only debug-logged. Medium4/13/2026
@redwoodjs/agent-ci@0.10.5### Patch Changes - 2e2bd5e: fix: always show workflows and jobs in --all mode, fix duplicate matrix jobs - Updated dependencies [2e2bd5e] - dtu-github-actions@0.10.5 Medium4/13/2026
dtu-github-actions@0.10.5### Patch Changes - 2e2bd5e: fix: always show workflows and jobs in --all mode, fix duplicate matrix jobs Medium4/13/2026
@redwoodjs/agent-ci@0.10.4### Patch Changes - 25c1c5d: Fix Cypress install failing with EACCES on `/home/runner/.cache/Cypress`. - Updated dependencies [25c1c5d] - dtu-github-actions@0.10.4 Medium4/13/2026
dtu-github-actions@0.10.4### Patch Changes - 25c1c5d: Fix Cypress install failing with EACCES on `/home/runner/.cache/Cypress`. Medium4/13/2026
@redwoodjs/agent-ci@0.10.3### Patch Changes - ca4610f: Fix expression evaluation in workflow parser to support boolean operators (`&&`, `||`, `!`), `format()`, and `toJSON()`. - Updated dependencies [ca4610f] - dtu-github-actions@0.10.3 Medium4/13/2026
dtu-github-actions@0.10.3### Patch Changes - ca4610f: Fix expression evaluation in workflow parser to support boolean operators (`&&`, `||`, `!`), `format()`, and `toJSON()`. Medium4/13/2026
dtu-github-actions@0.10.2### Patch Changes - 37d6125: Fix nested agent-ci crashes and add global concurrency limiter. - Skip orphan cleanup when running inside a container (`.dockerenv` detection) to prevent nested agent-ci from killing its own parent container. - Resolve DTU host from the container's own IP when nested, instead of inheriting the unreachable `AGENT_CI_DTU_HOST`. - Add a shared concurrency limiter across all workflows in `--all` mode, auto-detected from Docker VM memory (`floor(availMedium4/13/2026
@redwoodjs/agent-ci@0.10.2### Patch Changes - 37d6125: Fix nested agent-ci crashes and add global concurrency limiter. - Skip orphan cleanup when running inside a container (`.dockerenv` detection) to prevent nested agent-ci from killing its own parent container. - Resolve DTU host from the container's own IP when nested, instead of inheriting the unreachable `AGENT_CI_DTU_HOST`. - Add a shared concurrency limiter across all workflows in `--all` mode, auto-detected from Docker VM memory (`floor(availMedium4/13/2026
dtu-github-actions@0.10.1### Patch Changes - 71a3ebb: Exclude test files from published dist by adding tsconfig exclude for `*.test.ts`. Medium4/12/2026
@redwoodjs/agent-ci@0.10.1### Patch Changes - 71a3ebb: Exclude test files from published dist by adding tsconfig exclude for `*.test.ts`. - Updated dependencies [71a3ebb] - dtu-github-actions@0.10.1 Medium4/12/2026
@redwoodjs/agent-ci@0.10.0### Minor Changes - 66ac2a4: Add pluggable runner image via `.github/agent-ci.Dockerfile` convention (#208). agent-ci now discovers a user-provided Dockerfile at `.github/agent-ci.Dockerfile` (or `.github/agent-ci/Dockerfile` for builds with a COPY context), hashes its contents, builds it locally via `docker build`, and uses the resulting `agent-ci-runner:<hash>` tag as the default runner image. Edits to the Dockerfile produce a new hash and trigger an automatic rebuild; identical contenMedium4/12/2026
dtu-github-actions@0.10.0### Minor Changes - 66ac2a4: Add pluggable runner image via `.github/agent-ci.Dockerfile` convention (#208). agent-ci now discovers a user-provided Dockerfile at `.github/agent-ci.Dockerfile` (or `.github/agent-ci/Dockerfile` for builds with a COPY context), hashes its contents, builds it locally via `docker build`, and uses the resulting `agent-ci-runner:<hash>` tag as the default runner image. Edits to the Dockerfile produce a new hash and trigger an automatic rebuild; identical contenMedium4/12/2026
@redwoodjs/agent-ci@0.9.0### Minor Changes - b93ecdf: Compute dirty SHA for uncommitted worktrees so `github.sha` reflects the code actually being executed. - 2cf4034: Resolve workflow secrets from shell environment variables (fallback to .env.agent-ci file). Also auto-populate `secrets.GITHUB_TOKEN` from `--github-token`. ### Patch Changes - 1e2714b: Fix "No such image" error on first run for users without a local Docker image cache. - 9ff0710: Deduplicate identical failure errors in output summary and streaHigh4/11/2026
dtu-github-actions@0.9.0### Minor Changes - b93ecdf: Compute dirty SHA for uncommitted worktrees so `github.sha` reflects the code actually being executed. - 2cf4034: Resolve workflow secrets from shell environment variables (fallback to .env.agent-ci file). Also auto-populate `secrets.GITHUB_TOKEN` from `--github-token`. ### Patch Changes - 1e2714b: Fix "No such image" error on first run for users without a local Docker image cache. - 9ff0710: Deduplicate identical failure errors in output summary and streaMedium4/11/2026
@redwoodjs/agent-ci@0.8.2### Patch Changes - f7e42f0: Fix signal handler to clean up runner directory on Ctrl+C. Add parent-PID liveness tracking to detect and kill orphaned Docker containers on startup. Wire up pruneStaleWorkspaces to clean up old run directories. - cd24a04: Fix actions/checkout@v6 compatibility by using the real HEAD SHA instead of a fake placeholder. - e42f4a9: Fix Docker socket detection on Linux when /var/run/docker.sock exists but is not accessible (EACCES). - 02741dc: Mount warm node_modMedium4/10/2026
dtu-github-actions@0.8.2### Patch Changes - f7e42f0: Fix signal handler to clean up runner directory on Ctrl+C. Add parent-PID liveness tracking to detect and kill orphaned Docker containers on startup. Wire up pruneStaleWorkspaces to clean up old run directories. - cd24a04: Fix actions/checkout@v6 compatibility by using the real HEAD SHA instead of a fake placeholder. - e42f4a9: Fix Docker socket detection on Linux when /var/run/docker.sock exists but is not accessible (EACCES). - 02741dc: Mount warm node_modMedium4/10/2026
@redwoodjs/agent-ci@0.8.1### Patch Changes - 1f24fec: Make GitHub authentication opt-in for remote reusable workflow fetching. Add --github-token CLI flag and AGENT_CI_GITHUB_TOKEN env var. - Updated dependencies [1f24fec] - dtu-github-actions@0.8.1 Medium4/10/2026
dtu-github-actions@0.8.1### Patch Changes - 1f24fec: Make GitHub authentication opt-in for remote reusable workflow fetching. Add --github-token CLI flag and AGENT_CI_GITHUB_TOKEN env var. Medium4/10/2026
@redwoodjs/agent-ci@0.7.1### Patch Changes - 17ef340: Fix --all hanging on single-job workflows due to cross-workflow job stealing. Pin `job.runnerName = containerName` before the DTU seed call so every job goes to the runner-specific pool. Move container and ephemeral DTU cleanup into a `finally` block to ensure cleanup even on mid-run errors. Set `process.setMaxListeners(0)` to suppress EventEmitter warnings when running many parallel jobs. - 336fb98: Fix: treat runner that never contacted DTU as a failure High4/7/2026
dtu-github-actions@0.7.1### Patch Changes - 17ef340: Fix --all hanging on single-job workflows due to cross-workflow job stealing. Pin `job.runnerName = containerName` before the DTU seed call so every job goes to the runner-specific pool. Move container and ephemeral DTU cleanup into a `finally` block to ensure cleanup even on mid-run errors. Set `process.setMaxListeners(0)` to suppress EventEmitter warnings when running many parallel jobs. - 336fb98: Fix: treat runner that never contacted DTU as a failure Medium4/7/2026
@redwoodjs/agent-ci@0.7.0### Minor Changes - c2fe31b: Cache action tarballs on first download and serve from disk on subsequent runs, eliminating ~30s GitHub CDN delays. Capture step output via tee to signals dir for reliable pause-on-failure tail display. Fix CLI to treat empty results as failure. - acb750f: Show Docker image pull progress (bytes downloaded / total) as a sub-step under "Starting runner" during boot. ### Patch Changes - f9f17fd: Detect project package manager and only mount relevant PM cache diMedium4/6/2026
dtu-github-actions@0.7.0### Minor Changes - c2fe31b: Cache action tarballs on first download and serve from disk on subsequent runs, eliminating ~30s GitHub CDN delays. Capture step output via tee to signals dir for reliable pause-on-failure tail display. Fix CLI to treat empty results as failure. - acb750f: Show Docker image pull progress (bytes downloaded / total) as a sub-step under "Starting runner" during boot. ### Patch Changes - f9f17fd: Detect project package manager and only mount relevant PM cache diMedium4/6/2026
@redwoodjs/agent-ci@0.6.0### Minor Changes - 6e53753: Post GitHub commit status via gh CLI after agent-ci run completes ### Patch Changes - d273b76: Show full per-step log content in failure summary instead of a truncated 20-line tail. - a987818: Simplify Docker host resolution to be OS-agnostic by default, with explicit environment-variable overrides for custom networking setups. - Updated dependencies [6e53753] - Updated dependencies [d273b76] - Updated dependencies [a987818] - dtu-github-actions@Medium3/27/2026
dtu-github-actions@0.6.0### Minor Changes - 6e53753: Post GitHub commit status via gh CLI after agent-ci run completes ### Patch Changes - d273b76: Show full per-step log content in failure summary instead of a truncated 20-line tail. - a987818: Simplify Docker host resolution to be OS-agnostic by default, with explicit environment-variable overrides for custom networking setups. Medium3/27/2026
dtu-github-actions@0.5.0### Minor Changes - 179405b: Add package metadata, SKILL.md, and AI agent discoverability section to README Medium3/23/2026
@redwoodjs/agent-ci@0.5.0### Minor Changes - 179405b: Add package metadata, SKILL.md, and AI agent discoverability section to README ### Patch Changes - Updated dependencies [179405b] - dtu-github-actions@0.5.0 Medium3/23/2026
@redwoodjs/agent-ci@0.4.0### Minor Changes - 61d3e25: Add --no-matrix flag to collapse matrix workflows into a single job. ### Patch Changes - Updated dependencies [61d3e25] - dtu-github-actions@0.4.0 Medium3/23/2026
dtu-github-actions@0.4.0### Minor Changes - 61d3e25: Add --no-matrix flag to collapse matrix workflows into a single job. Medium3/23/2026
dtu-github-actions@0.3.4 Medium3/22/2026
@redwoodjs/agent-ci@0.3.4### Patch Changes - 6ada721: Fix Node 22 crash caused by `@actions/workflow-parser` importing JSON without the required `type: "json"` import attribute. A custom ESM loader hook now transparently adds the missing attribute at runtime. Fixes #67. - dtu-github-actions@0.3.4 Medium3/22/2026
@redwoodjs/agent-ci@0.3.3### Patch Changes - fix(dtu): replace execa with node:child_process to fix production runtime error - Updated dependencies - dtu-github-actions@0.3.3 Low3/17/2026
dtu-github-actions@0.3.3### Patch Changes - fix(dtu): replace execa with node:child_process to fix production runtime error Low3/17/2026
dtu-github-actions@0.3.2 Low3/17/2026
dtu-github-actions@0.3.1 Low3/17/2026

Dependencies & License Audit

Loading dependencies...

Similar Packages

uix-ai-agent🤖 Generate UI & UX flows for web and mobile apps using natural language prompts with UIX AI Agent, your intelligent design assistant.main@2026-06-07
vibe-replayTurn AI coding sessions into animated, interactive web replaysv0.2.3
CopilotKitThe Frontend Stack for Agents & Generative UI. React + Angular. Makers of the AG-UI Protocolv1.59.5
piclawI'm going to build my own OpenClaw, with blackjack... and bun!v2.6.1
skalesYour local AI Desktop Agent for Windows, macOS & Linux. Agent Skills (SKILL.md), autonomous coding (Codework), multi-agent teams, desktop automation, 15+ AI providers, Desktop Buddy. No Docker, no terv11.1.6

More in AI Agents

@blockrun/franklinFranklin — The AI agent with a wallet. Spends USDC autonomously to get real work done. Pay per action, no subscriptions.
hermes-agentThe agent that grows with you
awesome-copilotCommunity-contributed instructions, agents, skills, and configurations to help you make the most of GitHub Copilot.
e2bE2B SDK that give agents cloud environments