Skip to content

Build

Agent Chat

The playground at /playground is where you talk to agents directly. It looks like a chat app; the difference is that every message produces a trace you can inspect, and the agent runs with its full saved configuration — same tools, same guardrails, same memory as anywhere else on the platform.

Chatting with an agent#

Pick an agent from the selector and the conversation runs against its saved configuration: provider, model, system prompt, knowledge bases, skills, tools, guardrails, and memory. Conversations are persisted, so you can leave and pick a thread back up later.

  • Attachments — drop images (sent to vision-capable models as image input) or documents (parsed and added to the conversation context) directly into a message.
  • Citations — when the agent answers from a knowledge base, the message carries the source chunks it used, so grounded answers are visibly grounded.
  • Memory chip — when long-term memory is enabled, each reply shows how many memory items were recalled (with a preview), so you can see exactly what the agent "remembered" rather than guessing.
  • Fallback override — if the primary model fails, the playground offers a fallback model picker; your choice sticks for the rest of the session and is shown explicitly.

The trace behind every message#

Every response carries a trace ID, and the inspector panel opens the full execution record for any message: the resolved prompt, tool calls with their arguments and results, tokens, cost, and latency. This is the playground's real purpose — the fastest loop from "I changed something in my agent" to "I can see exactly what that change did". The same traces are queryable later from Logs & traces.

Skill-sample agents#

The first time you open the playground, a small set of sample agents built around skills is seeded into your workspace, with a short tour overlay that demonstrates how attached skills change an agent's behaviour. They are ordinary agents in your library afterwards — edit or delete them freely.

Treat the playground as your default debugging surface: reproduce the problem in a chat, open the trace for the bad message, and read what the model actually saw and decided. Most "the agent is broken" reports dissolve at that step.

Composer controls — every button#

ControlWhat it does
AttachAttach images or documents to the turn. Text is extracted and included in the prompt; a summary is saved with the message so the history stays readable.
Visual BIGenerate charts from your connected tables alongside the text answer. Seeded from the agent's tools.biVisuals setting and toggleable per session. Ask for more than one — “show me 3 charts of sales”, “a couple of visuals”, “charts for revenue, cost and headcount” — and the question is split into one analytical question per visual (up to 4). A plain request still produces one chart and costs exactly what it did before.
PPT / Word / ExcelGenerate a real, editable Office file from a prompt. See below.
Sample / Full dataHow much data is pulled in — applies to Excel generation and the Visual BI row snapshot.
Model overrideSwap the model for this session only. The fastest A/B test on the platform.
Stop generatingCancels the in-flight turn.
RegenerateRe-runs the last turn.
Edit & resendRewrite your message and rerun from that point.
InspectorLive thinking, tool calls, and the full request/response for the last turn. A tool call shows its arguments and a result preview; the ML tools show their result as a person reads it — a prediction table (key columns first, model and version, keys not found, where the features came from) or the model list — and an error as the error.

Sources under an answer#

Every answer lists what it actually drew on, grouped by kind — web links, knowledge base documents, the tables a query read, an MCP tool, or any other tool. Several kinds appear together when the answer genuinely used several.

Why it works this way

Knowledge base documents are retrieved before the model runs, so their presence proves nothing about whether the answer used them. They are listed only when the answer cites them by number, or when nothing else grounded it — which is why a web-search answer shows links rather than a tail of unrelated documents. Reading this panel is the fastest honesty check available: ask a data question and if the sources show a document rather than a table, the agent answered from prose it half-remembered instead of counting.

Generating documents#

PhaseWhat is happening
gatheringCollecting knowledge excerpts, table schemas and samples, the recent conversation, and — if the prompt points at the internet — live web research.
planningAn LLM produces a typed plan for the document.
buildingThe plan is filled with real numbers and rendered into a file.

Browser vs Deep#

Browser · fastDeep · slow
RendersIn your browserServer-side, native Office toolchains
Deck size16–22 slides24–30 slides
Diagram variety≥8 kindsAll 14 kinds, none more than twice
ExtrasContents page; render-verify pass
NeedsNothingThe docgen service running — see Install & deploy

Deep greys out when it cannot run

If the renderer is unreachable, Deep would silently fall back to the browser build and produce a file identical to Fast. The composer probes for the service and disables Deep with the reason instead, so "Deep did nothing" is visible up front rather than after a generation.

The finished file appears as a preview card with a thumbnail and a Download button, and is stored in a private bucket so Download still works after a reload — until the agent's chat retention window purges it.

Answering in Slack#

An agent can answer where the question is already being asked. Both ways in are configured under Integrations → Slack, and both run the agent as the workspace's owner — its prompt, tools, knowledge and guardrails, the owner's model rules and budgets, and a trace and an audit row per turn, exactly as in the app.

  • Slash commands, routed per command. Point /ask at an AI Analyst and /support at an agent; the request URL is /api/slack/command. A command with no route falls back to the workspace's analyst, which is what every installation had before routing existed.
  • @mentions and direct messages, answered in thread. Subscribe Event Subscriptions to app_mention and message.im at /api/slack/events, add the chat:write scope, and paste the Bot User OAuth Token into the workspace. An event carries no reply URL, so the answer goes back over Slack's Web API — which is the only reason a token is needed at all.

Why the answer is not instant, and why that is fine

Slack errors if nothing replies within three seconds; a turn takes 30–95. Both endpoints acknowledge immediately and post the real answer afterwards. A retry that arrives while the first attempt is still thinking is acknowledged and dropped — answering it too would post the same answer three times.

Image Playground#

Experiment → Image Playground is the same idea for images: generate, edit or blend them with whatever image models your connected providers expose. Pick a provider, pick a model, write a prompt. Uploads for editing are capped at 8 MB, and results download straight from the result card.

Every run is independent

There is no conversation history here, and that is the difference from Agent Chat rather than a missing feature. Each run sends your prompt and nothing else, so a result depends only on what you typed — which is what makes it useful for comparing prompts or models against each other. If you want the image to follow from a conversation, use the agent chat above instead.

The models offered come from your own provider connections, so the list reflects what you have set up in Integrations — an empty picker means no connected provider exposes an image model, not that the feature is unavailable. Runs bill to that provider and appear in Analytics like any other model call.