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.
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) |
Each program is also published as its own standalone plugin, for using one on its own
(for example a one-off PR review) without the full RepoMan setup. Run /plugin after
adding the marketplace to browse the authoritative list.
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.
skills/repoman/scripts/ is generated output — a vendored copy of the
automation engine, stamped with its source commit in
_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 it 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):
scripts/vendor-engine.sh --source <path-to-automation-checkout> \
--dest skills/repoman/scriptsThe script copies an explicit manifest (never a glob, so it cannot touch the
standalone skills' own scripts/), pre-validates the whole manifest before
copying anything, and rewrites _vendor.json with the automation HEAD SHA it
vendored from. tests/test-vendor-engine.sh is its regression test.
Apache-2.0. See LICENSE.