npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@gotgenes/pi-subagents-worktrees

v0.3.2

Published

Git worktree isolation for @gotgenes/pi-subagents — a WorkspaceProvider that runs subagents in isolated worktrees.

Readme

@gotgenes/pi-subagents-worktrees

npm version CI License: MIT TypeScript pnpm Pi Package

Git worktree isolation for @gotgenes/pi-subagents.

This extension registers a WorkspaceProvider with the subagents core: opted-in agents run in a temporary git worktree (an isolated copy of the repo), and any changes they make are saved to a branch when they finish. Worktrees are one workspace strategy, not core behavior — so the git plumbing lives here, outside the minimal subagents core (see ADR-0002 in the pi-subagents package).

Install

Install after @gotgenes/pi-subagents. Pi loads packages in the order they are listed in .pi/settings.json, and this extension registers its provider with the subagents service at load time — so the subagents core must load first.

{
  "packages": [
    "npm:@gotgenes/pi-subagents",
    "npm:@gotgenes/pi-subagents-worktrees"
  ]
}

If @gotgenes/pi-subagents is not loaded first (or not installed at all), this extension does nothing.

Configuration

Worktree isolation is opt-in per agent type. List the agent types that should run in a worktree in a subagents-worktrees.json file:

  • Global: ~/.pi/agent/subagents-worktrees.json
  • Project: <cwd>/.pi/subagents-worktrees.json (overrides global)
{
  "worktreeAgents": ["general-purpose", "refactorer"]
}

An agent type not in worktreeAgents runs in the parent working directory, exactly as if this extension were not installed.

Behavior

  • A child whose agent type is listed gets a fresh detached worktree at HEAD before it runs.
  • When the child ends its turn with a question for you, the worktree is kept so the child can be resumed into it; cleanup happens when the resumed child finishes instead. A question you never answer keeps the worktree until the subagents core releases the child's session.
  • When the child finishes with no changes, the worktree is removed.
  • When the child finishes with changes, they are committed to a branch (pi-agent-<id>), and the child's result gains a note: Changes saved to branch \`. Merge with: `git merge ``.
  • If a commit hook rejects that commit, it is retried once with --no-verify, because the commit exists to rescue work the child already did and a rejecting hook would otherwise cost you that work. Files a hook rewrote before failing are re-staged, so a formatter's corrections are committed rather than discarded. The note then gains a second line reading Commit hooks were bypassed to save this work — review the commit before merging.
  • If cleanup fails for any other reason, the worktree is left in place rather than removed, and the child's result gains a note: Worktree cleanup failed; the worktree was left in place at \` for manual recovery: `. Nothing is deleted while its state is uncertain, so the work stays recoverable.
  • If worktree creation fails for an opted-in agent (not a git repo, no commits yet, or git worktree add fails), the child run fails with an explanatory error rather than silently running unisolated.
  • At the start of every session with a UI, any rescue worktrees still on disk are named in a warning, so a preserved worktree is not forgotten once the child's result scrolls out of view.

Recovering preserved worktrees

A preserved worktree is a plain git worktree with the agent's work still in it. Inspect it with git -C <path> status, and recover the work however you normally would — commit it on a branch, or copy the files out.

Run /subagents-worktrees at any time to list the preserved worktrees for the current repository. Selecting one offers to remove it, and removal happens only after you confirm — nothing here is ever deleted automatically, because a failed cleanup is exactly the case where the content is not safe to discard on the extension's judgment.

A worktree is listed when it is registered with the repository, named with this package's pi-agent- prefix, still on disk, and not currently in use by a child of this session. A worktree belonging to a different Pi process running against the same repository cannot be told apart from an abandoned one, so it is listed too — check the path before removing anything.

Migrating from isolation: "worktree"

Earlier versions of @gotgenes/pi-subagents accepted an isolation: "worktree" spawn flag. That flag was removed from the core; install this package and list the agent types you want isolated in worktreeAgents instead.

Scope and non-goals

Purpose. The subagents core asks a WorkspaceProvider where each child session should run. This package is one answer: opted-in agents get a temporary git worktree, and whatever they produce is rescued to a branch when they finish.

In scope. The git plumbing bracketing a child run, not losing the child's work when cleanup fails, and making a preserved worktree discoverable and removable.

Non-goals.

  • Workspaces for anything but subagent child sessions. Worktrees for parallel human-driven Pi sessions are a different mechanism, with different lifetimes and naming, and are not served from here.
  • Anything after the rescue branch. Merging it, opening a PR from it, or cleaning up old pi-agent-* branches is your workflow.
  • Deleting a preserved worktree automatically. A failed cleanup is exactly the case where the content is not safe to discard on the extension's judgment.
  • Handing removal to the agent. Recovery is a slash command rather than a tool, keeping a destructive git worktree remove --force out of the model's reach.
  • Worktree knowledge in the subagents core. git does not appear there; uninstalling this package leaves children running in the parent's directory.

Where adjacent requests belong. Whether a child gets an isolated workspace at all, the seam that asks, and a child's system prompt or working-directory claim → @gotgenes/pi-subagents.

License

MIT