- Add pi-worktree-switch.ts with pure functions: - validateSwitchInput: validates target is non-empty - resolveWorktreeTarget: resolves path or branch name to worktree path - isAlreadyInWorktree: checks if cwd matches target - Wire up createSwitchWorktreeTool with full validation pipeline: 1. Validate input parameters 2. List worktrees and resolve target to path 3. Refuse if already in target worktree 4. Fail fast on uncommitted changes in source 5. Change cwd via ctx.chdir() 6. Return success with branch info - Remove dead resolveWorktreeTarget from main module - 21 unit tests, 103 total passing, 0 regressions |
||
|---|---|---|
| .pi/extensions | ||
| main@cd51baa2c1 | ||
| .gitignore | ||
| AGENTS.md | ||
| bunfig.toml | ||
| DESIGN.md | ||
| DOMAIN.md | ||
| package.json | ||
| README.md | ||
pi-worktree
A pi extension for managing git worktrees through intuitive tool commands and an interactive picker.
Tools
git_worktree_create
Create a linked worktree for a branch in the current repo.
{
path: string, // Path for the new worktree
branch?: string, // Branch name (new or existing). Defaults to 'main'.
create_branch?: boolean // Create a new branch? Defaults to true if branch doesn't exist.
}
Example: git_worktree_create({ path: "./feature-x", branch: "feature-x" })
git_worktree_list
List all linked worktrees in the current repo.
// No parameters required
Returns structured data with branch, path, and isCurrent for each worktree.
Example output (raw git worktree list format, parsed into structured data):
/home/user/repo abc1234 [main]
/home/user/repo/feature-x def5678 [feature-x]
git_worktree_switch
Switch pi's working directory to a linked worktree.
{
target: string // Path or branch name of the target worktree
}
Example: git_worktree_switch({ target: "./feature-x" })
After switching, you'll be offered the option to create a new session for that worktree context.
git_worktree_remove
Remove a linked worktree.
{
path: string // Path of the worktree to remove
}
Example: git_worktree_remove({ path: "./feature-x" })
Command
/worktree
Interactive picker to switch between linked worktrees.
Lists all worktrees with a branch-first display and lets you select one to switch to. Automatically updates pi's branch display after switching.
Behavior
- Fail fast: Refuses dangerous operations (existing paths, current branch, uncommitted changes) with clear messages and suggested fixes.
- Stateless tools: Each call works independently based on current git state.
- Session integration: Branch display updates automatically; you're offered a new session after switching worktrees.
- Back-switching: When returning to the main repo, pi restores the previous session.
Requirements
- pi >= 0.5.0 (with
ExtensionAPIandregisterCommandsupport) - Git 2.x with worktree support (all modern versions)
- No external npm dependencies — uses only pi's extension API and TypeBox schemas.