A desktop habitat
for AI agents.
Run coding agents side by side, each in its own Git worktree. See where you’re needed and review changes before merging.
An animated reconstruction of the Daintree interface, running on sample project data. The walkthrough below is a recording of the real app.
Generation is cheap. Review is the bottleneck.
Daintree is built around the second half. You delegate, it shows you which runs need you, and you review the diff before you merge.
574 pull requests merged in the 30 days ending .
One loop, whichever agent CLI you run
Delegate
Create a worktree per task, by hand or straight from a GitHub issue, and launch any agent CLI into it. Each task gets its own branch and checkout.
Monitor
Pilot gathers every run across every project and sorts them by what is blocked, waiting and ready. That ordering is the list, not a view you switch on.
Review
An agent reporting done is a claim. Read the diff, check merge readiness, and read CI state from your connected forge before you decide anything.
Merge
Commit, push and merge from inside Daintree, or hand the branch to your normal review process. The worktree cleans up behind you.
Run the loop yourself, in about fifteen minutes
Walkthrough
How I run the loop on a real project
I’m Greg Priday, and I build Daintree. This is how I run several agents on a real project: organizing worktrees, using Pilot to find the runs that need me, and reviewing changes before I merge them.
| Terminal tabs | Daintree | |
|---|---|---|
| Where the work happens | One checkout, or worktrees you add by hand | A worktree per task, by default |
| How you keep track of runs | Cycling tabs to see which one stopped | Every project in one list, waiting runs on top |
| How you check the result | Scrollback, then git diff in another tab | The diff, merge readiness and CI state together |
| What actually runs | The CLI binary, with your config | The same CLI binary, with the same config |
Where this differs from agents in terminal tabs
- Where the work happens
- Terminal tabs One checkout, or worktrees you add by hand
- Daintree A worktree per task, by default
- How you keep track of runs
- Terminal tabs Cycling tabs to see which one stopped
- Daintree Every project in one list, waiting runs on top
- How you check the result
- Terminal tabs Scrollback, then git diff in another tab
- Daintree The diff, merge readiness and CI state together
- What actually runs
- Terminal tabs The CLI binary, with your config
- Daintree The same CLI binary, with the same config
It is not an IDE either. Daintree sits above the agent CLIs you already run, not inside another VS Code fork. It is a habitat for delegating work and reviewing it, rather than an editor for typing it.
Works with the CLI you already run
- Claude Code
- Codex CLI
- Antigravity
- OpenCode
- Cursor Agent
- GitHub Copilot
Plus eleven more built in, with live state detection for each. Run the real binaries with your existing config and subscription, or add another agent through a plugin.
Pilot
Twenty agents running. Three of them need you.
Pilot brings every run into one view, grouped by project and ordered by live agent state. See what is blocked, waiting for approval, or ready to review.
Park anything that can wait. The list opens on what needs you now.
Daintree’s Canopy, in beta, goes a step further: it reads each agent’s screen and ranks the whole fleet by what it needs from you.
Join the waitlist for Daintree’s CanopyEvidence before merge
Done is a claim.
The diff is the evidence.
Review Hub puts each worktree's diff beside its merge readiness and live forge checks. Read what changed, stage what you want, then commit and push from the same view.
Keep the work or discard the branch. You make the call with the evidence in front of you.
src/lib/auth/session.ts
export async function requestWithAuth(url) {- return fetch(url, withToken());+ const response = await fetch(url, withToken());+ if (response.status !== 401) return response;+ await refreshSession();+ return fetch(url, withToken()); } One window for delegation, review, and merge
Every Agent, One Window
Runs the agent CLIs already on your machine, in parallel, with your existing config
Parallel Worktrees
Every task on its own branch and checkout
Unified Input
One set of @files, /commands, and shortcuts, working with every agent
Chat Portal
Ask any agent a question without switching context
GitHub Integration
Pick issues in bulk; each one gets its own worktree and agent
Also inside: voice input, an MCP server, terminal recipes, plugins, themes, and remote compute.
Blast radius and trust
Every boundary is explicit
Know what separates your agents, where their processes run, and where your code goes.
Changes
Every task gets its own branch and checkout
Separate branches and checkouts keep parallel agents from overwriting each other’s work or changing your current tree.
The boundaryIt is Git isolation, not a sandbox. The agent process still runs as your user.
Process
Run the work somewhere that is not your laptop
Give each worktree a Docker stack, cloud VM, or remote sandbox. Daintree runs your provision, pause, and teardown commands as the worktree changes.
The boundaryProcess isolation comes from that environment. Configure it before turning permission checks off.
Daintree itself
No relay, no control plane, no account
Source, diffs, and terminal output pass through no Daintree backend. Telemetry and MCP are off by default. Enable MCP and it binds to localhost with four authorization tiers.
The boundaryAgent CLIs still contact their providers. Plugins execute code; their manifests declare intent, not confinement. The Assistant’s docs and runbook search are Daintree-hosted, and the runbook lookup sends a one-sentence task summary.
- Latest release
- v0.42.0
- License
- Apache 2.0
- Built-in agents
- 17
- Source
- daintreehq/daintree
Give every agent its own worktree
Run the real CLI, see what needs you, and review the diff before you merge.
- No account for the app