
Repo Updater
- 57 installs
- 14 repo stars
- Updated March 2, 2026
- oakoss/agent-skills
Helps with ai & agent building tasks during AI-assisted development.
About
repo-updater is a Claude Code skill for ai & agent building. It helps solo builders move faster with AI-assisted coding.
- repo-updater
- AI & Agent Building
- AI-coding skill
Repo Updater by the numbers
- 57 all-time installs (skills.sh)
- +1 installs in the week ending Aug 4, 2026 (Skillselion tracking)
- Ranked #6,669 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Aug 4, 2026 (Skillselion catalog sync)
npx skills add https://github.com/oakoss/agent-skills --skill repo-updaterAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 57 |
|---|---|
| repo stars | ★ 14 |
| Last updated | March 2, 2026 |
| Repository | oakoss/agent-skills ↗ |
What it does
Helps with ai & agent building tasks during AI-assisted development.
Files
Repo Updater
Bash CLI for synchronizing dozens or hundreds of GitHub repositories with AI-assisted code review and agent-sweep for uncommitted changes.
Critical Concepts
| Concept | Rule |
|---|---|
| Git plumbing only | Never parse human-readable output; use rev-list, status --porcelain, rev-parse |
| Stream separation | Human-readable → stderr; data → stdout (`--json 2>/dev/null \ |
No global cd | All git operations use git -C |
Essential Commands
| Command | Purpose |
|---|---|
ru sync | Sync all configured repos (add -j8 for parallel) |
ru sync --dry-run | Preview what would happen |
ru sync --resume | Resume interrupted sync |
ru status | Read-only check of all repos |
ru add owner/repo | Add repo to sync list |
ru remove owner/repo | Remove from list |
ru list | Show configured repos |
ru prune | Detect orphaned repos |
ru doctor | System health check |
ru review --plan | Discover issues/PRs for AI review |
ru review --apply --push | Apply reviewed changes |
ru agent-sweep | Process repos with uncommitted changes |
ru agent-sweep -j4 | Parallel agent processing |
AI Review Priority Scoring
| Factor | Points | Logic |
|---|---|---|
| Type | 0-20 | PRs: +20, Issues: +10, Draft PRs: -15 |
| Labels | 0-50 | security/critical: +50, bug/urgent: +30 |
| Age (bugs) | 0-50 | >60 days: +50, >30 days: +30 |
| Recency | 0-15 | Updated <3 days: +15, <7 days: +10 |
| Staleness | -20 | Recently reviewed: -20 |
Levels: CRITICAL (≥150), HIGH (≥100), NORMAL (≥50), LOW (<50)
Agent Sweep Phases
| Phase | Default Timeout | Action |
|---|---|---|
| 1: Planning | 300s | Analyze uncommitted changes, generate commit plan |
| 2: Commit | 600s | Validate plan, stage files, create commit, quality gates |
| 3: Release | 300s (opt-in) | Determine version bump, create tag/release |
Execution modes: agent (full workflow), plan (phase 1 only), apply (phase 2+3)
Update Strategies
| Strategy | Behavior |
|---|---|
ff-only | Fast-forward only; fails if diverged (default) |
rebase | Rebase local commits on top of remote |
merge | Create merge commit if needed |
Exit Codes
| Code | Meaning |
|---|---|
| 0 | All repos processed successfully |
| 1 | Some repos failed |
| 2 | Conflicts or quality gate failures |
| 3 | System/dependency error |
| 4 | Invalid arguments |
| 5 | Interrupted (use --resume) |
Environment Variables
| Variable | Default | Description |
|---|---|---|
RU_PROJECTS_DIR | /data/projects | Base directory for repos |
RU_LAYOUT | flat | Path layout (flat, owner-repo, full) |
RU_PARALLEL | 1 | Parallel workers |
RU_TIMEOUT | 30 | Network timeout (seconds) |
RU_UPDATE_STRATEGY | ff-only | Pull strategy |
GH_TOKEN | (from gh CLI) | GitHub token |
Common Mistakes
| Mistake | Correct Pattern |
|---|---|
Parsing human-readable git output (e.g., git status text) | Use git plumbing: rev-list, status --porcelain, rev-parse |
Using cd to change into repo directories | Use git -C <path> for all git operations |
| Mixing data and human-readable output on the same stream | Data goes to stdout, human-readable to stderr (`--json 2>/dev/null \ |
Running sync without --dry-run first on unfamiliar repos | Always preview with ru sync --dry-run before executing |
Using service_role key or bypassing auth in agent-sweep scripts | Follow security guardrails; agent-sweep has preflight checks for a reason |
Delegation
- Discover which repos have uncommitted changes or are out of sync: Use
Exploreagent to runru statusand analyze the output - Process dirty repos with agent-sweep across multiple repositories: Use
Taskagent to runru agent-sweep -j4and handle quality gate failures - Plan a multi-repo sync strategy with review prioritization: Use
Planagent to design sync order, parallelism settings, and review budget allocation
References
- Commands — sync, status, repo management, diagnostics, output modes, jq examples
- Review System — two-phase workflow, session drivers, cost budgets, priority scoring
- Agent Sweep — three-phase workflow, preflight checks, security guardrails, execution modes
- Configuration — XDG directory structure, repo list format, layout modes, per-repo config
- Troubleshooting — common issues, debug mode, preflight failure debugging, integration points
Agent Sweep
Orchestrate AI coding agents to automatically process repositories with uncommitted changes.
Basic Usage
ru agent-sweep # Process all dirty repos
ru agent-sweep --dry-run # Preview what would be processed
ru agent-sweep -j4 # 4 repos in parallel
ru agent-sweep --repos="myproject*" # Filter to specific repos
ru agent-sweep --with-release # Include release step
ru agent-sweep --resume # Resume interrupted sweep
ru agent-sweep --restart # Start freshThree-Phase Workflow
Phase 1: Planning (--phase1-timeout, default 300s)
- Claude Code analyzes uncommitted changes
- Determines which files should be staged (respecting denylist)
- Generates structured commit message
Phase 2: Commit (--phase2-timeout, default 600s)
- Validates the plan (file existence, denylist compliance)
- Stages approved files, creates commit
- Runs quality gates
- Optionally pushes to remote
Phase 3: Release (--phase3-timeout, default 300s, requires --with-release)
- Analyzes commit history since last tag
- Determines version bump (patch/minor/major)
- Creates git tag and optionally GitHub release
Execution Modes
--execution-mode=agent # Full AI-driven workflow (default)
--execution-mode=plan # Phase 1 only: generate plan, stop
--execution-mode=apply # Phase 2+3: execute existing planPreflight Checks
Each repo is validated before spawning an agent:
| Check | Skip Reason |
|---|---|
| Is git repository | not_a_git_repo |
| Git email configured | git_email_not_configured |
| Not a shallow clone | shallow_clone |
| No rebase in progress | rebase_in_progress |
| No merge in progress | merge_in_progress |
| Not detached HEAD | detached_HEAD |
| Has upstream branch | no_upstream_branch |
| Not diverged | diverged_from_upstream |
Security Guardrails
File Denylist
Never committed regardless of agent output:
| Category | Patterns |
|---|---|
| Secrets | .env, *.pem, *.key, id_rsa*, credentials.json |
| Build artifacts | node_modules, __pycache__, dist, build, target |
| Logs/temp | *.log, *.tmp, *.swp, .DS_Store |
| IDE files | .idea, .vscode, *.iml |
Secret Scanning
--secret-scan=none # Disable
--secret-scan=warn # Warn but continue (default)
--secret-scan=block # Block push on detectionExit Codes
| Code | Meaning |
|---|---|
0 | All repos processed successfully |
1 | Some repos failed (agent error, timeout) |
2 | Quality gate failures (secrets, tests) |
3 | System error (ntm, tmux missing) |
4 | Invalid arguments |
5 | Interrupted (use --resume) |
Commands
Sync (Primary Use Case)
ru sync # Sync all configured repos
ru sync -j8 # Parallel sync (much faster)
ru sync --dry-run # See what would happen
ru sync --resume # Resume interrupted sync
ru sync --json 2>/dev/null | jq '.summary' # JSON outputStatus (Read-Only Check)
ru status # Check all repos without modifying
ru status --json # JSON outputRepo Management
ru init # Initialize configuration
ru add owner/repo # Add repo
ru add https://github.com/owner/repo
ru add owner/repo@branch as custom-name
ru remove owner/repo # Remove from list
ru list # List configured repos
ru prune # Preview orphaned repos
ru prune --delete # Remove orphans
ru prune --archive # Archive orphansDiagnostics
ru doctor # System health check
ru self-update # Update ru itselfJSON Output Mode
ru sync --json 2>/dev/null{
"version": "1.2.0",
"timestamp": "2025-01-03T14:30:00Z",
"summary": {
"total": 47,
"cloned": 8,
"updated": 34,
"current": 3,
"conflicts": 2
},
"repos": []
}NDJSON Results Logging
{"repo":"mcp_agent_mail","action":"pull","status":"updated","duration":2}
{"repo":"beads_viewer","action":"clone","status":"cloned","duration":5}jq Examples
# Get paths of all cloned repos
ru sync --json 2>/dev/null | jq -r '.repos[] | select(.action=="clone") | .path'
# Count by status
cat ~/.local/state/ru/logs/latest/results.ndjson | jq -s 'group_by(.status) | map({status: .[0].status, count: length})'Configuration
XDG-Compliant Directory Structure
~/.config/ru/
├── config # Main config file
└── repos.d/
├── public.list # Public repos (one per line)
└── private.list # Private repos (gitignored)
~/.local/state/ru/
├── logs/
│ └── YYYY-MM-DD/
├── agent-sweep/
│ ├── state.json
│ └── results.ndjson
└── review/
├── digests/
└── results/Repo List Format
# ~/.config/ru/repos.d/public.list
owner/repo
another-owner/another-repo@develop
private-org/repo@main as local-name
https://github.com/owner/repo.gitLayout Modes
| Layout | Example Path |
|---|---|
flat | /data/projects/repo |
owner-repo | /data/projects/owner_repo |
full | /data/projects/github.com/owner/repo |
ru config --set LAYOUT=owner-repoPer-Repo Configuration
# ~/.../your-repo/.ru-agent.yml
agent_sweep:
enabled: true
max_file_size: 5242880 # 5MB
extra_context: 'This is a Python project using FastAPI'
pre_hook: 'make lint'
post_hook: 'make test'
denylist_extra:
- '*.backup'
- 'internal/*'Update Strategies
ru sync # Default: ff-only (safest)
ru sync --rebase # Rebase local commits
ru sync --autostash # Auto-stash before pull
ru sync --force # Force update (use with caution)Quality Gates
Auto-detection by project type:
| Project Type | Test Command | Lint Command |
|---|---|---|
| npm/yarn | npm test | npm run lint |
| Cargo (Rust) | cargo test | cargo clippy |
| Go | go test ./... | golangci-lint run |
| Python | pytest | ruff check |
| Makefile | make test | make lint |
| Shell scripts | (none) | shellcheck *.sh |
Rate Limiting
Adaptive parallelism governor:
| Condition | Action |
|---|---|
| GitHub remaining < 100 | Reduce parallelism to 1 |
| GitHub remaining < 500 | Reduce parallelism by 50% |
| Model 429 detected | Pause new sessions for 60s |
| Error rate > 50% | Open circuit breaker |
Review System
Two-Phase Review Workflow
Phase 1: Discovery (--plan)
- Queries GitHub for open issues and PRs across all repos
- Scores items by priority using label analysis and age
- Creates isolated git worktrees for safe review
- Spawns Claude Code sessions in terminal multiplexer
Phase 2: Application (--apply)
- Reviews proposed changes from discovery phase
- Runs quality gates (ShellCheck, tests, lint)
- Optionally pushes approved changes (
--push)
ru review --plan # Discover and plan reviews
ru review --apply --push # After reviewing AI suggestionsPriority Scoring Algorithm
| Factor | Points | Logic |
|---|---|---|
| Type | 0-20 | PRs: +20, Issues: +10, Draft PRs: -15 |
| Labels | 0-50 | security/critical: +50, bug/urgent: +30 |
| Age (bugs) | 0-50 | >60 days: +50, >30 days: +30 |
| Recency | 0-15 | Updated <3 days: +15, <7 days: +10 |
| Staleness | -20 | Recently reviewed: -20 |
Priority levels: CRITICAL (≥150), HIGH (≥100), NORMAL (≥50), LOW (<50)
Session Drivers
| Driver | Description | Best For |
|---|---|---|
auto | Auto-detect best available | Default |
ntm | Named Tmux Manager integration | Multi-agent workflows |
local | Direct tmux sessions | Simple setups |
ru review --mode=ntm --plan
ru review -j 4 --plan # Parallel sessionsCost Budgets
ru review --max-repos=10 --plan
ru review --max-runtime=30 --plan # Minutes
ru review --skip-days=14 --plan # Skip recently reviewed
ru review --analytics # View past review statsTroubleshooting
Common Issues
| Issue | Fix |
|---|---|
gh: command not found | brew install gh && gh auth login |
gh: auth required | gh auth login or set GH_TOKEN |
Cannot fast-forward | Use --rebase or push first |
dirty working tree | Commit changes or use --autostash |
diverged_from_upstream | git fetch && git rebase origin/main |
Debug Mode
# View latest run log
cat ~/.local/state/ru/logs/latest/run.log
# View specific repo log
cat ~/.local/state/ru/logs/latest/repos/mcp_agent_mail.log
# Run with verbose output
ru agent-sweep --verbose --debugPreflight Failure Debugging
# View why repos were skipped
ru agent-sweep --json 2>/dev/null | jq '.repos[] | select(.status == "skipped")'ntm Integration
When ntm (Named Tmux Manager) is available, RU uses its robot mode API:
| Function | Purpose |
|---|---|
ntm --robot-spawn | Create Claude Code session in new tmux pane |
ntm --robot-send | Send prompts with chunking for long messages |
ntm --robot-wait | Block until session completes with timeout |
ntm --robot-activity | Query real-time session state |
ntm --robot-status | Get status of all managed sessions |
ntm --robot-interrupt | Send Ctrl+C to interrupt long operations |
Flywheel Integration
| Tool | Integration |
|---|---|
| Agent Mail | Notify agents when repos are updated; coordinate reviews |
| BV | Track repo sync as recurring beads |
| CASS | Search past sync sessions and agent-sweep logs |
| NTM | Robot mode API for session orchestration |
| DCG | RU runs inside DCG sandbox protection |
Architecture Notes
- ~17,700 LOC pure Bash, no external dependencies beyond git, curl, gh
- Work-stealing queue for parallel sync with atomic dequeue
- Portable locking via
mkdir(works on all POSIX systems) - Path security validation prevents traversal attacks
- Retry with exponential backoff for network operations
Installation
brew install dicklesworthstone/tap/ru
ru doctorAlternative (curl):
curl -fsSL "https://raw.githubusercontent.com/Dicklesworthstone/repo_updater/main/install.sh?ru_cb=$(date +%s)" | bash
ru doctor