Spawn multi-repo worktree workspaces for feature development
Project description
Spawnpoint
Spawn multi-repo worktree workspaces for feature development.
Working on a feature that spans multiple repos? Spawnpoint creates a dedicated folder with git worktrees from each repo on the same branch, installs dependencies, and copies over config files — so you can start coding (or start a Claude session) immediately.
Install
pipx install spawnpoint
Or with pip:
pip install spawnpoint
This installs both spawnpoint and sp as CLI commands. All examples below use sp for brevity.
Quick Start
sp create # select repos, name a branch, spawn worktrees
sp list # view all workspaces
sp add # add repos to the current workspace
sp cleanup # select and remove worktree workspaces
On first run, Spawnpoint will ask you to configure your scan directories and workspace location.
How It Works
- Select repos — Spawnpoint scans your code directories and presents a fuzzy-searchable list of git repos
- Name a branch — Enter a branch name for your feature
- Spawn — For each repo, Spawnpoint:
- Creates a git worktree (or new branch if needed)
- Initializes submodules
- Copies
.envfiles,CLAUDE.md, and other config files from the original repo - Installs dependencies (detects npm/pnpm/yarn/bun, pip/uv/poetry, bundler, go modules)
All worktrees land in a single folder (~/.spawnpoint/workspaces/<branch-name>/) so you can open the whole workspace in your editor or start an AI coding session.
Commands
| Command | Description |
|---|---|
sp create |
Spawn worktree workspaces |
sp list |
List all workspaces |
sp list --cd |
Interactively select a workspace to cd into |
sp add |
Add repos to the current workspace |
sp cleanup |
Remove worktree workspaces |
sp init |
Run interactive setup |
sp config |
View current config |
sp config --edit |
Edit config in $EDITOR |
sp config --reset |
Reset to defaults |
sp update |
Update to latest version |
sp --version |
Show version |
Adding repos to a workspace
When you're inside a spawnpoint workspace and need another repo, run:
sp add
Spawnpoint detects the current workspace and branch, shows repos not yet in the workspace, and adds them. If the workspace was originally single-repo, it automatically restructures to multi-repo layout.
Listing workspaces
sp list
Shows a table of all workspaces with repo count, branch, dirty status, and age.
Use sp list --cd (or sp list with shell integration) to interactively pick a workspace and cd into it.
Configuration
Config lives at ~/.spawnpoint/config.toml:
# Directories to scan for git repos
scan_dirs = ['~/code', '~/projects']
# Where workspaces are created
worktree_dir = '~/.spawnpoint/workspaces'
# Additional directories to scan during cleanup (for worktrees created at previous locations)
additional_worktree_dirs = []
# How deep to scan for repos (1-4)
scan_depth = 2
# Files/dirs to copy into new worktrees
copy_patterns_globs = ['.env*']
copy_patterns_files = ['AGENT.md', 'CLAUDE.md', 'GEMINI.md']
copy_patterns_dirs = ['.vscode', 'docs']
# Auto-install dependencies after worktree creation
auto_install_deps = true
Additional worktree dirs
If you change worktree_dir, workspaces created at the old location won't be found during cleanup. Add the old path to additional_worktree_dirs so cleanup and list can still find them:
worktree_dir = '~/new-location/workspaces'
additional_worktree_dirs = ['~/.spawnpoint/workspaces']
When creating a new branch, Spawnpoint automatically detects the repo's default branch to use as the base. No configuration needed.
Shell Integration
During sp init, you'll be offered to install a shell function that wraps common commands with auto-cd:
sp() {
local cmd="${1:-create}"
shift 2>/dev/null
local cd_file="$HOME/.spawnpoint/.cd_path"
rm -f "$cd_file"
case "$cmd" in
create) spawnpoint create "$@" ;;
list|ls) spawnpoint list --cd "$@" ;;
*) spawnpoint "$cmd" "$@" ;;
esac
if [ -f "$cd_file" ]; then
local dir=$(cat "$cd_file")
rm -f "$cd_file"
[ -n "$dir" ] && cd "$dir"
fi
}
With shell integration:
sp— create a workspace and cd into itsp listorsp ls— pick a workspace and cd into itsp cleanup,sp add, etc. — passed through to spawnpoint
Without shell integration, sp still works for all commands — you just won't get auto-cd for create/list.
Requirements
- Python 3.10+
- git
Uninstall
pipx uninstall spawnpoint
rm -rf ~/.spawnpoint
License
MIT
Project details
Release history Release notifications | RSS feed
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 spawnpoint-0.8.0.tar.gz.
File metadata
- Download URL: spawnpoint-0.8.0.tar.gz
- Upload date:
- Size: 2.0 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f4be7555bfd08d2a007dd22ec2604cff32ba92875628f4a49896f4d45ff9eb9a
|
|
| MD5 |
c3f6e10283ddfba16904c8656ad6b6e3
|
|
| BLAKE2b-256 |
f2f88de7ad2dde29a2f98567d04d2e67fee9a40c52f4bcc75d0d02838119c5fa
|
Provenance
The following attestation bundles were made for spawnpoint-0.8.0.tar.gz:
Publisher:
publish.yml on mihirgupta0900/spawnpoint
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
spawnpoint-0.8.0.tar.gz -
Subject digest:
f4be7555bfd08d2a007dd22ec2604cff32ba92875628f4a49896f4d45ff9eb9a - Sigstore transparency entry: 1109691503
- Sigstore integration time:
-
Permalink:
mihirgupta0900/spawnpoint@6dac6ffe07cf426d4fffc9bc60cd8a7a7bcbd571 -
Branch / Tag:
refs/tags/v0.8.0 - Owner: https://github.com/mihirgupta0900
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@6dac6ffe07cf426d4fffc9bc60cd8a7a7bcbd571 -
Trigger Event:
push
-
Statement type:
File details
Details for the file spawnpoint-0.8.0-py3-none-any.whl.
File metadata
- Download URL: spawnpoint-0.8.0-py3-none-any.whl
- Upload date:
- Size: 23.5 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 |
f9bbda1f441a3bd1dafa0eeb85c3eb9661c3d0ed3793b32b4531652f7212123c
|
|
| MD5 |
17fcfba98b74ad362c3843c8d452635d
|
|
| BLAKE2b-256 |
eca5f219978c028b5d9acedaf9a301c531d4dd90cc0ff13518ac0b04d795dd53
|
Provenance
The following attestation bundles were made for spawnpoint-0.8.0-py3-none-any.whl:
Publisher:
publish.yml on mihirgupta0900/spawnpoint
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
spawnpoint-0.8.0-py3-none-any.whl -
Subject digest:
f9bbda1f441a3bd1dafa0eeb85c3eb9661c3d0ed3793b32b4531652f7212123c - Sigstore transparency entry: 1109691534
- Sigstore integration time:
-
Permalink:
mihirgupta0900/spawnpoint@6dac6ffe07cf426d4fffc9bc60cd8a7a7bcbd571 -
Branch / Tag:
refs/tags/v0.8.0 - Owner: https://github.com/mihirgupta0900
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@6dac6ffe07cf426d4fffc9bc60cd8a7a7bcbd571 -
Trigger Event:
push
-
Statement type: