GitHub required check
Every pull request gets aclaros check on its head commit. Claros reads the pull request as one action (title,
description, author, branches, the files it changes and their diff) against every rule that can apply to GitHub —
instant checks first, the judge when a rule needs reading. Rules set for another app never apply.
When the owner approves, the check runs again and passes for exactly that diff. Every push runs it again.
Set it up (a workspace admin):
- Connect GitHub on Admin → Connectors (a token that can read the repositories and write commit statuses), or install the Claros GitHub App (below).
GET /api/gates/githubgives the webhook URL and its secret. In the repository (or organization) settings → Webhooks, add it: payload URL = that URL, content typeapplication/json, secret = that secret, events = Pull requests.- Make it required: Settings → Branches (or Rules → Rulesets) → the protected branch → Require status checks to
pass before merging → add
claros. From then on a pull request that breaks a stop rule can’t merge, and one that waits on an ask merges only once its owner says yes.
claros: success / failure / pending). Only GitHub Apps
may write check runs: when the server has an App (CLAROS_GITHUB_APP_ID and CLAROS_GITHUB_APP_PRIVATE_KEY, the
App’s permissions: Checks write, Pull requests read, Contents read, subscribed to Pull request events) and the webhook
comes from its installation, the answer is a check run with the rule and owner in its output. Either can be required.
To check a pull request by hand: POST /api/gates/github/run {"repo": "acme/app", "pr": 42} (editors).
Any system: POST /v1/gate
A payment flow, an ERP approval step, an access-request tool — anything that can call out before it acts — asks
Claros with an agent-scope key:
allow is true when nothing is held (allowed, or a nudge: act, and show the nudge if you can). On an ask, poll
decision_url (?wait=30 holds the request up to 30 s; ask_wait in the body sets how long the question stays open,
default an hour) and act only when it answers proceed: true — with payload_sha256, only for the same payload. A stop
is final for that payload. payload may be nested: every row of a list is checked. system is matched against the
app a rule is set for.
Where each rule is enforced
The evidence pack (GET /api/evidence/aiuc1, rule_controls) and the oversight report say, per rule, where it
actually acted in the period — from the checks it decided, not from configuration: