Playground
bdk serve enables a web playground at
http://127.0.0.1:3000/<slug>/playground (or /playground in single
mode). In multi-agent mode, each agent has its own playground, and /
lists them all.
Playground surfaces
| Surface | What you can do |
|---|---|
| Chat | Talk to the agent. Text and reasoning stream live, and tool calls appear inline with their arguments, output, and error state |
| Slash commands | Custom channel routes without path parameters become composer commands; GitHub and Slack ingress routes are excluded. A drive route becomes /drive <pr-url>, with /help and autocomplete |
| Try | Invoke a custom channel route from the Agent tab. The modal remembers your last body per endpoint and copies curl. Find the session the route starts under Runs |
| Runs | Browse the sessions you own and eval runs. Search by title or identifier; open sessions in Chat, Trace, or Raw and eval runs in Evals |
| Evals | List and run filesystem evals from the browser |
| Agent | Inspect the discovered tools, skills, subagents, MCP connections, channels, and hooks |
| Raw | Inspect the selected session's event stream |
| Logs | Recent server log lines, polled from GET /v1/logs |
In --dev on loopback, or with --allow-anonymous, the session list
includes every principal.
Remote access
The default localDevStrict() auth admits direct loopback calls only
and rejects proxy-forwarding headers, so a tunnel or LAN address won't
work until you pass --bearer-token <secret> (or
serve(dir, { authToken })). Open the playground on the remote device
and paste the token into the token field in the navbar.
--allow-anonymous is the demo-only alternative for trusted networks.
Related
- HTTP API: the HTTP surface the playground uses
- Sessions and streaming: the streams it renders