Get it for macOS

Resume your local Letta agents from the sidebar without losing their saved conversations. See agent activity and dispatched tasks beside each agent. Keep agent providers out of the model picker unless you enable them. Requires a separate local Letta Docker installation with the supported filesystem layout, Docker access, and the BB ACP adapter; the adapter uses npx to install its pinned Letta ACP package.


Overview

View source

Local Letta agents in your sidebar

Browse a local Letta roster with avatars and activity indicators, then start or resume chats through BB's ACP adapter. This plugin connects existing infrastructure; it does not install Letta or provision workspaces.

Setup you must supply

Requires BB >=0.46, Plugin SDK >=0.6.49 (development pin 0.6.49), and the enabled ACP adapter bb--provider-acp-next. These are declared version constraints, not a tested-version matrix.

Set projectId, hostId, and environmentProviderId to existing IDs in your installation. All three default to empty and are required for a new chat. personal-workspace is only an example provider where installed.

The plugin backend needs local Docker access and a running letta-code container with Node. The default container is letta; dockerExecutable defaults to docker and accepts an executable, not a shell command. The container paths are fixed:

  • /root/.letta/lc-local-backend/agents/*.json for roster records.
  • /root/.letta/app-server.token for authentication.
  • /root/.letta/lc-local-backend/avatars/<agent-id>-128.png for optional avatars.

The ACP execution host needs Node/npm with npx and access to the Letta app-server. appServerUrl defaults to ws://127.0.0.1:4500, interpreted from that host. Roster reads still require local Docker even if the endpoint is remote.

Generated entries run npx -y @letta-ai/letta-acp@0.1.10, pinned because 0.1.11 has a known stream hang. Modern versions have not been established as tested; the pin is not a claim that every newer version fails.

Trust and permissions

Docker socket/daemon access is administrator-level trust. Use trusted containers and operators. The token is stored in plaintext in ACP customAgents settings, passed through the process environment, not process argv. Plugin logs and surfaced command errors withhold credentials; this is not encrypted secret storage. Protect settings, backups, and host access.

Use ws:// only on a trusted local network; use wss:// outside it. TLS is not enforced by the plugin.

Defaults are Letta standard and BB auto approvals. allowUnrestricted explicitly opts into Letta unrestricted and full permissions for new BB threads. Existing threads preserve their BB permissions. Providers absent from the roster retain their settings, including unrestricted permissions, until explicit cleanup; toggling the setting is not global revocation.

Stable identity and conservative updates

Immutable roster IDs determine identity. A persisted historical provider-ID mapping preserves existing providers, including older name-based IDs; agent renames do not force provider renames. Unrelated ACP entries are never intentionally removed. Providers for removed agents are deliberately retained for manual cleanup after checking thread dependencies.

Syncs re-read settings before writing and reject detected changes, but the public API has no compare-and-swap (CAS). Cross-plugin or manual edits can still race between the final read and write; avoid simultaneous adapter-settings changes. Failed refreshes can show a cached roster with a warning, not a guarantee of chat readiness.

Compatibility and current limits

Provider-picker hiding is a DOM/CSS compatibility workaround, not an upstream supported hide API or an access-control mechanism. Display-name collisions with unrelated providers fail open, leaving entries visible. BB markup changes may break hiding. showAgentsInProviderPicker disables the workaround while providers stay enabled.

The implementation depends on the local container layout, adapter settings, and experimental BB sidebar surfaces. Exact clean-install and end-to-end live chat/streaming checks are still pending. No release, publication, or fully tested compatibility claim is made here.

More from Steve Frost

PulseSee what needs you from Slack, Gmail and Calendar on one live board, kept current by scheduled agent runs. Hourly, Daily and Weekly runs write items sorted into Now, Next, Later and Nice to Know, and Done or Snooze sticks across runs. Each item can carry prepared replies that copy to your clipboard and open the source; nothing is sent for you. A robot button hands an item to an agent thread that drafts the work for your review. Your agents need their own Slack, Gmail and Calendar access (MCP servers, CLIs or plugins), and every run uses your model quota.NewRadarSee every pull request and issue that needs you, live in the sidebar, without opening GitHub. Saved lanes poll straight through your gh CLI, so results are always current and nothing about your repositories is stored outside your machine. Describe a queue in plain words — "my team's billing PRs, no drafts" — and an OpenAI-compatible model drafts the lane, then tune every filter in a full editor. From any row, open a read-only review or triage thread with the project already picked, or rebase your own open PR server-side. Needs gh signed in to GitHub (gs or dt to add Gitstream and Delta), and an OpenAI-compatible API key in the bb server environment for drafting.NewTable ExpandOpens any markdown table in a thread full width, the way bb already expands images and Mermaid diagrams. Click the table or its corner expand button to see it in a dialog at the window width, with cells wrapping and both axes scrolling when it is still too big. Links, buttons and text selections inside the table keep working; Esc, the close button or the backdrop closes it. Relies on bb's table markup, so a bb update can break it until the plugin catches up.NewVoice ModeTalk to a thread's agent hands-free, like ChatGPT or Codex voice. When the composer is empty its send button becomes a waveform; click it, or press Ctrl+Shift+V, for a full-duplex realtime voice chat. The voice model hands requests to the thread's agent, answers "is it done?", stops the agent when you say stop, and reads back a short summary when the turn ends. Talk over it any time to interrupt. Uses OpenAI Realtime with your own API key, or a plugin that provides realtime connections (for example a company AI proxy). bb's own send and dictation are never affected.New

More in Agents & Providers 61

Add, choose, configure, route, or coordinate who runs a thread.

View all