Cold-reviewer Path
If you want to see CORE govern code in CI without installing anything locally, the shortest path is to add CORE as a GitHub Action and open a pull request.
One honest prerequisite, stated up front: the Action audits your repo against the .intent/ constitution in that repo (see below). If your repo doesn't have one yet, scaffold it first — then come back here.
Govern your own repo (BYOR — Bring Your Own Repository). Two commands bootstrap a fitted constitution into your repo:
Step 1 — Deliver the machinery floor (schemas, taxonomies, enforcement config):
core-admin project onboard <path-to-your-repo> --write
Step 2 — Induce and ratify rules (LLM reads your source, proposes candidates, you confirm each):
core-admin project scout <path-to-your-repo> --write
project scout requires an LLM resource. Without one it presents a curated menu of four
universal rules for you to accept, reject, or adjust — ratification is always required.
Dry-run (no --write) previews what would be written in either command. Once both steps are
done, add the workflow below and open a pull request.
To run the full loop locally on CORE itself in one command, see Getting Started (./install-core.sh).
For verifying CORE's claims about itself (single gateway, no bypass, no untracked mutation), see the Proof Index instead — that page assumes a running CORE.
What you'll see
CORE reads the .intent/ directory in your repo, runs the constitutional rules declared there against your src/ (or whichever paths your rules scope), and posts findings inline on the pull request as GitHub annotations. A failing severity threshold blocks the check; merge protection is yours to configure.
No daemon runs. No database is provisioned. The action is the stateless audit path — Audit tier per ADR-086 D1.
Minimum setup
Your repository needs a .intent/ directory at the root. If you don't have one, scaffold it with core-admin project onboard (see above) before adding the workflow.
Add this workflow at .github/workflows/core-audit.yml:
name: CORE constitutional audit
on:
pull_request:
branches: [main]
jobs:
audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: DariuszNewecki/CORE@main
with:
severity: block
Open a pull request that touches a file your rules scope. The check runs, annotates findings on the diff if any exist, and exits with verdict=PASS or verdict=FAIL.
Inputs
| Input | Default | Notes |
|---|---|---|
intent-path |
.intent/ |
MVP supports the default only. Custom paths exit with a clear error. |
severity |
block |
One of block, high, medium, low, info. Findings below this threshold are suppressed. |
format |
github-annotations |
One of github-annotations, json, text. Other formats are useful when piping the action's logs. |
The action emits one output:
verdict—PASS(no findings at severity),FAIL(findings present), orERROR(internal failure).
Ref stability
The example above pins to @main because the audit-engine version bundled in tagged releases lags the latest published core-runtime on PyPI; @main tracks the most recent pin. Once a release tag lands carrying the current pin, prefer pinning to that tag (e.g. @v2.7.0) instead of @main for reproducible CI.
Known limits
intent-pathother than.intent/is rejected; file an issue if you need a non-default path.- The image is rebuilt on every action invocation (~30s) because no pre-built image is published to a registry. A
docker runcold path is tracked separately. github-annotationsoutput renders cleanly only inside GitHub's UI. If you run the action's logic outside CI, overrideformattotextorjson.
What this proves
A successful CORE audit on your repo demonstrates three structural claims simultaneously:
- The rules declared in your
.intent/were loaded, parsed, and evaluated by named engines (ast_gate,glob_gate, etc.). - Findings, if any, name the rule that produced them — not a generic linter category.
- The exit code is deterministic from the findings: severity threshold met → fail; no findings → pass; internal failure → error. No silent passes.
This is the same evaluation path the Proof Index claims hold for; this page just lets you observe it without standing up the full runtime.