Skip to main content

Git worktree manager for parallel coding agent development

Project description

Timberline

Git worktree manager for parallel coding agent development.

Install

# global CLI (recommended)
uv tool install timberline

# or with pip
pip install timberline

Quick Start

cd your-repo
tl init --defaults          # create .timberline.toml
tl new auth-refactor        # create worktree + branch
tl new --type fix           # auto-named fix worktree
tl ls                       # list all worktrees
cd $(tl cd auth-refactor)   # jump into worktree
tl rm auth-refactor         # clean up

Getting Started

Run tl init inside any git repo to create .timberline.toml. The wizard auto-detects:

  • Branch prefix from your git user
  • Base branch (main/master/develop)
  • Package manager (bun, npm, pnpm, yarn, uv, pip, cargo, etc.) for dependency install
  • Pre-land checks (Makefile targets, npm scripts like lint, test, check)
  • Default agent (claude, codex, opencode, aider) if installed

Use --defaults to skip prompts and accept detected values.

Create & Enter a Worktree

tl new auth-refactor            # named worktree
tl new --type fix               # auto-named (minerals, cities, or compound)
tl new --agent                  # create + launch coding agent

Enter a worktree:

cd $(tl cd auth-refactor)       # subshell-friendly

Or with shell integration (tl install):

tlcd auth-refactor              # cd directly

Each worktree gets its own branch (from branch_template), dependencies installed via auto_init, and .env files copied from the main repo.

Land a PR

tl land auth-refactor           # checks → push → PR
tl land --draft                 # create as draft PR
tl land --skip-checks           # bypass pre-land checks

tl land runs your configured pre_land command (e.g. make check), pushes the branch, then creates a PR via gh. Configure it in .timberline.toml:

[timberline]
pre_land = "make check"  # or "bun run lint && bun run test", etc.

Commands

Command Description
tl init Interactive setup, write .timberline.toml
tl new [name] Create worktree (aliases: create)
tl ls List worktrees (aliases: list). --json, --paths
tl rm <name> Remove worktree (aliases: remove). --force, --keep-branch, --all
tl cd <name> Print worktree path. --shell for subshell
tl status Git status across all worktrees
tl sync [name] Rebase/merge on base branch. --all, --merge
tl land [name] Run checks, push, and create PR. --draft, --skip-checks
tl rename <branch> Rename worktree's git branch. -n <name>
tl agent [name] Launch coding agent in worktree. --new
tl run-init [name] Re-run dependency install
tl pr [name] Create PR via gh CLI. --draft
tl env sync [name] Re-copy .env files from main repo
tl env ls List discovered .env files
tl env diff [name] Show .env differences
tl clean Prune stale worktrees. --dry-run
tl install Install shell integration into rc file. --uninstall
tl shell-init Output shell integration script
tl config show Print resolved config
tl config set <k> <v> Set config value
tl config edit Open config in $EDITOR

Config

.timberline.toml in repo root:

[timberline]
worktree_dir = ".tl"
branch_template = "{user}/{type}/{name}"
user = "nc9"
default_type = "feature"
base_branch = "main"
naming_scheme = "minerals"  # minerals | cities | compound
default_agent = "claude"   # claude | codex | opencode | aider
pre_land = "make check"    # command to run before pushing

[timberline.init]
auto_init = true
# init_command = "bun run init"
# post_init = ["echo done"]

[timberline.env]
auto_copy = true
patterns = [".env", ".env.*", "!.env.example", "!.env.template"]
scan_depth = 3

[timberline.submodules]
auto_init = true
recursive = true

[timberline.agent]
auto_launch = false
inject_context = true

Shell Integration

# Automatic install:
tl install

# Or manually add to .zshrc / .bashrc:
eval "$(tl shell-init)"

# Then use:
tlcd obsidian       # cd into worktree
tl-prompt           # worktree name for PS1

Development

uv sync
make test     # pytest
make lint     # ruff + basedpyright
make fmt      # ruff format
make check    # all of the above

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

timberline-0.1.2.tar.gz (35.7 kB view details)

Uploaded Source

Built Distribution

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

timberline-0.1.2-py3-none-any.whl (24.9 kB view details)

Uploaded Python 3

File details

Details for the file timberline-0.1.2.tar.gz.

File metadata

  • Download URL: timberline-0.1.2.tar.gz
  • Upload date:
  • Size: 35.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.10 {"installer":{"name":"uv","version":"0.9.10"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for timberline-0.1.2.tar.gz
Algorithm Hash digest
SHA256 9ffa622bf0712197cec4c8a060e91bd5c5c200e8c36d5186cd2d6c9a411b8a09
MD5 3930e749f9a280483f764af17c02b027
BLAKE2b-256 8318a6766b52dfdcdd0bc66b647225272104479fc0d2621f161870e68e4ca59d

See more details on using hashes here.

File details

Details for the file timberline-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: timberline-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 24.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.10 {"installer":{"name":"uv","version":"0.9.10"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for timberline-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 29cf58a19c17de780cf23a6386d5ef52fc8a418cec4a64019dba860f78e66a5a
MD5 79f6775b0e434cd5ec8b36990bff2119
BLAKE2b-256 36d42f76f332a5fc94d6e7fe3f9c64b14551688d67f9372264867cd7115e3ff2

See more details on using hashes here.

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