XCI is a local GitHub Actions runner UX for running workflows locally with a polished terminal experience, delegating execution to act.
- Discover workflows under
.github/workflows/*.yml - Interactive selection of workflows and jobs
- Non-interactive usage with flags
- Local runs via
actwith Docker/Podman - Run history and logs under
.xci/runs/<run-id>/
XCI is built as a small set of layers with strict dependency direction:
core -> engine + store -> cli + tui
Key modules:
src/core/: workflow discovery + parsingsrc/engines/: engine adapters (v1: act)src/store/: run persistencesrc/cli/: CLI wiring and non-interactive usagesrc/tui/: Ink UI rendering
See docs/architecture.md for details.
- Node.js 18+
actinstalled and available on PATH- Docker or Podman running
npm i -g @artsnlabs/xciHomebrew (tap, available now):
brew tap moehaje/tap
brew install xciTap installs xci with act; Docker or Podman still needs to be running.
Homebrew one-command install:
brew install moehaje/tap/xciFor release/update flow, see docs/homebrew-core.md.
Examples below use both xci and xci run forms.
Global install:
xci
xci run
xci run --workflow ci.yml --event push --job build-and-test
xci run --workflow ci.yml --all --jsonWithout global install:
npx xci
npx xci run
npx xci run --workflow ci.yml --event push --job build-and-test
npx xci run --workflow ci.yml --all --jsonCreate a .xci.yml at the repo root:
engine: act
runtime:
container: docker
architecture: amd64
cleanupMode: fast
image:
ubuntu-latest: ghcr.io/catthehacker/ubuntu:act-latest
presets:
quick:
jobs: [build-and-test, code-quality]Cleanup modes:
off: skip post-run cleanupfast(default): remove act containers and ephemeral act volumes, keepact-toolcache+ imagesfull: remove act containers, all act volumes (includingact-toolcache), and act images
Use --no-cleanup to force off for one run, or --cleanup-mode off|fast|full to override per run.
npm install
npm run build
npm run type-checkDocs:
docs/architecture.mddocs/testing.mddocs/exit-codes.md
MIT
