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
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)
- 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 everything
scripts/swift-safe 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:
scripts/swift-safe build --product TBDApp && .build/debug/TBDAppA 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 buildscripts/test.shA thin wrapper around swift test — it forwards every argument, and fences the
run behind a scratch config dir so tests cannot write into your real ~/tbd or
~/.claude.
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 # runFlags:
--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.
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-appMIT © 2026 Chang Wang