Documentation

How RepoGates works, what it covers, and how to run it — for the developer who installs it, the administrator who manages it, and the AI agent that is told to ask it first.

What RepoGates does

  • Scores every GitHub repository against 22 published checks and answers PASS, REVIEW or BLOCK with the findings — plus four dimension verdicts for what you are about to do with it.
  • Gates browser downloads that fail your policy — the Download ZIP button, release assets, raw files, Save-Link-As — before the file reaches your downloads folder.
  • Sees when an AI surface led you here (AgentBaiting, C22), because only code running in the browser at navigation time can.
  • Answers AI agents before they fetch: the MCP server judges the exact clone or install line (preflight), a package named on it — npm install express, pip install flask — resolved to the repository it declares; the Claude Code plugin's hook refuses a blocked line before it runs; the skill makes Claude.ai and Cowork ask first.
  • Reads the files on request: with your yes, a deep scan runs five engines over the repository in a sandbox.

What it does not do

  • It does not see git clone, package managers or curl — outside Claude Code with the RepoGates plugin, whose hook refuses a clone or install that names a blocked repository on the command line, before it runs. A browser extension cannot see other processes; that is structural, not a roadmap item.
  • The MCP server is a safe path an agent can be required to use, not enforcement: an agent that never calls it is not stopped, exactly as curl is not stopped. In Claude.ai and Cowork the skill is the same — advisory.
  • The hook sees Bash tool calls in that one client and nothing else: not Read/Edit/Write, not MCP git tools, not another agent, not a human at a terminal.
  • Direct dependencies named on the command line only; transitive dependencies and lockfiles are not resolved.
  • A PASS is not a guarantee: it means every check that could run, ran, and none fired.

Use it with Claude — three ways

WhereWhat runsWhat you get
Claude Code The plugin: a PreToolUse hook on the Bash tool, the MCP server and the skill, installed with /plugin marketplace add https://repogates.com/plugin/marketplace.json — published from this site and nowhere else, the zip's sha256 pinned in that file. Needs a personal API token and a paid plan. Enforced. A blocked line is refused before it runs; a warning asks you; a PASS is a note and Claude Code's own rules still apply.
Claude.ai and Cowork The skill, downloaded from this site and uploaded under Settings → Capabilities → Skills, with the RepoGates connector attached. Advisory. Claude checks before it clones or installs, tells you what fired, stops on a refusal and never routes around it; each tool call asks you first.
Any MCP client — Cursor, Codex, Copilot, Gemini… The MCP server, nine tools, OAuth 2.1, paid plan. Advisory. assert_allowed raises rather than returning prose a model can argue with; an agent that never calls it is not stopped.

Five things it does for an agent, each one a real run with a screenshot in the agents guide:

  1. Before a clone. git clone of a repository that comes back REVIEW: the answer is ask, Claude names what fired and the checks that did not run, clones nothing, and waits for you.
  2. A blocked repository. One on the active malware-campaign list: preflight raises, the campaign is named, nothing is installed and no other route is tried.
  3. A package install. npm install express or pip install flask names no repository, so the registry is asked which one the package declares and that repository is assessed — allowed, or asked about when it warns.
  4. When the answer is REVIEW. With your yes to that call, a deep scan reads the files in a sandbox — one credit, a repeat within 15 minutes free, at most five agent-started scans a day.
  5. Nothing to vet. ls, npm test, pip install -r requirements.txt: the hook says nothing and no request leaves the machine.
Claude in claude.ai reporting a git clone preflight: decision ask, two HIGH provenance findings, the checks that did not run and why, nothing cloned
Before a clone: REVIEW → ask. Claude names C1 and C2, the two checks that did not run and why, and waits.
Claude in claude.ai showing the preflight tool error BLOCKED for a campaign-listed repository and installing nothing
A blocked repository: npm install github:repogates-canary/always-blockedpreflight raises, Claude installs nothing and looks for no other route. All five runs →

How a decision is made

  1. A download starts from a gated GitHub URL. The extension recognises Download ZIP archives, codeload.github.com, release assets under /releases/download/, raw files, and downloads clicked from a repository page whose bytes come from a GitHub host. It holds the download while it decides.
  2. It sends owner/repo to the verdict service at api.repogates.com — plus, if you arrived from a known AI surface, that surface's hostname. Never a full URL, never page or repository contents. (Through the Claude Code plugin or the MCP preflight tool it is the command line instead, with URL credentials and NAME=value assignments redacted, parsed on the server and not stored.)
  3. The service runs the 22 checks against the repository's public GitHub metadata and file list, and returns a verdict — PASS, REVIEW or BLOCK — with the findings that fired. Verdicts are cached, so popular repositories answer in milliseconds.
  4. The extension applies policy. Each fired check maps to allow, warn or block; the strongest wins. A warn or block cancels the download, discards the partial file and opens the decision page. A warn lets you proceed; a block lets you override only if your policy permits it.
  5. The decision is recorded in the audit log on your device — including any proceed or override.

