Skip to main content

Git workspace manager using worktrees

Project description

grv

Git workspace manager using worktrees. Clone once, work on many branches simultaneously.

The Problem

With LLM agents reshaping the software engineering workflow, a new pattern is emerging: parallel feature development. Instead of context-switching between branches, developers now spin up multiple workstreams simultaneously—one branch per agent, per experiment, per idea.

Git worktrees are the natural primitive for this workflow. But the standard git worktree flow has friction:

  • You need the repo cloned locally first
  • You have to decide where to put each worktree
  • Worktrees scatter across your filesystem and get lost
  • Cleanup is manual and error-prone

Meanwhile, countless tools are appearing daily—each bundling worktree management with CLI agents, dev containers, and other features. But sometimes you just want the primitive.

The Solution

grv is an extremely minimalist worktree manager. Four commands:

grv shell <repo> [branch]  # Shell into a worktree (clones if needed)
grv dir <repo> [branch]    # Print worktree path (for piping)
grv list                    # Browse your worktrees
grv clean                   # Cleanup remotely-backed work

That's it. Use your favorite editor, CLI tools, whatever. But stay organized.

Install

# Run directly (no install needed)
uvx grv [command]

# Or install globally
pip install grv

Usage

# Open a shell in a worktree (clones repo if needed)
grv shell git@github.com:user/repo.git
grv shell git@github.com:user/repo.git feature-branch

# Jump straight to a PR
grv shell https://github.com/user/repo/pull/123

# Get worktree path for piping to other tools
grv dir git@github.com:user/repo.git | xargs code
grv dir https://github.com/user/repo/pull/42 | xargs code

# List all worktrees with status
grv list

# Clean up merged worktrees
grv clean
grv clean --dry-run

How it works

grv manages git worktrees in ~/.grv/:

~/.grv/repos/github_com_user_repo/
├── trunk/              # Base clone (blobless for speed)
└── tree_branches/
    ├── main/           # Worktree for main
    └── feature-branch/ # Worktree for feature-branch

Each branch gets its own directory. Switch between branches by switching directories.

Commands

Command Description
shell REPO [BRANCH] Open shell in worktree
dir REPO [BRANCH] Print worktree path to stdout
list Show all worktrees with status
clean Remove safe-to-clean worktrees

REPO can be a git URL or a GitHub PR URL (e.g., https://github.com/user/repo/pull/123). PR URLs require the GitHub CLI (gh) to be installed.

Configuration

Set GRV_ROOT to change the workspace location (default: ~/.grv).

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

grv-0.0.7.tar.gz (40.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

grv-0.0.7-py3-none-any.whl (13.4 kB view details)

Uploaded Python 3

File details

Details for the file grv-0.0.7.tar.gz.

File metadata

  • Download URL: grv-0.0.7.tar.gz
  • Upload date:
  • Size: 40.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for grv-0.0.7.tar.gz
Algorithm Hash digest
SHA256 65878676481f15473a3d13ac097c76de2fcab0d36b2129667009e44713470cfb
MD5 528be588acbcbcd3167c5d28b2c60164
BLAKE2b-256 88e29ac7657b34b848369156b8710fa2021a0af7f981f54fd0f68b8b77efa6db

See more details on using hashes here.

Provenance

The following attestation bundles were made for grv-0.0.7.tar.gz:

Publisher: bump-and-release.yml on tssweeney/grv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file grv-0.0.7-py3-none-any.whl.

File metadata

  • Download URL: grv-0.0.7-py3-none-any.whl
  • Upload date:
  • Size: 13.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for grv-0.0.7-py3-none-any.whl
Algorithm Hash digest
SHA256 943de86b1c6559493079f55d421fc5e2d827eba8a58b3684d8f3d4defe44f92c
MD5 c832de2ef858cb8a13ed4812d182629d
BLAKE2b-256 951d925476339512a093aa3e30c1270d8f7a28ac5468702ec9c2f6fdde19cc8a

See more details on using hashes here.

Provenance

The following attestation bundles were made for grv-0.0.7-py3-none-any.whl:

Publisher: bump-and-release.yml on tssweeney/grv

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page