One submodule that gives any repository a world-class GitHub setup and the agent skills to actually ship on top of it.
Agent Ops composes two proven Agent Skills — CCPM for spec-driven delivery and the GitHub Project skill for platform configuration — into a single thing you drop into a repo. It is built to accumulate: adding a third, fourth, or tenth capability is one command.
git submodule add https://github.com/PackMaaan/agent-ops .agent-ops
git submodule update --init --recursive
.agent-ops/bin/agent-ops install
.agent-ops/bin/agent-ops bootstrapThat is a repository with branch protection, CODEOWNERS, issue forms, a security
policy, dependency auto-merge, and three agent skills wired into .claude/skills/.
- Why this exists
- What you get
- Install
- Commands
- How it is put together
- Adding your own modules
- Keeping modules current
- Standards applied to this repo
- Testing
- Licensing
Both upstream projects are excellent and solve genuinely different halves of the same problem. CCPM knows how to turn an idea into shipped code with full traceability. The GitHub Project skill knows how to make a repository behave correctly under that load — protection rules that actually block, merge methods that actually agree, review threads that are actually resolved.
Using them together means, today, cloning two repos, symlinking two skill directories into every project, remembering which one owns which question, and manually re-syncing both whenever upstream moves.
Agent Ops makes that one submodule, one install command, and one routing skill that knows which module is authoritative for a given request — without forking or vendoring either project.
| Skill | Source | Handles |
|---|---|---|
ccpm |
pinned submodule | PRDs, epics, task decomposition, GitHub sync, parallel agents, standups |
github-project |
pinned submodule | branch protection, rulesets, CODEOWNERS, auto-merge, sub-issues, merge queues |
agent-ops |
this repo | routing between the two, bootstrap, module management |
agent-ops bootstrap renders the github-project module's own asset templates
where they exist, and only supplies what the module does not cover — issue
forms (not markdown templates), release-note grouping, a label taxonomy, editor
config. Branch protection is delegated to the module's own idempotent,
drift-detecting script rather than reimplemented.
Nothing below is on by default — it all acts on your issues and pull requests, so you ask for it explicitly.
agent-ops bootstrap --workflows # PR/issue lifecycle
agent-ops bootstrap --stacked-delivery # stacked PR templates + planning
agent-ops bootstrap --guardrails # destructive-git hook| Workflow | What it does |
|---|---|
pr-auto-update |
Keeps every open PR current with the base, so conflicts surface small |
pr-issue-auto-close |
A merged PR moves its linked issues to status: done |
pr-status-labels |
Draft state drives the PR's status label |
issue-triage |
Fills missing status/priority labels, never overwrites |
coderabbit-to-issues |
Review findings become tracked issues, closed when the thread resolves |
All five are gated by .github/WORKFLOW_KILLSWITCH — one file, read from the
default branch so a PR cannot flip it, that stops every automation at once.
Stacked delivery adds four PR templates (platform/client × full/minimal), an
issue form, and a workflow that comments a generated stack ID and one branch name
per layer. Guardrails install a PreToolUse hook that refuses destructive git
— checking every segment, so true; git push is blocked rather than waved
through, and proving it blocks before wiring itself in.
install writes its managed block into .github/copilot-instructions.md
alongside AGENTS.md and CLAUDE.md, so the repository advertises the same
capabilities whichever agent opens it.
registry/modules.json is schema-validated in CI, and CI fails if it and
.gitmodules ever disagree. Adding a capability is:
agent-ops module add --id security-audit --url https://github.com/acme/security-audit-skill.gitcd your-repo
git submodule add https://github.com/PackMaaan/agent-ops .agent-ops
git submodule update --init --recursive
.agent-ops/bin/agent-ops install
.agent-ops/bin/agent-ops doctorinstall symlinks each module skill into .claude/skills/, writes a managed
block into your AGENTS.md and CLAUDE.md, and adds the generated links to
.git/info/exclude so they never show up in git status.
Symlinks are deliberate — git submodule update is then immediately live with
no reinstall step.
Tell your collaborators, because a plain git clone gets the submodule
pointer but not its content:
git clone --recurse-submodules <your-repo>
# or, after cloning:
git submodule update --init --recursive && .agent-ops/bin/agent-ops installagent-ops install --harness factory # .factory/skills
agent-ops install --harness agents # .agents/skills
agent-ops install --harness opencode # .opencode/skills
agent-ops install --harness all
agent-ops install --dest path/to/skills --copygit, bash (3.2 is supported — macOS ships it), and jq. gh is needed only
for the bootstrap phases that talk to GitHub. Everything else degrades to a
warning rather than a failure.
Full walkthrough, including standing up a brand-new repository in the correct
order: docs/INSTALL.md.
agent-ops install Link module skills into the host repository
agent-ops uninstall Remove what install created
agent-ops bootstrap Apply GitHub standards to the host repository
agent-ops doctor Diagnose tooling, registry, and installed state
agent-ops module list Show the registry and pinned revisions
agent-ops module add Register a new capability module
agent-ops module remove Deregister a module and drop its submodule
agent-ops module sync Update submodules to their tracked branch tips
agent-ops bootstrap --workflows Install the PR/issue automation
agent-ops bootstrap --stacked-delivery Install stacked-PR templates + planning
agent-ops bootstrap --guardrails Install the destructive-git hook
Every command supports --help. install, uninstall, bootstrap,
module add, module remove, and module sync all support --dry-run.
doctor is the first move when something is wrong — it separates
"module not checked out" from "registry drift" from "skill not linked", which
look identical from the outside and have three different fixes.
agent-ops/
├── bin/agent-ops single entry point
├── scripts/ install, bootstrap, doctor, module lifecycle
│ └── lib/common.sh host detection, registry access, managed blocks
├── registry/
│ ├── modules.json the declarative inventory
│ └── schema/ JSON Schema, enforced in CI
├── modules/ pinned submodules — never edited in place
│ ├── ccpm/
│ └── github-project/
├── skills/agent-ops/ the routing meta-skill
├── templates/
│ ├── github-standards/ files, workflows and labels for host repos
│ └── agent-guardrails/ the destructive-git PreToolUse hook
├── tests/ 143 assertions, no test framework dependency
└── docs/
The host repository is found by asking git for the superproject working tree, so
Agent Ops works at any submodule path — .agent-ops, tools/agent-ops, wherever.
--target overrides it for standalone clones and CI.
More detail: docs/ARCHITECTURE.md.
Any Agent Skills-compatible git repository qualifies. There is no manifest to add on the module side and no build step.
agent-ops module add \
--id security-audit \
--url https://github.com/acme/security-audit-skill.git \
--summary "OWASP and CVE review workflows" \
--license MIT \
--capability security --capability review
$EDITOR NOTICE.md # record the license
agent-ops install
git add .gitmodules modules/security-audit registry/modules.json NOTICE.md
git commit -m "feat(modules): add security-audit"Skills are auto-detected by finding every SKILL.md in the checkout; pass
--skill NAME=SRC for non-standard layouts. The command rolls the submodule
back if any validation step fails.
Full guide: docs/MODULES.md.
agent-ops module syncFast-forwards each submodule to its tracked branch tip and prints, per module, the SHA range, the commit count, the first ten subjects, and a GitHub compare URL. It deliberately does not commit — bumping a pinned pointer changes what code runs on every consumer's machine, so the review is the point.
Dependabot and Renovate are both configured to raise submodule bumps as individual, never-auto-merged PRs for the same reason.
Agent Ops holds itself to what it installs.
- Branch protection with required conversation resolution and a one-approver baseline
- All GitHub Actions pinned to commit SHAs, with Dependabot and Renovate keeping them current
- Least-privilege
permissions:on every workflow,persist-credentials: falseon every checkout - CodeQL (actions), zizmor workflow analysis, gitleaks, OpenSSF Scorecard
- A supply-chain check that rejects any submodule URL that is not
https://github.com/ - CI on Ubuntu and macOS — the macOS leg is what keeps the scripts honest about bash 3.2
- shellcheck, actionlint, markdownlint, yamllint, JSON Schema validation
- Version consistency enforced across
common.sh,plugin.json, andCHANGELOG.md
bash tests/run.sh # everything
bash tests/run.sh install # one fileRequires only git, bash, and jq. The suite builds throwaway host
repositories in mktemp directories and exercises the real install, bootstrap,
and uninstall paths — including that uninstall leaves host-authored content
untouched, and that a real directory is never clobbered by a symlink.
Agent Ops itself is MIT. The modules are not vendored — they are pinned submodules that keep their own upstream licenses:
| Module | License |
|---|---|
| CCPM | MIT |
| GitHub Project Skill | MIT (code) AND CC-BY-SA-4.0 (content) |
install symlinks by default rather than copying, which keeps that boundary
clean. See NOTICE.md for attribution and the implications of
--copy.
CCPM was developed at Automaze. GitHub Project Skill was developed by Netresearch. Agent Ops composes their work; it does not modify or relicense it.