Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
borghei avatar

Monorepo Navigator

  • 85 installs
  • 451 repo stars
  • Updated July 21, 2026
  • borghei/claude-skills

monorepo-navigator is a Claude Code skill that navigates and optimizes monorepos with Turborepo, Nx, pnpm workspaces, and Changesets.

About

monorepo-navigator is a skill for navigating, managing, and optimizing monorepos built with Turborepo, Nx, pnpm workspaces, and Changesets. It covers cross-package impact analysis, selective builds on affected packages, dependency graph visualization, remote caching, migration from multi-repo, and coordinated publishing. A developer uses it when build times are slow or when managing shared packages across many apps.

  • Runs affected-only builds and tests across Turborepo, Nx, and pnpm workspaces
  • Traces cross-package impact and visualizes dependency graphs
  • Configures remote caching and coordinated publishing with Changesets

Monorepo Navigator by the numbers

  • 85 all-time installs (skills.sh)
  • Ranked #578 of 1,435 DevOps & CI/CD skills by installs in the Skillselion catalog
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
At a glance

monorepo-navigator capabilities & compatibility

Capabilities
monorepo management · build optimization · dependency graph · package publishing
Works with
vercel
Use cases
ci cd · devops
From the docs

What monorepo-navigator says it does

Navigate, manage, and optimize monorepos with Turborepo, Nx, pnpm workspaces,
SKILL.md
Run tests/builds only for affected packages (not everything)
SKILL.md
Recommended modern stack:** pnpm workspaces + Turborepo + Changesets
SKILL.md
npx skills add https://github.com/borghei/claude-skills --skill monorepo-navigator

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs85
repo stars451
Last updatedJuly 21, 2026
Repositoryborghei/claude-skills

What it does

Speed up a monorepo by running builds and tests only on affected packages.

Who is it for?

Teams whose packages share code and whose build times are slow because everything rebuilds on every change.

Skip if: Single-package repositories with no shared internal packages.

When should I use this skill?

You are working in a monorepo, optimizing build times, or managing shared packages.

What you get

Selective affected-only builds, a clear dependency graph, remote caching, and coordinated publishing.

  • Selective build/test configuration
  • Dependency graph visualization
  • Remote caching and publishing setup

By the numbers

  • 4 tools compared: Turborepo, Nx, pnpm workspaces, Changesets
  • 3 bundled scripts: dependency_graph.py, impact_detector.py, package_analyzer.py

Files

SKILL.mdMarkdownGitHub ↗

Monorepo Navigator

Tier: POWERFUL Category: Engineering / Build Systems Maintainer: Claude Skills Team

Overview

Navigate, manage, and optimize monorepos at any scale. Covers Turborepo, Nx, pnpm workspaces, and Lerna/Changesets for cross-package impact analysis, selective builds on affected packages only, dependency graph visualization, remote caching configuration, migration from multi-repo to monorepo with preserved git history, and coordinated package publishing with automated changelogs.

Keywords

monorepo, Turborepo, Nx, pnpm workspaces, Changesets, dependency graph, remote cache, affected packages, selective builds, cross-package impact, npm publishing, workspace protocol

Core Capabilities

1. Impact Analysis

  • Determine which apps break when a shared package changes
  • Trace dependency chains from leaf packages to root apps
  • Visualize impact as Mermaid dependency graphs
  • Calculate blast radius for any file change

2. Selective Execution

  • Run tests/builds only for affected packages (not everything)
  • Filter by changed files since a git ref
  • Scope commands to specific packages and their dependents
  • Skip unchanged packages in CI for faster feedback

3. Build Optimization

  • Remote caching with Turborepo (Vercel) or Nx Cloud
  • Incremental builds with proper input/output configuration
  • Parallel execution with dependency-aware scheduling
  • Artifact sharing between CI jobs

4. Publishing

  • Changesets for coordinated versioning across packages
  • Automated changelog generation per package
  • Pre-release channels (alpha, beta, rc)
  • workspace:* protocol replacement during publish

When to Use

  • Multiple packages/apps share code (UI components, utils, types, API clients)
  • Build times are slow because everything rebuilds on every change
  • Migrating from multiple repos to a single monorepo
  • Publishing npm packages with coordinated versioning
  • Teams work across packages and need unified tooling

Tool Selection Decision Matrix

