Gate agent pull requests.

Install the App, add a three-line config with "conclusion": "fail-on-warnings", and make Aibysitter review a required check. A pull request that adds an unpinned action, a new dependency, a leaked key or a security exemption then cannot merge until a human looks.

{
  "conclusion": "fail-on-warnings"
}

Save it as .github/aibysitter.json on the default branch. Then require the Aibysitter review status check on that branch: Settings → Rules → Rulesets, or Settings → Branches.

Install the GitHub App

The App reads every pull request in a repository where it is installed. It posts a check named Aibysitter review, with an annotation on each line it flags. What the App reads and keeps

What it flags

A deleted test can be justified in the pull request description with Aibysitter: P008 <removed test path> -> <replacement path>. The P008 finding drops to Info when the replacement is in the head commit and is a test file or is named in a workflow under .github/workflows/.

A swallowed exception can be justified with a comment on the catch line or the line above, // aibysitter-ignore P009: <reason> (also #, /* */ and <!-- -->). The P009 finding drops to Info and shows the reason when it has at least 10 characters.

check Aibysitter review  conclusion failure
4 findings (2 errors, 1 warning, 1 notice)
docs/notes.txt:1            failure P004  Outside declared scope (added): docs/notes.txt. Widen `scope` in a separate PR merged first, or move the file to its own PR.
src/OrderService.cs:5       failure P001  Placeholder left in change: "YOUR_API_KEY"
src/OrderService.cs:9       warning P002  Stub left in change: "throw new NotImplementedException("
.github/workflows/ci.yml:1  notice  P011  CI config modified: .github/workflows/ci.yml
Check run from a test pull request seeded with one example of each check, under fail-on-warnings.

What we store

Configuration

Optional. Add .github/aibysitter.json to the repository. The App reads it from the pull request's base branch, so a pull request cannot change how it is itself reviewed.

{
  "scope": ["src/**", "tests/**"],
  "conclusion": "fail-on-errors",
  "disable": ["P002"],
  "comment": true
}
Key Values Default
scope Path globs from the repository root. ** matches any number of folders and must be a whole segment (**/*.cs, not **.cs); * and ? match within one folder. Case-sensitive. Not supported: {a,b}, [...], !, \. Turns on P004. Read only by P004; other checks review every changed file. Not set; P004 is off
conclusion advisory reports findings as neutral (trial mode). fail-on-warnings fails the check when any Warning or Error finding exists; P014 fails only when a rule fires at Error. fail-on-errors fails the check when any Error finding exists. Info findings never fail the check. A review that stops on an error closes as "Review failed": failure under fail-on-warnings and fail-on-errors, neutral under advisory. advisory
disable Check IDs to skip, for example ["P002"]; disabled checks do not run and show as disabled in the check summary. Rule IDs (R001–R016) skip that rule inside P014. aibysitter-disable comments in a rules file apply first. None
ignore Path globs skipped by content checks, or { "paths": [...], "checks": [...] } to skip them for some checks only. P004, P008, P011, P013 and P014 still see every file. Up to 50 entries. None
comment true posts one comment on the pull request with the summary table and up to 25 findings linked to their lines. Each new commit updates the same comment. No comment is created while there are no findings. false

The config file is itself a changed file: a pull request that edits it outside the declared scope gets a P004 finding, and is reviewed with the base branch's version; the summary says so. Invalid entries fall back to their defaults, are listed in the check summary and are annotated on their line of the config file. Under fail-on-warnings or fail-on-errors, any config error fails the check.

Generate a config file

Security model

What it reads, keeps and logs: Privacy.

Install

Install the App, pick the account or organization, and choose all repositories or selected ones. Installing needs owner or admin rights on the account.

Step-by-step install guide

To uninstall: Settings → Applications → Installed GitHub Apps → Aibysitter → Configure → Uninstall (organizations: Settings → GitHub Apps). Details: Privacy.