Agents and the builder
Every tab of the agent builder, the live preview, publishing to an environment, rollback, duplicate and archive.
Agents lists each agent with its model, the version active in the selected environment, status and last update. + New agent asks only for a name; everything else is edited in the builder. The row menu offers Open builder, Duplicate (creates “Name (copy)” as a draft) and Archive (hides the agent and stops new conversations; versions and existing conversations are kept).
The builder
Two columns: the tabbed editor and the Preview. Every field autosaves; “Saved” flashes after each change. The header shows the active version badge, a draft has changes chip when the draft differs from what is live, Versions, and Publish to Development / Production.
Persona
Name, internal description, system prompt, tone chips (Friendly, Professional, Concise, Playful, Empathetic, Formal), greeting (first message of every conversation), fallback (used when the model cannot answer). The prompt is a template; chips insert {{ context.plan }}, {{ context.currency }}, {{ context.locale }}, {{ context.screen }} and {{ context.userId }}. Only context.* variables are filled, and only for keys listed as public in Behaviour.
Write the prompt as instructions about which tool to call for which intent and what to render. Example that works well with current models:
Call the matching tool right away with sensible defaults instead of asking clarifying questions: products → search_products (query = the user’s words, maxPrice when they give a budget); order status → track_shipment. Never invent prices: quote tool results only. After a tool returns items, render them with render_ui (products as acme.productCard, one per item inside a column) and keep the text short.
Model
Provider (openai, anthropic, google, groq), model id, your API key (a project secret chosen by name), temperature (0–1), max output tokens. Without a secret the agent runs the deterministic mock provider, which is useful for demos but never calls a real model. Model ids offered: OpenAI gpt-6-sol, gpt-6-mini, gpt-5.4; Anthropic claude-fable-5-1, claude-opus-5-5, claude-sonnet-5, claude-haiku-4-5; Google gemini-3.5-pro, gemini-3.5-flash; Groq llama-4-maverick, qwen-4-72b.
Tools
Attach project tools with a switch. Per attachment: confirm first (the user approves each call in the chat) and act as user (forward the signed-in user’s token). Defaults come from the tool’s own settings.
Knowledge
Attach knowledge bases with top-k and minimum score. Indexing and retrieval are planned; the tab is functional but retrieval returns placeholder results today.
Workflow
Optionally attach a workflow. Stored on the agent; dispatch from live turns is planned.
UI
The allowed components checklist over every type in the project (built-ins and custom, the latter marked from code or custom), and the URL allowlist (hosts that url actions and links may open, comma separated). The model can only emit types ticked here.
Behaviour
Max tool rounds (default 6), history window in messages (default 20), hand off to (Kletso inbox, Slack channel, Never), hand off when (request, frustration, payment_issue, legal, low_confidence), public context keys (sent to the model and tools), sensitive context keys (tools only), and Jev turn judgments (beta, on by default): before each model call, Jev reads the user’s message against the UI last shown and attaches the picked option, flags a request for a human and marks suspicious input. Switch it off for agents that should see raw text only. Memory (beta, see Memory): conversation summary with the number of messages kept verbatim (default 6), user memory (durable facts the user states, remembered across conversations and editable on the Users page) keep sensitive facts (off by default), and recall earlier conversations (snippets of the user’s past chats retrieved when Jev judges the message needs them).
Versions
Every publish is an immutable row: number, note, date, who, and chips for the environments where it is active. Use in Development / Production re-publishes that version there (rollback or roll-forward). Nothing is ever deleted.
Publish
The modal summarises what changed against the active version, the attached tools, the model (with a warning if no key is set), what it replaces, and takes an optional release note. Publishing snapshots the draft as the next version and makes it active in the selected environment. Sessions pick it up on their next bootstrap.
Preview
The right column is a real conversation with the draft on the selected environment (or the in-browser runtime in demo mode). You see bubbles, tool-call chips, a schematic rendering of every surface, and an event inspector with timing, tokens, latency and finish reason. Restart with the circular arrow. Preview conversations appear in Conversations as preview:<your email>.