An advisory PR reviewer that surfaces architecture + security issues, cross-verifies them against deterministic gates, and recommends whether a change is safe to merge — never merging on its own judgement.
Project description
umbra-reviewer
An advisory PR reviewer that finds architecture + security issues, cross-verifies them against deterministic gates, and tells you whether a change is safe to merge — without ever merging on its own judgement.
Part of the Umbra platform.
What it does
On every pull request, it:
- Finds issues with a deterministic scanner over the diff — introduced secrets, dangerous CI permission / OIDC changes,
pull_request_target+curl|shfootguns, unpinned third-party actions, prompt-injection surfaces in instruction files (README/CLAUDE.md/…), dynamic-exec / disabled-TLS smells, and changes to protected paths. - Cross-verifies those findings against deterministic gates: the repo's required status check (looked up from the GitHub API), a clean secret scan, and no forbidden permission change.
- Recommends a verdict — 🟢
safe· 🟡needs_human· 🟣third_party(escalate to a code owner) · 🔴block— and posts one PR comment. - Optionally, enables auto-merge — opt-in, off by default, and only ever on a
safeverdict whose eligibility came from green deterministic gates (see the safety model).
The safety model (why it won't rubber-stamp your repo)
This mirrors Umbra's own principle: an agent must not approve its own authority.
- The reviewer is advisory. Its findings never grant mergeability.
- The authority to merge is the deterministic gate — a required status check + a clean secret scan + no forbidden permission change — plus a human.
- A model finding (if you wire one in) is recorded but can never be blocking and can never flip a gated-clean PR away from
safeon its own. - Auto-merge is opt-in and, even then, uses GitHub's native auto-merge (the PR merges only when branch-protection required checks pass). The bot never force-merges; the platform does, only if your rules allow.
- A blocking finding or a failed/absent required check →
block/needs_human. Sensitive surface (workflows, Dockerfiles, auth, secrets) →third_party, always escalated to a human. - A green verdict is not a guarantee — deterministic scanners have false negatives. It's defense-in-depth, not a proof.
Use it (GitHub Action)
# .github/workflows/review.yml
name: Umbra Reviewer
on: { pull_request: {} }
permissions:
contents: read
pull-requests: write # to post the review comment (+ enable auto-merge if opted in)
checks: read
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 0 }
- uses: bkd-dotcom/umbra-reviewer@v1
with:
required-check: "Umbra Admission" # cross-verify your merge gate (optional)
protected-paths: "infra/**,src/auth/**"
# auto-merge: "true" # opt in; still needs green branch-protection checks
Use it (CLI)
pip install umbra-reviewer
git diff origin/main...HEAD | umbra-reviewer review --repo owner/name --pr 12 \
--required-check success --comment-out comment.md
# exit 1 on a BLOCK verdict, so it gates CI. Add --fail-on-needs-human for a stricter gate.
Pairs with the rest of Umbra
umbra-actionis the hard gate (the required check + signed receipt).umbra-revieweris the advisory layer on top; pointrequired-checkat the Umbra Admission check to cross-verify.umbra-coreis the governance kernel.
License
MIT © 2026 Binay Dalai.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file umbra_reviewer-0.1.0.tar.gz.
File metadata
- Download URL: umbra_reviewer-0.1.0.tar.gz
- Upload date:
- Size: 25.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8824d1b4381b805959c0045193b3c8120e4aba4235a8ec571052dec60cc0c776
|
|
| MD5 |
028aa1b87b974641f9cc2c0cbd51a30a
|
|
| BLAKE2b-256 |
f54e01da4d3715e987064b70fab2853333dabcdfd768a6ddf435fd5185fda75a
|
Provenance
The following attestation bundles were made for umbra_reviewer-0.1.0.tar.gz:
Publisher:
release.yml on bkd-dotcom/umbra-reviewer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
umbra_reviewer-0.1.0.tar.gz -
Subject digest:
8824d1b4381b805959c0045193b3c8120e4aba4235a8ec571052dec60cc0c776 - Sigstore transparency entry: 2283197184
- Sigstore integration time:
-
Permalink:
bkd-dotcom/umbra-reviewer@1790d522469fae9f59c449eac14982c297397e3b -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/bkd-dotcom
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@1790d522469fae9f59c449eac14982c297397e3b -
Trigger Event:
push
-
Statement type:
File details
Details for the file umbra_reviewer-0.1.0-py3-none-any.whl.
File metadata
- Download URL: umbra_reviewer-0.1.0-py3-none-any.whl
- Upload date:
- Size: 18.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fa30bb55d75f3832ab23ea9bf52736a24e67849ab671102abd77a5a74c1a73b3
|
|
| MD5 |
16fbd2c8f990dc02f45c51a606757921
|
|
| BLAKE2b-256 |
00dd4d83421c3fce37087e2fd8359a1e4667e0f9240b7ecbfc875272f74426d6
|
Provenance
The following attestation bundles were made for umbra_reviewer-0.1.0-py3-none-any.whl:
Publisher:
release.yml on bkd-dotcom/umbra-reviewer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
umbra_reviewer-0.1.0-py3-none-any.whl -
Subject digest:
fa30bb55d75f3832ab23ea9bf52736a24e67849ab671102abd77a5a74c1a73b3 - Sigstore transparency entry: 2283197251
- Sigstore integration time:
-
Permalink:
bkd-dotcom/umbra-reviewer@1790d522469fae9f59c449eac14982c297397e3b -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/bkd-dotcom
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@1790d522469fae9f59c449eac14982c297397e3b -
Trigger Event:
push
-
Statement type: