Skip to main content
ChangeGuard AI judges the change your pipeline is about to apply against the environment it will land in and returns SHIP, HOLD or BLOCK with the reasons. Whether a verdict fails the job is your policy: GitHub enforces BLOCK by default and can be set to advisory; every other pipeline reads the verdict and decides.

GitHub — the Action (no API key)

For GitHub the integration is a GitHub App plus one short workflow file. The workflow proves which repository it is with a short-lived identity token GitHub issues to it, so there is no key to create, no secret to paste, and nothing to rotate. Connect the repository in the product and add the file — the guided setup is Start here → 5. Connect GitHub.
What the Action does on every pull request:
  1. Reads the manifests the pull request changed.
  2. Sends them to ChangeGuard AI with GitHub’s identity token. ChangeGuard AI verifies the token, looks the repository up among the connections you created, and judges the change against the environment bound to that connection — never one the workflow could name.
  3. Writes the verdict and reasons to the run summary and the pull-request check. BLOCK fails the check; HOLD never does.
To run purely advisory while you build confidence:
If you turned on …and what happened after each deploy when connecting the repository, the workflow also runs your deploy after a non-blocking verdict and reports the outcome back to the same Change record — nothing to add to the file. Whether a failed check stops a merge is your branch-protection rule.

Any other pipeline — one API call

GitLab, Jenkins, Argo, a script: POST /api/cicd/preflight with an API key of scope cicd (create one under Settings → API Keys; the key issued at signup is agent-scoped and will not work here). Send the manifest you are about to apply, the environment it targets, and your own change identifier (a commit SHA works well).
The response carries verdict, csc, reasons (plain language), environment_evidence (present or absent), environment_state (fresh, stale, unknown, unnamed), and verdict_id / change_id — the identity you use to report the outcome. The full schema is in the OpenAPI spec.

The verdicts

  • SHIP — verified against current evidence; nothing critical stands in its way.
  • HOLD — review first. Most often ChangeGuard AI is missing evidence and says which: no environment named, the environment has not reported recently (stale), or the proposed artifact has not been independently evaluated. Missing evidence is never treated as safe.
  • BLOCK — verified, and something critical is affirmatively wrong: it exceeds a namespace quota, requests more than its own limits allow, contradicts the workload’s live state, or carries critical findings.

Close the loop

GitHub reports outcomes automatically when deploys are enabled. From any other pipeline, report what happened with the verdict_id the judgment returned, and the record ends in truth rather than a green checkmark:
outcome is one of success, incident, rollback, or degraded. Outcomes are attached by the verdict they name — never by recency.

GitOps (ArgoCD, Flux)

Run the judgment where the manifest lives: in the pipeline that produces the commit ArgoCD or Flux will sync. The judged change and the applied change are then the same file, and a BLOCK stops the merge before the desired state ever changes. The GitHub Action and the GitLab job above drop into that pipeline unchanged.
Advisory by default. ChangeGuard AI states a verdict; it does not deploy and does not prevent a deploy by itself. In GitHub a BLOCK fails the check unless you set enforce_block: false; elsewhere enforcement is whatever your job does with the verdict. You can change either at any time without changing anything in ChangeGuard AI.
Existing integrations built on the older /api/validate endpoint keep working — see the validate reference. That endpoint is advisory-shaped (SAFE/WARN) and never returns BLOCK; new pipelines should use /api/cicd/preflight as shown here, and GitHub repositories should use the Action.

What your team sees

A held or blocked change isn’t a mystery. Changes → All changes shows the record: the verdict, the CSC score at the moment of the check, and the exact reasons — the quota the change would exceed, the live state it contradicts, the evidence that was missing. Fix the finding, push again, ship.