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
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 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9ffa622bf0712197cec4c8a060e91bd5c5c200e8c36d5186cd2d6c9a411b8a09
|
|
| MD5 |
3930e749f9a280483f764af17c02b027
|
|
| BLAKE2b-256 |
8318a6766b52dfdcdd0bc66b647225272104479fc0d2621f161870e68e4ca59d
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
29cf58a19c17de780cf23a6386d5ef52fc8a418cec4a64019dba860f78e66a5a
|
|
| MD5 |
79f6775b0e434cd5ec8b36990bff2119
|
|
| BLAKE2b-256 |
36d42f76f332a5fc94d6e7fe3f9c64b14551688d67f9372264867cd7115e3ff2
|