Skip to main content

What Are Worktrees?

Worktrees let multiple directories share a single ByteRover context tree. Instead of each directory maintaining its own .brv/ knowledge base, child directories point back to a parent project. Curate once, query everywhere. This is especially useful for:
  • Monorepos — All packages share the root project’s context tree
  • Git worktrees — Parallel checkouts share knowledge without re-curating
  • Sibling directories — Related projects under a common parent

How It Works

ByteRover uses a git-style .brv file/directory duality — the same pattern Git uses for .git in worktrees:
What you seeWhat it means
.brv/ directoryThis is the real project — contains config.json, context tree, configuration
.brv fileThis is a worktree pointer — contains a path to the parent project
No .brvNo project configured — brv will auto-initialize on first run
When you add a worktree, ByteRover:
  1. Creates a .brv file (not directory) in the target, pointing to the parent
  2. Registers the worktree in the parent’s .brv/worktrees/ directory
monorepo/
  .brv/                               # real project (directory)
    ├── config.json
    ├── context-tree/
    └── worktrees/
        ├── packages-api/
        │   └── link.json             # registration metadata
        └── packages-web/
            └── link.json
  packages/
    api/
      .brv                            # pointer FILE: {"projectRoot": "/monorepo"}
    web/
      .brv                            # pointer FILE: {"projectRoot": "/monorepo"}

Resolution

When you run any brv command from a worktree directory, ByteRover walks up from the current directory and stops at the first .brv it finds:
  • If it’s a directory — you’re in the real project
  • If it’s a file — follow the pointer to the parent project
This means queries, curations, and status checks from packages/api/ automatically use the monorepo’s context tree.

Commands

All worktree commands are available as both CLI commands and TUI slash commands.

worktree add

Register a directory as a worktree of the current project.
brv worktree add [path] [--force]
Arguments:
ArgumentDescriptionRequired
pathPath to the target directory (relative or absolute)No — defaults to current directory
Flags:
FlagDescription
--forceIf the target already has a .brv/ directory, back it up to .brv-backup/ and replace with a pointer
Examples:
# From the monorepo root, add a package
cd /monorepo
brv worktree add packages/api

# Add a sibling checkout
brv worktree add ../sibling-checkout

# Auto-detect: from inside a subdirectory, add yourself
cd /monorepo/packages/api
brv worktree add

# Force-add when target already has its own .brv/ directory
brv worktree add packages/api --force
# Output: Added worktree ".../packages/api" (existing .brv/ backed up to .brv-backup/).
Without --force, the command will fail if the target already has a .brv/ directory. Use --force to safely migrate — the existing directory is backed up and restored on removal.

worktree list

Show the current worktree status and all registered worktrees.
brv worktree list
Example output from a linked worktree:
Worktree: /monorepo/packages/api
Linked to: /monorepo

Registered worktrees:
   packages-api → /monorepo/packages/api
   packages-web → /monorepo/packages/web
Example output from the project root:
Project: /monorepo

Registered worktrees:
   packages-api → /monorepo/packages/api
   packages-web → /monorepo/packages/web

worktree remove

Remove a worktree registration and delete its .brv pointer file.
brv worktree remove [path]
Arguments:
ArgumentDescriptionRequired
pathPath to the worktree to remove (relative or absolute)No — defaults to current directory
Examples:
# Remove from the parent project
cd /monorepo
brv worktree remove packages/api

# Remove from inside the worktree itself
cd /monorepo/packages/api
brv worktree remove
If the worktree was added with --force (and a .brv-backup/ exists), the backup is automatically restored as .brv/ on removal. Your original context tree is preserved.

Backup and Recovery

The --force flag enables safe migration of directories that already have their own .brv/ setup:
# Before: packages/api has its own curated knowledge
ls packages/api/.brv/
# config.json  context-tree/

# Add as worktree with --force
brv worktree add packages/api --force
# Existing .brv/ backed up to .brv-backup/

ls packages/api/
# .brv              (pointer file)
# .brv-backup/      (original directory, preserved)

# Later, if you remove the worktree:
brv worktree remove packages/api
# .brv-backup/ restored as .brv/

ls packages/api/.brv/
# config.json  context-tree/   (original content restored)

Error Handling

ErrorCauseResolution
Cannot add project root as its own worktreeYou tried to add the project to itselfAdd a subdirectory or external path instead
Target directory does not existThe specified path doesn’t existCheck the path and try again
Target already has .brv/ directoryTarget has its own project setupUse --force to migrate, or remove the existing .brv/ first
Already linked to a different parentTarget’s .brv file points elsewhereRun brv worktree remove in the target first
Worktree pointer brokenParent project’s .brv/config.json was deletedRun brv worktree remove to clean up the stale pointer
Broken pointer errors include recovery instructions. If you see one, follow the suggested command to clean up.

Integration with Other Features

Queries and Curation

From a linked worktree, all queries and curations operate on the parent project’s context tree:
cd /monorepo/packages/api
brv query "auth patterns"         # searches monorepo's context tree
brv curate "API rate limiting"    # curates to monorepo's context tree

Sources

Sources configured in the parent project are automatically available from all worktrees:
cd /monorepo
brv source add /path/to/design-system --alias design

cd /monorepo/packages/api
brv query "button component"
# Searches: monorepo context tree + design-system source

Status

brv status shows worktree information when you’re in a linked directory:
Worktree: /monorepo/packages/api (linked)