RequirementTurborepoNxpnpm WorkspacesChangesets
Simple task runnerBestGoodN/AN/A
Remote cachingBuilt-inNx CloudN/AN/A
Code generationNoBestN/AN/A
Dependency managementN/AN/ABestN/A
Package publishingN/AN/AN/ABest
Plugin ecosystemLimitedExtensiveN/AN/A
Config complexityMinimalModerateMinimalMinimal

Recommended modern stack: pnpm workspaces + Turborepo + Changesets

Monorepo Structure

my-monorepo/
├── apps/
│   ├── web/                    # Next.js frontend
│   │   ├── package.json        # depends on @repo/ui, @repo/utils
│   │   └── ...
│   ├── api/                    # Express/Fastify backend
│   │   ├── package.json        # depends on @repo/db, @repo/utils
│   │   └── ...
│   └── mobile/                 # React Native app
│       ├── package.json
│       └── ...
├── packages/
│   ├── ui/                     # Shared React components
│   │   ├── package.json        # @repo/ui
│   │   └── ...
│   ├── utils/                  # Shared utilities
│   │   ├── package.json        # @repo/utils
│   │   └── ...
│   ├── db/                     # Database client + schema
│   │   ├── package.json        # @repo/db
│   │   └── ...
│   ├── types/                  # Shared TypeScript types
│   │   ├── package.json        # @repo/types (no runtime deps)
│   │   └── ...
│   └── config/                 # Shared configs (tsconfig, eslint)
│       ├── tsconfig.base.json
│       └── eslint.base.js
├── turbo.json                  # Turborepo pipeline config
├── pnpm-workspace.yaml         # Workspace package locations
├── package.json                # Root scripts, devDependencies
└── .changeset/                 # Changeset config
    └── config.json

Turborepo Configuration

turbo.json

{
  "$schema": "https://turbo.build/schema.json",
  "globalDependencies": ["**/.env.*local"],
  "globalEnv": ["NODE_ENV", "CI"],
  "tasks": {
    "build": {
      "dependsOn": ["^build"],
      "inputs": ["src/**", "tsconfig.json", "package.json"],
      "outputs": ["dist/**", ".next/**", "!.next/cache/**"],
      "env": ["NEXT_PUBLIC_*"]
    },
    "test": {
      "dependsOn": ["^build"],
      "inputs": ["src/**", "tests/**", "vitest.config.*"],
      "outputs": ["coverage/**"]
    },
    "lint": {
      "dependsOn": ["^build"],
      "inputs": ["src/**", ".eslintrc.*", "tsconfig.json"]
    },
    "typecheck": {
      "dependsOn": ["^build"],
      "inputs": ["src/**", "tsconfig.json"]
    },
    "dev": {
      "cache": false,
      "persistent": true
    }
  }
}

Key Turborepo Commands

# Run all tasks
turbo run build

# Run only affected packages (compared to main)
turbo run build test --filter='...[origin/main]'

# Run for a specific package and its dependencies
turbo run build --filter=@repo/web...

# Run for a specific package only (no deps)
turbo run test --filter=@repo/ui

# Dry run to see what would execute
turbo run build --dry=json

# View dependency graph
turbo run build --graph=graph.html

# Summarize cache usage
turbo run build --summarize

pnpm Workspace Configuration

pnpm-workspace.yaml

packages:
  - 'apps/*'
  - 'packages/*'

Cross-Package References

// packages/ui/package.json
{
  "name": "@repo/ui",
  "version": "0.0.0",
  "main": "./src/index.ts",
  "types": "./src/index.ts",
  "dependencies": {
    "@repo/types": "workspace:*"
  }
}

// apps/web/package.json
{
  "name": "@repo/web",
  "dependencies": {
    "@repo/ui": "workspace:*",
    "@repo/utils": "workspace:*"
  }
}

Workspace Commands

# Install all workspace dependencies
pnpm install

# Add a dependency to a specific package
pnpm add zod --filter @repo/api

# Add a workspace package as dependency
pnpm add @repo/utils --filter @repo/web --workspace

# Run a script in a specific package
pnpm --filter @repo/web dev

# Run a script in all packages that have it
pnpm -r run build

# List all packages
pnpm -r ls --depth -1

Impact Analysis

Find All Dependents of a Changed Package

# Using turbo to see what depends on @repo/ui
turbo run build --filter='...@repo/ui' --dry=json | \
  jq '.tasks[].package' -r | sort -u

# Manual: search for imports of a package
grep -r "from '@repo/ui'" apps/ packages/ --include="*.ts" --include="*.tsx" -l

