Skip to content
Back to skills

Multi Repo Orchestrate

ASecurity

Cross-repo changes using Claude Code's --add-dir flag. Orchestrate changes across 2+ repos simultaneously for shared dependency updates, API contract changes, and monorepo migration. Includes branch management, conflict resolution, and commit strategy across repositories.

  • 6 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added May 27, 2026
developmentbashgitapidatabasefrontendbackend

Works with

  • claude code
  • cli
  • api

Security analysis

A96/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro shows the line behind each finding and how to fix it

Scanned May 27, 2026

npx -y skills add KevinZai/commander --skill multi-repo-orchestrate --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Multi Repo Orchestrate?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Multi Repo Orchestrate
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/kevinzai-multi-repo-orchestrate/badge)](https://www.skillsdirectory.com/skills/kevinzai-multi-repo-orchestrate)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: multi-repo-orchestrate
description: |
  Cross-repo changes using Claude Code's --add-dir flag. Orchestrate changes across
  2+ repos simultaneously for shared dependency updates, API contract changes, and
  monorepo migration. Includes branch management, conflict resolution, and commit
  strategy across repositories.
triggers:
  - /multi-repo
  - cross repo
  - multiple repos
  - add dir
  - multi repository
  - cross repository changes
disable-model-invocation: true
---

# Multi-Repo Orchestrate

Coordinate changes across multiple repositories in a single Claude Code session using `--add-dir`. When you need to update an API server and its client library simultaneously, upgrade a shared dependency across a monorepo of repos, or migrate from multi-repo to monorepo.

## How --add-dir Works

```bash
# Add additional directories to Claude Code's context
claude --add-dir /path/to/other-repo

# Multiple repos
claude --add-dir /path/to/api-server --add-dir /path/to/client-sdk

# Short form
claude -a /path/to/repo-b -a /path/to/repo-c
```

Claude Code can read, edit, and run commands in all added directories as if they were part of the same project.

## Core Patterns

### Pattern 1: API Contract Change

Update a server API and all client consumers simultaneously.

```bash
# Start in the API server repo
cd ~/projects/api-server
claude --add-dir ~/projects/web-client --add-dir ~/projects/mobile-client
```

#### Workflow

```
1. Modify API schema in api-server/
   (new endpoint, changed response shape, deprecated field)
        |
        v
2. Update server implementation
   (handler, validation, tests)
        |
        v
3. Update web-client/
   (API client, types, components, tests)
        |
        v
4. Update mobile-client/
   (API client, types, screens, tests)
        |
        v
5. Verify all repos build and test
        |
        v
6. Commit in each repo with cross-reference
```

#### Example Prompt

```
I'm changing the /api/users endpoint to include a `displayName` field
and deprecate the `name` field.

1. In api-server: update the schema, handler, and tests
2. In web-client: update the API client type and all components using `name`
3. In mobile-client: update the API type and all screens using `name`
4. All repos should typecheck and tests should pass
```

#### Commit Strategy

```bash
# In api-server/
git commit -m "feat(api): add displayName field, deprecate name

See: web-client#branch-name, mobile-client#branch-name"

# In web-client/
git commit -m "refactor: migrate from user.name to user.displayName

Follows: api-server@abc1234"

# In mobile-client/
git commit -m "refactor: migrate from user.name to user.displayName

Follows: api-server@abc1234"
```

---

### Pattern 2: Shared Dependency Update

Upgrade a shared library across all consuming repos.

```bash
cd ~/projects/shared-ui
claude --add-dir ~/projects/app-a --add-dir ~/projects/app-b --add-dir ~/projects/app-c
```

#### Workflow

```
1. Update shared-ui/ (the library)
   - Bump version
   - Make breaking changes
   - Update exports
   - Write migration guide
        |
        v
2. Update app-a/ (first consumer)
   - Bump dependency version
   - Apply migration guide changes
   - Fix type errors
   - Update tests
        |
        v
3. Update app-b/ (second consumer)
   - Same as app-a
        |
        v
4. Update app-c/ (third consumer)
   - Same as app-a
        |
        v
5. Verify all repos
        |
        v
6. Publish shared-ui, then update lock files in consumers
```

---

### Pattern 3: Monorepo Migration

Move from multi-repo to monorepo structure.

```bash
cd ~/projects/new-monorepo
claude --add-dir ~/projects/repo-a --add-dir ~/projects/repo-b --add-dir ~/projects/repo-c
```

#### Workflow

```
1. Set up monorepo structure in new-monorepo/
   - packages/ directory
   - Root package.json with workspaces
   - Shared tsconfig, eslint, prettier configs
        |
        v
2. Copy repo-a/ → new-monorepo/packages/repo-a/
   - Preserve git history (optional: git subtree)
   - Update import paths
   - Point to workspace dependencies
        |
        v
3. Copy repo-b/ → new-monorepo/packages/repo-b/
   - Same as repo-a
   - Fix cross-package imports (now workspace refs)
        |
        v
4. Copy repo-c/ → new-monorepo/packages/repo-c/
   - Same as above
        |
        v
5. Deduplicate shared configs
   - One tsconfig.base.json
   - One .eslintrc at root
   - Shared scripts in root package.json
        |
        v
6. Verify: build all packages, run all tests
```

---

### Pattern 4: Coordinated Feature

Implement a feature that spans multiple repos.

```bash
cd ~/projects/backend
claude --add-dir ~/projects/frontend --add-dir ~/projects/shared-types
```

#### Example: Add Real-Time Notifications

```
Implement real-time notifications across the stack:

1. In shared-types/: Define NotificationEvent type and WebSocket message schema
2. In backend/: Add WebSocket endpoint, notification service, database table
3. In frontend/: Add WebSocket client, notification bell component, toast system
4. All repos use the shared type definitions
5. Write integration test that sends notification from backend and verifies in frontend
```

---

## Branch Management

### Consistent Branch Names

Use the same branch name across repos for traceability:

```bash
# All repos get the same branch
Branch: feat/add-display-name

# In each repo:
git checkout -b feat/add-display-name
```

### Coordinated PRs

Create PRs in each repo that reference each other:

```bash
# In api-server
gh pr create --title "feat(api): add displayName field" \
  --body "Part of multi-repo change. See also:
  - web-client: [PR link]
  - mobile-client: [PR link]"
```

### Merge Order

For dependent changes, merge in dependency order:

```
1. shared-types/ (no dependencies)     → merge first
2. api-server/ (depends on types)      → merge second
3. web-client/ (depends on API + types) → merge third
4. mobile-client/ (depends on API)      → merge last
```

## Conflict Resolution

### Same File in Multiple Repos

Rare but possible with shared config files:

```
If .eslintrc exists in both repos and both need changes:
  1. Make changes in repo A
  2. Make changes in repo B
  3. No conflict (different files in different repos)
```

### Dependency Version Conflicts

```
If repo-a needs library@2.0 but repo-b needs library@1.0:
  1. Check if library@2.0 is backward-compatible
  2. If yes: upgrade both
  3. If no: update repo-b first to support both, then upgrade
  4. If impossible: flag for human review
```

### Import Path Conflicts

After monorepo migration, import paths change:

```
Before: import { Button } from '@company/ui'  (npm package)
After:  import { Button } from '@company/ui'  (workspace package)

Resolution: Update all tsconfig paths to point to workspace packages
```

## Verification

After multi-repo changes, verify each repo independently:

```bash
# For each repo:
cd /path/to/repo
npm install          # Update lock file
npx tsc --noEmit     # Typecheck
npm run lint         # Lint
npm test             # Tests
npm run build        # Build
```

Then verify cross-repo integration:

```bash
# Start API server
cd api-server && npm run dev &

# Run client against live API
cd web-client && npm run test:integration
```

## Safety Guards

| Guard | Value |
|---|---|
| Max repos per session | 5 (context limit) |
| Branch policy | Always create feature branch, never commit to main |
| Commit policy | One commit per repo per logical change |
| Push policy | Push all repos before creating any PRs |
| Rollback | Revert branches in reverse merge order |
| Human gate | Merge order requires human confirmation |

## Configuration

Create `.multi-repo.json` in the primary repo:

```json
{
  "repos": [
    { "path": "~/projects/api-server", "role": "primary" },
    { "path": "~/projects/web-client", "role": "consumer" },
    { "path": "~/projects/mobile-client", "role": "consumer" }
  ],
  "branchPrefix": "feat/",
  "mergeOrder": ["api-server", "web-client", "mobile-client"],
  "verifyCommand": {
    "api-server": "npm test && npm run build",
    "web-client": "npm test && npm run build",
    "mobile-client": "npm test"
  }
}
```

## Tips

- Start with the repo that has the most foundational changes (types, schemas)
- Use `--add-dir` for read access to reference repos even if you only modify one
- Keep cross-repo PRs small and focused -- one logical change per PR set
- Always include cross-references in commit messages and PR descriptions
- Test the integration between repos, not just each repo in isolation

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…