Skip to content
CI/CD & Automation Advanced

Multi-Repo Batch Operations

Run Claude across multiple repositories in a single automated sweep

Command

$ "color:#7C5CFC">for repo in repo1 repo2 repo3; "color:#7C5CFC">do
    "color:#7C5CFC">echo "=== $repo ==="
    ("color:#7C5CFC">cd "$repo" && CLAUDECODE="" "color:#7C5CFC">claude -p \
      "Summarize recent changes and flag any issues" \
      "color:#d97757">--output-format json \
      "color:#d97757">--max-budget-usd 0.50 \
      "color:#d97757">--no-session-persistence \
      "color:#d97757">--permission-mode bypassPermissions)
  "color:#7C5CFC">done

Response

=== repo1 ===
{ "result": "3 files changed in auth module...", "total_cost_usd": 0.12 }
=== repo2 ===
{ "result": "No significant changes...", "total_cost_usd": 0.04 }

Parsing Code

059669">">const repos = [059669059669">">'repo1', 059669059669">">'repo2', 059669059669">">'repo3'];
059669">">for (059669">">const repo 059669">">of repos) {
  059669">">const data = JSON.parse(execFileSync(059669059669">">'claude', [
    059669059669">">'-p', 059669059669">">'Summarize changes', 059669059669">">'--output-format', 059669059669">">'json',
    059669059669">">'--no-session-persistence', 059669059669">">'--permission-mode', 059669059669">">'bypassPermissions'
  ], { cwd: repo, encoding: 059669059669">">'utf-8', env: { ...process.env, CLAUDECODE: 059669059669">">'' } }));
  console.log(059669">`${repo}: $${data.total_cost_usd}`);
}

Gotchas

! Each repo runs in its own cwd — CLAUDE.md is read per-repo
! Use --no-session-persistence for batch operations to avoid disk pollution

Related Recipes