Skip to content

Choosing a surface

A surface is one place a plugin appears or acts: a page in the sidebar, a button beside the prompt box, a tool in the agent’s session. bb names 46 surfaces in seven groups. To choose, start from what the person or the agent should experience, open a first-party plugin that already does it, and then read the surface’s reference page for the exact API. The tables below cover the common goals; all 46 surfaces are on Surfaces, and the UI zone map shows the window surfaces in place.

A plugin can answer yes to several of these; the scaffold in Your first plugin answers the first two.

  1. Does a person see or click it in the bb window? Then you need an app entry. The surfaces are in the first six groups: the app window, the command palette, the composer, the home page, the plugin’s settings page and the plugin page.
  2. Does the agent use it while it works? Then the server entry gives the agent a CLI command and a skill that teaches it, a native tool, or instructions.
  3. Does it run with nobody watching? Then the server entry runs background services and schedules, reacts to thread events, and serves HTTP routes for outside services.
  4. Does it change which agent runs, or where? Agent, environment and machine providers are extension points; agent providers and the first-party environment providers also ship a host entry.
To add…SurfacePlugin to read
a page of your own, opened from the sidebarFull-page panelstasks, github; the smallest is plugin-api-tester
a tab in the panel beside a threadThread side-panel tabsside-chat, github
a component inside the agent’s replyRich message embedsinline-vis, the smallest
a form that pauses the agent to ask the personIn-thread formsask-user-question, secrets
an action on a single messageMessage actionsside-chat
a viewer or an editor for a file typeFile viewers & editorspdf-preview, the smallest; monaco-editor
an item at the bottom of the sidebarSidebar footer itemsconnect
rows in the + menu beside the prompt boxThe + menudrafts, scheduled-send
a banner above the prompt boxBannersprovider-retry, workflows
results in the mention menuMentionsgithub, tasks
a command in the command paletteCommand palette actionsmonaco-editor
a section on the home screenHome-screen sectionsno first-party plugin uses it
a replacement for the thread listThe thread listreplacement-lab-alpha with replacement-lab-beta; install both
settings the person fills inSettings fieldscustom-instructions, github
your own component on the settings pageCustom settings sectionkeep-awake, memory
a notice that the plugin needs configuring before it can runConfiguration statusgithub, workflows

Your UI shares the window with bb’s own in one of four ways. On an additive surface your component sits next to bb’s components and those of other plugins. A replacement surface swaps out a bb component and falls back to it if yours crashes. The thread list is exclusive: one plugin replaces the whole list. And for host chrome such as sidebar footer items, bb draws the control from data your plugin supplies. The four kinds are defined on Frontend slots.

To give the agent…SurfacePlugin to read
a command it runs, taught by a skillbb CLI commandsthe scaffold; memory, tasks
a native tool in its sessionAgent tools & skillsask-user-question, memory
instructions only, with no UIAgent tools & skillscustom-instructions, bb-guide
a gate that decides whether a message may be sentDispatch hookconcurrency-limit
data that travels with the threadThread plugin metadataworkflows
To run…SurfacePlugin to read
a long-running service or a cron scheduleBackground workautomations, keep-awake
code when a thread starts, finishes or failsThread lifecycle eventspush-notifications, provider-retry
a webhook endpoint with signature checkingHTTP, WebSocket, RPC & realtimeslack-bot, an example with no dependencies
your own SQLite database with migrationsStoragememory, github, tasks
code that creates threads and projectsThe bb SDKautomations, tasks
To provide…SurfacePlugin to read
a new agent in the model pickerAgent providersprovider-acp, provider-pi; the smallest is the echo-provider example
the place a thread’s workspace livesEnvironment providersenvironment-git-worktree, environment-project-checkout
a machine to run threads onMachine providersenvironment-modal-sandbox
your own code on the agent’s machineHost workerskeep-awake, environment-personal-workspace

The fullest first-party reference is tasks. The catalog lists every first-party plugin with its entries and size.