Agents
Agents are LLM-driven workspace resources. You define a task prompt, attach tools and knowledge, set guardrails and channel behavior, then run or preview the agent in real time.
When to use
- Build a conversational assistant for chat, voice, or general (tool-callable) use
- Ground answers with knowledge bases, tools, and structured arguments
- Keep behavior constrained with guardrails, context limits, and human approval on tools
Create an agent
Open Build → Agents and create a new resource.
- Name (min 2 characters), optional Description.
- Channel — how the agent runs:
| Channel | Role |
|---|---|
| General | Functional agent — callable as a tool or from workflows/functions; not a chat surface |
| Chat | In-app / chat-style conversations |
| Voice | Voice calls with separate STT and TTS |
| Realtime Voice | End-to-end realtime audio model (agent-only) |
After create, Vettero opens the agent builder. You can also open an existing agent from the Agents list.
Open the builder
The builder has a left activity bar, a main panel, and (on Config) a Preview pane on the right. Use Save in the header when the config is valid.
Activity bar
| Panel | Purpose |
|---|---|
| Config | Task, Input, accordion settings, and Preview |
| Integrations | Web and In App chat integrations for this agent (shown when the agent has a channel) |
Write the task and input
On Config, above the accordion:
| Field | Role |
|---|---|
| Task | System / behavior prompt. Supports LiquidJS templates, # tool mentions, @ resource mentions, and {{ … }} variables. Menu: Refine Prompt. Build with AI opens Studio to edit this assistant. |
| Input (Optional) | Treated as the first user message (for example a greeting). Same LiquidJS / {{ … }} support as Task. |
Write clear identity, allowed topics, which tools to call, and when to hand over or escalate. For prompt, LLM, and settings tips, see Prompts.
LiquidJS and {{ … }}
Task and Input support full Liquid templates (output, tags, filters) against the run context. Autocomplete suggests schema fields when you type {{. See Variables for Liquid syntax, filters, tags, env vars, and path bindings.
# tool mentions
Type # in the Task editor to pick a tool from the same tree as Manage Tools (blocks, agents, workflows, functions, skills, APIs, MCP, knowledge bases, queries, service tools, chat widgets, and so on).
- Inserts a
#mention in the prompt so the model is told about that tool. - Selecting a tool mention adds it to the Tools list if it is not already attached.
- Use
#when the agent should be able to call that capability.
@ resource mentions
You do not know workspace resource ids. Type @ for autocomplete and pick a resource by name (not the same as attaching a callable tool).
@ type | What you reference |
|---|---|
| Agent / Workflow | Agent or workflow |
| Service | A connected third-party service |
| Table | A workspace data table |
| Kb | A knowledge base |
| Chat Profile | A chat profile (for example handover targets) |
| Role / User | Workspace roles and members |
| WhatsApp template | An approved WhatsApp template (when available) |
- You keep seeing the name in the editor. The stored token is the id (
@type:id, for example@kb:…,@chat_profile:…), which is what the agent needs (for example to pass into a tool call). - Use
@so the prompt can point at a concrete resource (handover profile, KB, table, person) without you copying ids. - Table, chat profile, user, and role mentions are prompt references only and are not auto-added as tools. Attach callable tools with
#or the Tools tab.
Channel visibility
Which accordion sections appear depends on channel and whether the agent is conversational. On the main agent builder, a channel agent is treated as conversational.
| Section | Chat | General | Voice | Realtime Voice | Notes |
|---|---|---|---|---|---|
| Basic | Yes | Yes | Yes | Yes | — |
| LLM | Text LLM | Text LLM | Text LLM | Realtime Voice LLM | — |
| Voice Config | — | — | STT/TTS + call | Call behavior only | Voice channels only |
| RAG | Yes | Yes | Yes | Yes | Hidden when non-conversational |
| Tools | Yes | Yes | Yes | Yes | — |
| Guardrails | Yes | Yes | Yes | Yes | Effective on chat/text runs (see Guardrails) |
| Arguments | Yes | Yes | Yes | Yes | — |
| Result | Yes | Yes | Yes | Hidden | Needs structured-output model |
| Suggestions | Yes | — | — | — | Chat channel only (General is functional) |
| Starters | Yes | Yes | Yes | Yes | Hidden for WhatsApp / non-conversational |
| Context | Yes | Yes | — | — | Hidden for voice / realtime |
| STM | Yes | Yes | — | — | Hidden for voice / realtime |
General is a functional (tool-callable) agent — Suggestions apply to Chat only.
Configure Basic
Identity for the assistant:
| Setting | What it does |
|---|---|
| Name | Display name in lists and the builder header |
| Description | Short summary of what the agent does |
On the main Agent page, name and description may be read-only in the builder — edit them on the Agent details page instead.
Configure the LLM
Powers replies (or realtime audio).
Text / chat / voice (non-realtime)
| Setting | What it does |
|---|---|
| Provider | Connected LLM service under Integrations |
| Model | Text-generation (or capability-filtered) model |
| Max Tokens | Optional cap; empty means unlimited (provider default) |
| Temperature | 0–2 when the model supports it (default 1.1) |
| Enable reasoning | When the model exposes reasoning controls |
| Reasoning Effort | Model-dependent (for example low / medium / high) |
| Reasoning Budget (tokens) | Optional token budget for reasoning |
| Reasoning Summary | None / Auto / Concise / Detailed |
Realtime Voice
Uses a separate realtime config instead of the text LLM:
| Setting | What it does |
|---|---|
| Provider | Realtime-capable voice provider |
| Model | Audio / realtime model |
| Voice | Speaking voice for the session |
| Enable input transcription | Speech-to-text of the user for chat history (separate ASR pricing); optional transcription model |
Changing provider clears model/voice; changing model clears voice.
Configure Voice Config
Shown for Voice and Realtime Voice only.
STT / TTS (Voice channel)
Required before voice preview works:
| Setting | What it does |
|---|---|
| STT Service / STT Model | Speech-to-text for the caller |
| TTS Service / TTS Model / TTS Voice | Text-to-speech for the agent |
Realtime Voice hides STT/TTS (the realtime model handles audio).
Call behavior (both voice types)
| Setting | Default | What it does |
|---|---|---|
| Max call duration (minutes) | 15 | Hang up after this length (1–60) |
| Silence reprompt count | 2 | Check-ins after silence before hangup (0–10) |
| Silence before reprompt (seconds) | 10 | Idle time after the agent finishes before a check-in (0–30) |
| Silence reprompt instructions | Built-in prompt | What to say on silence check-in (max 500 characters) |
Configure RAG
Conversational agents only. Attach a knowledge base so the agent can retrieve grounded content.
| Setting | What it does |
|---|---|
| Create New / Attach Existing | Bind a knowledge base |
| Manage / Detach | Open the KB or remove the binding |
| RAG Strategy | Agentic — model calls the KB as a tool (default). 2-Step — retrieve before the turn and inject chunks. Hybrid — both |
| Top K | How many chunks to retrieve (default 3) |
If the selected model lacks tool-calling, strategies remain editable but retrieval may be unreliable for agentic modes. You can also mention a knowledge base in the Task with @kb:… or attach it as a tool on the Tools tab.
Configure Tools
Select tools the agent can call. The model must support tool-calling; otherwise the tools UI is blocked with a warning.
Use Manage Tools to pick callable tools, grouped for example as:
| Group | What you attach |
|---|---|
| Services | Tools from connected accounts (blocks/actions the integration exposes) |
| Blocks | Workspace/block tools, including Send Notification for the in-app bell inbox. Recipients are workspace members and/or roles. Tenant-wide send is not available on agents. |
| Agent / Workflow | Other agents or workflows as tools |
| Function | Functions |
| Skills | Skills. Selecting at least one skill also attaches get_skill, which loads the skill body by name. |
| Chat Widget | Chat widgets as renderable tools |
| Table/Query | Tables and queries |
| Api / MCP | API schemas and MCP integration tools |
| Kb | Knowledge bases as retrieval tools |
| WhatsApp templates | WhatsApp templates when available for the channel |
Typing # in Task and selecting a tool also attaches it to this list.
Tool approval
When a tool requires approval, the agent pauses the chat/run until someone approves or rejects. On reject (or non-approval), the tool is not executed and the model is told the outcome.
| Mode | Behavior |
|---|---|
| No approval | Tool runs without a human gate |
| Require role approval | Select one or more workspace roles. An approval request is created for those roles and appears on the Approvals page. Any user with one of those roles can approve or reject. If the current chat user already has an approval role, they can approve inside the chat without leaving the conversation. |
| Require current user approval | The current chat user must approve (chat channel only) |
For workflow Request Approval / Request Information blocks and the Approvals UI, see Approval Flow.
Configure Guardrails
Guardrails are on by default. The Policy is added to the task. Put {{ ctx.rejectionPolicy }} in the task to choose where it goes. If you leave it out, the policy is appended.
| Setting | What it does |
|---|---|
| Enable Guardrails | Turns the feature on. The policy cannot be empty |
| Policy | Required text. It is added to the task, and the checker enforces it |
| Fallback Message | Default: I cannot help with that request. |
| Enable Moderator | Optional LLM or TypeSafe checker. Each check is an extra call, so cost and delay go up |
| Check Input | Scan the latest user message before the model |
| Check Output | Scan the reply. On deny, replace it with the fallback |
| Per reply | One check when the reply finishes |
| Per sentence | A check at the end of each sentence while the reply streams |
| Moderator | TypeSafe or LLM. The question is built from the policy |
In a live chat the user sees the reply until the checker rejects it. The text is then replaced with the fallback.
The policy is still added on voice and realtime voice. The checker does not run there.
Configure Arguments
Optional JSON Schema for structured inputs into the run.
| Setting | What it does |
|---|---|
| Enable Arguments | Turns args on; turning off clears the schema |
| Arguments schema | Object-root JSON Schema builder |
Use Liquid {{ args.fieldName }} (and other rendered variables) in Task and Input. In Preview, Edit Args fills values for the session.
Configure Result
Hidden for Realtime Voice. When enabled, the agent returns a structured JSON result instead of plain text.
| Setting | What it does |
|---|---|
| Structured result (JSON Schema) | Requires a model with structured-output; cleared automatically if the model does not support it |
| Result schema | JSON Schema for the structured payload |
Configure Suggestions
Chat channel only (not General — General is a functional agent). Also hidden for voice, realtime voice, and WhatsApp. Suggests follow-up replies during conversations.
| Setting | Default | What it does |
|---|---|---|
| Enable Suggestions | Off | Turn suggestions on |
| Number of Suggestions | 3 | How many suggestions to generate |
| Number of Messages to Keep | 10 | Recent messages used as context |
| Custom LLM for Suggestions | Optional | Separate text-generation + structured-output LLM |
Configure Starters
Up to 5 prompts shown as buttons when a chat starts with no messages. The user taps one to send it as their first message. Hidden for voice, WhatsApp, and non-conversational setups. Add or remove starter message strings in the list.
Configure Context
Conversational text channels only (hidden for voice / realtime voice). Controls how long histories are kept.
| Setting | Default | What it does |
|---|---|---|
| Enable Context Management | Off | Turn trimming/summarization on |
| Context Management Strategy | Trim | Trim Old Messages or Summarize Old Messages |
| Trigger Messages Count | 100 | Start managing when history reaches this many messages (min 10, step 10) |
| Messages to Keep | 10 | How many recent messages to retain |
| Custom LLM for Summarization | Optional | Only when strategy is Summarize |
Configure STM
Conversational text channels only (hidden for voice / realtime voice). STM is Short-Term Memory for files (and vision when applicable).
| Setting | What it does |
|---|---|
| Load Files into STM | Load uploaded files into short-term memory. Requires tool-calling; disabled with a warning otherwise |
| Non-text modalities | If the model accepts image (or other non-text) input, those file types load automatically even when the toggle is off |
Preview and debug
The right pane tests the live configuration.
| Control | What it does |
|---|---|
| Start Preview | Begins a preview session (config must be valid; save when dirty) |
| Text Chat / Voice Chat | Voice channel: pick text or full voice (voice needs STT/TTS complete) |
| Realtime Voice | Connect mic, mute/unmute, end call; optional text fallback if speech is missed |
| Debug | Toggle debug output for the session |
| Edit Args | Set Argument values for this preview (empty if Arguments are off) |
| Reset | Clear the preview session and start over |
Fix validation errors from the Config panel before preview will start.
Where agents are used
| Place | How |
|---|---|
| Chat integrations | Web widget or in-app sidebar chat bound to this agent |
| Channels | Default agent for inbound chat/voice, or start a chat on a channel with a chosen agent |
| Other agents | Attached as an Agents tool |
| Workflows | Agent blocks / tools that run or hand off to an agent |
| Functions | Bound agent resource and await vt.runAgent(key, input?) (general channel) |
| MCP Servers | Expose workspace agents as tools on an MCP server when configured |
| Schedule | One-time runs that start this agent |
| Trash | Soft-deleted agents can be restored within retention |
Limits and tips
- Pick a model with tool-calling if you need tools, agentic RAG, or Load Files into STM.
- Structured result and suggestion LLMs need structured-output support.
- The guardrail policy is part of the task. The optional checker is a separate LLM or TypeSafe call and adds cost.
- Starters max out at 5 agent-opening messages.
- Tool approvals pause the run until approve/reject; role holders use Approvals (or in-chat when they hold an approval role). See Approval Flow.
- Voice preview needs STT/TTS (Voice) or provider + model + voice (Realtime Voice) before a voice session can start.
- Channel choice at create time drives which Config sections you see; change channel-related behavior carefully when switching surfaces.