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.- Reads the manifests the pull request changed.
- 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.
- Writes the verdict and reasons to the run summary and the pull-request check. BLOCK fails the check; HOLD never does.
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).
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 theverdict_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.