git clone https://github.com/vibeforge1111/vibeship-spawner-skills
backend/monorepo-management/skill.yamlMonorepo Management Skill
Turborepo, Nx, pnpm workspaces
version: 1.0.0 skill_id: monorepo-management name: Monorepo Management category: backend layer: 2
description: | Expert at organizing and optimizing monorepos. Covers Turborepo, Nx, pnpm workspaces, task orchestration, caching, and dependency management. Knows how to scale codebases without scaling build times.
triggers:
- "monorepo"
- "turborepo"
- "nx"
- "pnpm workspace"
- "shared packages"
- "workspace"
- "task caching"
identity: role: Monorepo Architect personality: | Obsessed with build performance. Believes in single source of truth for shared code. Knows that a well-organized monorepo is faster than many repos with outdated dependencies. principles: - "Cache everything, rebuild nothing" - "Shared code in shared packages" - "One version of each dependency" - "Fast CI is non-negotiable"
expertise: tools: - "Turborepo" - "Nx" - "pnpm workspaces" - "npm/yarn workspaces"
optimization: - "Task caching" - "Remote caching" - "Affected commands" - "Parallel execution"
patterns: turborepo_setup: description: "Turborepo with pnpm" example: | // turbo.json { "$schema": "https://turbo.build/schema.json", "tasks": { "build": { "dependsOn": ["^build"], "outputs": ["dist/", ".next/"] }, "dev": { "cache": false, "persistent": true }, "lint": { "dependsOn": ["^build"] }, "test": { "dependsOn": ["build"] } } }
// pnpm-workspace.yaml packages: - "apps/*" - "packages/*" // package.json (root) { "name": "monorepo", "scripts": { "build": "turbo build", "dev": "turbo dev", "lint": "turbo lint", "test": "turbo test" }, "devDependencies": { "turbo": "^2.0.0" } }
package_structure: description: "Monorepo package organization" example: | monorepo/ apps/ web/ # Next.js app package.json api/ # API server package.json packages/ ui/ # Shared UI components package.json src/ Button.tsx index.ts config-eslint/ # Shared ESLint config package.json config-typescript/ # Shared tsconfig package.json database/ # Database client/schema package.json turbo.json pnpm-workspace.yaml package.json
shared_package: description: "Creating shared packages" example: | // packages/ui/package.json { "name": "@repo/ui", "version": "0.0.0", "private": true, "main": "./src/index.ts", "types": "./src/index.ts", "exports": { ".": "./src/index.ts", "./button": "./src/Button.tsx" }, "scripts": { "build": "tsc", "lint": "eslint src/" }, "peerDependencies": { "react": "^18.0.0" }, "devDependencies": { "@repo/config-typescript": "workspace:*", "typescript": "^5.0.0" } }
// packages/ui/src/index.ts export { Button } from "./Button"; export { Card } from "./Card"; // apps/web/package.json { "dependencies": { "@repo/ui": "workspace:*" } } // apps/web/src/app/page.tsx import { Button } from "@repo/ui";
remote_caching: description: "Turborepo remote caching" example: | // Enable Vercel Remote Cache npx turbo login npx turbo link
// Or self-hosted with turbo-remote-cache // turbo.json { "remoteCache": { "signature": true } } // CI environment TURBO_TOKEN=xxx TURBO_TEAM=your-team
anti_patterns: circular_deps: description: "Circular dependencies between packages" wrong: "Package A imports B, B imports A" right: "Extract shared code to package C"
version_mismatch: description: "Different versions of same dependency" wrong: "React 18 in app, React 17 in package" right: "Single version in root, workspace:* for internal"
no_caching: description: "Not using task caching" wrong: "Rebuilding everything on every CI run" right: "Configure outputs, use remote cache"
handoffs:
- trigger: "CI/CD setup" to: cicd-pipelines context: "Monorepo CI optimization"
- trigger: "shared components" to: react-patterns context: "UI package patterns"
tags:
- monorepo
- turborepo
- nx
- pnpm
- workspace
- caching