RepoMan runs automated maintenance programs (PR review, link health, dependency bumps, weekly reports, repo sync, doc drift) across a set of GitHub repos you enroll once. It handles the capability checks and output wiring for you, so you install once and enable programs on the fly.
/repoman is a single intent-dispatching entrypoint: it reads your ~/.repoman/
state and your message and infers whether you are setting up, enabling a program, or
running one.
Built to the Agent Skills specification.
/plugin marketplace add rossoctl/repoman
/plugin install repoman@rossoctl-repoman
That one install is the whole system — the repoman plugin is self-contained: it
bundles the /repoman entrypoint, every program skill (scanner and fixer), and the
engine scripts. Enabling more programs later needs no further installs.
Refresh the marketplace and update the plugin (a Claude Code restart applies updates):
/plugin marketplace update rossoctl-repoman
/plugin update repoman@rossoctl-repoman
Updating repoman refreshes the bundled engine too, so engine fixes reach every user
through a single plugin update.
Each program is also published as its own standalone plugin in the same marketplace, so
you can install just one without the full repoman bundle or its /repoman entrypoint:
/plugin marketplace add rossoctl/repoman
/plugin install github-pr-review@rossoctl-repoman
Swap github-pr-review for the plugin id of any program — run /plugin after adding
the marketplace to see the authoritative list. The ids mostly match the
Programs table, except the GitHub-facing ones carry the github- prefix:
github-pr-review and github-weekly-report (the table lists them as pr-review and
weekly-report). Installing a single program is the right choice for a one-off,
chat-driven run (for example reviewing a single PR) or for calling an RM program from an
external script, where the /repoman entrypoint isn't needed.
Installing a single program skips the /repoman entrypoint, but most programs still
need their own inputs at run time: github-pr-review and github-weekly-report act on
a repo you name directly, while link-health, dep-bump, repo-sync, and
automation-health read the enrolled set from ~/.repoman/repos.json and
~/.repoman/config.json (created by repoman-setup.sh) and fail loud without them.
Each program's SKILL.md lists its prerequisites.
The repoman bundle ships these programs, each ready to enable:
| Program | What it does |
|---|---|
| repoman | The entrypoint: first-time setup, enabling a program, enrolling repos or an org, running a program across enrolled repos |
| link-health | Scan repos for broken links and file issues (fixer re-verifies and opens fix PRs) |
| dep-bump | Monitor Dependabot PRs, classify by severity, flag SLA breaches (fixer posts commentary to accelerate review) |
| pr-review | Automated PR review: conventions, security, CI status, inline comments |
| repo-sync | Keep local clones of enrolled repos current; read-only toward GitHub |
| automation-health | Generate an executive-facing dashboard combining all program metrics |
| weekly-report | Weekly org activity reports with merged PRs, CI health, and active-epic tracking |
| doc-drift | Scan repos for documentation drift and draft changelog notes from merged PRs (fixer re-verifies and opens mechanical doc fix PRs) |
Every program also works as a standalone skill — usable on its own, without the
/repoman entrypoint. This supports LLM chat-based one-off runs of a single program
(for example a one-off PR review) and scriptable RM program calls from external
tooling. (The link-health, dep-bump, repo-sync, and automation-health programs
still read their enrolled repo set from ~/.repoman/ even when run standalone, and fail
loud without it — see each program's SKILL.md.) See
A single program (standalone skill) for how to
install one.
bash3.2+ — runs on the macOS system default; no bash-4 features are used.gh(GitHub CLI, authenticated with org access)jq
Individual programs may have additional requirements documented in their SKILL.md.
RepoMan is developed across three repositories:
| Repository | Role |
|---|---|
| rossoctl/automation | Engine source of truth: the flat scripts in scripts/, plus tests and specs. All engine changes are made and tested there first. |
| rossoctl/agent-skills | Skills designed to work standalone as well as with RepoMan. |
| rossoctl/repoman (this repo) | Distribution (rossoctl-repoman marketplace) and the canonical home for RepoMan-specific SKILL.mds. The engine is not authored here. |
See the [CHANGELOG.md](https://github.com/rossoctl/repoman/blob/main/CHANGELOG.md) for release history.
- Place the work. A skill that is useful on its own → author it in
agent-skills. A RepoMan-specific program (keeps state under
~/.repoman) → deterministic scripts in automation,SKILL.mdin this repo. New programs start from automation'sdocs/program-template.md. A new program also needs repoman-side wiring that is not engine code: a.claude-plugin/marketplace.jsonentry, a row in the README## Programstable, and the program → skill mapping inskills/repoman/SKILL.md. - Test in automation, next to the existing tests in
tests/. Bash 3.2 only: nomapfile, no associative arrays, BSD fallbacks for GNU-only flags. If the skill writes to~/.repoman, give itsSKILL.mda machine-readable### Requirementsblock sorepoman-check.shcan gate the run. - Keep real state out of test runs. Point
REPOMAN_CONFIG_FILE/REPOMAN_REPOS_FILEat scratch files; never hand-edit~/.repoman(repoman-setup.shis its only writer); drive first runs throughrepoman-run.sh <program> owner/repo --dry-runand drop--dry-runonly once the output looks right. - Vendor the engine into this repo (below) — a new engine script must be
added to both the vendor manifest and its test fixture in
tests/test-vendor-engine.sh, including the expected counts — then run that test. To try the plugin without reinstalling from the marketplace:claude plugin marketplace add <this-repo>thenclaude plugin install repoman@rossoctl-repoman. - Before the PR:
git config core.hooksPath scripts/hooks, sign off withgit commit -s(DCO), use a conventional title, one purpose per PR.
Both skills/repoman/scripts/ (the plugin bundle) and the standalone
skills/{link-health,dep-bump}-{scanner,fixer}/scripts/ dirs are generated
output — vendored copies of the automation engine, each stamped with its
source commit in a _vendor.json. Never edit those files directly: an in-place
fix bypasses automation's tests and is silently overwritten on the next vendor.
To pick up engine changes, run the vendor script from this repo against a
clean automation checkout — the stamp records the source HEAD SHA, so
vendoring uncommitted changes would produce a stamp that does not match the
copied bytes (the script rejects a dirty source unless --allow-dirty is
passed):
# The plugin bundle:
scripts/vendor-engine.sh --source <path-to-automation-checkout> \
--dest skills/repoman/scripts
# The standalone skill dirs:
scripts/vendor-engine.sh --source <path-to-automation-checkout> \
--skills skillsThe two modes are mutually exclusive. Each copies an explicit manifest (never a
glob): --dest populates only the plugin dir, and --skills populates only the
listed standalone skill dirs with the modular lib set plus each skill's own
scripts — so the script only ever writes the paths its manifests name. Both
pre-validate the whole source set before copying anything and rewrite each
_vendor.json with the automation HEAD SHA vendored from.
tests/test-vendor-engine.sh is the regression test for both modes.
Apache-2.0. See LICENSE.