IBM Bob 2.0 Hackathon entry. An onboarding/governance copilot that audits an org's repos for the failure modes AI-assisted teams actually hit, not the ones a generic linter checks for.
AI coding agents make it cheap to ship a lot, fast. They don't make it cheap to notice when "a lot, fast" has quietly become: unreviewed security vulnerabilities, code deployed with no test suite run against it, PRs that sat unmerged (or got force-merged through conflicts) for weeks, secrets or PII slipped into a public repo, a sprawl of near-duplicate projects nobody's tracking anymore, and -- hardest to catch with a regex -- AI-authored decisions that got rubber-stamped without a human actually making the call.
RepoWatch audits for both halves of that problem:
- Tier 1 (this repo's Python code, deterministic): Dependabot vulnerabilities, stale PRs (>10 days open), merges with unresolved- conflict markers, commits deployed with no Playwright/Vitest run behind them, unmasked PII candidates, and repo-sprawl/near-duplicate-name detection.
- Tier 2 (Bob IDE, Agent mode, judgment-based): plan-before-ship
detection, spaghetti/inflated-diff judgment, and HITL-outsourcing
detection -- see
docs/BOB_PROMPTS.mdfor the exact prompts andbob_sessions/for the exported task evidence.
pip install -e .
repowatch <github-org-or-user>Produces repowatch_report.json and repowatch_report.html -- a real,
readable dashboard, not just a dump.
Scope to specific repos instead of the whole org:
repowatch axxess-triaxis --repos GALL-e-LEO CopperNick-VisionThis repo is also a Claude Code plugin -- load it and run the audit as a slash command instead of a separate CLI install:
claude --plugin-dir /path/to/RepoWatchThen in the session: /repowatch axxess-triaxis. Claude runs the real
audit via the Bash tool and summarizes the findings in the conversation
instead of just pointing at a file. See .claude-plugin/plugin.json,
bin/repowatch, and commands/repowatch.md.
Dogfooded against the axxess-triaxis GitHub org (13 real repos, not a
sample dataset) -- see docs/FINDINGS.md for the actual
report, including what it got right and what it flagged as a false positive.
Known limitations (honest, not hidden)
- Dependabot alerts require the
security_eventsOAuth scope; without it, RepoWatch reports "access denied" explicitly rather than silently showing a clean result -- a real absence of vulnerabilities and a lack of permission to check are never conflated. - The conflict-merge check is a lower bound: it only catches merges whose commit message still carries git's default "Conflicts:" marker. A squash merge or an edited commit message won't be caught.
- PII matches are regex candidates for human review, not verdicts -- credit- card-shaped numbers and 10-digit phone-shaped numbers produce false positives on plenty of legitimate strings (order IDs, hashes, test fixtures). The tool masks every match and flags obviously-benign paths (tests, fixtures, docs) rather than pretending precision it doesn't have.
- Tier 2 checks require a human (or Bob) to actually read PR content and reason about it -- they are not automatable with a regex, which is the entire point of building them as Bob-driven checks instead of Tier 1 ones.
src/repowatch/
cli.py entry point
github_client.py thin `gh` CLI wrapper (reuses your existing gh auth)
report.py aggregates all checks -> JSON + HTML
checks/
dependabot.py open vulnerability alerts
stale_prs.py stale PRs + conflict-merge heuristic
untested_deploys.py commits with no Playwright/Vitest CI run
pii_scan.py regex PII scan, masked output only
repo_sprawl.py near-duplicate names + repo count
Built for the IBM Bob 2.0 Hackathon by Triaxis Ventures.