Skip to main content

Spawn multi-repo worktree workspaces for feature development

Project description

Spawnpoint

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.

Demo

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

  1. Select repos — Spawnpoint scans your code directories and presents a fuzzy-searchable list of git repos
  2. Name a branch — Enter a branch name for your feature
  3. Spawn — For each repo, Spawnpoint:
    • Creates a git worktree (or new branch if needed)
    • Initializes submodules
    • Copies .env files, 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 it
  • sp list or sp ls — pick a workspace and cd into it
  • sp 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


Download files

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

Source Distribution

spawnpoint-0.8.0.tar.gz (2.0 MB view details)

Uploaded Source

Built Distribution

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

spawnpoint-0.8.0-py3-none-any.whl (23.5 kB view details)

Uploaded Python 3

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

Hashes for spawnpoint-0.8.0.tar.gz
Algorithm Hash digest
SHA256 f4be7555bfd08d2a007dd22ec2604cff32ba92875628f4a49896f4d45ff9eb9a
MD5 c3f6e10283ddfba16904c8656ad6b6e3
BLAKE2b-256 f2f88de7ad2dde29a2f98567d04d2e67fee9a40c52f4bcc75d0d02838119c5fa

See more details on using hashes here.

Provenance

The following attestation bundles were made for spawnpoint-0.8.0.tar.gz:

Publisher: publish.yml on mihirgupta0900/spawnpoint

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

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

Hashes for spawnpoint-0.8.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f9bbda1f441a3bd1dafa0eeb85c3eb9661c3d0ed3793b32b4531652f7212123c
MD5 17fcfba98b74ad362c3843c8d452635d
BLAKE2b-256 eca5f219978c028b5d9acedaf9a301c531d4dd90cc0ff13518ac0b04d795dd53

See more details on using hashes here.

Provenance

The following attestation bundles were made for spawnpoint-0.8.0-py3-none-any.whl:

Publisher: publish.yml on mihirgupta0900/spawnpoint

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