A macOS native app for managing git worktrees and terminals, designed for multi-agent Claude Code workflows.
TBD gives you a unified interface to spin up isolated worktrees, run Claude Code sessions in embedded terminals, and orchestrate parallel development across branches — all from a single SwiftUI app.
tbd-demo.mp4
Architecture
Three components communicate over a Unix socket using a JSON RPC protocol:
tbdd— Daemon that owns all state (SQLite via GRDB, tmux, git)tbd— CLI client for scripting and shell integrationTBDApp— SwiftUI app with embedded terminal views (SwiftTerm)
Requirements
- macOS 15+
- Swift 6.0+ / Xcode 16+
- tmux installed (
brew install tmux) - SwiftLint installed (
brew install swiftlint) — required for the pre-push git hook
Build & Run
# Build everything swift build # Run the daemon .build/debug/tbdd # Use the CLI .build/debug/tbd --help # Run the app (or open in Xcode) open TBDApp.xcodeproj # if applicable, or: swift build --product TBDApp && .build/debug/TBDApp
A convenience script rebuilds and restarts the daemon + app:
scripts/restart.sh # full rebuild + restart scripts/restart.sh --app # restart app only scripts/restart.sh --quick # skip build
Test
Migrating from Conductor
Adopt your existing Conductor worktrees into TBD in place — no files moved, branches untouched, Conductor keeps working alongside. By default, only active (ready) Conductor workspaces are adopted, and any repos they reference are auto-registered in TBD.
./scripts/import-conductor.sh --dry-run # preview ./scripts/import-conductor.sh # run
Flags:
--all— also adopt archived Conductor workspaces.--repo <name>— limit to one Conductor repo (e.g.--repo longeye-app).--dry-run— print the plan, don't write anything.
Idempotent — safe to re-run as you create new Conductor worktrees.
Existing Claude session transcripts and conductor.json hooks are picked up automatically — nothing extra to migrate.
Migrating from Claude Code Desktop
Adopt your existing Claude Code Desktop worktrees into TBD in place. Pass any path inside the repo (the main checkout or any worktree); the script resolves to the main repo root and adopts every worktree under .claude/worktrees/. Repos not yet in TBD are auto-registered. Directories named agent-* (scratch worktrees from one-shot agent runs) are skipped by default — pass --include-agents to adopt them too.
./scripts/import-claude-code-desktop.sh --repo ~/projects/acme-app --dry-run ./scripts/import-claude-code-desktop.sh --repo ~/projects/acme-app
License
MIT © 2026 Chang Wang