Skip to main content

Daintree Assistant

A built-in help panel that runs Claude, Codex, or the Daintree Assistant CLI inside the app, with its reach into Daintree bounded by a capability tier and every tool call recorded locally.

Reviewed

Overview

The Daintree Assistant is a help panel that runs a real AI coding CLI inside the app, pointed at Daintree itself rather than at your code. Ask it how a feature works, have it search the docs, or tell it to drive the app: with your permission it can launch agents, create worktrees, run recipes, rename terminals and rearrange your workspace.

It reaches the app through the local MCP server, and everything it can call without asking is bounded by a capability tier you set. The default tier is read and write but never destructive. Every tool call lands in a local audit log you can read, export and clear. What leaves your machine depends on which CLI backs it, and Privacy and trust below sets out both cases.

Note
A normal agent panel works on your code. The Assistant works on Daintree. One edits your repo; the other operates the app you're editing it in.

Opening the Assistant

Click the Daintree icon in the toolbar, or press Command-L Control-L Control-L . The shortcut is a three-state toggle:

  • Panel closed: opens the panel and focuses the input
  • Panel open, focus elsewhere: moves focus into the input without closing anything
  • Panel open and focused: closes the panel

Opening the panel does not start a session. Until you press Start assistant once (or pick one of the starter questions the first-run empty state offers), no CLI is launched and nothing is billed against your subscription. After that first explicit start, opening the panel launches the agent for you.

Toolbar pips

When the panel is closed, the toolbar button carries a small status pip so you don't have to open it to know what's happening. Three signals compete for that one corner, in this order:

  • MCP health (highest): amber and pulsing while the MCP server is starting, red if it failed to start (hover for the error). Nothing once it's ready
  • Agent state: green while the agent is working or directing, amber while it's waiting. Suppressed while the panel is visible
  • MCP anomaly (lowest): amber, raised when the audit log detects anomalous activity. The detail lives in the panel

The agent-state pip is read-aware: while the panel is open Daintree tracks the state you have already seen, so once you close it the pip only flags changes you haven't looked at.

The panel

The Assistant opens as a push sidebar on the right: it pushes the panel grid over rather than floating on top of it, so your work stays visible while you talk to it. Drag the left edge to resize: the width runs from 320px to 800px, defaults to 380px, and is remembered across restarts. Once the resize handle has focus, arrow keys move it 10px at a time, Page Up and Page Down move 50px, and Home and End jump to the minimum and maximum. Escape closes the panel unless a terminal or editor inside it claims the key first.

A live session. The panel pushes the grid over rather than floating above it, so the work stays visible while you talk to it.
ControlWhat it does
State indicatorA small marker beside the title: a spinning green circle while working, blue while directing, amber while waiting, nothing when idle, completed or exited.
New session (+)Stops the current agent, discards the conversation, and relaunches the same agent fresh. Appears only once a session has started, and confirms first if the agent is working or you have typed into the conversation.
… overflowOpen docs, and Stop assistant when a session is live. Stop sits in the overflow deliberately, so a destructive control is never adjacent to the benign hide chevron.
Hide chevronHides the Assistant, the same as toggling it closed.