The whole decision is budgeted at about eight seconds, inside the fifteen-second ceiling Chrome gives a download listener. What happens when that ceiling is hit is described plainly in troubleshooting.

Verdicts at a glance

VerdictMeaning
PASSNo finding reached your policy's warn or block threshold. The download proceeds.
REVIEWFindings worth reading. The download is stopped and shown to you; you may proceed, and that is recorded.
BLOCKA finding your policy blocks on, or a listing in an active malware campaign. Stopped; override only if permitted, always recorded.
NOT CHECKEDThe repository was not assessed — trial used up, sign-in needed, or device limit. This is not a judgement about the repository. Known malware is still blocked.

The full table, with what to do in each case, is in the personal guide.

The 22 checks

Four groups. The first three run on the verdict service; the last one can only run in the browser.

Four dimension verdicts, from the same roster. Beside the single verdict, the score answers the four things you might do with the repository — open it in an editor (C10, C11, C13, C14, C17, C18–C21), clone it (C1–C8, C11, C12), install and run it (C9, C10, C14, C15, C16), hand it to an AI agent (C10, C18–C22) — each PASS, REVIEW, BLOCK or not assessed, with your profile's action. A dimension is a maximum over its checks, never a sum, so the score does not change; it is PASS only when every check in it ran and none fired, and a Scorecard result that does not exist or the browser-only C22 is listed as not checked without withholding it. /v1/score, the MCP check_repo and the preflight carry them, and the preflight's one-line reason ends with the dimension the verb is about (clone: REVIEW, install: PASS). On the board they are the four chips above the family pills. Shipped 10 September 2026 on the API and the agent path; the chips arrive with the next extension release.

The repository timeline. Every fresh answer is kept for 180 days — the date, the verdict, the score and which checks fired, by number; nothing about who asked — and a new point is added only when the answer changed, so a repository that stays the same has one point that keeps being confirmed. /v1/score carries the last twelve as history and the difference since the previous one as drift: the score delta, the checks that newly fired or cleared, and whether the engine changed in between — in which case the movement reflects updated checks, not the repository. A point exists only when someone looked; nothing is re-checked on a schedule. The MCP check_repo and the preflight say the same as changed_since_last; on the board it is the delta beside the score and one line naming what changed. Shipped 10 September 2026 on the API and the agent path; the board part arrives with the next extension release.

Where things stand

SurfaceStatus
Website sign-in, account page, repository checkerAvailable. Sign in with Google or Microsoft at /account.
Browser extensionAvailable. Published on the Chrome Web Store (unlisted — install from the link; Edge installs it too). Unpacked builds remain for development (how).
MCP serverAvailable. Endpoint https://mcp.repogates.com/mcp; OAuth 2.1 and a paid plan; nine tools, including preflight on the exact command line and deep_scan with your yes. The extension's Test connection button and the /clients endpoint tell you whether it is reachable from where you are (how).
Claude Code pluginAvailable — version 0.3.1, published from this site 9 September 2026 (the zip, its sha256 pinned in the marketplace file). /plugin marketplace add https://repogates.com/plugin/marketplace.json, then /plugin install repogates@repogates; needs a personal API token from the account page and a paid plan. Its hook refuses a clone or install that names a blocked repository before the Bash tool call runs, asks on a warning, and does not see anything else (what it covers).
Skill for Claude.ai and CoworkAvailable. Download the zip from this site and upload it under Settings → Capabilities → Skills; with the connector attached, Claude checks before it clones or installs and reports what fired. Advisory — there is no hook outside Claude Code (how, five real runs).
Personal API tokensAvailable. Created on the account page, shown once, up to five, revocable; the plugin's hook and any script use one to call /v1/preflight. Paid plans.
Organisation tierNot available: no SSO, no policy per organisational unit, no central audit log — withdrawn in August 2026, because the tier needed roughly 660 paying seats to pay for itself, against about 40 for the individual product. Team remains as a 3–5 seat licence with no console. Listed as not planned, with the reason, on the roadmap.
Deep scansAvailable. Reads a repository's files in an isolated sandbox with no network access — OpenGrep, Gitleaks, Trivy, ClamAV, ScanCode. In the extension the result replaces the verdict; for an AI agent it does not — the agent reports both. One credit per scan; a scan that produces no answer refunds it; an agent may start one only with your yes to that call, at most five a day, and a repeat within 15 minutes is free. Described in the personal guide.

This table is what exists today. What is being built, with a date and the gate it must pass, and what is not planned, with the reason, is on the roadmap. When something here changes, the table changes.

Support

Questions, bug reports, false blocks, security disclosures and procurement all reach the same human: support@repogates.com. For a false block, include the owner/repo and the check names shown on the decision page — that is everything we need.

Related: Privacy · Pricing · How we measured ourselves · Honest coverage.