Git Worktrees
Shire automatically detects git worktrees and maintains separate indexes for each one. This works out of the box with no configuration required.
How it works
When you run shire build or shire serve inside a linked worktree, shire:
- Detects the worktree by inspecting
.git— a directory means primary working tree, a file means linked worktree - Resolves a per-worktree DB path using the
{worktree}placeholder indb_path - Seeds from the primary worktree’s DB on first build, so you don’t start from scratch — only changed packages need reindexing
The primary worktree uses the reserved name _primary. Linked worktrees use Git’s stable worktree ID (the directory name under .git/worktrees/<id>).
Configuration
The default global config (generated by shire init --global) already includes worktree support:
db_path = "~/.claude/shire/{repo}/{worktree}/index.db"
This produces separate databases like:
~/.claude/shire/my-project/_primary/index.db
~/.claude/shire/my-project/feat-auth/index.db
~/.claude/shire/my-project/bugfix-123/index.db
Placeholders
| Placeholder | Description |
|---|---|
{repo} | Name of the main repository (directory basename) |
{worktree} | Worktree identifier — _primary for the main working tree, or Git’s worktree ID for linked worktrees |
Shared vs separate databases
If your db_path does not include {worktree}, all worktrees share the same database. This is fine for read-only use but means concurrent builds from different worktrees will conflict.
Including {worktree} in the path gives each worktree its own database, which is the recommended setup.
DB seeding
When shire builds in a linked worktree for the first time and no database exists yet, it checks whether the primary worktree has an existing database. If so, it copies that database as a seed — giving you a fully populated index immediately. Only packages that differ between the worktrees need reindexing.
$ cd ~/worktrees/feat-auth
$ shire build
Seeded DB from /Users/you/.claude/shire/my-project/_primary/index.db
Building index...
Local config
A local shire.toml at the repo root can use a relative db_path (e.g., .shire/index.db). Since each worktree has its own root directory, relative paths naturally resolve to separate databases per worktree. Seeding still applies in this case.