| name | ru-multi-repo-workflow |
| description | Orchestrate multi-repo maintenance with ru: smart commits, careful sync, issue/PR review. Use when managing repos, syncing projects, reviewing GitHub issues, or automating maintenance en masse. |
| trigger | commit-and-release |
| globs | .github/workflows/*.yml |
ru Multi-Repo Workflow
Core Insight: ru automates the mechanical. Your job is judgment: substantive merge conflicts, scope creep decisions, canonical version selection. If it doesn't require human judgment, it should just happen.
Quick Start
ru doctor && gh auth status
ru status --json | jq '[.repos[] | select(.dirty)]'
cd /data/projects/REPO && cat AGENTS.md README.md
git add FILES && git commit -m "MSG" && git push
ru sync -j4
git log --oneline HEAD...origin/main
ru review --dry-run
gh issue view NUMBER -R owner/repo
ls .github/workflows/*.yml 2>/dev/null && echo "Has CI"
gh run list --limit 5
gh run watch
The 4 Phases
| Phase | Summary | Key Command |
|---|
| 1. Smart Commits | Dirty repos → understand → commit logical groups → push | ru status |
| 2. Smart Sync | Pull all → resolve conflicts (CAREFUL!) → canonical version → push | ru sync -j4 |
| 3. Issue/PR Review | Discover 2025+ → verify independently → respond via gh | ru review |
| 4. Release & Monitor | Detect CI repos → watch runs → iterate on failures until green | gh run list |
Always run in order. Can't release if not committed. Can't review if not synced.
What to Surface vs Just Handle
| Surface (needs judgment) | Just Handle (mechanical) |
|---|
| Substantive merge conflicts | Clean fast-forwards |
| Complex feature requests | Stale issues (pre-2025) |
| PR ideas worth considering | Issues already fixed |
| Ambiguous canonical version | Obvious bugs, clear fixes |
| Security-related anything | Simple fitting features |
Phase 1: Smart Commits
The only rule: Understand before committing. 2 minutes reading AGENTS.md saves 20 minutes of confusion.
ru status --json 2>/dev/null | jq -r '.repos[] | select(.dirty) | .name'
cd /data/projects/REPO && cat AGENTS.md README.md
git add path/to/related/files && git commit -m "$(cat <<'EOF'
Why this change exists (not what changed)
- Specific detail 1
- Specific detail 2
Co-Authored-By: Claude <noreply@anthropic.com>
EOF
)"
git push
Deep dive: PHASE1-COMMITS.md | Prompt: PROMPTS.md
Phase 2: Smart Sync
Key insight: "Canonical" ≠ "Latest". Manual diff required—this cannot be mechanically determined.
| Situation | Usually Canonical | But Check |
|---|
| Local ahead | Local | Unless local is experiments |
| Remote ahead | Remote | Unless remote lost work |
| Diverged, different files | Merge both | Straightforward |
| Diverged, same files | SURFACE | Judgment required |
ru sync -j4
git log --oneline HEAD...origin/main
git diff HEAD origin/main
SURFACE FORMAT: Conflicts
🚨 CONFLICT REQUIRING JUDGMENT: repo_name
Local (abc123): Refactored auth to use JWT
Remote (def456): Refactored auth to use sessions
Options:
1. Keep local (JWT approach)
2. Keep remote (session approach)
3. Manual merge
Which aligns with project direction?
Deep dive: PHASE2-SYNC.md | Prompt: PROMPTS.md
Phase 3: Issue/PR Review
Key insight: Never trust user reports blindly. Independent verification required.
| Type | Verified? | Action |
|---|
| Bug, confirmed, unfixed | ✓ | Fix it, close: gh issue close N -c "Fixed in SHA" |
| Bug, already fixed | ✓ | Close: gh issue close N -c "Fixed in SHA" |
| Bug, can't reproduce | ? | Ask: gh issue comment N -b "Need: steps, OS, error" |
| Bug, pre-2025 | ✗ | Close: gh issue close N -c "Closing as stale" |
| Feature, simple, fits | ✓ | Implement, close |
| Feature, complex | ? | SURFACE |
| Feature, scope creep | ✗ | Decline politely |
| PR, any | — | NEVER MERGE, mine for ideas, close with explanation |
ru review --dry-run --json 2>/dev/null | jq '[.items[] | select(.created_at >= "2025-01-01")]'
gh issue view NUMBER -R owner/repo
gh pr diff NUMBER -R owner/repo
SURFACE FORMAT: Scope Decisions
🤔 FEATURE REQUEST: owner/repo#42 — "Add support for X"
User's problem: [What they're trying to do]
Analysis:
+ Would help users doing Y
- Maintenance burden
- Could lead to scope creep
Options:
1. Implement as requested
2. Implement simpler version
3. Decline
My recommendation: [X] because [reason]
Deep dive: PHASE3-REVIEW.md | Prompt: PROMPTS.md
Phase 4: Release & Monitor
Key insight: Push triggers CI. Watch until green. Iterate on failures—don't leave broken.
Detection: Which Repos Have CI?
ls .github/workflows/*.yml 2>/dev/null
grep -l "release\|tag" .github/workflows/*.yml 2>/dev/null
The Monitor Loop
gh run list --limit 5
gh run watch
gh run view RUN_ID --log-failed
git add . && git commit -m "fix: CI issue" && git push
gh run watch
What NOT to Commit (Ephemeral Filter)
| Skip These | Why |
|---|
*.log, *.tmp, *~ | Transient |
target/, node_modules/, dist/ | Build artifacts |
.env, *.key, credentials.* | SECRETS |
.DS_Store, Thumbs.db | OS junk |
.idea/, .vscode/ | IDE config |
SURFACE FORMAT: Persistent CI Failure
🔴 CI FAILING: owner/repo — Run #12345
Failure: [test name or step]
Error: [key error message]
Attempted fixes:
1. [What you tried]
2. [What you tried]
This may require judgment:
- [ ] Is this a flaky test?
- [ ] Is this a real regression?
- [ ] Is this environment-specific?
Logs: gh run view 12345 --log-failed
Deep dive: PHASE4-RELEASE.md | Prompt: PROMPTS.md
References
Scripts
| Script | Purpose |
|---|
scripts/validate.sh | Health check (ru, gh, jq, API connectivity) |
scripts/review-sweep.sh owner/repo | Full review workflow for one repo |
Validation
./scripts/validate.sh