Metadata-Version: 2.1
Name: repogates-checkup
Version: 0.1.0
Summary: The RepoGates agent check-up: an identifier-only inventory of an AI-agent installation, scored by RepoGates. Reads; never runs a program, never changes a file, never blocks anything.
License: MIT
Author: RepoGates
Author-email: hello@repogates.com
Requires-Python: >=3.11
Classifier: Development Status :: 3 - Alpha
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Topic :: Security
Keywords: security,supply-chain,mcp,claude-code,skills,plugins,agents
Project-URL: Homepage, https://repogates.com/cli/
Project-URL: Documentation, https://repogates.com/docs/checkup.html
Project-URL: Privacy, https://repogates.com/privacy.html
Description-Content-Type: text/markdown

# repogates-checkup

The RepoGates agent check-up: an inventory of what an AI-agent installation
already has — plugins, skills, MCP servers, hooks, permissions — scored with
the served rule set and what the RepoGates platform rosters already know
about each plugin's, skill's and MCP server's source.

This version reads **Claude Code** and **Claude Desktop** in full. Cursor,
Windsurf, Codex CLI, Gemini CLI, Cline, VS Code and OpenClaw are reported
present or absent, with the paths looked at; their readers follow once
fixtures exist.

The check-up reads; it never runs a program, never changes a file, and
never blocks anything.

## Install and run

The wheel is served from repogates.com and nowhere else — there is no PyPI
package to install, and the install line names the exact file:

    uvx --from https://repogates.com/cli/repogates_checkup-0.1.0-py3-none-any.whl repogates-checkup

Its SHA-256 is published beside it at <https://repogates.com/cli/>. Python
3.11 or newer; no dependencies. Inside Claude Code, `/repogates:checkup`
runs the same command.

A RepoGates API token names your account: `$REPOGATES_TOKEN`, or the first
line of `~/.config/repogates/token` — the file the RepoGates plugin's hook
reads. The check-up is part of the Personal, Premium and Team plans.

## What leaves your machine

The check-up reads your AI-agent configuration on your machine and **sends RepoGates identifiers, never contents**. What leaves: which supported agents are present, and whether this version of the check-up reads each one's configuration or only detects it; the names and versions of installed plugins and the marketplace each came from, with its source type and repository or URL hostname; marketplace names and sources; skill, command and subagent names with where each lives (user, project or plugin), a SHA-256 of each SKILL.md that identifies a known skill without revealing it, and a subagent's declared tools and model; for each MCP server its name, transport, the launch program's name and its arguments with every `NAME=value`, path and token-shaped string replaced, the package it launches (`npx -y @scope/pkg@version`) and, for a remote server, the hostname only; the names of environment variables and headers a server or hook is given, never their values; each hook's event, matcher, type, program name, redacted arguments and timeout; your permission rules with paths collapsed, your permission mode and the on/off flags; whether CLAUDE.md, AGENTS.md or rules files exist; the findings the served rule set produced on your machine, as a rule id, a count and a file's place in the list, never the matching text; a random check-up id stored in `~/.config/repogates` that is not derived from your hardware; and your API token, to name your account. What never leaves: the contents of any file, environment-variable values, tokens, full URLs, your machine's hostname or user name, your home directory path, project paths or names (a project is sent as its position in the list), and any key of `~/.claude.json` or `claude_desktop_config.json` other than `mcpServers`. RepoGates keeps the identifiers and their verdicts for your account page and deletes them with your account. The check-up reads; it never runs a program, never changes a file, and never blocks anything.

Every run prints a `sent:` line with the counts — and `0 file contents`.
With `--json`, the `local.inventory` object is byte-for-byte what was
sent, so you can read it before you trust it.

## Options

    --agent {claude-code,claude-desktop,cursor,windsurf,codex,gemini,cline,vscode,openclaw,all}
                       one agent, or all (the default)
    --project DIR      a project directory to read: .mcp.json, CLAUDE.md, AGENTS.md,
                       .claude/{settings.json,settings.local.json,CLAUDE.md,skills,
                       agents,commands}; repeatable; sent as project:N, never a path
    --json             the JSON document instead of the table ({"local": …} offline,
                       {"local": …, "server": …} online)
    --offline          bundled rules, local findings only; nothing sent, nothing written
    --label TEXT       a label for this run on your account page
    --home DIR         read DIR as the home (fixtures, a mounted profile)
    --api-base URL     the API base (default $REPOGATES_API_BASE or https://api.repogates.com)

## Exit codes

    0  allow — no finding the policy acts on
    1  warn  — at least one finding the policy warns on
    2  block — at least one finding the policy blocks on
    3  not run — no answer: the token was refused, the plan does not include the
       check-up, the daily allowance is spent, the API was unreachable, or the
       server refused the inventory

Online, the code is the server's action for the run. Offline, it is the
worst local severity through the action mapping the rules file carries —
absent one, a CRIT blocks and HIGH or MED warns.

## Offline

    repogates-checkup --offline

Without a token the check-up runs offline and says so. Offline means the
bundled copy of the rule set (the same file the server serves, pinned equal
in this repository's tests), the local findings — hidden Unicode, a launch
line that fetches and runs, an API base URL override, the instruction
shapes — and the posture notes; no verdict on any plugin's, skill's or
server's source, because that is what the server knows. Nothing is sent and
nothing is written.

## In CI

    repogates-checkup --project . --json

With no home configuration on the runner, `--project` is the CI shape: the
repository's `.claude/`, `.mcp.json`, `CLAUDE.md` and `AGENTS.md`, checked
before merge. The exit code gates the job; the JSON is the record. Give the
job `REPOGATES_TOKEN` as a secret for the server's verdicts, or run
`--offline` for the local findings alone.

## What it cannot see

Runtime behaviour — what a plugin's code or an MCP server does once it
runs (the RepoGates deep scan is the tool for that). An agent that is not in
the list. A skill's origin when no provenance file exists: a skill copied by
hand into `~/.claude/skills` is "local, source unknown". Cursor, Windsurf,
Codex, Gemini, Cline, VS Code and OpenClaw configuration, in this version.

## Development

    uv run --with pytest pytest cli/tests -q
    python3 tools/build_cli_wheel.py --out /tmp/cli     # the served wheel, its sha256, the page

The bundled `repogates_checkup/rules/checkup-rules.json` is a copy of
`backend/policy/checkup-rules.json`; a test fails when they differ.
