brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Run GitHub Actions CI locally with Local CI to validate changes before pushing. Use when testing, running checks, or validating code changes.
Claude Code
$ npx -y skills add redwoodjs/local-ci --skill local-ci --agent claude-code
Codex
$ npx skills add redwoodjs/local-ci --skill local-ci -a codex -y
Cursor
$ npx skills add redwoodjs/local-ci --skill local-ci -a cursor -y
Gemini CLI
$ npx skills add redwoodjs/local-ci --skill local-ci -a gemini-cli -y
GitHub Copilot
$ npx skills add redwoodjs/local-ci --skill local-ci -a github-copilot -y
OpenCode
$ npx skills add redwoodjs/local-ci --skill local-ci -a opencode -y
Windsurf
$ npx skills add redwoodjs/local-ci --skill local-ci -a windsurf -y
name: local-ci description: Run GitHub Actions CI locally with Local 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 run-local-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 run-local-ci retry --name <runner-name>
To re-run from an earlier step:
npx run-local-ci retry --name <runner-name> --from-step <N>
Repeat until all jobs pass. Do not push to trigger remote CI when local-ci can run it locally.
For programmatic monitoring, add `--json` (or set `LOCAL_CI_JSON=1`) to emit an NDJSON event stream on stdout — one JSON object per line. Events:
`--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.
Run GitHub Actions locally — pause on failure, retry in place, and keep caches on your machine.
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.