Dependency Graph Visualization

# Generate HTML visualization
turbo run build --graph=dependency-graph.html

# Generate DOT format for custom rendering
turbo run build --graph=deps.dot

# Quick Mermaid diagram from package.json files
echo "graph TD"
for pkg in packages/*/package.json apps/*/package.json; do
  name=$(jq -r '.name' "$pkg")
  jq -r '.dependencies // {} | keys[] | select(startswith("@repo/"))' "$pkg" | while read dep; do
    echo "  $name --> $dep"
  done
done

Remote Caching

Turborepo Remote Cache (Vercel)

# Login to Vercel (one-time)
turbo login

# Link repo to Vercel team
turbo link

# CI: set environment variables
# TURBO_TOKEN=<vercel-token>
# TURBO_TEAM=<team-slug>

# Verify remote cache works
turbo run build --summarize
# Look for "Remote cache: hit" entries

Self-Hosted Remote Cache

# Using ducktape/turborepo-remote-cache
docker run -p 3000:3000 \
  -e STORAGE_PROVIDER=local \
  -e STORAGE_PATH=/cache \
  ducktape/turborepo-remote-cache

# Configure turbo to use it
# turbo.json:
# { "remoteCache": { "apiUrl": "http://cache-server:3000" } }

CI/CD with Affected Packages Only

# .github/workflows/ci.yml
name: CI
on:
  pull_request:

jobs:
  build-and-test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0  # needed for --filter comparisons

      - uses: pnpm/action-setup@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20
          cache: 'pnpm'

      - run: pnpm install --frozen-lockfile

      # Only lint/test/build affected packages
      - run: turbo run lint test build --filter='...[origin/main]'
        env:
          TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
          TURBO_TEAM: ${{ vars.TURBO_TEAM }}

Publishing with Changesets

Setup

# Install changesets
pnpm add -D -w @changesets/cli @changesets/changelog-github

# Initialize
pnpm changeset init

.changeset/config.json

{
  "$schema": "https://unpkg.com/@changesets/config@3.0.0/schema.json",
  "changelog": ["@changesets/changelog-github", { "repo": "org/repo" }],
  "commit": false,
  "fixed": [],
  "linked": [["@repo/ui", "@repo/utils"]],
  "access": "public",
  "baseBranch": "main",
  "updateInternalDependencies": "patch"
}

Publishing Workflow

# 1. Developer adds a changeset for their changes
pnpm changeset
# Interactive: select packages, bump type (patch/minor/major), summary

# 2. Before release: consume changesets and bump versions
pnpm changeset version
# Updates package.json versions and CHANGELOG.md files

# 3. Publish to npm
pnpm changeset publish
# Replaces workspace:* with real versions and publishes

Migration: Multi-Repo to Monorepo

# 1. Preserve git history using filter-repo
# In each source repo:
git filter-repo --to-subdirectory-filter packages/ui
git filter-repo --to-subdirectory-filter apps/api

# 2. Create monorepo and merge histories
mkdir monorepo && cd monorepo && git init
git remote add ui ../old-ui-repo
git fetch ui --no-tags
git merge ui/main --allow-unrelated-histories

git remote add api ../old-api-repo
git fetch api --no-tags
git merge api/main --allow-unrelated-histories

# 3. Set up workspace configuration
# Add pnpm-workspace.yaml, turbo.json, root package.json

# 4. Update internal imports
# Change "ui-package" imports to "@repo/ui"
# Change npm versions to "workspace:*"

# 5. Verify
pnpm install
turbo run build test

Common Pitfalls

PitfallFix
Running turbo run build without --filter on every PRAlways use --filter='...[origin/main]' in CI
workspace:* breaks npm publishUse pnpm changeset publish which replaces automatically
All packages rebuild when unrelated file changesTune inputs in turbo.json to exclude docs, config files
Shared tsconfig breaks type-checks across packagesEach package extends root but overrides rootDir/outDir
Git history lost during migrationUse git filter-repo --to-subdirectory-filter before merging
Remote cache misses in CIVerify TURBO_TOKEN and TURBO_TEAM; check with --summarize
Import cycles between packagesUse madge --circular to detect; refactor shared code to a new package

Best Practices

