Build your agent
Playground
The Playground at /app/agents/{id}/playground is a
full sandbox for testing your agent before publishing. Conversations here
are flagged is_playground and never count toward your billing
meter, conversation analytics, or the Inbox.
What you can test
-
Site type — switch between
ecommerce,saas,documentation,help_center,marketing,internal_kb, orgenericwithout mutating the agent's persisted column. Useful for "what would my agent say if treated as ecommerce vs documentation?". - Page context — paste a URL and metadata (title, description, og tags, JSON-LD, h1/h2, visible body text) so the agent answers as if the visitor were on a specific page. Six ready-made templates (Shopify product, SaaS pricing, Docusaurus docs, help-center article, marketing landing, blank) cover the common shapes.
-
Reply language — pick any locale the workspace
ships translations for (132 by default, auto-discovered from
lang/*.json). Useful for sanity-checking that the agent answers in the right language and that RTL scripts mirror. - Sample prompts — buyer-realistic test prompts per vertical (5–6 chips per site type) so you can fire a typical question with one click.
- Compare mode — toggle to split the chat into two columns and run the same question against two different site types side-by-side. The differentiator for picking the right vertical.
Right-pane tabs
Scenario
Site type override + reply language + sample prompts. The capability
badges below the site-type select show which rich blocks
(product_card, pricing_card,
case_study_card, escalation_button) the
selected vertical can emit.
Page context
Form-driven editor for the page_context the visitor would
send. Use the
Use template dropdown to drop in a realistic Shopify product page
or Stripe pricing page, then tweak the URL / title / og fields. JSON-LD
accepts pasted JSON.
Diagnostics
Read-only inspection of the last turn:
- Latency — first-token and total time.
- Confidence — the strongest grounding signal (retrieval similarity OR page-context baseline 0.85).
- Retrieved sources — top-k chunks with both ANN and rerank scores plus a snippet, ordered as the LLM saw them.
- Tool calls — every server-side tool fired during the turn, with arguments.
- Inline blocks — count and types of rich blocks
the LLM emitted (e.g.
product_card). - System prompt — the full system message used, including the vertical fragment and any custom system prompt. Click to expand.
Endpoints
All three are session-authenticated and scoped by
AgentPolicy::update:
-
GET /app/agents/{agent}/playground— Inertia render with the verticals preview map keyed by slug. -
POST /app/agents/{agent}/playground/stream— SSE stream. Body:{message, conversation_id?, site_type_override?, language_override?, page_context?}. Emitsstart,retrieval,prompt,token,block,tool_call,doneevents. -
POST /app/agents/{agent}/playground/reset— clears the cached conversation history. Body:{conversation_id}.
Notes
- Playground turns reuse the same Redis history key as production widget conversations. Reset is the explicit way to start from an empty context — closing the tab leaves history in place for two hours.
- Site-type and language overrides do not mutate the agent's persisted columns. Once you've found the combination that works, head to Site type in the agent's settings to save it.
- Page-context payloads are sanitized server-side identically to the visitor widget — same key allow-list, same 8 KB cap, same canonical-URL collapse.