Skip to main content
Glama

agents_update

Update an existing AI agent's configuration.

All parameters are optional — only provided fields will be updated.

Use this to:

  • Enable or disable an agent

  • Change agent name or description

  • Assign or detach a prompt

  • Change default send mode

  • Replace knowledge collections

  • Update agent status

  • Change agent priority for trigger matching (lower number = higher priority)

  • Override which tools the agent can/can't call on triggered runs

  • Override which context sections (situation, communication style, job state, conversation history, thread summary) the agent receives

  • Opt into boilerplate prompt sections (safety guidelines, data confidentiality, factual accuracy) — all default OFF

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
nameNoNew name for the agent
modelNoCanonical source for which LLM the agent runs on. To switch models pass JUST this — do NOT also rewrite prompt_text (any 'duty model' section in the prompt is stale doc, not the config). OMIT to leave the model unchanged.
scriptNorule_based deterministic action (no LLM): Python run in the workbench sandbox on each matched event. Reads `inputs` (raw_data, message_id, from_name, …) and calls the agent's integrations via call_tool('ext<id>_<name>', {..}). Dedupe writes on inputs['message_id'] (retries re-run). Pass null to clear (falls back to per-trigger template).
statusNoAgent status: 'active', 'paused', or 'archived'. OMIT to leave the status unchanged.
agent_idYesID of the agent to update
priorityNoAgent priority for trigger matching. LOWER number = HIGHER priority (wins tiebreaks). Typical range 1-100. Fallback auto-reply agents use 10; specialised/topical agents use 100. When two agents match the same incoming message, the one with the lower priority number fires.
prompt_idNoPrompt ID to assign (null to detach)
send_modeNoDefault send mode: 'auto' or 'draft'. OMIT to leave the send-mode unchanged.
fast_modelNoModel for the fast-path responder (voice, text auto-reply, agent executor). Defaults to deepseek-v4-flash-nothink when unset. Non-Anthropic models (deepseek-v4-flash-nothink, gpt-4.1-nano, kimi-k2.6) do NOT use BYOK today — they use the system API key + credits. Pass null to revert to default.
api_surfaceNoOpenAI HTTPS endpoint for this agent's LLM calls (Phase 3a). 'chat_completions' (default, also when null) routes to /v1/chat/completions. 'responses' routes to /v1/responses — required for OpenAI native server tools (web_search, code_interpreter, image_generation, input_file PDFs). Capability still wins: agents whose tool list triggers the server_tool_responses_api substitution always route to Responses regardless of this setting. Ignored on non-OpenAI models (Anthropic, DeepSeek, Moonshot). OMIT to leave the api_surface unchanged.
descriptionNoNew description for the agent
prompt_textNoDESTRUCTIVE — REPLACES the entire system prompt. Pass ONLY when the user explicitly asks to edit/rewrite the prompt. To READ the prompt use prompts.get. When updating other fields (model, name, …) OMIT this. To append, prompts.get first then concatenate. Pass null to revert to the linked template.
remote_toolNoOnly for text_engine='external_agent': the workspace integration tool that starts the remote agent, e.g. 'ext42_run_routine' (list them with integrations.search_tools). On each trigger DialogBrain calls it once with the event, the agent's instructions and the ids to answer with; the remote agent replies through the DialogBrain MCP tools (messages.send, tasks.comment, agents.task_complete). The endpoint and its secret belong to the integration, not to the agent.
text_engineNoText-execution engine: 'agentic', 'ai_assisted', 'rule_based', or 'claude_channels'. Replaces the legacy execution_mode field (20260523_002). Voice is now derived from triggers, not engine. OMIT to leave unchanged.
voice_toolsNoThe EXACT set of tool IDs exposed to the LIVE VOICE runner (dotted IDs, e.g. ['knowledge.query','messages.send','messages.read_history','agent.handoff','calls.end','calendar.check_availability','calendar.create_event','contacts.capture_lead']). SEPARATE from allowed_tools (which governs TEXT mode): a tool only reaches the voice LLM if listed here. When set this REPLACES the whole voice surface — include EVERY tool the voice agent needs (the small default set is NOT auto-added once any voice tool is set). Tools listed here are also added to the text allow-list if absent. Empty list [] = no voice tools. OMIT to leave the voice tool surface unchanged.
denied_toolsNoBlock-list of tool IDs the agent must not call on triggered runs. Applied after allowed_tools and default visibility. Empty list [] = clear the block-list.
in_workspaceNoRun this one call in this workspace id instead of the session's. Nothing is stored; other sessions are not affected.
voice_engineNoVoice execution engine: 'pipeline' (default — Deepgram/Gladia STT + LLM + TTS), 'openai_realtime' (OpenAI Realtime API v2v; requires the workspace to have a BYOK OpenAI key connected — the worker falls back to 'pipeline' and logs why if the key is missing), or 'gemini_realtime' (Gemini Live native-audio v2v; runs on the workspace owner's Gemini key, else on the platform key unless platform keys are switched off). If the chosen realtime engine has no usable key, the result carries `warnings` and calls use the default pipeline. OMIT to leave unchanged.
allowed_toolsNoExplicit allow-list of tool IDs this agent can call on triggered TEXT runs (e.g. ['messages.send', 'agent.handoff']). REPLACES the current text list: only these tools (minus denied_tools) are exposed to text runs. Empty list [] = no tools for text runs (there is no fallback set). Omit to leave the list unchanged. Tools already on the agent keep their current text/voice settings; only NEWLY named tools are switched on for text. So re-sending the current list plus one name adds exactly that one tool, and a tool that is currently call-only stays call-only (switch it on for text in the Tools tab, or remove it with voice_tools and name it again). Call tools are not removed by omitting them here — without voice_tools, the call surface is kept as it is; use voice_tools to change it. Does NOT affect the My AI dropdown path.
resume_policyNoWhen a human-paused thread hands control back to the agent: 'manual' (stays paused until an operator resumes it from the thread header), 'next_incoming_from_guest' (default — resumes on the contact's very next message), or 'after_<N>_hours' (e.g. 'after_2_hours'). With 'next_incoming_from_guest' a manual takeover lasts exactly one message; pick 'manual' when a person is expected to finish the conversation. OMIT to leave unchanged.
voice_denoiseNoServer-side noise suppression (DeepFilterNet) on the INBOUND caller audio before STT — cleans background noise so the agent hears callers in loud/public places and gets fewer false barge-ins. Channel-agnostic: applies to every voice channel the agent answers on. Default false (unset). OMIT to leave unchanged.
max_iterationsNoHard cap on agentic-loop turns (LLM round-trips) per run, 1-50 (default 10). Each turn can call tools; the loop stops when the model replies with no tool call OR this cap is hit. Raise it for multi-step tool chains (e.g. browser automation: open → snapshot → fill → confirm → reply) that otherwise exhaust their turns before producing a final answer. OMIT to leave it unchanged.
vision_enabledNoPer-agent opt-in for vision content. When true, the executor splices recent image attachments from the active thread into the LLM call (Phase 3a continuous vision for Meet bot screen-share, plus any future channel that uploads images). Requires the agent's model to support vision (model_has_vision check). Default false; new calls pay zero token cost until the operator opts in. OMIT to leave the vision flag unchanged.
voice_greetingNoOpening line the agent speaks when the call connects. Pass an empty string "" to clear. Omit or null leaves unchanged.
voice_stt_modelNoSpeech-to-text model (Deepgram provider only): 'flux' (alias for flux-general-en), 'flux-general-en' (English Flux, LLM-powered end-of-turn), 'flux-general-multi' (multilingual Flux), or 'nova-3' (silence-based fallback). Flux variants are more responsive; nova-3 is the fallback when your Deepgram plan lacks Flux. Ignored when voice_stt_provider='gladia' (Gladia has a single model). OMIT to leave the STT model unchanged.
voice_tts_speedNoTTS playback speed multiplier (0.5-2.0, default 1.0). Yandex/OpenAI/Cartesia only — ignored for Deepgram.
voice_tts_voiceNoTTS voice id — provider-specific (e.g. 'aura-2-thalia-en' for Deepgram, 'alloy' for OpenAI, 'alena' for Yandex, Cartesia voice UUID). Pass null to revert to provider default.
auto_reply_rulesNoPlain-English rules injected into the fast model's system prompt as a `## Rules` block. No reserved keywords — the fast model reads them as guidance and decides per turn whether to reply directly or escalate to the main model for tools. Example: '- If the user greets, reply "Hi! How can I help?"\n- If the user asks what you can do, reply with a 1-sentence summary\n- If the question needs live data (prices, stock, booking), escalate' Engagement filtering (SKIP) belongs in trigger `conditions` (keywords, ai_filters, channel_types, cooldown), NOT here — if a message should be ignored the trigger shouldn't have fired. Pass null to clear.
debounce_secondsNoSeconds to wait after the last inbound message before generating, so rapid-fire messages coalesce into one reply (0-120, default 5). OMIT to leave unchanged.
voice_max_tokensNoMax TTS tokens per voice reply (40-200, default 100). Lower = snappier, higher = more detail. Controls speech brevity only: when the agent has voice tools, the runtime floors the underlying LLM completion cap at 400 so tool-call JSON always fits.
include_job_stateNoInclude current job state (active job context, tasks, notes) in the agent's prompt. OMIT to leave this flag unchanged.
include_situationNoInclude situation context (channel, sender info, trigger type) in the agent's prompt. OMIT to leave this flag unchanged.
native_web_searchNoWhether this agent may use the model provider's built-in web search (Anthropic, OpenAI) instead of the platform's web.search tool. Default true. Set false when the agent needs to filter results by publication date, use the workspace's own Serper key, or control the query — the built-in search offers none of those. No effect on providers without a built-in search (DeepSeek, Qwen). OMIT to leave unchanged.
voice_mip_opt_outNoOpt out of Deepgram's model-improvement program (privacy) for Flux STT. Default false. OMIT to leave unchanged.
voice_speak_firstNoWho speaks first when a call connects. true (default): the agent says its greeting right away. false: the agent listens first and answers what the other person says; it greets only if they are silent for ~2 s. Use false for outbound calls where the person answering introduces themselves first. OMIT to leave unchanged.
voice_record_callsNoRecord voice calls handled by this agent (stereo audio: caller and agent on separate channels), stored with the call for later playback. Default false. Ensure callers are informed of recording where consent rules apply. OMIT to leave this flag unchanged.
voice_stt_keytermsNoDomain-vocab bias for STT — names, product SKUs, etc. Passed verbatim as repeated `&keyterm=<w>` query params. Works on both Nova-3 and Flux. Prefer short phrases over full sentences. Empty list [] = no bias. Omit leaves unchanged.
voice_stt_languageNoSTT language code, validated against the SELECTED voice_stt_provider. 'multi' (default) enables autodetect / code-switching on either provider; a singleton like 'en', 'ru', 'uz' gives higher accuracy when the caller language is known. Deepgram provider: 'en' runs on Flux (fastest, eager end-of-turn); 'multi' and every other language run on Nova-3. Some languages — notably Thai ('th'), Vietnamese ('vi'), Indonesian ('id'), Tagalog ('tl') — are NOT in Nova-3's 'multi' auto-detect set, so those callers MUST be given an explicit code. Gladia provider: use its codes (e.g. 'uz' Uzbek, 'kk' Kazakh, 'az' Azerbaijani, 'tg' Tajik) — these are NOT valid under Deepgram. The enum below lists the union of both providers' codes; a code invalid for the chosen provider is rejected on save. OMIT to leave the STT language unchanged.
voice_stt_providerNoSpeech-to-text provider. 'deepgram' (default) runs Nova-3 / Flux and preserves existing behaviour. 'gladia' routes to Gladia streaming STT (solaria-1), which is Deepgram-class latency and covers ~115 languages Deepgram does NOT — including Uzbek ('uz'), Kazakh ('kk'), Azerbaijani ('az'), Tajik ('tg'). Pick 'gladia' when the caller's language is outside Deepgram's coverage, then set voice_stt_language to that language's code. The provider also decides which language codes voice_stt_language accepts. OMIT to leave the STT provider unchanged.
voice_tts_languageNoTTS language code, BCP-47 lite e.g. 'en', 'es', 'pt-BR' (Cartesia only, default 'en').
voice_tts_providerNoText-to-speech provider: 'deepgram' (default, Aura-2 EN-only), 'openai' (multilingual), 'cartesia' (Sonic-3, ultra-low TTFB, multilingual), 'alibaba' (CosyVoice v3-flash, multilingual, ~95ms TTFB), 'yandex' (best Russian), 'qwen' (Qwen3-TTS, self-hosted), or 'xai' (Grok, ~20 langs). OMIT to leave the TTS provider unchanged.
default_calendar_idNoDefault Google calendar_id applied at the TOOL layer whenever this agent calls a calendar tool without an explicit calendar_id (e.g. 'c_...@group.calendar.google.com'). Use for agents whose bookings must always land on one dedicated calendar — a prompt-only rule is advisory and the model occasionally drops the param. An explicit calendar_id in a tool call still wins. Pass an empty string to clear (falls back to 'primary'). OMIT to leave unchanged.
include_specialistsNoInject a [SPECIALISTS] block (~50–200 tokens) listing the workspace's delegation-capable agents so a router-style agent can pick a handoff target without first calling agents.list. Default OFF for new agents; the Router template ships with this ON. Agentic mode only. OMIT to leave this flag unchanged.
output_text_filtersNoDeterministic post-processing of the user-facing text an AGENTIC run produces (messages.send text + auto-delivered final answer; drafts inherit; ai_assisted fast-path replies and messages.edit are NOT covered). List of {pattern, replacement} regex rules applied in order. Example — strip AI-tell em dashes while keeping '—————' separator runs and never gluing lines: [{"pattern": "[ \\t]*(?<![—–])[—–](?![—–])[ \\t]*", "replacement": ", "}] (use [ \\t], not \\s — \\s matches newlines). Use for style rules the LLM won't reliably follow via prompt. Patterns are validated (invalid regex rejects the update). Max 20 rules. Empty list [] = clear all filters. OMIT to leave unchanged.
voice_call_analysisNoRun a post-call LLM analysis after each answered call: summary, success verdict with reason, and a 1-10 quality score, stored on the voice session and returned by calls.get_transcript metadata. Default false (costs one LLM call per call). OMIT to leave unchanged.
voice_primary_modelNoPrimary LLM for voice turns (e.g. 'gpt-4.1-mini', 'claude-haiku-4-5-20251001'). Pass null to revert to default.
voice_turn_detectorNoVoice end-of-turn detector: 'vad' (default — sharp, low-latency) or 'multilingual' (semantic model, ~1s slower per turn, fewer mid-pause cuts). OMIT to leave unchanged.
fast_prompt_overrideNoFull fast-path prompt override. Placeholders substituted via .replace(): {message}, {history}, {rules}, {tools}, {output_contract}. agent.prompt_text is NOT injected into fast_prompt_override — include it yourself if you want it. Pass null to clear.
pause_on_human_replyNoPause the agent on a thread the moment a human operator replies there. Default true. OMIT to leave unchanged.
voice_filler_enabledNoEmit 'thinking' filler audio while tools run so the caller hears life on the line (default true). OMIT to leave this flag unchanged.
voice_max_tool_callsNoMax tool calls per voice turn (1-10, default 3). OMIT to leave unchanged.
voice_output_gain_dbNoOutput attenuation in dB applied to the agent's WhatsApp call audio before the codec (-12.0 to 0.0, default 0 = unchanged). Use a negative value (e.g. -3.5) when a hot voice engine (OpenAI Realtime rides near 0 dBFS) causes blown-speaker distortion on loud words: the 24 kbps call codec needs headroom, and this restores it. Applied on the next call, no deploy needed.
voice_realtime_modelNoRealtime (v2v) model for the agent's voice_engine. openai_realtime: 'gpt-realtime' (~18c/min on short calls) or 'gpt-realtime-mini' (~75% cheaper). gemini_realtime: a Gemini Live model, newest first 'gemini-3.8-live', 'gemini-3.1-flash-live-preview', 'gemini-2.5-flash-native-audio-latest', 'gemini-2.5-flash-native-audio-preview-12-2025' (today's default). 'default' = back to the engine's default. OMIT to leave unchanged.
voice_thinking_textsNoPool of phrases spoken while the agent sets up the turn before calling the LLM (e.g. ['Hmm', 'So', 'One sec']). Pre-rendered to PCM at call start; one is picked at random per turn so the agent doesn't repeat the same word. Pass [] to clear. Omit or null leaves unchanged.
include_learned_styleNoInclude learned communication style (per-contact tone, dormancy state) in the agent's prompt. OMIT to leave this flag unchanged.
voice_record_announceNoOn recorded calls, prepend a short 'this call may be recorded' notice to the agent's greeting. Only takes effect when voice_record_calls is enabled. Default false. OMIT to leave unchanged.
voice_v2v_transcriptsNoEnable live transcripts for voice-to-voice engines (default true). OMIT to leave unchanged.
include_thread_summaryNoInclude condensed summary of older thread messages in the agent's prompt. OMIT to leave this flag unchanged.
voice_endpointing_modeNoLiveKit endpointing mode. 'fixed' (default) waits voice_endpointing_min_delay every turn; 'dynamic' adapts the wait from the conversation's own rhythm. OMIT to leave unchanged.
voice_hold_ready_replyNoKeep a finished reply the caller talked over (before any audio played) and speak it at the next pause, then answer what was said since. Without it (the default) stock LiveKit behaviour applies: that reply is discarded and regenerated from scratch. Default false. OMIT to leave unchanged.
voice_transfer_numbersNoPhone numbers (E.164, e.g. '+15551234567') the agent may cold-transfer a live call to ('let me put you through to a manager'). Any destination not on this list is refused; an empty list [] means the agent cannot transfer at all. Omit leaves unchanged.
include_factual_accuracyNoInject the Factual Accuracy block (~100 tokens, generic anti-hallucination rules) into the system prompt. Default OFF — skip if you write domain-specific accuracy rules in Instructions. Agentic mode only. OMIT to leave this flag unchanged.
knowledge_collection_idsNoReplace all knowledge collections with these IDs (empty list = clear all)
voice_flux_eot_thresholdNoFlux STT end-of-turn confidence threshold (0.1-1.0). Higher = wait for more certainty before finalizing the turn. Flux STT only (ignored on nova-3). OMIT to keep the worker default (0.7).
voice_greeting_prerenderNoGemini realtime agents only: synthesize the greeting in the agent's own voice while the phone is ringing, so it plays the instant the call is answered — word for word, no model start-up delay. Default false. OMIT to leave unchanged.
voice_greeting_returningNoGreeting variant for RETURNING callers (thread has prior history or a resolved name). Supports '{name}' — replaced with the caller's name when known, stripped when not. Pass an empty string "" to clear (always use voice_greeting). Omit or null leaves unchanged.
voice_silence_reprompt_sNoSeconds of silence from BOTH sides after which the agent briefly checks that the other person can still hear it (at most twice per call; never while the phone is still ringing). 0 = off (default). Typical 3-5 for outbound calls. OMIT to leave unchanged.
include_safety_guidelinesNoInject the generic Safety Guidelines block (~80 tokens) into the system prompt. Default OFF — enable only if you don't already write safety rules in your Instructions. Agentic mode only. OMIT to leave this flag unchanged.
include_tool_call_historyNoInclude the agent's own tool calls and results from the last 3 runs on this thread, compacted to IDs + top hits (~200-1000 tokens). Lets the agent recall file IDs, search hits, and decisions it already made across turns. Default ON. Agentic mode only. OMIT to leave this flag unchanged.
voice_filler_audio_presetNoWhich bundled clip plays as the 'thinking' filler while the agent is working (LLM + tool calls), used when voice_thinking_texts is empty. Requires voice_filler_enabled=true. Built-in presets: 'keyboard_typing' / 'keyboard_typing2' (keyboard-typing SFX — sounds like the agent is typing/looking something up), plus any bundled music preset. Pass '' to clear (fall back to spoken filler). An unknown value silently plays no filler. OMIT or null to leave unchanged.
voice_flux_eot_timeout_msNoFlux end-of-turn hard timeout in ms (500-15000). Flux STT only. OMIT to keep the worker default (5000).
voice_max_call_duration_sNoWall-clock cap for a voice call in seconds, clamped to 60-14400; the worker ends the call at it regardless of what the conversation is doing. OMIT to leave unchanged (default is no cap — a call ends when the conversation ends). To REMOVE an existing cap, clear the field in the agent's Voice settings UI (0 there = no limit). Two agents talking to each other are capped separately by calls.agent_duel's own max_duration_s.
voice_endpointing_max_delayNoLiveKit endpointing.max_delay (0.5-10.0s, default 3.0). Ceiling on how long the agent waits for a turn to end. voice_endpointing_min_delay is the floor after silence; this is what stops a thinking pause from holding the turn open, and it is the knob to raise when an agent talks over someone who pauses mid-thought.
voice_endpointing_min_delayNoSilence after end-of-utterance before agent replies (0.1-2.0s, default 0.3). Higher = fewer false interrupts; lower = snappier.
voice_preemptive_generationNoSpeculatively start the LLM on STT partials so the agent begins responding before end-of-utterance. Matches LiveKit stock template. Default true. OMIT to leave this flag unchanged.
include_conversation_historyNoInclude recent messages from this thread (up to 20) in the agent's prompt. OMIT to leave this flag unchanged.
include_data_confidentialityNoInject the Data Confidentiality block (~250 tokens, cross-contact PII isolation + prompt-injection defense) into the system prompt. Default OFF. Agentic mode only. OMIT to leave this flag unchanged.
voice_greeting_interruptibleNoAllow the caller to barge in during the opener TTS. Default true (trial-friendly — long greetings can be interrupted). Set false on outbound-call agents whose configured opener would otherwise get preempted by the caller's 'Hello?' triggering an off-script auto-turn. OMIT to leave this flag unchanged.
voice_group_interim_barge_inNoGROUP/Meet barge-in: interrupt the agent AS SOON AS a participant starts speaking (on the interim transcript), instead of waiting for the finished utterance. Default true. Set true to make a presenter/group agent easy to interrupt mid-sentence (word-gated by voice_group_barge_in_min_words so ambient noise can't trip it); false = only a completed utterance interrupts. OMIT to leave unchanged.
voice_flux_eager_eot_thresholdNoFlux eager end-of-turn threshold (0.1-1.0). Setting this ENABLES EagerEndOfTurn for faster turn-taking at the cost of +50-70% LLM calls. Flux STT only. OMIT to leave eager off.
voice_group_barge_in_min_wordsNoGROUP/Meet barge-in word gate (1-6, default 1): a participant line must have at least this many words to interrupt the agent. 1 = any word interrupts (most responsive); raise to ignore short cross-talk. OMIT to leave unchanged.
voice_early_finalize_confidenceNoFlux early-finalize confidence (0.1-1.0, worker default 0.65). Lower = finalize sooner on trailing silence (snappier, small mid-word clip risk). Flux STT only. OMIT to leave unchanged.
voice_group_barge_in_stop_wordsNoGROUP/Meet barge-in stop-words: any of these words/phrases ALWAYS interrupts the agent, even below voice_group_barge_in_min_words (e.g. ['стоп','подожди','вопрос','stop','wait','question']). Empty list [] clears. OMIT to leave unchanged.
voice_interruption_min_durationNoMin caller speech duration to interrupt the agent (0.1-1.5s, default 0.25). Higher = ignore short fillers like 'uh-huh'.
voice_group_barge_in_requires_addressNoGROUP/Meet barge-in: when true, only lines that ADDRESS the agent (by name/keyword) interrupt it — two humans talking to each other won't break the walk. Default false. OMIT to leave unchanged.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / in_workspace
      Added value: +{
      +  "description": "Run this one call in this workspace id instead of the session's. Nothing is stored; other sessions are not affected.",
      +  "type": "integer"
      +}
  2. Changed2 schema fields changed
    • addedInput schema / properties / remote_tool
      Added value: +{
      +  "description": "Only for text_engine='external_agent': the workspace integration tool that starts the remote agent, e.g. 'ext42_run_routine' (list them with integrations.search_tools). On each trigger DialogBrain calls it once with the event, the agent's instructions and the ids to answer with; the remote agent replies through the DialogBrain MCP tools (messages.send, tasks.comment, agents.task_complete). The endpoint and its secret belong to the integration, not to the agent.",
      +  "type": "string"
      +}
    • changedInput schema / properties / text_engine / enum
      Previous value: -[
      -  "rule_based",
      -  "agentic",
      -  "claude_channels"
      -]New value: +[
      +  "rule_based",
      +  "agentic",
      +  "claude_channels",
      +  "external_agent"
      +]
  3. Changed2 schema fields changed
    • changedInput schema / properties / voice_realtime_model / description
      Previous value: -"Realtime (v2v) model tier for voice_engine=openai_realtime: 'gpt-realtime' (~18c/min on short calls) or 'gpt-realtime-mini' (~75% cheaper). OMIT to keep the plugin default."New value: +"Realtime (v2v) model for the agent's voice_engine. openai_realtime: 'gpt-realtime' (~18c/min on short calls) or 'gpt-realtime-mini' (~75% cheaper). gemini_realtime: a Gemini Live model, newest first 'gemini-3.8-live', 'gemini-3.1-flash-live-preview', 'gemini-2.5-flash-native-audio-latest', 'gemini-2.5-flash-native-audio-preview-12-2025' (today's default). 'default' = back to the engine's default. OMIT to leave unchanged."
    • changedInput schema / properties / voice_realtime_model / enum
      Previous value: -[
      -  "gpt-realtime",
      -  "gpt-realtime-mini"
      -]New value: +[
      +  "gpt-realtime",
      +  "gpt-realtime-mini",
      +  "gemini-3.8-live",
      +  "gemini-3.1-flash-live-preview",
      +  "gemini-2.5-flash-native-audio-latest",
      +  "gemini-2.5-flash-native-audio-preview-12-2025",
      +  "default"
      +]
  4. Changed1 schema field changed
    • changedInput schema / properties / voice_engine / description
      Previous value: -"Voice execution engine: 'pipeline' (default — Deepgram/Gladia STT + LLM + TTS), 'openai_realtime' (OpenAI Realtime API v2v; requires the workspace to have a BYOK OpenAI key connected — the worker falls back to 'pipeline' and logs why if the key is missing), or 'gemini_realtime' (Gemini 2.0 Flash with real-time API). OMIT to leave unchanged."New value: +"Voice execution engine: 'pipeline' (default — Deepgram/Gladia STT + LLM + TTS), 'openai_realtime' (OpenAI Realtime API v2v; requires the workspace to have a BYOK OpenAI key connected — the worker falls back to 'pipeline' and logs why if the key is missing), or 'gemini_realtime' (Gemini Live native-audio v2v; runs on the workspace owner's Gemini key, else on the platform key unless platform keys are switched off). If the chosen realtime engine has no usable key, the result carries `warnings` and calls use the default pipeline. OMIT to leave unchanged."
  5. Added
  6. Removed
  7. Changed3 schema fields changed
    • changedInput schema / properties / voice_engine / description
      Previous value: -"Voice execution engine: 'pipeline' (default — Deepgram/Gladia STT + LLM + TTS) or 'openai_realtime' (OpenAI Realtime API v2v; requires the workspace to have a BYOK OpenAI key connected — the worker falls back to 'pipeline' and logs why if the key is missing). OMIT to leave unchanged."New value: +"Voice execution engine: 'pipeline' (default — Deepgram/Gladia STT + LLM + TTS), 'openai_realtime' (OpenAI Realtime API v2v; requires the workspace to have a BYOK OpenAI key connected — the worker falls back to 'pipeline' and logs why if the key is missing), or 'gemini_realtime' (Gemini 2.0 Flash with real-time API). OMIT to leave unchanged."
    • changedInput schema / properties / voice_engine / enum
      Previous value: -[
      -  "pipeline",
      -  "openai_realtime"
      -]New value: +[
      +  "pipeline",
      +  "openai_realtime",
      +  "gemini_realtime"
      +]
    • addedInput schema / properties / voice_v2v_transcripts
      Added value: +{
      +  "description": "Enable live transcripts for voice-to-voice engines (default true). OMIT to leave unchanged.",
      +  "type": "boolean"
      +}
  8. Changed1 schema field changed
    • addedInput schema / properties / voice_engine
      Added value: +{
      +  "description": "Voice execution engine: 'pipeline' (default — Deepgram/Gladia STT + LLM + TTS) or 'openai_realtime' (OpenAI Realtime API v2v; requires the workspace to have a BYOK OpenAI key connected — the worker falls back to 'pipeline' and logs why if the key is missing). OMIT to leave unchanged.",
      +  "enum": [
      +    "pipeline",
      +    "openai_realtime"
      +  ],
      +  "type": "string"
      +}
  9. Changed4 schema fields changed
    • changedInput schema / properties / voice_stt_language / description
      Previous value: -"STT language hint. 'multi' (default) enables code-switching; singletons like 'en', 'ru', 'es' give higher accuracy when the caller language is known. Use 'multi' for bilingual callers. IMPORTANT: 'en' runs on Flux (fastest, eager end-of-turn); 'multi' and every other language run on Nova-3 (slightly slower, no eager EOT). Some languages — notably Thai ('th'), Vietnamese ('vi'), Indonesian ('id'), Tagalog ('tl') — are NOT in Nova-3's 'multi' auto-detect set, so a Thai/Vietnamese/etc. caller MUST be given the explicit language code here (e.g. 'th') or transcription is garbage. OMIT to leave the STT language unchanged."New value: +"STT language code, validated against the SELECTED voice_stt_provider. 'multi' (default) enables autodetect / code-switching on either provider; a singleton like 'en', 'ru', 'uz' gives higher accuracy when the caller language is known. Deepgram provider: 'en' runs on Flux (fastest, eager end-of-turn); 'multi' and every other language run on Nova-3. Some languages — notably Thai ('th'), Vietnamese ('vi'), Indonesian ('id'), Tagalog ('tl') — are NOT in Nova-3's 'multi' auto-detect set, so those callers MUST be given an explicit code. Gladia provider: use its codes (e.g. 'uz' Uzbek, 'kk' Kazakh, 'az' Azerbaijani, 'tg' Tajik) — these are NOT valid under Deepgram. The enum below lists the union of both providers' codes; a code invalid for the chosen provider is rejected on save. OMIT to leave the STT language unchanged."
    • changedInput schema / properties / voice_stt_language / enum
      Previous value: -[
      -  "multi",
      -  "en",
      -  "ru",
      -  "es",
      -  "fr",
      -  "de",
      -  "pt",
      -  "it",
      -  "nl",
      -  "hi",
      -  "ja",
      -  "ko",
      -  "zh",
      -  "th",
      -  "vi",
      -  "id",
      -  "ms",
      -  "tl",
      -  "ar",
      -  "tr",
      -  "uk",
      -  "pl"
      -]New value: +[
      +  "af",
      +  "am",
      +  "ar",
      +  "ar-AE",
      +  "ar-DZ",
      +  "ar-EG",
      +  "ar-IQ",
      +  "ar-IR",
      +  "ar-JO",
      +  "ar-KW",
      +  "ar-LB",
      +  "ar-MA",
      +  "ar-PS",
      +  "ar-QA",
      +  "ar-SA",
      +  "ar-SD",
      +  "ar-SY",
      +  "ar-TD",
      +  "ar-TN",
      +  "as",
      +  "ast",
      +  "az",
      +  "ba",
      +  "be",
      +  "bg",
      +  "bn",
      +  "bo",
      +  "br",
      +  "bs",
      +  "ca",
      +  "ceb",
      +  "cs",
      +  "cy",
      +  "da",
      +  "da-DK",
      +  "de",
      +  "de-CH",
      +  "el",
      +  "en",
      +  "en-AU",
      +  "en-GB",
      +  "en-IN",
      +  "en-NZ",
      +  "en-US",
      +  "es",
      +  "es-419",
      +  "et",
      +  "eu",
      +  "fa",
      +  "ff",
      +  "fi",
      +  "fo",
      +  "fr",
      +  "fr-CA",
      +  "fy",
      +  "ga",
      +  "gd",
      +  "gl",
      +  "gu",
      +  "ha",
      +  "haw",
      +  "he",
      +  "hi",
      +  "hr",
      +  "ht",
      +  "hu",
      +  "hy",
      +  "id",
      +  "ig",
      +  "ilo",
      +  "is",
      +  "it",
      +  "ja",
      +  "jv",
      +  "ka",
      +  "kk",
      +  "km",
      +  "kn",
      +  "ko",
      +  "ko-KR",
      +  "la",
      +  "lb",
      +  "lg",
      +  "ln",
      +  "lo",
      +  "lt",
      +  "lv",
      +  "mg",
      +  "mi",
      +  "mk",
      +  "ml",
      +  "mn",
      +  "mo",
      +  "mr",
      +  "ms",
      +  "mt",
      +  "multi",
      +  "my",
      +  "ne",
      +  "nl",
      +  "nl-BE",
      +  "nn",
      +  "no",
      +  "oc",
      +  "or",
      +  "pa",
      +  "pl",
      +  "ps",
      +  "pt",
      +  "pt-BR",
      +  "pt-PT",
      +  "ro",
      +  "ru",
      +  "sa",
      +  "sd",
      +  "si",
      +  "sk",
      +  "sl",
      +  "sn",
      +  "so",
      +  "sq",
      +  "sr",
      +  "ss",
      +  "su",
      +  "sv",
      +  "sv-SE",
      +  "sw",
      +  "ta",
      +  "te",
      +  "tg",
      +  "th",
      +  "th-TH",
      +  "tk",
      +  "tl",
      +  "tn",
      +  "tr",
      +  "tt",
      +  "uk",
      +  "ur",
      +  "uz",
      +  "vi",
      +  "wo",
      +  "xh",
      +  "yi",
      +  "yo",
      +  "zh",
      +  "zh-CN",
      +  "zh-HK",
      +  "zh-Hans",
      +  "zh-Hant",
      +  "zh-TW",
      +  "zu"
      +]
    • changedInput schema / properties / voice_stt_model / description
      Previous value: -"Speech-to-text model: 'flux' (alias for flux-general-en), 'flux-general-en' (English Flux, LLM-powered end-of-turn), 'flux-general-multi' (multilingual Flux), or 'nova-3' (silence-based fallback). Flux variants are more responsive; nova-3 is the fallback when your Deepgram plan lacks Flux. OMIT to leave the STT model unchanged."New value: +"Speech-to-text model (Deepgram provider only): 'flux' (alias for flux-general-en), 'flux-general-en' (English Flux, LLM-powered end-of-turn), 'flux-general-multi' (multilingual Flux), or 'nova-3' (silence-based fallback). Flux variants are more responsive; nova-3 is the fallback when your Deepgram plan lacks Flux. Ignored when voice_stt_provider='gladia' (Gladia has a single model). OMIT to leave the STT model unchanged."
    • addedInput schema / properties / voice_stt_provider
      Added value: +{
      +  "description": "Speech-to-text provider. 'deepgram' (default) runs Nova-3 / Flux and preserves existing behaviour. 'gladia' routes to Gladia streaming STT (solaria-1), which is Deepgram-class latency and covers ~115 languages Deepgram does NOT — including Uzbek ('uz'), Kazakh ('kk'), Azerbaijani ('az'), Tajik ('tg'). Pick 'gladia' when the caller's language is outside Deepgram's coverage, then set voice_stt_language to that language's code. The provider also decides which language codes voice_stt_language accepts. OMIT to leave the STT provider unchanged.",
      +  "enum": [
      +    "deepgram",
      +    "gladia"
      +  ],
      +  "type": "string"
      +}
  10. Changed1 schema field changed
    • addedInput schema / properties / default_calendar_id
      Added value: +{
      +  "description": "Default Google calendar_id applied at the TOOL layer whenever this agent calls a calendar tool without an explicit calendar_id (e.g. 'c_...@group.calendar.google.com'). Use for agents whose bookings must always land on one dedicated calendar — a prompt-only rule is advisory and the model occasionally drops the param. An explicit calendar_id in a tool call still wins. Pass an empty string to clear (falls back to 'primary'). OMIT to leave unchanged.",
      +  "type": "string"
      +}
  11. Changed1 schema field changed
    • changedInput schema / properties / model / enum
      Previous value: -[
      -  "deepseek-chat",
      -  "deepseek-reasoner",
      -  "gpt-4.1",
      -  "gpt-4.1-mini",
      -  "gpt-4.1-nano",
      -  "gpt-4o",
      -  "claude-haiku-4-5-20251001",
      -  "claude-sonnet-4-6",
      -  "claude-opus-4-6",
      -  "kimi-k2.6"
      -]New value: +[
      +  "deepseek-chat",
      +  "deepseek-reasoner",
      +  "gpt-4.1",
      +  "gpt-4.1-mini",
      +  "gpt-4.1-nano",
      +  "gpt-4o",
      +  "claude-haiku-4-5-20251001",
      +  "claude-sonnet-4-6",
      +  "claude-sonnet-5",
      +  "claude-opus-4-6",
      +  "kimi-k2.6"
      +]
  12. Changed1 schema field changed
    • changedInput schema / properties / voice_max_tokens / description
      Previous value: -"Max TTS tokens per voice reply (40-200, default 100). Lower = snappier, higher = more detail."New value: +"Max TTS tokens per voice reply (40-200, default 100). Lower = snappier, higher = more detail. Controls speech brevity only: when the agent has voice tools, the runtime floors the underlying LLM completion cap at 400 so tool-call JSON always fits."
  13. Changed4 schema fields changed
    • addedInput schema / properties / voice_group_barge_in_min_words
      Added value: +{
      +  "description": "GROUP/Meet barge-in word gate (1-6, default 1): a participant line must have at least this many words to interrupt the agent. 1 = any word interrupts (most responsive); raise to ignore short cross-talk. OMIT to leave unchanged.",
      +  "maximum": 6,
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • addedInput schema / properties / voice_group_barge_in_requires_address
      Added value: +{
      +  "description": "GROUP/Meet barge-in: when true, only lines that ADDRESS the agent (by name/keyword) interrupt it — two humans talking to each other won't break the walk. Default false. OMIT to leave unchanged.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / voice_group_barge_in_stop_words
      Added value: +{
      +  "description": "GROUP/Meet barge-in stop-words: any of these words/phrases ALWAYS interrupts the agent, even below voice_group_barge_in_min_words (e.g. ['стоп','подожди','вопрос','stop','wait','question']). Empty list [] clears. OMIT to leave unchanged.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / voice_group_interim_barge_in
      Added value: +{
      +  "description": "GROUP/Meet barge-in: interrupt the agent AS SOON AS a participant starts speaking (on the interim transcript), instead of waiting for the finished utterance. Default true. Set true to make a presenter/group agent easy to interrupt mid-sentence (word-gated by voice_group_barge_in_min_words so ambient noise can't trip it); false = only a completed utterance interrupts. OMIT to leave unchanged.",
      +  "type": "boolean"
      +}
  14. Changed1 schema field changed
    • addedInput schema / properties / output_text_filters
      Added value: +{
      +  "description": "Deterministic post-processing of the user-facing text an AGENTIC run produces (messages.send text + auto-delivered final answer; drafts inherit; ai_assisted fast-path replies and messages.edit are NOT covered). List of {pattern, replacement} regex rules applied in order. Example — strip AI-tell em dashes while keeping '—————' separator runs and never gluing lines: [{\"pattern\": \"[ \\\\t]*(?<![—–])[—–](?![—–])[ \\\\t]*\", \"replacement\": \", \"}] (use [ \\\\t], not \\\\s — \\\\s matches newlines). Use for style rules the LLM won't reliably follow via prompt. Patterns are validated (invalid regex rejects the update). Max 20 rules. Empty list [] = clear all filters. OMIT to leave unchanged.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  15. Changed11 schema fields changed
    • addedInput schema / properties / voice_early_finalize_confidence
      Added value: +{
      +  "description": "Flux early-finalize confidence (0.1-1.0, worker default 0.65). Lower = finalize sooner on trailing silence (snappier, small mid-word clip risk). Flux STT only. OMIT to leave unchanged.",
      +  "maximum": 1,
      +  "minimum": 0.1,
      +  "type": "number"
      +}
    • addedInput schema / properties / voice_filler_audio_preset
      Added value: +{
      +  "description": "Which bundled clip plays as the 'thinking' filler while the agent is working (LLM + tool calls), used when voice_thinking_texts is empty. Requires voice_filler_enabled=true. Built-in presets: 'keyboard_typing' / 'keyboard_typing2' (keyboard-typing SFX — sounds like the agent is typing/looking something up), plus any bundled music preset. Pass '' to clear (fall back to spoken filler). An unknown value silently plays no filler. OMIT or null to leave unchanged.",
      +  "type": "string"
      +}
    • addedInput schema / properties / voice_flux_eager_eot_threshold
      Added value: +{
      +  "description": "Flux eager end-of-turn threshold (0.1-1.0). Setting this ENABLES EagerEndOfTurn for faster turn-taking at the cost of +50-70% LLM calls. Flux STT only. OMIT to leave eager off.",
      +  "maximum": 1,
      +  "minimum": 0.1,
      +  "type": "number"
      +}
    • addedInput schema / properties / voice_flux_eot_threshold
      Added value: +{
      +  "description": "Flux STT end-of-turn confidence threshold (0.1-1.0). Higher = wait for more certainty before finalizing the turn. Flux STT only (ignored on nova-3). OMIT to keep the worker default (0.7).",
      +  "maximum": 1,
      +  "minimum": 0.1,
      +  "type": "number"
      +}
    • addedInput schema / properties / voice_flux_eot_timeout_ms
      Added value: +{
      +  "description": "Flux end-of-turn hard timeout in ms (500-15000). Flux STT only. OMIT to keep the worker default (5000).",
      +  "maximum": 15000,
      +  "minimum": 500,
      +  "type": "integer"
      +}
    • addedInput schema / properties / voice_greeting_returning
      Added value: +{
      +  "description": "Greeting variant for RETURNING callers (thread has prior history or a resolved name). Supports '{name}' — replaced with the caller's name when known, stripped when not. Pass an empty string \"\" to clear (always use voice_greeting). Omit or null leaves unchanged.",
      +  "type": "string"
      +}
    • addedInput schema / properties / voice_mip_opt_out
      Added value: +{
      +  "description": "Opt out of Deepgram's model-improvement program (privacy) for Flux STT. Default false. OMIT to leave unchanged.",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / voice_stt_language / description
      Previous value: -"STT language hint. 'multi' (default) enables code-switching; singletons like 'en', 'ru', 'es' give higher accuracy when the caller language is known. Use 'multi' for bilingual callers. OMIT to leave the STT language unchanged."New value: +"STT language hint. 'multi' (default) enables code-switching; singletons like 'en', 'ru', 'es' give higher accuracy when the caller language is known. Use 'multi' for bilingual callers. IMPORTANT: 'en' runs on Flux (fastest, eager end-of-turn); 'multi' and every other language run on Nova-3 (slightly slower, no eager EOT). Some languages — notably Thai ('th'), Vietnamese ('vi'), Indonesian ('id'), Tagalog ('tl') — are NOT in Nova-3's 'multi' auto-detect set, so a Thai/Vietnamese/etc. caller MUST be given the explicit language code here (e.g. 'th') or transcription is garbage. OMIT to leave the STT language unchanged."
    • changedInput schema / properties / voice_stt_language / enum
      Previous value: -[
      -  "multi",
      -  "en",
      -  "ru",
      -  "es",
      -  "fr",
      -  "de",
      -  "pt",
      -  "it",
      -  "nl",
      -  "hi",
      -  "ja",
      -  "ko",
      -  "zh"
      -]New value: +[
      +  "multi",
      +  "en",
      +  "ru",
      +  "es",
      +  "fr",
      +  "de",
      +  "pt",
      +  "it",
      +  "nl",
      +  "hi",
      +  "ja",
      +  "ko",
      +  "zh",
      +  "th",
      +  "vi",
      +  "id",
      +  "ms",
      +  "tl",
      +  "ar",
      +  "tr",
      +  "uk",
      +  "pl"
      +]
    • addedInput schema / properties / voice_tools
      Added value: +{
      +  "description": "The EXACT set of tool IDs exposed to the LIVE VOICE runner (dotted IDs, e.g. ['knowledge.query','messages.send','messages.read_history','agent.handoff','calls.end','calendar.check_availability','calendar.create_event','contacts.capture_lead']). SEPARATE from allowed_tools (which governs TEXT mode): a tool only reaches the voice LLM if listed here. When set this REPLACES the whole voice surface — include EVERY tool the voice agent needs (the small default set is NOT auto-added once any voice tool is set). Tools listed here are also added to the text allow-list if absent. Empty list [] = no voice tools. OMIT to leave the voice tool surface unchanged.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / voice_turn_detector
      Added value: +{
      +  "description": "Voice end-of-turn detector: 'vad' (default — sharp, low-latency) or 'multilingual' (semantic model, ~1s slower per turn, fewer mid-pause cuts). OMIT to leave unchanged.",
      +  "enum": [
      +    "vad",
      +    "multilingual"
      +  ],
      +  "type": "string"
      +}
  16. Changed1 schema field changed
    • addedInput schema / properties / script
      Added value: +{
      +  "description": "rule_based deterministic action (no LLM): Python run in the workbench sandbox on each matched event. Reads `inputs` (raw_data, message_id, from_name, …) and calls the agent's integrations via call_tool('ext<id>_<name>', {..}). Dedupe writes on inputs['message_id'] (retries re-run). Pass null to clear (falls back to per-trigger template).",
      +  "type": "string"
      +}
  17. Changed2 schema fields changed
    • changedInput schema / properties / voice_tts_provider / description
      Previous value: -"Text-to-speech provider: 'deepgram' (default, Aura-2 EN-only), 'openai' (multilingual), 'yandex' (best Russian), or 'cartesia' (Sonic-3 ultra-low TTFB). OMIT to leave the TTS provider unchanged."New value: +"Text-to-speech provider: 'deepgram' (default, Aura-2 EN-only), 'openai' (multilingual), 'cartesia' (Sonic-3, ultra-low TTFB, multilingual), 'alibaba' (CosyVoice v3-flash, multilingual, ~95ms TTFB), 'yandex' (best Russian), 'qwen' (Qwen3-TTS, self-hosted), or 'xai' (Grok, ~20 langs). OMIT to leave the TTS provider unchanged."
    • changedInput schema / properties / voice_tts_provider / enum
      Previous value: -[
      -  "deepgram",
      -  "openai",
      -  "yandex",
      -  "cartesia"
      -]New value: +[
      +  "alibaba",
      +  "cartesia",
      +  "deepgram",
      +  "openai",
      +  "qwen",
      +  "xai",
      +  "yandex"
      +]
  18. Changed1 schema field changed
    • changedInput schema / properties / fast_model / description
      Previous value: -"Model for the fast-path responder (voice, text auto-reply, agent executor). Defaults to claude-haiku-4-5-20251001 when unset. Non-Anthropic models (deepseek-chat, gpt-4.1-nano, kimi-k2.6) do NOT use BYOK today — they use the system API key + credits. Pass null to revert to default."New value: +"Model for the fast-path responder (voice, text auto-reply, agent executor). Defaults to deepseek-chat when unset. Non-Anthropic models (deepseek-chat, gpt-4.1-nano, kimi-k2.6) do NOT use BYOK today — they use the system API key + credits. Pass null to revert to default."
  19. Changed1 schema field changed
    • addedInput schema / properties / max_iterations
      Added value: +{
      +  "description": "Hard cap on agentic-loop turns (LLM round-trips) per run, 1-50 (default 10). Each turn can call tools; the loop stops when the model replies with no tool call OR this cap is hit. Raise it for multi-step tool chains (e.g. browser automation: open → snapshot → fill → confirm → reply) that otherwise exhaust their turns before producing a final answer. OMIT to leave it unchanged.",
      +  "maximum": 50,
      +  "minimum": 1,
      +  "type": "integer"
      +}
  20. Changed5 schema fields changed
    • changedInput schema / properties / allowed_tools / description
      Previous value: -"Explicit allow-list of tool IDs this agent can call on triggered runs (e.g. ['messages.send', 'agents.handoff']). Empty list [] = clear the allow-list and fall back to system defaults. When set, only these tools (minus denied_tools) are exposed to the agent. Does NOT affect the My AI dropdown path."New value: +"Explicit allow-list of tool IDs this agent can call on triggered runs (e.g. ['messages.send', 'agent.handoff']). Empty list [] = clear the allow-list and fall back to system defaults. When set, only these tools (minus denied_tools) are exposed to the agent. Does NOT affect the My AI dropdown path."
    • removedInput schema / properties / enabled
      Removed value: -{
      -  "description": "Enable or disable the agent. OMIT to leave the enabled flag unchanged.",
      -  "type": "boolean"
      -}
    • removedInput schema / properties / execution_mode
      Removed value: -{
      -  "description": "Execution mode: 'agentic', 'ai_assisted', 'rule_based', 'claude_channels', or 'voice'. OMIT to leave the execution mode unchanged.",
      -  "enum": [
      -    "rule_based",
      -    "ai_assisted",
      -    "agentic",
      -    "claude_channels",
      -    "voice"
      -  ],
      -  "type": "string"
      -}
    • addedInput schema / properties / text_engine
      Added value: +{
      +  "description": "Text-execution engine: 'agentic', 'ai_assisted', 'rule_based', or 'claude_channels'. Replaces the legacy execution_mode field (20260523_002). Voice is now derived from triggers, not engine. OMIT to leave unchanged.",
      +  "enum": [
      +    "rule_based",
      +    "ai_assisted",
      +    "agentic",
      +    "claude_channels"
      +  ],
      +  "type": "string"
      +}
    • removedInput schema / properties / voice_tools
      Removed value: -{
      -  "description": "Allow-list of tool IDs usable in voice mode (e.g. ['calls.end']). Empty list [] = explicit no-tools allow-list. Omit leaves unchanged. MCP cannot null-clear — use REST to revert to inherit from agent allowed_tools.",
      -  "items": {
      -    "type": "string"
      -  },
      -  "type": "array"
      -}
  21. Changed5 schema fields changed
    • changedInput schema / properties / allowed_tools / description
      Previous value: -"Explicit allow-list of tool IDs this agent can call on triggered runs (e.g. ['messages.send', 'agent.handoff']). Empty list [] = clear the allow-list and fall back to system defaults. When set, only these tools (minus denied_tools) are exposed to the agent. Does NOT affect the My AI dropdown path."New value: +"Explicit allow-list of tool IDs this agent can call on triggered runs (e.g. ['messages.send', 'agents.handoff']). Empty list [] = clear the allow-list and fall back to system defaults. When set, only these tools (minus denied_tools) are exposed to the agent. Does NOT affect the My AI dropdown path."
    • addedInput schema / properties / enabled
      Added value: +{
      +  "description": "Enable or disable the agent. OMIT to leave the enabled flag unchanged.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / execution_mode
      Added value: +{
      +  "description": "Execution mode: 'agentic', 'ai_assisted', 'rule_based', 'claude_channels', or 'voice'. OMIT to leave the execution mode unchanged.",
      +  "enum": [
      +    "rule_based",
      +    "ai_assisted",
      +    "agentic",
      +    "claude_channels",
      +    "voice"
      +  ],
      +  "type": "string"
      +}
    • removedInput schema / properties / text_engine
      Removed value: -{
      -  "description": "Text-execution engine: 'agentic', 'ai_assisted', 'rule_based', or 'claude_channels'. Replaces the legacy execution_mode field (20260523_002). Voice is now derived from triggers, not engine. OMIT to leave unchanged.",
      -  "enum": [
      -    "rule_based",
      -    "ai_assisted",
      -    "agentic",
      -    "claude_channels"
      -  ],
      -  "type": "string"
      -}
    • addedInput schema / properties / voice_tools
      Added value: +{
      +  "description": "Allow-list of tool IDs usable in voice mode (e.g. ['calls.end']). Empty list [] = explicit no-tools allow-list. Omit leaves unchanged. MCP cannot null-clear — use REST to revert to inherit from agent allowed_tools.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  22. Changed5 schema fields changed
    • changedInput schema / properties / allowed_tools / description
      Previous value: -"Explicit allow-list of tool IDs this agent can call on triggered runs (e.g. ['messages.send', 'agents.handoff']). Empty list [] = clear the allow-list and fall back to system defaults. When set, only these tools (minus denied_tools) are exposed to the agent. Does NOT affect the My AI dropdown path."New value: +"Explicit allow-list of tool IDs this agent can call on triggered runs (e.g. ['messages.send', 'agent.handoff']). Empty list [] = clear the allow-list and fall back to system defaults. When set, only these tools (minus denied_tools) are exposed to the agent. Does NOT affect the My AI dropdown path."
    • removedInput schema / properties / enabled
      Removed value: -{
      -  "description": "Enable or disable the agent. OMIT to leave the enabled flag unchanged.",
      -  "type": "boolean"
      -}
    • removedInput schema / properties / execution_mode
      Removed value: -{
      -  "description": "Execution mode: 'agentic', 'ai_assisted', 'rule_based', 'claude_channels', or 'voice'. OMIT to leave the execution mode unchanged.",
      -  "enum": [
      -    "rule_based",
      -    "ai_assisted",
      -    "agentic",
      -    "claude_channels",
      -    "voice"
      -  ],
      -  "type": "string"
      -}
    • addedInput schema / properties / text_engine
      Added value: +{
      +  "description": "Text-execution engine: 'agentic', 'ai_assisted', 'rule_based', or 'claude_channels'. Replaces the legacy execution_mode field (20260523_002). Voice is now derived from triggers, not engine. OMIT to leave unchanged.",
      +  "enum": [
      +    "rule_based",
      +    "ai_assisted",
      +    "agentic",
      +    "claude_channels"
      +  ],
      +  "type": "string"
      +}
    • removedInput schema / properties / voice_tools
      Removed value: -{
      -  "description": "Allow-list of tool IDs usable in voice mode (e.g. ['calls.end']). Empty list [] = explicit no-tools allow-list. Omit leaves unchanged. MCP cannot null-clear — use REST to revert to inherit from agent allowed_tools.",
      -  "items": {
      -    "type": "string"
      -  },
      -  "type": "array"
      -}
  23. Changed1 schema field changed
    • addedInput schema / properties / include_specialists
      Added value: +{
      +  "description": "Inject a [SPECIALISTS] block (~50–200 tokens) listing the workspace's delegation-capable agents so a router-style agent can pick a handoff target without first calling agents.list. Default OFF for new agents; the Router template ships with this ON. Agentic mode only. OMIT to leave this flag unchanged.",
      +  "type": "boolean"
      +}
  24. Changed1 schema field changed
    • addedInput schema / properties / voice_greeting_interruptible
      Added value: +{
      +  "description": "Allow the caller to barge in during the opener TTS. Default true (trial-friendly — long greetings can be interrupted). Set false on outbound-call agents whose configured opener would otherwise get preempted by the caller's 'Hello?' triggering an off-script auto-turn. OMIT to leave this flag unchanged.",
      +  "type": "boolean"
      +}
  25. Changed2 schema fields changed
    • changedInput schema / properties / voice_stt_model / description
      Previous value: -"Speech-to-text model: 'flux' (LLM-powered end-of-turn) or 'nova-3' (silence-based). Flux is more responsive; nova-3 is the fallback when your Deepgram plan lacks Flux. OMIT to leave the STT model unchanged."New value: +"Speech-to-text model: 'flux' (alias for flux-general-en), 'flux-general-en' (English Flux, LLM-powered end-of-turn), 'flux-general-multi' (multilingual Flux), or 'nova-3' (silence-based fallback). Flux variants are more responsive; nova-3 is the fallback when your Deepgram plan lacks Flux. OMIT to leave the STT model unchanged."
    • changedInput schema / properties / voice_stt_model / enum
      Previous value: -[
      -  "flux",
      -  "nova-3"
      -]New value: +[
      +  "flux",
      +  "flux-general-en",
      +  "flux-general-multi",
      +  "nova-3"
      +]
  26. First observed

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds partial-update semantics ('only provided fields will be updated'), which annotations do not state, and that is useful for understanding the mutation behavior. However, it omits that several parameters (prompt_text, allowed_tools, voice_tools) destructively replace entire surfaces, and the claim that 'All parameters are optional' is inaccurate given the required agent_id.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose and partial-update note are front-loaded, and the bulleted capability list is scannable and earns its place as a high-level map of an 85-parameter tool. It is neither bloated nor redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the extensive schema coverage and the absence of an output schema, the description provides sufficient orientation for an update tool: it states the scope, optionality, and major update categories. A warning about destructive replacements would improve it, but the schema carries that detail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all 85 parameters in detail; the description adds no syntax or format guidance beyond grouping use cases. Its assertion that all parameters are optional conflicts with the required agent_id, though the schema corrects this.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Update') and resource ('AI agent's configuration'), so the action is unambiguous. It does not name or distinguish itself from siblings like agents_create or agents_update_from_template, leaving the agent to infer the boundary from the tool name alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Use this to:' list gives concrete update scenarios (enable/disable, change name, assign prompt, replace knowledge collections, etc.), providing clear context for when the tool applies. It stops short of naming alternatives or when-not-to-use conditions, which would be needed for a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.