Run every AI coding agent in its own git worktree, in parallel. Works with Claude Code, OpenAI Codex CLI, Gemini CLI, Aider, opencode, and any other terminal program. VibeTree is mission control for parallel AI coding agents.
Repo: sahithvibudhi/vibe-tree
What's inside
Run every AI coding agent in its own git worktree, in parallel.
Works with Claude Code, OpenAI Codex CLI, Gemini CLI, Aider, opencode, and any other terminal program.
Website · Docs · Demo · Download
VibeTree is mission control for parallel AI coding agents. Every task gets its own git worktree: an isolated checkout with its own branch and a persistent terminal. Run one agent per worktree, watch them all at once, review each branch's diff, and throw away failed experiments with one click. Use it as a desktop app, or run the server and drive your agents from any browser, including your phone.

brew install --cask --no-quarantine sahithvibudhi/tap/vibetree
Or download the dmg from the latest release (Intel and Apple Silicon). Builds are not yet notarized; approve the app once under System Settings, Privacy and Security, or use the brew command above.
Download the Setup exe, AppImage, or deb from the latest release.
pnpm install
pnpm dev:desktop # desktop app
pnpm dev:all # server + web; scan the QR code with your phone
| Feature | Description |
|---|---|
| Parallel worktrees | One isolated checkout, branch, and terminal per task |
| Any agent CLI | It is a real terminal: claude, codex, gemini, aider, or plain shells |
| Persistent sessions | Terminals keep running and scrollback survives reloads and reconnects |
| Fleet status | See which agents are working, waiting, or done; a ding when one needs you |
| Changes view | Review the diff beside the terminal and send a note back as the agent's next prompt |
| Browser preview | Dev server URLs are detected and opened next to the terminal |
| Lifecycle hooks | Run your own scripts when worktrees are created or removed |
| Phone access | Installable web app with QR pairing; check the fleet from anywhere on your network |
Executable scripts in your repository, using the same trust model as git hooks:
mkdir -p .vibetree/hooks
printf '#!/bin/sh\nnpm install\n' > .vibetree/hooks/post-create
chmod +x .vibetree/hooks/post-create
post-create runs in each new worktree; pre-remove runs before deletion and can never block it. See the hooks docs for environment variables and examples.
AUTH_REQUIRED=true, VIBETREE_USERNAME, and VIBETREE_PASSWORD. All options are in the configuration docs.pnpm install
pnpm dev:desktop # desktop app
pnpm dev:all # server + web
pnpm test:run # unit tests
pnpm --filter @vibetree/desktop test:e2e # desktop e2e (Playwright)
pnpm --filter @vibetree/web test:e2e # web e2e (Playwright)
pnpm typecheck && pnpm lint
Repo layout and design decisions live in ARCHITECTURE.md.
MIT. See LICENSE.
.claude/
agents/
electron-app-debugger.md
electron-e2e-test-runner.md
settings.json
.dockerignore
.eslintrc.js
.github/
workflows/
ci.yml
deploy-site.yml
release.yml
.gitignore
.husky/
pre-commit
.prettierignore
.prettierrc
.tool-versions
apps/
desktop/
docker-compose.yml
Dockerfile.playwright
e2e/
ci-smoke-test.spec.ts
final-test.spec.ts
helpers/
test-git-repo.ts
test-launcher.ts
menu-structure.spec.ts
open-cwd.spec.ts
project-close-pty-cleanup.spec.ts
project-switch-scheduler-persist.spec.ts
quit-confirmation.spec.ts
stats-menu.spec.ts
terminal-arithmetic.spec.ts
terminal-scheduler-overlap.spec.ts
terminal-scheduler.spec.ts
terminal-search.spec.ts
terminal-settings.spec.ts
terminal-split-close-retry.spec.ts
terminal-split.spec.ts
test-utils.ts
worktree-deletion-with-pty-cleanup.spec.ts
worktree-scheduler-indicator.spec.ts
worktree-switch-double-char-bug.spec.ts
worktree-terminal-cleanup-on-recreate.spec.ts
worktree-terminal-content-preservation.spec.ts
electron-builder.json
package.json
playwright.config.ts
postcss.config.js
src/
main/
app-settings.ts
embedded-server.ts
ide-detector.ts
index.ts
ipc-handlers.ts
menu.ts
notification-manager.test.ts
notification-manager.ts
notification-settings.test.ts
notification-settings.ts
quit-manager.test.ts
quit-manager.ts
recent-projects.test.ts
recent-projects.ts
scheduler-history.ts
stats-dialog.html
terminal-settings.ts
test-index.ts
preload/
index.ts
stats-dialog-preload.ts
renderer/
App.test.tsx
App.tsx
components/
ClaudeTerminal.race.test.tsx
ClaudeTerminal.test.tsx
ClaudeTerminal.tsx
DeletionReportingDialog.tsx
GitDiffView.tsx
GlobalSettings.tsx
GlobalTerminalSettings.tsx
NotificationSettingsTab.test.tsx
NotificationSettingsTab.tsx
OnboardingDialog.tsx
ProjectSelector.tsx
ProjectWorkspace.tsx
RightPaneView.tsx
scheduler-concurrency.test.ts
SchedulerDialog.test.tsx
SchedulerDialog.tsx
TerminalGrid.tsx
TerminalManager.tsx
TerminalSettings.tsx
TitleBar.tsx
ui/
button.tsx
dialog.tsx
dropdown-menu.tsx
input.tsx
scroll-area.tsx
tabs.tsx
toast.tsx
toaster.tsx
use-toast.ts
WorktreePanel.test.tsx
WorktreePanel.tsx
contexts/
ProjectContext.test.tsx
ProjectContext.tsx
hooks/
useClaudeStateDetector.ts
index.html
lib/
utils.ts
main.tsx
services/
backend.ts
TerminalController.test.ts
TerminalController.ts
styles/
debug-layout.css
globals.css
types/
app-settings.ts
electron.d.ts
notification-settings.ts
terminal-settings.ts
utils/
worktree.ts
test/
setup.ts
tailwind.config.js
terminal-not-found.png
test-after-open.png
test-initial-state.png
test-no-terminal.png
test-success-screenshot.png
tsconfig.json
tsconfig.main.json
tsconfig.preload.json
vite.config.ts
vitest.config.ts
wait-for-dev-server.js
server/
.env.example
package.json
src/
index.ts
tsconfig.json
site/
.nojekyll
404.html
app-dark.png
demo-poster.jpg
demo.mp4
demo.webm
docs/
cli.html
config.html
docs.css
hooks.html
index.html
server.html
troubleshooting.html
feat-changes.png
feat-split.png
fonts/
InstrumentSans-Italic-Variable.ttf
InstrumentSans-Variable.ttf
InstrumentSerif-Italic.ttf
InstrumentSerif-Regular.ttf
index.html
llms-full.txt
llms.txt
robots.txt
sitemap.xml
social-card.png
web/
.env.example
.gitignore
e2e/
global-setup.ts
smoke.spec.ts
index.html
package.json
playwright.config.ts
postcss.config.js
public/
apple-touch-icon.png
favicon.ico
pwa-192x192.png
pwa-512x512-maskable.png
pwa-512x512.png
README.md
src/
adapters/
globalWebSocketAdapter.ts
App.tsx
components/
AgentStateBadge.tsx
ConnectionStatus.tsx
DirectoryPicker.tsx
GitDiffView.tsx
OnboardingHint.tsx
PreviewPane.tsx
ProjectSelector.tsx
ShortcutsHelp.tsx
Skeleton.tsx
TerminalManager.tsx
TerminalView.tsx
Toaster.tsx
ViewSwitch.tsx
WorktreePanel.tsx
env.d.ts
hooks/
useAgentStates.ts
useKeyboardShortcuts.ts
useLiveSessions.ts
useWebSocket.ts
useWorktreeStatuses.ts
main.tsx
services/
authService.ts
fsBrowse.ts
portDiscovery.ts
previewUrl.ts
projectConfig.ts
projectValidation.ts
sound.ts
store/
index.ts
styles/
globals.css
vite-env.d.ts
tailwind.config.js
tsconfig.json
tsconfig.node.json
vite.config.ts
ARCHITECTURE.md
assets/
demo.mov
icons/
VibeTree.png
VibeTree.svg
screenshot.png
bin/
launch-with-project
CHANGELOG.md
CLAUDE.md
CONTRIBUTING.md
docker-compose.yml
DOCKER.md
Dockerfile
docs/
electron-debug.md
run-e2e-test.md
screenshots/
branch-validation-dark.png
desktop-chrome-dark.png
desktop-chrome-light.png
desktop-dark-ash.png
desktop-sidebar-after-hover.png
diff-note.png
fleet-terminal-launch.png
fleet-view.png
picker-browse-light.png
picker-discovered-dark.png
project-settings.png
shortcuts-overlay-dark.png
site-docs-server.png
site-hero-serif.png
site-landing-hero.png
status-live-dark.png
toast-light.png
welcome-after-dark.png
welcome-after-firstrun-dark.png
welcome-after-light.png
welcome-before-light.png
welcome-mobile-dark.png
welcome-recents-light.png
workspace-before.png
workspace-changes-dock.png
workspace-changes-max.png
workspace-preview-dock.png
workspace-terminal.png
LICENSE
nginx.conf
package.json
packages/
auth/
build.js
package.json
src/
components/
LoginPage.tsx
contexts/
AuthContext.tsx
hooks/
useAuth.ts
index.ts
types/
index.ts
utils/
auth.ts
tsconfig.json
cli/
package.json
src/
index.ts
tsconfig.json
core/
build.js
package.json
src/
adapters/
CommunicationAdapter.ts
WebSocketAdapter.ts
browser.ts
index.ts
services/
OutputBuffer.test.ts
OutputBuffer.ts
ShellSessionManager.buffer.test.ts
ShellSessionManager.test.ts
ShellSessionManager.ts
types/
index.ts
utils/
agent-activity.test.ts
agent-activity.ts
git-parser.test.ts
git-parser.ts
git.ts
network.ts
process.ts
project-config.ts
shell-escape.test.ts
shell-escape.ts
shell.test.ts
shell.ts
system-diagnostics.ts
worktree-hooks.test.ts
worktree-hooks.ts
tsconfig.json
vitest.config.ts
server-core/
package.json
src/
api/
rest.ts
websocket.test.ts
websocket.ts
auth/
AuthService.ts
config.test.ts
config.ts
index.ts
server.ts
services/
AgentStateTracker.ts
fs-browse.test.ts
fs-browse.ts
ShellManager.ts
tsconfig.json
ui/
build.js
package.json
src/
components/
Tabs.tsx
Terminal.test.tsx
Terminal.tsx
index.ts
test-setup.ts
types/
electron.d.ts
tsconfig.json
vitest.config.ts
pnpm-lock.yaml
pnpm-workspace.yaml
README.md
scripts/
docker-deploy.sh
fix-electron.sh
tsconfig.base.json
turbo.jsonFAQ
vibe-tree is a Claude Code plugin with hand-picked skills for agent orchestration work, indexed on Flowy. Install it with the command on its page. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.