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. Three commands:
grv shell <repo> [branch] # Shell into a worktree (clones if needed)
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
# 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 |
list |
Show all worktrees with status |
clean |
Remove safe-to-clean worktrees |
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file grv-0.0.4.tar.gz.
File metadata
- Download URL: grv-0.0.4.tar.gz
- Upload date:
- Size: 43.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
04fbde8f0457afbe59f06881a9642941ee149d6147a6c89fffa8e63fd5b46040
|
|
| MD5 |
7d2f00677c853fe8ae21f03bf1c34296
|
|
| BLAKE2b-256 |
e99b5cd69b7bcb2bbfac5aec33ccedbd29755ad1c21c590f496090d158d78440
|
Provenance
The following attestation bundles were made for grv-0.0.4.tar.gz:
Publisher:
bump-and-release.yml on tssweeney/grv
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
grv-0.0.4.tar.gz -
Subject digest:
04fbde8f0457afbe59f06881a9642941ee149d6147a6c89fffa8e63fd5b46040 - Sigstore transparency entry: 799070687
- Sigstore integration time:
-
Permalink:
tssweeney/grv@0883465ea2e97d8d945d1fb621645d8f440fb56b -
Branch / Tag:
refs/heads/main - Owner: https://github.com/tssweeney
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
bump-and-release.yml@0883465ea2e97d8d945d1fb621645d8f440fb56b -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file grv-0.0.4-py3-none-any.whl.
File metadata
- Download URL: grv-0.0.4-py3-none-any.whl
- Upload date:
- Size: 9.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0ebf0c1be0303e4e16a0fc4c8771cd09a3aa7d9b8e1f57b2e541153a80383d7f
|
|
| MD5 |
b12608b8d54c69efaa8ee9f3efba11a4
|
|
| BLAKE2b-256 |
3291c562dad5c7f7daff9f52826226135c354cea9be1ead4c26f5754e5efecb4
|
Provenance
The following attestation bundles were made for grv-0.0.4-py3-none-any.whl:
Publisher:
bump-and-release.yml on tssweeney/grv
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
grv-0.0.4-py3-none-any.whl -
Subject digest:
0ebf0c1be0303e4e16a0fc4c8771cd09a3aa7d9b8e1f57b2e541153a80383d7f - Sigstore transparency entry: 799070696
- Sigstore integration time:
-
Permalink:
tssweeney/grv@0883465ea2e97d8d945d1fb621645d8f440fb56b -
Branch / Tag:
refs/heads/main - Owner: https://github.com/tssweeney
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
bump-and-release.yml@0883465ea2e97d8d945d1fb621645d8f440fb56b -
Trigger Event:
workflow_dispatch
-
Statement type: