---
name: "monorepo-navigator"
description: "Monorepo Navigator"
Internal Safety Override
- Status: local-only unless explicitly opted into external access.
- Before using network tools, account connectors, browser automation, or APIs, state the destination, data scope, and credential source.
- Do not transmit repository files, secrets, credentials, or private documents by default.
- Audit categories: network, secrets.
Monorepo Navigator
Tier: POWERFUL
Category: Engineering
Domain: Monorepo Architecture / Build Systems
Overview
Navigate, manage, and optimize monorepos. Covers Turborepo, Nx, pnpm workspaces, and Lerna. Enables cross-package impact analysis, selective builds/tests on affected packages only, remote caching, dependency graph visualization, and structured migrations from multi-repo to monorepo. Includes an agent runtime configuration for workspace-aware development.
Core Capabilities
- Cross-package impact analysis — determine which apps break when a shared package changes
- Selective commands — run tests/builds only for affected packages (not everything)
- Dependency graph — visualize package relationships as Mermaid diagrams
- Build optimization — remote caching, incremental builds, parallel execution
- Migration — step-by-step multi-repo → monorepo with zero history loss
- Publishing — changesets for versioning, pre-release channels, npm publish workflows
- an agent runtime config — workspace-aware AI_RUNTIME_GUIDE.md with per-package instructions
When to Use
Use when:
- Multiple packages/apps share code (UI components, utils, types, API clients)
- Build times are slow because everything rebuilds when anything changes
- Migrating from multiple repos to a single repo
- Need to publish packages to npm with coordinated versioning
- Teams work across multiple packages and need unified tooling
Skip when:
- Single-app project with no shared packages
- Team/project boundaries are completely isolated (polyrepo is fine)
- Shared code is minimal and copy-paste overhead is acceptable
Tool Selection
| Tool |
Best For |
Key Feature |
| Turborepo |
JS/TS monorepos, simple pipeline config |
Best-in-class remote caching, minimal config |
| Nx |
Large enterprises, plugin ecosystem |
Project graph, code generation, affected commands |
| pnpm workspaces |
Workspace protocol, disk efficiency |
workspace:* for local package refs |
| Lerna |
npm publishing, versioning |
Batch publishing, conventional commits |
| Changesets |
Modern versioning (preferred over Lerna) |
Changelog generation, pre-release channels |
Most modern setups: pnpm workspaces + Turborepo + Changesets
Turborepo
→ See references/monorepo-tooling-reference.md for details
Workspace Analyzer
python3 scripts/monorepo_analyzer.py /path/to/monorepo
python3 scripts/monorepo_analyzer.py /path/to/monorepo --json
Also see references/monorepo-patterns.md for common architecture and CI patterns.
Common Pitfalls
| Pitfall |
Fix |
Running turbo run build without --filter on every PR |
Always use --filter=...[origin/main] in CI |
workspace:* refs cause publish failures |
Use pnpm changeset publish — it replaces workspace:* with real versions automatically |
| All packages rebuild when unrelated file changes |
Tune inputs in turbo.json to exclude docs, config files from cache keys |
| Shared tsconfig causes one package to break all type-checks |
Use extends properly — each package extends root but overrides rootDir / outDir |
| git history lost during migration |
Use git filter-repo --to-subdirectory-filter before merging — never move files manually |
| Remote cache not working in CI |
Check TURBO_TOKEN and TURBO_TEAM env vars; verify with turbo run build --summarize |
| AI_RUNTIME_GUIDE.md too generic — AI assistant modifies wrong package |
Add explicit "When working on X, only touch files in apps/X" rules per package AI_RUNTIME_GUIDE.md |
Best Practices
- Root AI_RUNTIME_GUIDE.md defines the map — document every package, its purpose, and dependency rules
- Per-package AI_RUNTIME_GUIDE.md defines the rules — what's allowed, what's forbidden, testing commands
- Always scope commands with --filter — running everything on every change defeats the purpose
- Remote cache is not optional — without it, monorepo CI is slower than multi-repo CI
- Changesets over manual versioning — never hand-edit package.json versions in a monorepo
- Shared configs in root, extended in packages — tsconfig.base.json, .eslintrc.base.js, jest.base.config.js
- Impact analysis before merging shared package changes — run affected check, communicate blast radius
- Keep packages/types as pure TypeScript — no runtime code, no dependencies, fast to build and type-check
1---2name: monorepo-navigator3description: ---4---5---6name: "monorepo-navigator"7description: "Monorepo Navigator"8---910## Internal Safety Override1112- Status: local-only unless explicitly opted into external access.13- Before using network tools, account connectors, browser automation, or APIs, state the destination, data scope, and credential source.14- Do not transmit repository files, secrets, credentials, or private documents by default.15- Audit categories: network, secrets.1617# Monorepo Navigator1819**Tier:** POWERFUL 20**Category:** Engineering 21**Domain:** Monorepo Architecture / Build Systems 2223---2425## Overview2627Navigate, manage, and optimize monorepos. Covers Turborepo, Nx, pnpm workspaces, and Lerna. Enables cross-package impact analysis, selective builds/tests on affected packages only, remote caching, dependency graph visualization, and structured migrations from multi-repo to monorepo. Includes an agent runtime configuration for workspace-aware development.2829---3031## Core Capabilities3233- **Cross-package impact analysis** — determine which apps break when a shared package changes34- **Selective commands** — run tests/builds only for affected packages (not everything)35- **Dependency graph** — visualize package relationships as Mermaid diagrams36- **Build optimization** — remote caching, incremental builds, parallel execution37- **Migration** — step-by-step multi-repo → monorepo with zero history loss38- **Publishing** — changesets for versioning, pre-release channels, npm publish workflows39- **an agent runtime config** — workspace-aware AI_RUNTIME_GUIDE.md with per-package instructions4041---4243## When to Use4445Use when:46- Multiple packages/apps share code (UI components, utils, types, API clients)47- Build times are slow because everything rebuilds when anything changes48- Migrating from multiple repos to a single repo49- Need to publish packages to npm with coordinated versioning50- Teams work across multiple packages and need unified tooling5152Skip when:53- Single-app project with no shared packages54- Team/project boundaries are completely isolated (polyrepo is fine)55- Shared code is minimal and copy-paste overhead is acceptable5657---5859## Tool Selection6061| Tool | Best For | Key Feature |62|---|---|---|63| **Turborepo** | JS/TS monorepos, simple pipeline config | Best-in-class remote caching, minimal config |64| **Nx** | Large enterprises, plugin ecosystem | Project graph, code generation, affected commands |65| **pnpm workspaces** | Workspace protocol, disk efficiency | `workspace:*` for local package refs |66| **Lerna** | npm publishing, versioning | Batch publishing, conventional commits |67| **Changesets** | Modern versioning (preferred over Lerna) | Changelog generation, pre-release channels |6869Most modern setups: **pnpm workspaces + Turborepo + Changesets**7071---7273## Turborepo74→ See references/monorepo-tooling-reference.md for details7576## Workspace Analyzer7778```bash79python3 scripts/monorepo_analyzer.py /path/to/monorepo80python3 scripts/monorepo_analyzer.py /path/to/monorepo --json81```8283Also see `references/monorepo-patterns.md` for common architecture and CI patterns.8485## Common Pitfalls8687| Pitfall | Fix |88|---|---|89| Running `turbo run build` without `--filter` on every PR | Always use `--filter=...[origin/main]` in CI |90| `workspace:*` refs cause publish failures | Use `pnpm changeset publish` — it replaces `workspace:*` with real versions automatically |91| All packages rebuild when unrelated file changes | Tune `inputs` in turbo.json to exclude docs, config files from cache keys |92| Shared tsconfig causes one package to break all type-checks | Use `extends` properly — each package extends root but overrides `rootDir` / `outDir` |93| git history lost during migration | Use `git filter-repo --to-subdirectory-filter` before merging — never move files manually |94| Remote cache not working in CI | Check TURBO_TOKEN and TURBO_TEAM env vars; verify with `turbo run build --summarize` |95| AI_RUNTIME_GUIDE.md too generic — AI assistant modifies wrong package | Add explicit "When working on X, only touch files in apps/X" rules per package AI_RUNTIME_GUIDE.md |9697---9899## Best Practices1001011. **Root AI_RUNTIME_GUIDE.md defines the map** — document every package, its purpose, and dependency rules1022. **Per-package AI_RUNTIME_GUIDE.md defines the rules** — what's allowed, what's forbidden, testing commands1033. **Always scope commands with --filter** — running everything on every change defeats the purpose1044. **Remote cache is not optional** — without it, monorepo CI is slower than multi-repo CI1055. **Changesets over manual versioning** — never hand-edit package.json versions in a monorepo1066. **Shared configs in root, extended in packages** — tsconfig.base.json, .eslintrc.base.js, jest.base.config.js1077. **Impact analysis before merging shared package changes** — run affected check, communicate blast radius1088. **Keep packages/types as pure TypeScript** — no runtime code, no dependencies, fast to build and type-check