multi-repo
Multi-repository orchestration for coordinating atomic changes across dependent repositories. Tracks dependency graphs, coordinates cross-repo PRs, and detects breaking changes.
What this skill does
# Multi-Repository Orchestration Skill
## Purpose
Coordinate atomic changes across multiple repositories when features span repo boundaries. Track dependencies, manage linked PRs, and detect breaking changes before they propagate.
## When to Use This Skill
**USE FOR:**
- Changes that require coordinated updates across multiple repositories
- Managing repository dependency graphs
- Creating linked PRs that should merge together or in sequence
- Detecting breaking changes that affect dependent repositories
- Microservices or monorepo-alternative architectures
**AVOID FOR:**
- Single-repository changes (use default workflow)
- Forking/syncing operations (use git directly)
- Documentation-only changes
- Changes with no cross-repo dependencies
## Storage Location
All multi-repo data is stored in `~/.amplihack/.claude/data/multi-repo/`:
- `dependencies.yaml` - Repository dependency graph
- `linked-prs.yaml` - Currently active linked PR sets
- `breaking-changes.log` - History of detected breaking changes
## Dependency Graph Format
The dependency graph uses simple YAML:
```yaml
# .claude/data/multi-repo/dependencies.yaml
version: "1.0"
repositories:
my-org/api-server:
depends_on: []
exposes:
- type: api
name: REST API v2
contract: openapi.yaml
my-org/web-client:
depends_on:
- repo: my-org/api-server
type: api
version: ">=2.0"
exposes: []
my-org/mobile-app:
depends_on:
- repo: my-org/api-server
type: api
version: ">=2.0"
exposes: []
```
## Core Operations
### Operation 1: Initialize Dependency Graph
**When:** Setting up multi-repo tracking for the first time
**Process:**
1. Create `~/.amplihack/.claude/data/multi-repo/` directory if not exists
2. Create initial `dependencies.yaml` with current repository
3. Prompt for known dependencies (repos this one depends on)
4. Prompt for known dependents (repos that depend on this one)
5. Save and display the graph
**Command:** "Initialize multi-repo dependencies"
### Operation 2: Add Repository Dependency
**When:** Registering a new dependency relationship
**Process:**
1. Read current `dependencies.yaml`
2. Validate both repositories exist (via gh CLI)
3. Add dependency entry with type and version constraint
4. Update dependent repo's entry
5. Save changes
**Example:**
```
"Add dependency: my-org/web-client depends on my-org/api-server for REST API"
```
### Operation 3: Detect Breaking Changes
**When:** Before creating a PR that modifies a public interface
**Process:**
1. Identify changed files in current branch
2. Check if changes touch exposed contracts (API specs, schemas, exports)
3. Look up dependents in dependency graph
4. For each dependent:
- Clone/fetch latest (use worktree if local)
- Check if dependent uses affected interface
- Report potential breakage
5. Generate impact report
**Output:**
```
Breaking Change Impact Report
=============================
Changed: my-org/api-server/openapi.yaml
- Removed endpoint: DELETE /users/{id}
- Modified field: User.email now required
Affected Dependents:
- my-org/web-client (uses DELETE /users/{id})
- my-org/mobile-app (no impact detected)
Recommendation: Coordinate changes with my-org/web-client
```
### Operation 4: Create Linked PRs
**When:** Making atomic changes across multiple repositories
**Process:**
1. User specifies the set of repos to update
2. For each repo in order (respecting dependency graph):
- Create worktree or navigate to repo
- Create feature branch with common prefix
- Make changes
- Create PR with links to other PRs in set
3. Track linked PRs in `linked-prs.yaml`
4. Add cross-references in PR descriptions
**Linked PR Format:**
```yaml
# .claude/data/multi-repo/linked-prs.yaml
linked_sets:
- id: "auth-v2-migration"
created: "2025-11-25T10:00:00Z"
status: "pending"
prs:
- repo: my-org/api-server
pr: 123
status: "merged"
merge_order: 1
- repo: my-org/web-client
pr: 456
status: "approved"
merge_order: 2
- repo: my-org/mobile-app
pr: 789
status: "open"
merge_order: 3
```
### Operation 5: Coordinate Merge Sequence
**When:** Merging a linked PR set
**Process:**
1. Read linked PR set from `linked-prs.yaml`
2. Verify all PRs are approved/ready
3. Merge in dependency order (upstream first)
4. Wait for CI to pass after each merge
5. Update linked-prs status
6. Report completion
**Merge Order Logic:**
1. Repos with no dependencies merge first
2. Repos with dependencies merge after their dependencies
3. Circular dependencies: Error (should not exist in healthy graph)
## Integration with Worktree Manager
When working across local repositories, leverage the worktree-manager agent:
1. For each local repo in dependency graph:
- Use `git worktree add` to create isolated workspace
- Worktrees go in `./worktrees/{repo-name}-{branch}/`
2. Make coordinated changes across worktrees
3. Commit and push from each worktree
4. Clean up worktrees after PRs merged
## Integration with PM Architect
For complex multi-repo projects:
1. Use backlog-curator to track cross-repo items
2. Use workstream-coordinator for multi-repo workstreams
3. Linked PRs map to single workstream items
4. Breaking change detection feeds into roadmap planning
## Philosophy Alignment
**Ruthless Simplicity:**
- YAML-based dependency graph (no database required)
- Leverage existing git and gh CLI tools
- Minimal skill surface area
**Zero-BS Implementation:**
- All operations are functional from day one
- No "planned" features - only what works now
- Breaking change detection actually checks code
**Modular Design:**
- Skill is self-contained
- Data stored in simple files
- Can be used independently or with PM Architect
## Examples
### Example 1: API Breaking Change
**Scenario:** Updating API endpoint signature
```
User: "I need to change the /users endpoint from GET to POST"
Skill Response:
1. Detected change to api-server/openapi.yaml
2. Scanned dependents:
- web-client: Uses GET /users in 3 locations
- mobile-app: Uses GET /users in 2 locations
3. Impact: HIGH - 5 usages across 2 repositories
Recommended approach:
1. Add POST /users endpoint (non-breaking)
2. Create linked PRs to update web-client and mobile-app
3. Deprecate GET /users with sunset date
4. Remove GET /users after clients migrate
```
### Example 2: Coordinated Feature Release
**Scenario:** New authentication flow spanning 3 repos
```
User: "Implement OAuth2 across api-server, web-client, and mobile-app"
Skill Response:
1. Created linked PR set: "oauth2-implementation"
2. Dependency order: api-server -> web-client, mobile-app (parallel)
3. Created branches:
- api-server: feat/oauth2-backend
- web-client: feat/oauth2-frontend
- mobile-app: feat/oauth2-mobile
4. PRs created with cross-references:
- api-server#123 (merge first)
- web-client#456 (after #123)
- mobile-app#789 (after #123)
```
## Limitations
- Dependency graph is per-workspace (not centralized)
- Requires gh CLI authenticated for PR operations
- Breaking change detection is heuristic (may miss runtime changes)
- Circular dependencies are not supported (and shouldn't exist)
## Success Criteria
- Changes across repos are coordinated atomically
- Breaking changes are detected before they cause production issues
- PRs merge in correct dependency order
- Teams have visibility into cross-repo impacts
Related in General
modeling-omnistudio-epc-catalog
IncludedSalesforce Industries CME EPC product-modeling skill for Product2-based catalog creation. Use when creating EPC products, configuring product attributes, building offer bundles with Product Child Items, or reviewing EPC DataPack JSON metadata for product catalog changes. TRIGGER when: user creates or updates Product2 EPC records, AttributeAssignment payloads, AttributeMetadata/AttributeDefaultValues, Offer bundles, or ProductChildItem relationships. DO NOT TRIGGER when: designing OmniScripts/FlexCards/Integration Procedures (use building-omnistudio-omniscript, building-omnistudio-flexcard, or building-omnistudio-integration-procedure), implementing Apex business logic (use generating-apex), or troubleshooting deployment pipelines (use deploying-metadata).
relationship-science-coach
IncludedUse this skill for direct, practical adult relationship coaching: couples conflict, repair, trust, marriage, dating, flirting, attachment patterns, emotional connection, sex, desire differences, eroticism, kink negotiation, affection, love languages, breakups, and long-term passion. Draw on Gottman, EFT and Hold Me Tight, attachment science, modern sex research, Perel, Nagoski, Kerner, Schnarch, Love and Stosny, and flexible love-language tools. Be concrete and low-hedge. Redirect only for imminent danger, abuse, coercive control, minors, non-consent, self-harm, stalking, or medical/legal/psychiatric decisions.
building-sf-integrations
IncludedSalesforce integration architecture and runtime plumbing with 120-point scoring. Use this skill to set up Named Credentials, External Credentials, External Services, REST/SOAP callout patterns, Platform Events, and Change Data Capture. TRIGGER when: user sets up Named Credentials, External Services, REST/SOAP callouts, Platform Events, CDC, or touches .namedCredential-meta.xml files. DO NOT TRIGGER when: Connected App/OAuth config (use configuring-connected-apps), Apex-only logic (use generating-apex), or data import/export (use handling-sf-data).
venue-templates
IncludedAccess comprehensive LaTeX templates, formatting requirements, and submission guidelines for major scientific publication venues (Nature, Science, PLOS, IEEE, ACM), academic conferences (NeurIPS, ICML, CVPR, CHI), research posters, and grant proposals (NSF, NIH, DOE, DARPA). This skill should be used when preparing manuscripts for journal submission, conference papers, research posters, or grant proposals and need venue-specific formatting requirements and templates.
let-fate-decide
IncludedDraws the 12 Houses of the Zodiac Tarot spread to inject entropy into planning when prompts are vague, ambiguous, or casually delegated. Interprets the spread to guide next steps. Use when the user says 'let fate decide', 'YOLO', 'whatever', 'idk', or other nonchalant phrases, makes Yu-Gi-Oh references, or when you are about to arbitrarily pick between multiple reasonable approaches. Prefer over ask-questions-if-underspecified when the user's tone is casual or playful rather than precision-seeking.
net-ops
IncludedCross-platform network troubleshooting (Windows, macOS, Linux) via local or remote shell. Use for: DNS broken, can't resolve hostnames, nslookup/dig works but apps fail, NRPT, WFP, scutil, /etc/resolver, systemd-resolved, /etc/resolv.conf, NetworkManager, VPN DNS leak residue (ProtonVPN/Mullvad/WireGuard/AnyConnect), AV/firewall blocking DNS or DoH, Tailscale DNS interaction, intermittent connectivity, remote diagnostics over SSH.