A single status row sits under the conversation. On the left is the tool-call activity strip and the turn-outcome pip. On the right is the pinned binding (the worktree and branch this session's tool calls resolve against), followed by the agent identity and, when one was set, the model.

The pinned binding matters because the Assistant's actions are anchored to the worktree the session was provisioned in, not to whatever you happen to be looking at. If you focus a different worktree, the binding turns amber and becomes a button that takes you back to the pinned one. Starting a new session is what re-pins it.

Talking to it

The Assistant uses the same input bar as your agent terminals: @file autocomplete, /commands, multi-line editing, Shift+Enter for a newline, Enter to send. The full feature set is in Unified Input. To dictate into the Assistant specifically, press Option-Shift-Command-V Control-Alt-Shift-V Control-Alt-Shift-V . See Voice Input.

You can extend every session with your own commands and skills. Files in ~/.daintree/assistant are copied into each new assistant session: Claude Code picks up .claude/commands and .claude/skills, Codex picks up .agents/skills and .codex/skills, and Copilot reads both skill trees. A per-project <project>/.daintree/assistant takes precedence and can be committed to git, so a team can ship its own assistant commands with the repo.

Images in answers

The Assistant can pin a documentation image into the panel with the Workbench-tier help.displayImage tool. Figures land in a fixed-height thumbnail rail between the input bar and the footer, and clicking one opens it in a lightbox you can page through.

Three details make this behave predictably. Figure numbers are assigned by Daintree in sequence, never chosen by the agent, so an inline [image #2] reference in the reply always names the right thumbnail. Figures accumulate for the life of the session rather than being dismissed one at a time, so an older reference never goes dead. And the URL must be on daintree.org. data:, blob: and every other host are rejected, so the panel can't be used to render arbitrary remote content.

Daintree assigned the numbers; the agent then referenced the labels it was handed

Watching what it does

Three signals in the panel tell you what the Assistant is doing to your workspace, without opening settings.

The activity strip in the footer is the live one. At rest it reads "Recent activity"; while a call runs it shows a spinner and the tool id, coalescing same-turn bursts as "2 calls · tool"; a settled call shows its result glyph and the tool id. Durations are deliberately not shown — calls are almost always sub-100 ms, so the number would be noise; the hover title and the recent-calls popover carry it instead. Successes decay back to the resting label after five seconds, errors do not: a failed call is worth keeping visible until the next call supersedes it. An in-flight row is withheld for the first 400ms so a fast call renders its result directly instead of flashing a spinner.

Clicking the strip opens the recent calls popover, which lists the last five calls for this session. It is deliberately short: a glance at what just happened, not an audit surface.

The turn-outcome pip sits beside it and appears only when the last turn classified as one of two failure shapes: Stopped early (the agent ended the turn without finishing) or Repeating steps (it kept redoing the same step). Both are a single amber dot with a short label, dismissed by clicking. Turn-outcome diagnostics are recorded separately from the audit log and are not affected by its retention setting.

For the full record, the audit log in Settings > Assistant > Privacy has a viewer, a latency table, copy-as-JSON, NDJSON export, and a clear button.

What it can do: capability tiers

Every action the Assistant can take runs through a capability tier. The tier sets the blast radius: how far a single tool call is allowed to reach before Daintree stops and asks you. Tiers are cumulative: each includes everything below it.

TierWhat it reachesExamples
Workbench
read-only
Reads project state and changes nothing.Inspect projects and worktrees, search and read files, read terminal output and agent state, read git status, diffs and commits, read forge issues and PRs, list session history and bookmarks, search and load skills, generate a CopyTree bundle to a file.
Action
read + write (default)
Runs the app: spawns agents, sends prompts, manages terminals and panels, and drives the browser and dev preview.Create worktrees from a recipe, launch and focus agents, send commands to terminals, rename and close terminals, wait for a terminal to go idle, run recipes, move panels between dock and grid, reload or restart a dev preview and promote it to a Portal tab, open Portal tabs, capture a browser screenshot, change the theme, run a project check, provision remote compute.
System
destructive + external
Touches disk and external services. Reserve for automation you trust.Delete worktrees, stage, commit and push git, write the system clipboard, create and merge PRs, open, close and comment on issues.
Tip
The in-app preview is the authority on what a tier allows, not this page. Settings > Assistant > Security shows "N actions allowed without prompting" for the selected tier, expandable into the full list grouped by namespace. At the time of writing that reads 60 at Workbench, 120 at Action (60 new), and 161 at System (41 new), but the list moves with every release, and the preview is generated from the same allow-list the server enforces.

Where a tool sits is decided by what it can reach, not by which subsystem it belongs to. CopyTree is the clearest illustration: copyTree.generate is Workbench because it writes a temp file and hands back a path, copyTree.injectToTerminal is Action because it types into a terminal, and copyTree.generateAndCopyFile is System because it replaces the contents of your system clipboard.

Seeing the blast radius

At the System tier the preview pins the riskiest actions (git.push, git.commit, worktree.delete) under a "high blast radius" heading, so the cost of the choice is in front of you rather than buried in an alphabetical list. Below the preview, a live card shows whether a session is currently connected, the tier it is actually running at, and whether that is above, below, or equal to your configured default.

The System tier, with the riskiest actions pinned above the namespace groups

When a tool needs more than the tier allows

If the Assistant calls a tool above the project's tier, the call neither silently fails nor silently runs. A Tool not permitted banner names the tool and the tier it needs, and offers:

  • Approve once: grants that one tool for the session without raising the tier. The grant is a sliding TTL with a 30-minute ceiling; while it is live, a banner shows the tool id and a countdown, with Revoke access beside it
  • Always allow for this project: raises the project to the tier the tool needs and writes it to project settings, so you aren't asked again
  • Dismiss: the tool call stops there

When a grant lapses, a neutral notice says so ("access expired" or "hit its 30-minute limit") and the next call asks again. A tool that isn't available at any tier says so instead of offering an escalation.

For longer automation there are automation grants, issued from Settings > Assistant > Security: name a set of tool ids and a maximum number of uses, and the session can call them without a per-call prompt. Live grants list their tools, remaining uses and time left, each with a Revoke button, and the whole lifecycle (issue, use, exhaust, expire, revoke) is mirrored into the audit log.

Note
To undo something the Assistant did, use the worktree snapshot and diff review. At the System tier it takes a pre-flight snapshot before its first change, and you can review and revert from the Review Hub.

Settings

Everything lives under Settings > Assistant. Changes apply to new sessions, not the one currently running.

Agent

Pick the CLI that backs the Assistant. Only agents whose assistant wiring is at the stable tier and which are installed on your machine appear: today that is Claude, Codex, and the dedicated Daintree Assistant CLI, which connects over MCP with its own login and is not offered as a general coding agent anywhere else. GitHub Copilot CLI is wired but held back as experimental, so it does not appear in the picker.

Claude and Codex run on the subscription you are already logged into, and are the option to use today. The Daintree Assistant CLI is a separate Go binary (daintreehq/assistant, Apache 2.0) built for this one job: it never edits your files, and it keeps supervising work in the background after you close the panel. It is in private testing, has no published release yet, runs on macOS and Linux only, and needs its own sign-in with an OpenRouter key that funds every model call it makes. See the Assistant overview for what that means before you pick it.

Note
Gemini is not an option. The Gemini CLI was retired on 2026-06-18 and is marked deprecated, which excludes it from the Assistant picker and from the help-session launch path entirely. It still launches normally as a regular agent. Google's successor CLI is Antigravity, which is not wired for the Assistant either.

A Model picker appears below the agent when the selected agent has a model catalog; leave it on the default to let the CLI choose. Custom CLI args appends whitespace-separated flags at launch and overrides the model picker if you pass --model there. If a previously chosen agent is dropped or loses assistant support, a banner says so and asks you to pick another; if the installed CLI is older than the Assistant needs, an inline warning names the required and installed versions with a link to agent settings. Selecting the Daintree Assistant CLI also exposes Debug logging, which writes a full-fidelity per-session trace to ~/.daintree/logs.

Behavior

  • Search documentation (on by default): lets the Assistant search the Daintree docs and changelog while answering
  • Daintree control (on by default): lets it call Daintree actions through the local MCP server. Enabling it starts a local HTTP server on 127.0.0.1; the MCP Server tab holds the connection details and API key

Hibernation

How long the panel can sit hidden before the Assistant shuts down and releases memory: Off, 5 minutes (default), 15 minutes, 30 minutes, 1 hour, or 2 hours. Off keeps it resident until you close it.

Security

Sets the capability tier (Workbench, Action, or System; default Action), shows the blast-radius preview and the live-session card, and holds the Bypass Claude permission prompts toggle, off by default with an amber warning when on.

Privacy

Capture audit log turns recording on or off. Audit log retention sets how long records are kept locally: 7 days (default), 30 days, or Off. An Advanced diagnostics disclosure holds the audit-log viewer, the latency table, turn-outcome diagnostics, and, if an external client has been connecting with a stale or missing key, a count of rejected requests. External MCP traffic is filtered out of this view; it belongs to the MCP server tab.

Connection

Shown when the MCP server is enabled. It reports the running port, offers Copy MCP config for pointing external clients at the server, and Rotate MCP key. Rotating invalidates existing connections, so it asks you to type the last four characters of the current key to confirm. The MCP server settings tab additionally lists Daintree's own internal connections (the help sessions themselves, with their session and request counts), so the assistant's traffic is legible next to any external clients.

Sessions, hibernation and resume

Starting a session runs a short state machine, and the panel names the phase it is in rather than showing an undifferentiated spinner: Checking version…, Provisioning session…, Starting assistant…, and Saving session… on the way out. A Cancel affordance appears if it runs long. If exactly one supported CLI is installed and you haven't picked a preferred agent, that one is used.

When a launch fails, the panel says why in plain terms and offers the recovery that fits: Retry plus Open settings when the assistant services didn't start or respond, Retry plus Open logs when the project's commands and skills couldn't be refreshed, Retry alone when the agent didn't start, and Open logs plus the installer page when Daintree's bundled assistant files are missing (retrying that one cannot help). If the chosen CLI isn't installed at all, a gate offers to open agent settings, or to run anyway.

If the installed CLI is older than the Assistant requires, a version gate blocks the launch, names the required and installed versions, and offers Check again so you can update the CLI without restarting Daintree. Claude needs 1.0.0 or later; Copilot needs 1.0.40; Codex has no minimum.

When the panel stays hidden past the hibernation timer and the agent is idle, Daintree shuts the agent down cleanly and captures its resume token. Reopen the panel and the conversation comes back with a banner confirming it resumed. If capturing the session id failed, Daintree falls back to the agent's resume-latest flag (Claude's --continue) rather than losing the conversation. If the agent is busy when the timer fires, Daintree rechecks periodically rather than killing work in progress. Resume only fires when the next launch targets the same agent, so switching agents never grafts one conversation onto another.

Resume tokens are kept per workspace, so one project's conversation never leaks into another. A session lost to memory eviction or a renderer crash is offered back as Resume assistant instead of a cold start. The Assistant also gets a private scratch directory for throwaway files, so it doesn't litter your repo. For the broader mechanics, see Session Management.

Privacy and trust

This depends entirely on which CLI backs the Assistant, and the difference is worth knowing before you switch.

Backed by Claude or Codex, the Assistant runs the CLI you already use, authenticated against your own subscription. Daintree adds no new model endpoint and routes your conversation nowhere new.

Backed by the Daintree Assistant CLI, model traffic runs from that CLI to a Daintree-operated backend and on to OpenRouter with your own key. That backend owns the system prompt and selects the model, and it sees your conversation, a project snapshot, your DAINTREE.md, and the output of any tool the Assistant ran. Your key is held request-scoped and never stored by the service. The MCP connection to Daintree stays local either way. This is the one exception to the architecture described on Trust, and it is a choice you make in this picker.

Every tool it dispatches is recorded in a local audit log you can read, export and clear. The default tier is read and write but never destructive, so destructive and outward-facing actions only happen if you opt into the System tier. For the broader picture on sandboxing and data storage, see Security & Privacy.

Troubleshooting

SymptomWhat's happening and what to do
"Update [agent] to use Daintree Assistant"The installed CLI is older than the Assistant needs. The gate shows the required and installed versions; update the CLI, then press Check again. Claude needs 1.0.0+, Copilot 1.0.40+, Codex has no minimum.
Missing CLIThe chosen CLI isn't on PATH. The gate links to agent settings, and offers Run anyway if you believe the detection is wrong.
The agent you picked disappeared from settingsThat agent was removed or is no longer supported as an assistant backend: the Gemini CLI's retirement is the usual cause. Pick another agent in Settings > Assistant.
"Daintree's assistant services didn't start"MCP provisioning failed. Retry from the banner, or open Settings > Assistant > Connection to check the server's state.
The footer binding turned amberYou are focused on a different worktree from the one this session is pinned to. Click the binding to switch back, or start a new session to re-pin it.
A tool call keeps asking for approval"Approve once" grants are session-scoped and expire. Raise the project's tier, or issue an automation grant with a use budget, if you want it to stop asking.