{"id":"426c063c-6b44-46c3-9c7b-e4bbe71151f2","shortId":"CG8hSZ","kind":"skill","title":"turborepo","tagline":"Turborepo monorepo build system guidance. Triggers on: turbo.json, task pipelines,\ndependsOn, caching, remote cache, the \"turbo\" CLI, --filter, --affected, CI optimization, environment\nvariables, internal packages, monorepo structure/best practices, and boundaries.\n\nUse when user","description":"# Turborepo Skill\n\nBuild system for JavaScript/TypeScript monorepos. Turborepo caches task outputs and runs tasks in parallel based on dependency graph.\n\n## IMPORTANT: Package Tasks, Not Root Tasks\n\n**DO NOT create Root Tasks. ALWAYS create package tasks.**\n\nWhen creating tasks/scripts/pipelines, you MUST:\n\n1. Add the script to each relevant package's `package.json`\n2. Register the task in root `turbo.json`\n3. Root `package.json` only delegates via `turbo run <task>`\n\n**DO NOT** put task logic in root `package.json`. This defeats Turborepo's parallelization.\n\n```json\n// DO THIS: Scripts in each package\n// apps/web/package.json\n{ \"scripts\": { \"build\": \"next build\", \"lint\": \"eslint .\", \"test\": \"vitest\" } }\n\n// apps/api/package.json\n{ \"scripts\": { \"build\": \"tsc\", \"lint\": \"eslint .\", \"test\": \"vitest\" } }\n\n// packages/ui/package.json\n{ \"scripts\": { \"build\": \"tsc\", \"lint\": \"eslint .\", \"test\": \"vitest\" } }\n```\n\n```json\n// turbo.json - register tasks\n{\n  \"tasks\": {\n    \"build\": { \"dependsOn\": [\"^build\"], \"outputs\": [\"dist/**\"] },\n    \"lint\": {},\n    \"test\": { \"dependsOn\": [\"build\"] }\n  }\n}\n```\n\n```json\n// Root package.json - ONLY delegates, no task logic\n{\n  \"scripts\": {\n    \"build\": \"turbo run build\",\n    \"lint\": \"turbo run lint\",\n    \"test\": \"turbo run test\"\n  }\n}\n```\n\n```json\n// DO NOT DO THIS - defeats parallelization\n// Root package.json\n{\n  \"scripts\": {\n    \"build\": \"cd apps/web && next build && cd ../api && tsc\",\n    \"lint\": \"eslint apps/ packages/\",\n    \"test\": \"vitest\"\n  }\n}\n```\n\nRoot Tasks (`//#taskname`) are ONLY for tasks that truly cannot exist in packages (rare).\n\n## Secondary Rule: `turbo run` vs `turbo`\n\n**Always use `turbo run` when the command is written into code:**\n\n```json\n// package.json - ALWAYS \"turbo run\"\n{\n  \"scripts\": {\n    \"build\": \"turbo run build\"\n  }\n}\n```\n\n```yaml\n# CI workflows - ALWAYS \"turbo run\"\n- run: turbo run build --affected\n```\n\n**The shorthand `turbo <tasks>` is ONLY for one-off terminal commands** typed directly by humans or agents. Never write `turbo build` into package.json, CI, or scripts.\n\n## Quick Decision Trees\n\n### \"I need to configure a task\"\n\n```\nConfigure a task?\n├─ Define task dependencies → references/configuration/tasks.md\n├─ Lint/check-types (parallel + caching) → Use Transit Nodes pattern (see below)\n├─ Specify build outputs → references/configuration/tasks.md#outputs\n├─ Handle environment variables → references/environment/RULE.md\n├─ Set up dev/watch tasks → references/configuration/tasks.md#persistent\n├─ Package-specific config → references/configuration/RULE.md#package-configurations\n└─ Global settings (cacheDir, daemon) → references/configuration/global-options.md\n```\n\n### \"My cache isn't working\"\n\n```\nCache problems?\n├─ Tasks run but outputs not restored → Missing `outputs` key\n├─ Cache misses unexpectedly → references/caching/gotchas.md\n├─ Need to debug hash inputs → Use --summarize or --dry\n├─ Want to skip cache entirely → Use --force or cache: false\n├─ Remote cache not working → references/caching/remote-cache.md\n└─ Environment causing misses → references/environment/gotchas.md\n```\n\n### \"I want to run only changed packages\"\n\n```\nRun only what changed?\n├─ Changed packages + dependents (RECOMMENDED) → turbo run build --affected\n├─ Custom base branch → --affected --affected-base=origin/develop\n├─ Manual git comparison → --filter=...[origin/main]\n└─ See all filter options → references/filtering/RULE.md\n```\n\n**`--affected` is the primary way to run only changed packages.** It automatically compares against the default branch and includes dependents.\n\n### \"I want to filter packages\"\n\n```\nFilter packages?\n├─ Only changed packages → --affected (see above)\n├─ By package name → --filter=web\n├─ By directory → --filter=./apps/*\n├─ Package + dependencies → --filter=web...\n├─ Package + dependents → --filter=...web\n└─ Complex combinations → references/filtering/patterns.md\n```\n\n### \"Environment variables aren't working\"\n\n```\nEnvironment issues?\n├─ Vars not available at runtime → Strict mode filtering (default)\n├─ Cache hits with wrong env → Var not in `env` key\n├─ .env changes not causing rebuilds → .env not in `inputs`\n├─ CI variables missing → references/environment/gotchas.md\n└─ Framework vars (NEXT_PUBLIC_*) → Auto-included via inference\n```\n\n### \"I need to set up CI\"\n\n```\nCI setup?\n├─ GitHub Actions → references/ci/github-actions.md\n├─ Vercel deployment → references/ci/vercel.md\n├─ Remote cache in CI → references/caching/remote-cache.md\n├─ Only build changed packages → --affected flag\n├─ Skip unnecessary builds → turbo-ignore (references/cli/commands.md)\n└─ Skip container setup when no changes → turbo-ignore\n```\n\n### \"I want to watch for changes during development\"\n\n```\nWatch mode?\n├─ Re-run tasks on change → turbo watch (references/watch/RULE.md)\n├─ Dev servers with dependencies → Use `with` key (references/configuration/tasks.md#with)\n├─ Restart dev server on dep change → Use `interruptible: true`\n└─ Persistent dev tasks → Use `persistent: true`\n```\n\n### \"I need to create/structure a package\"\n\n```\nPackage creation/structure?\n├─ Create an internal package → references/best-practices/packages.md\n├─ Repository structure → references/best-practices/structure.md\n├─ Dependency management → references/best-practices/dependencies.md\n├─ Best practices overview → references/best-practices/RULE.md\n├─ JIT vs Compiled packages → references/best-practices/packages.md#compilation-strategies\n└─ Sharing code between apps → references/best-practices/RULE.md#package-types\n```\n\n### \"How should I structure my monorepo?\"\n\n```\nMonorepo structure?\n├─ Standard layout (apps/, packages/) → references/best-practices/RULE.md\n├─ Package types (apps vs libraries) → references/best-practices/RULE.md#package-types\n├─ Creating internal packages → references/best-practices/packages.md\n├─ TypeScript configuration → references/best-practices/structure.md#typescript-configuration\n├─ ESLint configuration → references/best-practices/structure.md#eslint-configuration\n├─ Dependency management → references/best-practices/dependencies.md\n└─ Enforce package boundaries → references/boundaries/RULE.md\n```\n\n### \"I want to enforce architectural boundaries\"\n\n```\nEnforce boundaries?\n├─ Check for violations → turbo boundaries\n├─ Tag packages → references/boundaries/RULE.md#tags\n├─ Restrict which packages can import others → references/boundaries/RULE.md#rule-types\n└─ Prevent cross-package file imports → references/boundaries/RULE.md\n```\n\n## Critical Anti-Patterns\n\n### Using `turbo` Shorthand in Code\n\n**`turbo run` is recommended in package.json scripts and CI pipelines.** The shorthand `turbo <task>` is intended for interactive terminal use.\n\n```json\n// WRONG - using shorthand in package.json\n{\n  \"scripts\": {\n    \"build\": \"turbo build\",\n    \"dev\": \"turbo dev\"\n  }\n}\n\n// CORRECT\n{\n  \"scripts\": {\n    \"build\": \"turbo run build\",\n    \"dev\": \"turbo run dev\"\n  }\n}\n```\n\n```yaml\n# WRONG - using shorthand in CI\n- run: turbo build --affected\n\n# CORRECT\n- run: turbo run build --affected\n```\n\n### Root Scripts Bypassing Turbo\n\nRoot `package.json` scripts MUST delegate to `turbo run`, not run tasks directly.\n\n```json\n// WRONG - bypasses turbo entirely\n{\n  \"scripts\": {\n    \"build\": \"bun build\",\n    \"dev\": \"bun dev\"\n  }\n}\n\n// CORRECT - delegates to turbo\n{\n  \"scripts\": {\n    \"build\": \"turbo run build\",\n    \"dev\": \"turbo run dev\"\n  }\n}\n```\n\n### Using `&&` to Chain Turbo Tasks\n\nDon't chain turbo tasks with `&&`. Let turbo orchestrate.\n\n```json\n// WRONG - turbo task not using turbo run\n{\n  \"scripts\": {\n    \"changeset:publish\": \"bun build && changeset publish\"\n  }\n}\n\n// CORRECT\n{\n  \"scripts\": {\n    \"changeset:publish\": \"turbo run build && changeset publish\"\n  }\n}\n```\n\n### `prebuild` Scripts That Manually Build Dependencies\n\nScripts like `prebuild` that manually build other packages bypass Turborepo's dependency graph.\n\n```json\n// WRONG - manually building dependencies\n{\n  \"scripts\": {\n    \"prebuild\": \"cd ../../packages/types && bun run build && cd ../utils && bun run build\",\n    \"build\": \"next build\"\n  }\n}\n```\n\n**However, the fix depends on whether workspace dependencies are declared:**\n\n1. **If dependencies ARE declared** (e.g., `\"@repo/types\": \"workspace:*\"` in package.json), remove the `prebuild` script. Turbo's `dependsOn: [\"^build\"]` handles this automatically.\n\n2. **If dependencies are NOT declared**, the `prebuild` exists because `^build` won't trigger without a dependency relationship. The fix is to:\n   - Add the dependency to package.json: `\"@repo/types\": \"workspace:*\"`\n   - Then remove the `prebuild` script\n\n```json\n// CORRECT - declare dependency, let turbo handle build order\n// package.json\n{\n  \"dependencies\": {\n    \"@repo/types\": \"workspace:*\",\n    \"@repo/utils\": \"workspace:*\"\n  },\n  \"scripts\": {\n    \"build\": \"next build\"\n  }\n}\n\n// turbo.json\n{\n  \"tasks\": {\n    \"build\": {\n      \"dependsOn\": [\"^build\"]\n    }\n  }\n}\n```\n\n**Key insight:** `^build` only runs build in packages listed as dependencies. No dependency declaration = no automatic build ordering.\n\n### Overly Broad `globalDependencies`\n\n`globalDependencies` affects ALL tasks in ALL packages. Be specific.\n\n```json\n// WRONG - heavy hammer, affects all hashes\n{\n  \"globalDependencies\": [\"**/.env.*local\"]\n}\n\n// BETTER - move to task-level inputs\n{\n  \"globalDependencies\": [\".env\"],\n  \"tasks\": {\n    \"build\": {\n      \"inputs\": [\"$TURBO_DEFAULT$\", \".env*\"],\n      \"outputs\": [\"dist/**\"]\n    }\n  }\n}\n```\n\n### Repetitive Task Configuration\n\nLook for repeated configuration across tasks that can be collapsed. Turborepo supports shared configuration patterns.\n\n```json\n// WRONG - repetitive env and inputs across tasks\n{\n  \"tasks\": {\n    \"build\": {\n      \"env\": [\"API_URL\", \"DATABASE_URL\"],\n      \"inputs\": [\"$TURBO_DEFAULT$\", \".env*\"]\n    },\n    \"test\": {\n      \"env\": [\"API_URL\", \"DATABASE_URL\"],\n      \"inputs\": [\"$TURBO_DEFAULT$\", \".env*\"]\n    },\n    \"dev\": {\n      \"env\": [\"API_URL\", \"DATABASE_URL\"],\n      \"inputs\": [\"$TURBO_DEFAULT$\", \".env*\"],\n      \"cache\": false,\n      \"persistent\": true\n    }\n  }\n}\n\n// BETTER - use globalEnv and globalDependencies for shared config\n{\n  \"globalEnv\": [\"API_URL\", \"DATABASE_URL\"],\n  \"globalDependencies\": [\".env*\"],\n  \"tasks\": {\n    \"build\": {},\n    \"test\": {},\n    \"dev\": {\n      \"cache\": false,\n      \"persistent\": true\n    }\n  }\n}\n```\n\n**When to use global vs task-level:**\n\n- `globalEnv` / `globalDependencies` - affects ALL tasks, use for truly shared config\n- Task-level `env` / `inputs` - use when only specific tasks need it\n\n### NOT an Anti-Pattern: Large `env` Arrays\n\nA large `env` array (even 50+ variables) is **not** a problem. It usually means the user was thorough about declaring their build's environment dependencies. Do not flag this as an issue.\n\n### Using `--parallel` Flag\n\nThe `--parallel` flag bypasses Turborepo's dependency graph. If tasks need parallel execution, configure `dependsOn` correctly instead.\n\n```bash\n# WRONG - bypasses dependency graph\nturbo run lint --parallel\n\n# CORRECT - configure tasks to allow parallel execution\n# In turbo.json, set dependsOn appropriately (or use transit nodes)\nturbo run lint\n```\n\n### Package-Specific Task Overrides in Root turbo.json\n\nWhen multiple packages need different task configurations, use **Package Configurations** (`turbo.json` in each package) instead of cluttering root `turbo.json` with `package#task` overrides.\n\n```json\n// WRONG - root turbo.json with many package-specific overrides\n{\n  \"tasks\": {\n    \"test\": { \"dependsOn\": [\"build\"] },\n    \"@repo/web#test\": { \"outputs\": [\"coverage/**\"] },\n    \"@repo/api#test\": { \"outputs\": [\"coverage/**\"] },\n    \"@repo/utils#test\": { \"outputs\": [] },\n    \"@repo/cli#test\": { \"outputs\": [] },\n    \"@repo/core#test\": { \"outputs\": [] }\n  }\n}\n\n// CORRECT - use Package Configurations\n// Root turbo.json - base config only\n{\n  \"tasks\": {\n    \"test\": { \"dependsOn\": [\"build\"] }\n  }\n}\n\n// packages/web/turbo.json - package-specific override\n{\n  \"extends\": [\"//\"],\n  \"tasks\": {\n    \"test\": { \"outputs\": [\"coverage/**\"] }\n  }\n}\n\n// packages/api/turbo.json\n{\n  \"extends\": [\"//\"],\n  \"tasks\": {\n    \"test\": { \"outputs\": [\"coverage/**\"] }\n  }\n}\n```\n\n**Benefits of Package Configurations:**\n\n- Keeps configuration close to the code it affects\n- Root turbo.json stays clean and focused on base patterns\n- Easier to understand what's special about each package\n- Works with `$TURBO_EXTENDS$` to inherit + extend arrays\n\n**When to use `package#task` in root:**\n\n- Single package needs a unique dependency (e.g., `\"deploy\": { \"dependsOn\": [\"web#build\"] }`)\n- Temporary override while migrating\n\nSee `references/configuration/RULE.md#package-configurations` for full details.\n\n### Using `../` to Traverse Out of Package in `inputs`\n\nDon't use relative paths like `../` to reference files outside the package. Use `$TURBO_ROOT$` instead.\n\n```json\n// WRONG - traversing out of package\n{\n  \"tasks\": {\n    \"build\": {\n      \"inputs\": [\"$TURBO_DEFAULT$\", \"../shared-config.json\"]\n    }\n  }\n}\n\n// CORRECT - use $TURBO_ROOT$ for repo root\n{\n  \"tasks\": {\n    \"build\": {\n      \"inputs\": [\"$TURBO_DEFAULT$\", \"$TURBO_ROOT$/shared-config.json\"]\n    }\n  }\n}\n```\n\n### Missing `outputs` for File-Producing Tasks\n\n**Before flagging missing `outputs`, check what the task actually produces:**\n\n1. Read the package's script (e.g., `\"build\": \"tsc\"`, `\"test\": \"vitest\"`)\n2. Determine if it writes files to disk or only outputs to stdout\n3. Only flag if the task produces files that should be cached\n\n```json\n// WRONG: build produces files but they're not cached\n{\n  \"tasks\": {\n    \"build\": {\n      \"dependsOn\": [\"^build\"]\n    }\n  }\n}\n\n// CORRECT: build outputs are cached\n{\n  \"tasks\": {\n    \"build\": {\n      \"dependsOn\": [\"^build\"],\n      \"outputs\": [\"dist/**\"]\n    }\n  }\n}\n```\n\nCommon outputs by framework:\n\n- Next.js: `[\".next/**\", \"!.next/cache/**\"]`\n- Vite/Rollup: `[\"dist/**\"]`\n- tsc: `[\"dist/**\"]` or custom `outDir`\n\n**TypeScript `--noEmit` can still produce cache files:**\n\nWhen `incremental: true` in tsconfig.json, `tsc --noEmit` writes `.tsbuildinfo` files even without emitting JS. Check the tsconfig before assuming no outputs:\n\n```json\n// If tsconfig has incremental: true, tsc --noEmit produces cache files\n{\n  \"tasks\": {\n    \"typecheck\": {\n      \"outputs\": [\"node_modules/.cache/tsbuildinfo.json\"] // or wherever tsBuildInfoFile points\n    }\n  }\n}\n```\n\nTo determine correct outputs for TypeScript tasks:\n\n1. Check if `incremental` or `composite` is enabled in tsconfig\n2. Check `tsBuildInfoFile` for custom cache location (default: alongside `outDir` or in project root)\n3. If no incremental mode, `tsc --noEmit` produces no files\n\n### `^build` vs `build` Confusion\n\n```json\n{\n  \"tasks\": {\n    // ^build = run build in DEPENDENCIES first (other packages this one imports)\n    \"build\": {\n      \"dependsOn\": [\"^build\"]\n    },\n    // build (no ^) = run build in SAME PACKAGE first\n    \"test\": {\n      \"dependsOn\": [\"build\"]\n    },\n    // pkg#task = specific package's task\n    \"deploy\": {\n      \"dependsOn\": [\"web#build\"]\n    }\n  }\n}\n```\n\n### Environment Variables Not Hashed\n\n```json\n// WRONG: API_URL changes won't cause rebuilds\n{\n  \"tasks\": {\n    \"build\": {\n      \"outputs\": [\"dist/**\"]\n    }\n  }\n}\n\n// CORRECT: API_URL changes invalidate cache\n{\n  \"tasks\": {\n    \"build\": {\n      \"outputs\": [\"dist/**\"],\n      \"env\": [\"API_URL\", \"API_KEY\"]\n    }\n  }\n}\n```\n\n### `.env` Files Not in Inputs\n\nTurbo does NOT load `.env` files - your framework does. But Turbo needs to know about changes:\n\n```json\n// WRONG: .env changes don't invalidate cache\n{\n  \"tasks\": {\n    \"build\": {\n      \"env\": [\"API_URL\"]\n    }\n  }\n}\n\n// CORRECT: .env file changes invalidate cache\n{\n  \"tasks\": {\n    \"build\": {\n      \"env\": [\"API_URL\"],\n      \"inputs\": [\"$TURBO_DEFAULT$\", \".env\", \".env.*\"]\n    }\n  }\n}\n```\n\n### Root `.env` File in Monorepo\n\nA `.env` file at the repo root is an anti-pattern — even for small monorepos or starter templates. It creates implicit coupling between packages and makes it unclear which packages depend on which variables.\n\n```\n// WRONG - root .env affects all packages implicitly\nmy-monorepo/\n├── .env              # Which packages use this?\n├── apps/\n│   ├── web/\n│   └── api/\n└── packages/\n\n// CORRECT - .env files in packages that need them\nmy-monorepo/\n├── apps/\n│   ├── web/\n│   │   └── .env      # Clear: web needs DATABASE_URL\n│   └── api/\n│       └── .env      # Clear: api needs API_KEY\n└── packages/\n```\n\n**Problems with root `.env`:**\n\n- Unclear which packages consume which variables\n- All packages get all variables (even ones they don't need)\n- Cache invalidation is coarse-grained (root .env change invalidates everything)\n- Security risk: packages may accidentally access sensitive vars meant for others\n- Bad habits start small — starter templates should model correct patterns\n\n**If you must share variables**, use `globalEnv` to be explicit about what's shared, and document why.\n\n### Strict Mode Filtering CI Variables\n\nBy default, Turborepo filters environment variables to only those in `env`/`globalEnv`. CI variables may be missing:\n\n```json\n// If CI scripts need GITHUB_TOKEN but it's not in env:\n{\n  \"globalPassThroughEnv\": [\"GITHUB_TOKEN\", \"CI\"],\n  \"tasks\": { ... }\n}\n```\n\nOr use `--env-mode=loose` (not recommended for production).\n\n### Shared Code in Apps (Should Be a Package)\n\n```\n// WRONG: Shared code inside an app\napps/\n  web/\n    shared/          # This breaks monorepo principles!\n      utils.ts\n\n// CORRECT: Extract to a package\npackages/\n  utils/\n    src/utils.ts\n```\n\n### Accessing Files Across Package Boundaries\n\n```typescript\n// WRONG: Reaching into another package's internals\nimport { Button } from \"../../packages/ui/src/button\";\n\n// CORRECT: Install and import properly\nimport { Button } from \"@repo/ui/button\";\n```\n\n### Too Many Root Dependencies\n\n```json\n// WRONG: App dependencies in root\n{\n  \"dependencies\": {\n    \"react\": \"^18\",\n    \"next\": \"^14\"\n  }\n}\n\n// CORRECT: Only repo tools in root\n{\n  \"devDependencies\": {\n    \"turbo\": \"latest\"\n  }\n}\n```\n\n## Common Task Configurations\n\n### Standard Build Pipeline\n\n```json\n{\n  \"$schema\": \"https://v2-8-18-canary-7.turborepo.dev/schema.json\",\n  \"tasks\": {\n    \"build\": {\n      \"dependsOn\": [\"^build\"],\n      \"outputs\": [\"dist/**\", \".next/**\", \"!.next/cache/**\"]\n    },\n    \"dev\": {\n      \"cache\": false,\n      \"persistent\": true\n    }\n  }\n}\n```\n\nAdd a `transit` task if you have tasks that need parallel execution with cache invalidation (see below).\n\n### Dev Task with `^dev` Pattern (for `turbo watch`)\n\nA `dev` task with `dependsOn: [\"^dev\"]` and `persistent: false` in root turbo.json may look unusual but is **correct for `turbo watch` workflows**:\n\n```json\n// Root turbo.json\n{\n  \"tasks\": {\n    \"dev\": {\n      \"dependsOn\": [\"^dev\"],\n      \"cache\": false,\n      \"persistent\": false  // Packages have one-shot dev scripts\n    }\n  }\n}\n\n// Package turbo.json (apps/web/turbo.json)\n{\n  \"extends\": [\"//\"],\n  \"tasks\": {\n    \"dev\": {\n      \"persistent\": true  // Apps run long-running dev servers\n    }\n  }\n}\n```\n\n**Why this works:**\n\n- **Packages** (e.g., `@acme/db`, `@acme/validators`) have `\"dev\": \"tsc\"` — one-shot type generation that completes quickly\n- **Apps** override with `persistent: true` for actual dev servers (Next.js, etc.)\n- **`turbo watch`** re-runs the one-shot package `dev` scripts when source files change, keeping types in sync\n\n**Intended usage:** Run `turbo watch dev` (not `turbo run dev`). Watch mode re-executes one-shot tasks on file changes while keeping persistent tasks running.\n\n**Alternative pattern:** Use a separate task name like `prepare` or `generate` for one-shot dependency builds to make the intent clearer:\n\n```json\n{\n  \"tasks\": {\n    \"prepare\": {\n      \"dependsOn\": [\"^prepare\"],\n      \"outputs\": [\"dist/**\"]\n    },\n    \"dev\": {\n      \"dependsOn\": [\"prepare\"],\n      \"cache\": false,\n      \"persistent\": true\n    }\n  }\n}\n```\n\n### Transit Nodes for Parallel Tasks with Cache Invalidation\n\nSome tasks can run in parallel (don't need built output from dependencies) but must invalidate cache when dependency source code changes.\n\n**The problem with `dependsOn: [\"^taskname\"]`:**\n\n- Forces sequential execution (slow)\n\n**The problem with `dependsOn: []` (no dependencies):**\n\n- Allows parallel execution (fast)\n- But cache is INCORRECT - changing dependency source won't invalidate cache\n\n**Transit Nodes solve both:**\n\n```json\n{\n  \"tasks\": {\n    \"transit\": { \"dependsOn\": [\"^transit\"] },\n    \"my-task\": { \"dependsOn\": [\"transit\"] }\n  }\n}\n```\n\nThe `transit` task creates dependency relationships without matching any actual script, so tasks run in parallel with correct cache invalidation.\n\n**How to identify tasks that need this pattern:** Look for tasks that read source files from dependencies but don't need their build outputs.\n\n### With Environment Variables\n\n```json\n{\n  \"globalEnv\": [\"NODE_ENV\"],\n  \"globalDependencies\": [\".env\"],\n  \"tasks\": {\n    \"build\": {\n      \"dependsOn\": [\"^build\"],\n      \"outputs\": [\"dist/**\"],\n      \"env\": [\"API_URL\", \"DATABASE_URL\"]\n    }\n  }\n}\n```\n\n## Reference Index\n\n### Configuration\n\n| File                                                                            | Purpose                                                  |\n| ------------------------------------------------------------------------------- | -------------------------------------------------------- |\n| [configuration/RULE.md](./references/configuration/RULE.md)                     | turbo.json overview, Package Configurations              |\n| [configuration/tasks.md](./references/configuration/tasks.md)                   | dependsOn, outputs, inputs, env, cache, persistent       |\n| [configuration/global-options.md](./references/configuration/global-options.md) | globalEnv, globalDependencies, cacheDir, daemon, envMode |\n| [configuration/gotchas.md](./references/configuration/gotchas.md)               | Common configuration mistakes                            |\n\n### Caching\n\n| File                                                            | Purpose                                      |\n| --------------------------------------------------------------- | -------------------------------------------- |\n| [caching/RULE.md](./references/caching/RULE.md)                 | How caching works, hash inputs               |\n| [caching/remote-cache.md](./references/caching/remote-cache.md) | Vercel Remote Cache, self-hosted, login/link |\n| [caching/gotchas.md](./references/caching/gotchas.md)           | Debugging cache misses, --summarize, --dry   |\n\n### Environment Variables\n\n| File                                                          | Purpose                                   |\n| ------------------------------------------------------------- | ----------------------------------------- |\n| [environment/RULE.md](./references/environment/RULE.md)       | env, globalEnv, passThroughEnv            |\n| [environment/modes.md](./references/environment/modes.md)     | Strict vs Loose mode, framework inference |\n| [environment/gotchas.md](./references/environment/gotchas.md) | .env files, CI issues                     |\n\n### Filtering\n\n| File                                                        | Purpose                  |\n| ----------------------------------------------------------- | ------------------------ |\n| [filtering/RULE.md](./references/filtering/RULE.md)         | --filter syntax overview |\n| [filtering/patterns.md](./references/filtering/patterns.md) | Common filter patterns   |\n\n### CI/CD\n\n| File                                                      | Purpose                         |\n| --------------------------------------------------------- | ------------------------------- |\n| [ci/RULE.md](./references/ci/RULE.md)                     | General CI principles           |\n| [ci/github-actions.md](./references/ci/github-actions.md) | Complete GitHub Actions setup   |\n| [ci/vercel.md](./references/ci/vercel.md)                 | Vercel deployment, turbo-ignore |\n| [ci/patterns.md](./references/ci/patterns.md)             | --affected, caching strategies  |\n\n### CLI\n\n| File                                            | Purpose                                       |\n| ----------------------------------------------- | --------------------------------------------- |\n| [cli/RULE.md](./references/cli/RULE.md)         | turbo run basics                              |\n| [cli/commands.md](./references/cli/commands.md) | turbo run flags, turbo-ignore, other commands |\n\n### Best Practices\n\n| File                                                                          | Purpose                                                         |\n| ----------------------------------------------------------------------------- | --------------------------------------------------------------- |\n| [best-practices/RULE.md](./references/best-practices/RULE.md)                 | Monorepo best practices overview                                |\n| [best-practices/structure.md](./references/best-practices/structure.md)       | Repository structure, workspace config, TypeScript/ESLint setup |\n| [best-practices/packages.md](./references/best-practices/packages.md)         | Creating internal packages, JIT vs Compiled, exports            |\n| [best-practices/dependencies.md](./references/best-practices/dependencies.md) | Dependency management, installing, version sync                 |\n\n### Watch Mode\n\n| File                                        | Purpose                                         |\n| ------------------------------------------- | ----------------------------------------------- |\n| [watch/RULE.md](./references/watch/RULE.md) | turbo watch, interruptible tasks, dev workflows |\n\n### Boundaries (Experimental)\n\n| File                                                  | Purpose                                               |\n| ----------------------------------------------------- | ----------------------------------------------------- |\n| [boundaries/RULE.md](./references/boundaries/RULE.md) | Enforce package isolation, tag-based dependency rules |\n\n## Source Documentation\n\nThis skill is based on the official Turborepo documentation at:\n\n- Source: `apps/docs/content/docs/` in the Turborepo repository\n- Live: https://turborepo.dev/docs","tags":["turborepo","skills","antfu","agent-skills"],"capabilities":["skill","source-antfu","skill-turborepo","topic-agent-skills","topic-skills"],"categories":["skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/antfu/skills/turborepo","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add antfu/skills","source_repo":"https://github.com/antfu/skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 4670 github stars · SKILL.md body (26,201 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-22T06:52:50.562Z","embedding":null,"createdAt":"2026-04-18T21:53:50.230Z","updatedAt":"2026-04-22T06:52:50.562Z","lastSeenAt":"2026-04-22T06:52:50.562Z","tsv":"'/../packages/types':896 '/../packages/ui/src/button':2022 '/.env':1035 '/api':196 '/apps':461 '/dependencies.md':2586 '/docs':2640 '/packages.md':2574 '/references/best-practices/dependencies.md':2587 '/references/best-practices/packages.md':2575 '/references/best-practices/rule.md':2555 '/references/best-practices/structure.md':2564 '/references/boundaries/rule.md':2610 '/references/caching/gotchas.md':2461 '/references/caching/remote-cache.md':2452 '/references/caching/rule.md':2445 '/references/ci/github-actions.md':2512 '/references/ci/patterns.md':2525 '/references/ci/rule.md':2507 '/references/ci/vercel.md':2518 '/references/cli/commands.md':2538 '/references/cli/rule.md':2533 '/references/configuration/global-options.md':2430 '/references/configuration/gotchas.md':2437 '/references/configuration/rule.md':2416 '/references/configuration/tasks.md':2422 '/references/environment/gotchas.md':2485 '/references/environment/modes.md':2477 '/references/environment/rule.md':2472 '/references/filtering/patterns.md':2499 '/references/filtering/rule.md':2494 '/references/watch/rule.md':2598 '/rule.md':2554 '/schema.json':2066 '/shared-config.json':1450,1465 '/structure.md':2563 '/utils':901 '1':75,918,1483,1613 '14':2046 '18':2044 '2':85,939,1494,1623 '3':92,1507,1637 '50':1181 'access':1893,2006 'accident':1892 'acme/db':2165 'acme/validators':2166 'across':1061,1078,2008 'action':530,2515 'actual':1481,2184,2355 'add':76,961,2080 'affect':20,255,401,405,407,420,450,544,783,789,1019,1031,1148,1358,1813,2526 'affected-bas':406 'agent':272 'allow':1241,2317 'alongsid':1631 'altern':2236 'alway':66,224,237,248 'anoth':2015 'anti':725,1171,1785 'anti-pattern':724,1170,1784 'api':1083,1093,1103,1124,1694,1706,1716,1718,1752,1763,1827,1848,1851,1853,2406 'app':200,639,654,659,1825,1840,1979,1989,1990,2038,2153,2178 'appropri':1248 'apps/api/package.json':129 'apps/docs/content/docs':2632 'apps/web':192 'apps/web/package.json':120 'apps/web/turbo.json':2147 'architectur':693 'aren':475 'array':1175,1179,1384 'assum':1583 'auto':517 'auto-includ':516 'automat':431,938,1012 'avail':482 'bad':1899 'base':51,403,408,1324,1366,2616,2624 'bash':1228 'basic':2536 'benefit':1347 'best':624,2547,2552,2557,2561,2572,2584 'best-practic':2551,2560,2571,2583 'better':1037,1115 'boundari':31,687,694,696,701,2010,2605 'boundaries/rule.md':2609 'branch':404,436 'break':1994 'broad':1016 'build':4,37,122,124,131,139,150,152,158,168,171,190,194,241,244,254,276,308,400,541,548,758,760,766,769,782,788,812,814,823,826,857,866,873,880,891,899,904,905,907,935,949,980,989,991,994,996,999,1002,1013,1047,1081,1131,1197,1300,1330,1402,1446,1459,1490,1521,1530,1532,1534,1539,1541,1647,1649,1653,1655,1664,1666,1667,1670,1677,1687,1702,1712,1750,1761,2060,2068,2070,2252,2388,2400,2402 'built':2289 'bun':813,816,856,897,902 'button':2020,2029 'bypass':792,808,883,1214,1230 'cach':13,15,43,300,336,340,351,367,372,375,489,536,1111,1134,1518,1528,1537,1563,1595,1628,1710,1748,1759,1877,2076,2093,2134,2268,2278,2296,2322,2331,2364,2427,2441,2447,2455,2463,2527 'cachedir':332,2433 'caching/gotchas.md':2460 'caching/remote-cache.md':2451 'caching/rule.md':2444 'cannot':213 'caus':380,502,1699 'cd':191,195,895,900 'chain':833,838 'chang':388,393,394,428,448,500,542,558,567,577,595,1696,1708,1740,1744,1757,1885,2204,2230,2301,2325 'changeset':854,858,862,867 'check':697,1477,1579,1614,1624 'ci':21,246,279,508,526,527,538,740,779,1929,1943,1950,1964,2488,2509 'ci/cd':2503 'ci/github-actions.md':2511 'ci/patterns.md':2524 'ci/rule.md':2506 'ci/vercel.md':2517 'clean':1362 'clear':1843,1850 'clearer':2257 'cli':18,2529 'cli/commands.md':2537 'cli/rule.md':2532 'close':1353 'clutter':1280 'coars':1881 'coarse-grain':1880 'code':234,637,731,1356,1977,1986,2300 'collaps':1066 'combin':471 'command':230,266,2546 'common':1544,2056,2438,2500 'compar':432 'comparison':412 'compil':630,634,2581 'compilation-strategi':633 'complet':2176,2513 'complex':470 'composit':1618 'config':325,1122,1155,1325,2568 'configur':288,291,329,671,675,677,681,1056,1060,1070,1224,1238,1270,1273,1321,1350,1352,1411,2058,2412,2420,2439 'configuration/global-options.md':2429 'configuration/gotchas.md':2436 'configuration/rule.md':2415 'configuration/tasks.md':2421 'confus':1650 'consum':1863 'contain':554 'correct':764,784,818,860,974,1226,1237,1318,1451,1533,1608,1705,1754,1829,1907,1998,2023,2047,2122,2363 'coupl':1797 'coverag':1304,1308,1340,1346 'creat':63,67,71,613,666,1795,2349,2576 'create/structure':608 'creation/structure':612 'critic':723 'cross':718 'cross-packag':717 'custom':402,1556,1627 'daemon':333,2434 'databas':1085,1095,1105,1126,1846,2408 'debug':357,2462 'decis':283 'declar':917,922,944,975,1010,1195 'default':435,488,1050,1089,1099,1109,1449,1462,1630,1767,1932 'defeat':109,185 'defin':294 'deleg':96,163,798,819 'dep':594 'depend':53,296,396,439,463,467,584,621,682,874,886,892,911,915,920,941,955,963,976,983,1007,1009,1200,1217,1231,1397,1657,1806,2035,2039,2042,2251,2292,2298,2316,2326,2350,2382,2588,2617 'dependson':12,151,157,934,995,1225,1247,1299,1329,1400,1531,1540,1665,1676,1685,2069,2109,2132,2261,2266,2305,2314,2339,2344,2401,2423 'deploy':533,1399,1684,2520 'detail':1414 'determin':1495,1607 'dev':581,591,600,761,763,770,773,815,817,827,830,1101,1133,2075,2097,2100,2106,2110,2131,2133,2143,2150,2158,2168,2185,2199,2214,2218,2265,2603 'dev/watch':318 'devdepend':2053 'develop':569 'differ':1268 'direct':268,805 'directori':459 'disk':1501 'dist':154,1053,1543,1552,1554,1704,1714,2072,2264,2404 'document':1924,2620,2629 'dri':363,2466 'e.g':923,1398,1489,2164 'easier':1368 'emit':1577 'enabl':1620 'enforc':685,692,695,2611 'entir':368,810 'env':493,497,499,504,1045,1051,1075,1082,1090,1092,1100,1102,1110,1129,1159,1174,1178,1715,1720,1729,1743,1751,1755,1762,1768,1769,1771,1776,1812,1820,1830,1842,1849,1859,1884,1941,1960,1969,2396,2398,2405,2426,2473,2486 'env-mod':1968 'environ':23,313,379,473,478,1199,1688,1935,2391,2467 'environment/gotchas.md':2484 'environment/modes.md':2476 'environment/rule.md':2471 'envmod':2435 'eslint':126,134,142,199,676,680 'eslint-configur':679 'etc':2188 'even':1180,1575,1787,1871 'everyth':1887 'execut':1223,1243,2091,2223,2309,2319 'exist':214,947 'experiment':2606 'explicit':1918 'export':2582 'extend':1336,1342,1380,1383,2148 'extract':1999 'fals':373,1112,1135,2077,2113,2135,2137,2269 'fast':2320 'file':720,1431,1470,1499,1514,1523,1564,1574,1596,1646,1721,1730,1756,1772,1777,1831,2007,2203,2229,2380,2413,2442,2469,2487,2491,2504,2530,2549,2595,2607 'file-produc':1469 'filter':19,413,417,443,445,456,460,464,468,487,1928,1934,2490,2495,2501 'filtering/patterns.md':2498 'filtering/rule.md':2493 'first':1658,1674 'fix':910,958 'flag':545,1203,1210,1213,1474,1509,2541 'focus':1364 'forc':370,2307 'framework':512,1547,1732,2482 'full':1413 'general':2508 'generat':2174,2246 'get':1868 'git':411 'github':529,1953,1962,2514 'global':330,1141 'globaldepend':1017,1018,1034,1044,1119,1128,1147,2397,2432 'globalenv':1117,1123,1146,1915,1942,2394,2431,2474 'globalpassthroughenv':1961 'grain':1882 'graph':54,887,1218,1232 'guidanc':6 'habit':1900 'hammer':1030 'handl':312,936,979 'hash':358,1033,1691,2449 'heavi':1029 'hit':490 'host':2458 'howev':908 'human':270 'identifi':2368 'ignor':551,561,2523,2544 'implicit':1796,1816 'import':55,710,721,1663,2019,2026,2028 'includ':438,518 'incorrect':2324 'increment':1566,1590,1616,1640 'index':2411 'infer':520,2483 'inherit':1382 'input':359,507,1043,1048,1077,1087,1097,1107,1160,1422,1447,1460,1724,1765,2425,2450 'insid':1987 'insight':998 'instal':2024,2590 'instead':1227,1278,1438 'intend':746,2209 'intent':2256 'interact':748 'intern':25,615,667,2018,2577 'interrupt':597,2601 'invalid':1709,1747,1758,1878,1886,2094,2279,2295,2330,2365 'isn':337 'isol':2613 'issu':479,1207,2489 'javascript/typescript':40 'jit':628,2579 'js':1578 'json':113,145,159,180,235,751,806,845,888,973,1027,1072,1287,1439,1519,1586,1651,1692,1741,1948,2036,2062,2127,2258,2336,2393 'keep':1351,2205,2232 'key':350,498,587,997,1719,1854 'know':1738 'larg':1173,1177 'latest':2055 'layout':653 'let':842,977 'level':1042,1145,1158 'librari':661 'like':876,1428,2243 'lint':125,133,141,155,172,175,198,1235,1255 'lint/check-types':298 'list':1005 'live':2637 'load':1728 'local':1036 'locat':1629 'logic':104,166 'login/link':2459 'long':2156 'long-run':2155 'look':1057,2118,2374 'loos':1971,2480 'make':1801,2254 'manag':622,683,2589 'mani':1292,2033 'manual':410,872,879,890 'match':2353 'may':1891,1945,2117 'mean':1189 'meant':1896 'migrat':1406 'miss':348,352,381,510,1466,1475,1947,2464 'mistak':2440 'mode':486,571,1641,1927,1970,2220,2481,2594 'model':1906 'modules/.cache/tsbuildinfo.json':1601 'monorepo':3,27,41,649,650,1774,1790,1819,1839,1995,2556 'move':1038 'multipl':1265 'must':74,797,1911,2294 'my-monorepo':1817,1837 'my-task':2341 'name':455,2242 'need':286,355,522,606,1166,1221,1267,1394,1736,1835,1845,1852,1876,1952,2089,2288,2371,2386 'never':273 'next':123,193,514,906,990,1549,2045,2073 'next.js':1548,2187 'next/cache':1550,2074 'node':303,1252,1600,2273,2333,2395 'noemit':1559,1571,1593,1643 'offici':2627 'one':263,1662,1872,2141,2171,2196,2225,2249 'one-off':262 'one-shot':2140,2170,2195,2224,2248 'optim':22 'option':418 'orchestr':844 'order':981,1014 'origin/develop':409 'origin/main':414 'other':711,1898 'outdir':1557,1632 'output':45,153,309,311,345,349,1052,1303,1307,1311,1314,1317,1339,1345,1467,1476,1504,1535,1542,1545,1585,1599,1609,1703,1713,2071,2263,2290,2389,2403,2424 'outsid':1432 'over':1015 'overrid':1260,1286,1296,1335,1404,2179 'overview':626,2418,2497,2559 'packag':26,56,68,82,119,201,216,323,328,389,395,429,444,446,449,454,462,466,543,610,611,616,631,642,655,657,664,668,686,703,708,719,882,1004,1024,1257,1266,1272,1277,1284,1294,1320,1333,1349,1376,1388,1393,1410,1420,1434,1444,1486,1660,1673,1681,1799,1805,1815,1822,1828,1833,1855,1862,1867,1890,1983,2002,2003,2009,2016,2138,2145,2163,2198,2419,2578,2612 'package-configur':327,1409 'package-specif':322,1256,1293,1332 'package-typ':641,663 'package.json':84,94,107,161,188,236,278,737,756,795,927,965,982 'packages/api/turbo.json':1341 'packages/ui/package.json':137 'packages/web/turbo.json':1331 'parallel':50,112,186,299,1209,1212,1222,1236,1242,2090,2275,2285,2318,2361 'passthroughenv':2475 'path':1427 'pattern':304,726,1071,1172,1367,1786,1908,2101,2237,2373,2502 'persist':321,599,603,1113,1136,2078,2112,2136,2151,2181,2233,2270,2428 'pipelin':11,741,2061 'pkg':1678 'point':1605 'practic':29,625,2548,2553,2558,2562,2573,2585 'prebuild':869,877,894,930,946,971 'prepar':2244,2260,2262,2267 'prevent':716 'primari':423 'principl':1996,2510 'problem':341,1186,1856,2303,2312 'produc':1471,1482,1513,1522,1562,1594,1644 'product':1975 'project':1635 'proper':2027 'public':515 'publish':855,859,863,868 'purpos':2414,2443,2470,2492,2505,2531,2550,2596,2608 'put':102 'quick':282,2177 'rare':217 're':573,1526,2192,2222 're-execut':2221 're-run':572,2191 'reach':2013 'react':2043 'read':1484,2378 'rebuild':503,1700 'recommend':397,735,1973 'refer':1430,2410 'references/best-practices/dependencies.md':623,684 'references/best-practices/packages.md':617,632,669 'references/best-practices/rule.md':627,640,656,662 'references/best-practices/structure.md':620,672,678 'references/boundaries/rule.md':688,704,712,722 'references/caching/gotchas.md':354 'references/caching/remote-cache.md':378,539 'references/ci/github-actions.md':531 'references/ci/vercel.md':534 'references/cli/commands.md':552 'references/configuration/global-options.md':334 'references/configuration/rule.md':326,1408 'references/configuration/tasks.md':297,310,320,588 'references/environment/gotchas.md':382,511 'references/environment/rule.md':315 'references/filtering/patterns.md':472 'references/filtering/rule.md':419 'references/watch/rule.md':580 'regist':86,147 'relat':1426 'relationship':956,2351 'relev':81 'remot':14,374,535,2454 'remov':928,969 'repeat':1059 'repetit':1054,1074 'repo':1456,1780,2049 'repo/api':1305 'repo/cli':1312 'repo/core':1315 'repo/types':924,966,984 'repo/ui/button':2031 'repo/utils':986,1309 'repo/web':1301 'repositori':618,2565,2636 'restart':590 'restor':347 'restrict':706 'risk':1889 'root':59,64,90,93,106,160,187,204,790,794,1262,1281,1289,1322,1359,1391,1437,1454,1457,1464,1636,1770,1781,1811,1858,1883,2034,2041,2052,2115,2128 'rule':219,714,2618 'rule-typ':713 'run':47,99,170,174,178,221,227,239,243,250,251,253,343,386,390,399,426,574,733,768,772,780,785,787,801,803,825,829,852,865,898,903,1001,1234,1254,1654,1669,2154,2157,2193,2211,2217,2235,2283,2359,2535,2540 'runtim':484 'schema':2063 'script':78,116,121,130,138,167,189,240,281,738,757,765,791,796,811,822,853,861,870,875,893,931,972,988,1488,1951,2144,2200,2356 'secondari':218 'secur':1888 'see':305,415,451,1407,2095 'self':2457 'self-host':2456 'sensit':1894 'separ':2240 'sequenti':2308 'server':582,592,2159,2186 'set':316,331,524,1246 'setup':528,555,2516,2570 'share':636,1069,1121,1154,1912,1922,1976,1985,1992 'shorthand':257,729,743,754,777 'shot':2142,2172,2197,2226,2250 'singl':1392 'skill':36,2622 'skill-turborepo' 'skip':366,546,553 'slow':2310 'small':1789,1902 'solv':2334 'sourc':2202,2299,2327,2379,2619,2631 'source-antfu' 'special':1373 'specif':324,1026,1164,1258,1295,1334,1680 'specifi':307 'src/utils.ts':2005 'standard':652,2059 'start':1901 'starter':1792,1903 'stay':1361 'stdout':1506 'still':1561 'strategi':635,2528 'strict':485,1926,2478 'structur':619,647,651,2566 'structure/best':28 'summar':361,2465 'support':1068 'sync':2208,2592 'syntax':2496 'system':5,38 'tag':702,705,2615 'tag-bas':2614 'task':10,44,48,57,60,65,69,88,103,148,149,165,205,210,290,293,295,319,342,575,601,804,835,840,848,993,1021,1041,1046,1055,1062,1079,1080,1130,1144,1150,1157,1165,1220,1239,1259,1269,1285,1297,1327,1337,1343,1389,1445,1458,1472,1480,1512,1529,1538,1597,1612,1652,1679,1683,1701,1711,1749,1760,1965,2057,2067,2083,2087,2098,2107,2130,2149,2227,2234,2241,2259,2276,2281,2337,2343,2348,2358,2369,2376,2399,2602 'task-level':1040,1143,1156 'tasknam':206,2306 'tasks/scripts/pipelines':72 'templat':1793,1904 'temporari':1403 'termin':265,749 'test':127,135,143,156,176,179,202,1091,1132,1298,1302,1306,1310,1313,1316,1328,1338,1344,1492,1675 'thorough':1193 'token':1954,1963 'tool':2050 'topic-agent-skills' 'topic-skills' 'transit':302,1251,2082,2272,2332,2338,2340,2345,2347 'travers':1417,1441 'tree':284 'trigger':7,952 'true':598,604,1114,1137,1567,1591,2079,2152,2182,2271 'truli':212,1153 'tsbuildinfo':1573 'tsbuildinfofil':1604,1625 'tsc':132,140,197,1491,1553,1570,1592,1642,2169 'tsconfig':1581,1588,1622 'tsconfig.json':1569 'turbo':17,98,169,173,177,220,223,226,238,242,249,252,258,275,398,550,560,578,700,728,732,744,759,762,767,771,781,786,793,800,809,821,824,828,834,839,843,847,851,864,932,978,1049,1088,1098,1108,1233,1253,1379,1436,1448,1453,1461,1463,1725,1735,1766,2054,2103,2124,2189,2212,2216,2522,2534,2539,2543,2599 'turbo-ignor':549,559,2521,2542 'turbo.json':9,91,146,992,1245,1263,1274,1282,1290,1323,1360,2116,2129,2146,2417 'turborepo':1,2,35,42,110,884,1067,1215,1933,2628,2635 'turborepo.dev':2639 'turborepo.dev/docs':2638 'type':267,643,658,665,715,2173,2206 'typecheck':1598 'typescript':670,674,1558,1611,2011 'typescript-configur':673 'typescript/eslint':2569 'unclear':1803,1860 'understand':1370 'unexpect':353 'uniqu':1396 'unnecessari':547 'unusu':2119 'url':1084,1086,1094,1096,1104,1106,1125,1127,1695,1707,1717,1753,1764,1847,2407,2409 'usag':2210 'use':32,225,301,360,369,585,596,602,727,750,753,776,831,850,1116,1140,1151,1161,1208,1250,1271,1319,1387,1415,1425,1435,1452,1823,1914,1967,2238 'user':34,1191 'usual':1188 'util':2004 'utils.ts':1997 'v2-8-18-canary-7.turborepo.dev':2065 'v2-8-18-canary-7.turborepo.dev/schema.json':2064 'var':480,494,513,1895 'variabl':24,314,474,509,1182,1689,1809,1865,1870,1913,1930,1936,1944,2392,2468 'vercel':532,2453,2519 'version':2591 'via':97,519 'violat':699 'vite/rollup':1551 'vitest':128,136,144,203,1493 'vs':222,629,660,1142,1648,2479,2580 'want':364,384,441,563,690 'watch':565,570,579,2104,2125,2190,2213,2219,2593,2600 'watch/rule.md':2597 'way':424 'web':457,465,469,1401,1686,1826,1841,1844,1991 'wherev':1603 'whether':913 'without':953,1576,2352 'won':950,1697,2328 'work':339,377,477,1377,2162,2448 'workflow':247,2126,2604 'workspac':914,925,967,985,987,2567 'write':274,1498,1572 'written':232 'wrong':492,752,775,807,846,889,1028,1073,1229,1288,1440,1520,1693,1742,1810,1984,2012,2037 'yaml':245,774","prices":[{"id":"a3ddcc25-ad32-4959-8cef-b49f0ec63d32","listingId":"426c063c-6b44-46c3-9c7b-e4bbe71151f2","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"antfu","category":"skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:53:50.230Z"}],"sources":[{"listingId":"426c063c-6b44-46c3-9c7b-e4bbe71151f2","source":"github","sourceId":"antfu/skills/turborepo","sourceUrl":"https://github.com/antfu/skills/tree/main/skills/turborepo","isPrimary":false,"firstSeenAt":"2026-04-18T21:53:50.230Z","lastSeenAt":"2026-04-22T06:52:50.562Z"}],"details":{"listingId":"426c063c-6b44-46c3-9c7b-e4bbe71151f2","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"antfu","slug":"turborepo","github":{"repo":"antfu/skills","stars":4670,"topics":["agent-skills","skills"],"license":"mit","html_url":"https://github.com/antfu/skills","pushed_at":"2026-03-16T06:16:24Z","description":"Anthony Fu's curated collection of agent skills.","skill_md_sha":"424c357792360518ed702c5d23b0837b98937410","skill_md_path":"skills/turborepo/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/antfu/skills/tree/main/skills/turborepo"},"layout":"multi","source":"github","category":"skills","frontmatter":{"name":"turborepo","description":"Turborepo monorepo build system guidance. Triggers on: turbo.json, task pipelines,\ndependsOn, caching, remote cache, the \"turbo\" CLI, --filter, --affected, CI optimization, environment\nvariables, internal packages, monorepo structure/best practices, and boundaries.\n\nUse when user: configures tasks/workflows/pipelines, creates packages, sets up\nmonorepo, shares code between apps, runs changed/affected packages, debugs cache,\nor has apps/packages directories."},"skills_sh_url":"https://skills.sh/antfu/skills/turborepo"},"updatedAt":"2026-04-22T06:52:50.562Z"}}