mergewarden

agent
Security Audit
Pass
Health Pass
  • License — License: MIT
  • Description — Repository has a description
  • Active repo — Last push 0 days ago
  • Community trust — 15 GitHub stars
Code Pass
  • Code scan — Scanned 12 files during light audit, no dangerous patterns found
Permissions Pass
  • Permissions — No dangerous permissions requested

No AI report is available for this listing yet.

SUMMARY

Tells you when a pull request quietly edits the files that instruct your coding agents: AGENTS.md, CLAUDE.md, .mcp.json, .cursor. A GitHub Action, one option to install. It never closes anything.

README.md

MergeWarden

Release
CI
MergeWarden
License

A pull request quietly edited your CLAUDE.md.

In the diff it reads as a documentation tidy-up. That file is what every coding
agent reads before it touches your repository, so the change outlives the pull
request and shows up in nothing anyone reviews afterwards.

MergeWarden leaves one comment when that happens. It closes nothing.

What that actually looks like

This is a real pull request, titled "docs: tidy up the contributor notes", whose
whole diff is one added line in CLAUDE.md.

MergeWarden: NEEDS REVIEW

Why:  This file can change how AI agents behave in future PRs. (CLAUDE.md)
Next: Review the agent instruction/tooling change before merging.

The pull request
and the run that produced it
are public, so you can check the output against the diff yourself.

It works whether or not an agent opened the pull request. That one says
Agent detected: no.

Watched by default: AGENTS.md, CLAUDE.md, GEMINI.md, QWEN.md,
.mcp.json, .cursor/, .codex/, .gemini/,
.github/copilot-instructions.md, claude_desktop_config.json.

How often is this? We scanned 2,204 merged agent-authored pull requests on
public GitHub and 3.9% of them changed a file like this. That is not a daily
event. It is the kind of thing you want to hear about the once it happens rather
than find six weeks later.

Install

One file, .github/workflows/mergewarden.yml:

name: MergeWarden

on:
  pull_request:
    types: [opened, synchronize, reopened, edited, labeled, unlabeled, ready_for_review]

permissions:
  contents: read
  pull-requests: write

jobs:
  mergewarden:
    runs-on: ubuntu-latest
    steps:
      - uses: sjh9714/[email protected]
        with:
          comment: auto

That is the whole setup. There is no checkout step, no build, no config file,
and no token to create: the Action uses the one GitHub already gives the job.
Nothing is blocked from merging until you decide otherwise.

comment: auto is the only option that does anything on a fresh install. It
means MergeWarden stays silent when there is nothing to say, and everything else
goes to the Actions job summary. When it does comment, pushing a fix rewrites
that same comment to PASSED instead of deleting it, so a stale review request
cannot outlive the problem it described.

Pull requests from forks get a read-only token from GitHub, so they are never
commented on.

For a build that cannot change under you, pin the release commit instead of the
tag. MergeWarden does not publish or recommend a mutable v0 tag.

- uses: sjh9714/mergewarden@c32fb900b65708ea7c875b8ec4244c0983343970

What else it checks

Once it is installed, these come with it. Each one is a fact about the diff, not
a judgement about the contributor.

It also notices Because
A workflow gained a permission it did not have on the base It can now write where it could previously only read
pull_request_target combined with a head checkout That hands your repository's secrets to whoever opened the pull request
An action, reusable workflow or container on a moving tag Somebody else can change what runs in your CI without opening a pull request
An install or prepare script added to a package manifest That code runs during npm install, before any human reads it
Pull request text reaching an agent prompt A stranger can put instructions in a title and have your automation follow them
Files outside the scope a pull request declared for itself An agent asked to update docs also changed your billing code

Every finding names the rule, the file, the evidence, and an ID you can quote
when you discuss or dismiss it. The
configuration reference covers turning individual
checks up, down, or off.

What it will not do

It never closes, labels, or merges anything. There is no --close flag, and
a test in this repository asserts there never will be one. A pull request closed
by a bot in error does not get reopened by the person who gave up on it.

If what you want is for the pull requests to stop arriving, this is the wrong
tool and you should look at an auto-closing action instead. MergeWarden is for
deciding yourself, faster.

It also does not judge your code. It has no opinion on style, naming, or whether
a change deserves to be merged, and it infers nothing from how the description is
written.

On what it trusts:

  • It does not execute pull-request code, and never checks the branch out.
  • It reads your settings from the exact base commit of your branch, never from
    the pull request itself, so a pull request cannot rewrite the rules it is
    judged by.
  • It never calls a language model, so the same pull request always produces the
    same report.
  • If it cannot see everything it needs, it says so and fails rather than
    reporting a pass it cannot stand behind.

The security model has the boundaries and the known
limits.

Reading a whole queue at once

If pull requests have piled up, triage reads all the open ones and lists only
those with something you would have checked by hand.

This one needs a token, even on a public repository, because it makes one
request per pull request and GitHub allows 60 an hour without one. A
personal access token
with no scopes selected is enough, since nothing here writes.

export GH_TOKEN=github_pat_...
npx --yes [email protected] triage owner/repository
20 open pull request(s) read. 9 have something a maintainer checks by hand.

#6941  update-unmanaged-certificates       no description · template unused
#7227  add-tests                           no linked issue · oversized
#7790  feat/dedup-dynamic-upstreams        no linked issue · template unused

Nothing was closed, labelled, or commented on.

Without a token it tells you what it could not read and exits non-zero, rather
than showing you a queue it only half saw. More on triage.

Documentation

Getting started walks through the first week. The
documentation index has the rest, including the
configuration reference.

Running the agents yourself rather than reviewing their pull requests? The same
engine ships as an MCP server that checks a change
against the scope you gave it, before a pull request exists.

Contributing

pnpm install
pnpm test && pnpm typecheck && pnpm lint && pnpm build && pnpm format:check

Every rule needs a passing fixture, a failing fixture, and a snapshot of what a
person would read. The
good first issues
each name the file to change, the command to verify it, and what done looks
like. See the contribution guide.

简体中文

License

MIT

Reviews (0)

No results found