Running locally
Run any workflow on your machine with the local runner.
Because workflows are programs, they run anywhere Node runs. The plain-ci runner ships with @plainalpha/ci and executes workflows on your machine with the same loading and validation as the hosted runner.
List workflows
From the repository root:
pnpm plain-ci list
This loads .plain/workflows/ and prints every workflow it finds, with its triggers. If a workflow has a type error, you find out here, not three pushes later.
Run a workflow
pnpm plain-ci run ci
The run executes in a subprocess sandbox with output streaming to your terminal. Iterate on the workflow file and re-run; the loop is seconds, not push-and-wait.
Simulating events
A workflow can behave differently per trigger, so the runner lets you choose what to simulate:
pnpm plain-ci run ci --event pull_request --branch feature/search
ctx.trigger and ctx.git reflect the simulated event, exercising the same code paths a real PR would.
Differences from hosted runs
- Secrets come from your local environment rather than the repository's encrypted store.
- Substrate writes (
ctx.issues,ctx.comments) need a server to write to; locally, the run explains what it would have done rather than mutating production from your laptop. ai.chatrequires credentials in hosted runs; locally it tells you what to configure.
The contract is: if it runs locally, the hosted run executes the same definition the same way. "Works locally, fails in CI" stops being a category you budget time for.