# Playground

`agent-sdk 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](/docs/reference/http-api.md): the HTTP surface the playground uses
- [Sessions and streaming](/docs/reference/sessions.md): the streams it renders