1. Root package.json has no runtime dependencies — only devDependencies and scripts 2. Always scope commands with --filter in CI — running everything defeats the monorepo purpose 3. Remote cache is not optional — without it, monorepo CI is slower than multi-repo 4. Shared configs extend from root — tsconfig.base.json, eslint.base.js, vitest shared config 5. `packages/types` is pure TypeScript — no runtime code, no dependencies, fastest to build 6. Changesets over manual versioning — never hand-edit package.json versions in a monorepo 7. Impact analysis before merging shared package changes — check affected packages, communicate blast radius 8. *Keep workspace: for internal deps** — real version ranges are for external npm packages only

Troubleshooting

ProblemCauseSolution
turbo run build rebuilds everything despite no changesInputs glob is too broad or globalDependencies includes volatile filesNarrow inputs in turbo.json; exclude .env, docs, and test fixtures from build inputs
ERR_PNPM_PEER_DEP_ISSUES on installPeer dependency mismatches across workspace packagesAdd peerDependencyRules.ignoreMissing or peerDependencyRules.allowAny in root .npmrc or package.json
Remote cache reports 0% hit rate in CITURBO_TOKEN or TURBO_TEAM not set, or inputs/outputs changed between runsVerify env vars with turbo run build --summarize; ensure inputs/outputs are stable across branches
workspace:* version appears in published packagePublished with npm publish or pnpm publish instead of ChangesetsAlways use pnpm changeset publish which replaces workspace:* with resolved versions automatically
Circular dependency detected between packagesTwo packages import from each other directlyRun madge --circular to identify the cycle; extract shared code into a new leaf package with no internal deps
TypeScript Cannot find module '@repo/ui' in IDEIDE TypeScript server not resolving workspace pathsAdd paths mapping in root tsconfig.json or use TypeScript project references; restart TS server after changes
CI takes longer after monorepo migration than multi-repoMissing remote cache, no --filter, or fetch-depth: 1 preventing git comparisonsEnable remote caching, use --filter='...[origin/main]', and set fetch-depth: 0 in checkout action

Success Criteria

  • Build time reduction: CI pipeline completes affected-only builds in under 50% of full-build time within 2 weeks of adoption
  • Cache hit rate: Remote cache achieves 70%+ hit rate on PR builds after initial warm-up period
  • Impact visibility: Every PR includes an affected-packages summary showing blast radius of changes
  • Zero full rebuilds in CI: No CI workflow runs all packages unconditionally; every pipeline uses --filter or equivalent
  • Publishing reliability: Changesets workflow produces correct versions and changelogs with zero manual package.json edits per release cycle
  • Migration completeness: Multi-repo to monorepo migration preserves 100% of git history for all migrated packages
  • Developer onboarding: New team members can run, build, and test any package locally within 15 minutes using documented workspace commands

Scope & Limitations

This skill covers:

  • Turborepo, Nx, and pnpm workspace configuration and optimization
  • Cross-package dependency analysis and impact visualization
  • Remote caching setup (Vercel, Nx Cloud, self-hosted)
  • Changesets-based coordinated versioning and npm publishing

This skill does NOT cover:

  • Application-level build configuration (webpack, Vite, esbuild internals) — see performance-profiler
  • CI/CD pipeline design beyond monorepo-specific filters — see ci-cd-pipeline-builder
  • Git branching strategies and release flow — see release-manager
  • Dependency vulnerability scanning and license auditing — see dependency-auditor

Integration Points

SkillIntegrationData Flow
ci-cd-pipeline-builderMonorepo-aware CI workflows use --filter flags and remote caching tokensMonorepo Navigator defines filter patterns and cache config that CI pipelines consume
release-managerChangesets versioning feeds into release orchestration and tag managementRelease Manager triggers changeset version and changeset publish as part of release flow
dependency-auditorWorkspace dependency graph informs vulnerability and license scanning scopeMonorepo Navigator exports the package dependency tree that Dependency Auditor analyzes
performance-profilerBuild profiling data identifies slow packages for optimizationPerformance Profiler measures per-package build times surfaced by Turborepo --summarize
changelog-generatorChangesets produce per-package changelogs consumed by release notesChangeset summaries flow into Changelog Generator for formatted release documentation
tech-debt-trackerCross-package coupling and circular dependencies surface as tracked tech debt itemsMonorepo Navigator's impact analysis identifies coupling hotspots that Tech Debt Tracker records

Related skills

FAQ

Which monorepo tools does it cover?

Turborepo, Nx, pnpm workspaces, and Lerna/Changesets.

What is the recommended stack?

The skill recommends pnpm workspaces + Turborepo + Changesets as the modern stack.

DevOps & CI/CDdevopsbackendintegrations

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.