Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Work with multiple repositories in Cursor: multi-root workspaces, monorepo patterns, selective indexing, and cross-project context. Triggers on "cursor multi repo", "cursor multiple projects", "cursor monorepo", "cursor workspace", "multi-root workspace".
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 44% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 8% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 32% | 0% |
| case-16 | ✗→✓ | ▲ Improved | 233% | 0% |
| case-17 | ✗→✓ | ▲ Improved | 20% | 0% |
Work with multiple repositories and monorepo structures in Cursor. Covers multi-root workspaces, selective indexing, cross-project context, and rule inheritance patterns.
Open multiple project roots in a single Cursor window:
File > Open Folder > select project AFile > Add Folder to Workspace... > select project BFile > Save Workspace As... > mywork.code-workspacejson// mywork.code-workspace { "folders": [ { "path": "/home/dev/api-service" }, { "path": "/home/dev/web-frontend" }, { "path": "/home/dev/shared-lib" } ], "settings": { "editor.tabSize": 2, "files.exclude": { "**/node_modules": true, "**/dist": true } } }
Open workspace: cursor mywork.code-workspace or double-click the file.
@Codebase searches across all open roots@Files paths include the root name: @api-service/src/routes/users.tsbashcursor /path/to/monorepo
Pros: @Codebase searches everything, cross-package references work naturally Cons: Slow indexing on large monorepos, lots of irrelevant search results
bash# Open just the package you're working on cursor /path/to/monorepo/packages/api
Pros: Fast indexing, focused search results Cons: No automatic cross-package context
bash# Open the monorepo root but exclude what you don't need cursor /path/to/monorepo
gitignore# .cursorignore at monorepo root # Only index packages you're actively working on # Exclude everything in packages/ packages/*/ # Except the ones you want indexed: !packages/api/ !packages/shared/ # Always exclude node_modules/ dist/ build/ .turbo/
This indexes only packages/api/ and packages/shared/, keeping search focused.
In a multi-root workspace, use the root folder name as prefix:
@api-service/src/types/user.ts @web-frontend/src/hooks/useAuth.ts
The User type in the API doesn't match the frontend hook.
Show me the differences and suggest how to share the type.Use project rules to guide cross-project imports:
yaml# .cursor/rules/monorepo-imports.mdc (in monorepo root) --- description: "Monorepo import conventions" globs: "" alwaysApply: true --- # Import Rules - Shared types: import from @myorg/shared (never relative paths across packages) - Shared UI: import from @myorg/ui - Never import directly from another app package (apps/api → apps/web is forbidden) - Each package declares its own dependencies in package.json
monorepo/
├── .cursor/rules/
│ ├── global.mdc # alwaysApply: true (applies everywhere)
│ └── security.mdc # alwaysApply: true
├── packages/
│ ├── api/
│ │ └── .cursor/rules/
│ │ └── api-patterns.mdc # Scoped to api/ files
│ ├── web/
│ │ └── .cursor/rules/
│ │ └── react-patterns.mdc # Scoped to web/ files
│ └── shared/Behavior:
In a multi-root workspace, each root has its own .cursor/rules/:
# Workspace contains:
api-service/
.cursor/rules/express-patterns.mdc # Only applies to api-service files
web-frontend/
.cursor/rules/react-patterns.mdc # Only applies to web-frontend filesRules do NOT cross workspace roots. Each project's rules are independent.
bashcursor packages/api/ # Only indexes packages/api/ # Fast, focused, no cross-package noise
gitignore# .cursorignore at monorepo root packages/*/ !packages/api/ !packages/shared/ !packages/config/
gitignore# .cursorignore node_modules/ dist/ build/ .turbo/ .next/ coverage/ *.lock *.min.js **/*.test.ts # Optional: exclude tests from indexing **/fixtures/ # Test fixtures **/migrations/ # Database migrations (reference via @Files)
Each open workspace root consumes memory for indexing. Minimize open roots:
# Instead of opening 5 repos:
cursor repo1/ repo2/ repo3/ repo4/ repo5/ # Heavy
# Open only what you need:
cursor repo1/ # Light
# Add repo2/ only when needed via File > Add Folder1. Use .cursorignore aggressively
2. Open specific packages, not the root
3. Close workspace folders you're not actively editing
4. Start new chats when switching between packages
5. Use @Files for cross-package references instead of @Codebase.cursor/rules/ should be reviewed in PRs like any other configuration change.Other measured skills in the registry, with their headline benchmark lift.