@switch (tab()) { @case ('Playground') { Sandbox. Instructions and settings on this tab apply to test runs only — the live agent keeps its published configuration until you promote.
System instruction
Model {{ modelName }} Confidence floor {{ agent().confidenceFloor }}
Test run @if (transcript().length > 0) {
@for (turn of transcript(); track turn.id) { @if (turn.role === 'user') {

{{ turn.text }}

} @else {

{{ turn.text }}

{{ turn.latencyMs }} ms {{ turn.tokens }} tokens @if (turn.fellBack) { }
@if ((turn.citations ?? []).length > 0) {

Grounded in: @for (cite of turn.citations; track cite) { {{ cite }} }

} @if ((turn.guardrailHits ?? []).length > 0) {

Guardrails fired: @for (hit of turn.guardrailHits; track hit) { {{ guardrailName(hit) }} }

}
} }
} @else { Nothing run yet. Try “what is your return policy?”, or paste a real customer message. }
@if (transcript().length > 0) { }
} @case ('Knowledge') { @if (knowledgeNeedsAttention().length > 0) { {{ knowledgeNeedsAttention().length }} source(s) are pending or failed in the library. This agent answers from what is trained — until they train, their content is invisible to it. } @if (knowledge().length > 0) { @for (row of knowledge(); track row.binding.id) { {{ row.source.name }} {{ row.source.type }} {{ row.binding.chunks > 0 ? row.binding.chunks : '—' }} {{ row.binding.lastIndexed }} {{ row.binding.citationShare > 0 ? row.binding.citationShare + '%' : '—' }} } } @else { No knowledge is bound to this agent — it can only answer from its system instruction. } Manage the source library } @case ('Confidence') {
Confidence floor
{{ floor() }}
@if (floorOverridden()) {

Overrides the tenant default of {{ tenantDefault }} set in Settings → Security.

} @else {

Inherited from the tenant default set in Settings → Security.

}
Last 7 days, by confidence @if (buckets().length > 0) {
@for (bucket of buckets(); track bucket.from) { }
050100
At a floor of {{ floor() }}, {{ divertedShare() }}% of replies ({{ divertedReplies().toLocaleString() }} over 7 days) would take the fallback path instead of answering. } @else { No scored replies yet — this agent has never been published. }
Below the floor

The Handover tab’s “below the confidence floor” rule uses this same number, so the two can never disagree.

} @case ('Handover') { Rules are evaluated top down — the first matching trigger wins. Agent-to-agent and agent-to-human are different handovers: only a human target holds the customer’s session open while someone picks it up. @if (rules().length > 0) {
    @for (rule of rules(); track rule.id) {
  1. {{ rule.order }}

    {{ rule.trigger }}

    {{ rule.target }}

    {{ rule.note }}

    Carries context Holds session
  2. }
} @else { No handover rules yet — this agent never hands a conversation on. } } }

{{ agent().name }}

{{ agent().purpose }}

Instance
Guardrails in force @if (activeGuardrails().length > 0) { @for (policy of activeGuardrails(); track policy.id) { } } @else {

This profile has no enabled guardrail.

}
Knowledge
@if (promoted()) { Queued for promotion. In the live product this opens the review step — the prototype stops here. } @else { @if (!tested()) {

Run at least one sandbox test to enable this.

} }