Skip to content
TriedDocs
Build agents

Single prompt agents

Build an agent driven by one prompt and one set of functions, and learn how Tried assembles the prompt the model sees.

A single prompt agent runs the whole call from one prompt (general_prompt) and one list of functions (general_tools). It suits open conversations where the agent answers questions, collects a few details and takes an action: front desks, FAQ lines, simple booking and message taking.

The prompt and functions live on a Retell LLM resource. The agent points at it with response_engine: { "type": "retell-llm", "llm_id": "llm_..." }. A Retell LLM with no states is a single prompt agent.

A single prompt agent in the editor

Create one#

Open the create dialog#

On Agents, click Create an Agent. Under Type, choose Single prompt.

Pick a starting point#

With Engine on New from a template, choose Build from scratch or a template. Templates fill the prompt, voice, starter functions and post-call fields.

Create#

Click Create agent. The editor opens on a new draft.

To share one prompt between several agents, set Engine to Reuse an existing LLM and pick it. See Choose an agent type.

Write the prompt#

Type the prompt in the large editor. The editor:

  • Highlights lines that start with # as headings and highlights {{variables}}.
  • Offers an Insert variable list when you type {{. The list holds your default dynamic variables and the common system variables.
  • Shows the character count and an estimated token count (characters divided by 4) in the footer.

A prompt that works well on the phone usually has sections for identity, style, the task, and rules for edge cases. See Prompt engineering for structure and examples.

Add functions#

Open Functions and click Add to give the agent tools. Every tool has a name (letters, numbers, _ and -, up to 64 characters) and a description that tells the model when to use it. The model decides when to call a function from the description and the prompt, so name the trigger in both places: "When the caller asks for billing, call transfer_to_billing."

See Functions and tools for each tool type.

What the model sees each turn#

Tried builds the system prompt from these parts, in this order:

  1. Your general_prompt, with {{variables}} filled in.
  2. A ## Handbook section when any Agent Handbook option is on.
  3. A short instruction about audio tags when expressive mode is on and the voice can perform them.
  4. The caller's contact memory when contact memory reading is on, unless your prompt already contains {{contact_memory}}.
  5. ## Additional context for this call when context was added to a live call with Update live call.

When a knowledge base is attached, the passages retrieved for the current turn are added under ## Related Knowledge Base Contexts. The conversation history and the function definitions are sent with the prompt.

Fields#

These fields are on the Retell LLM. Set them in the editor, or with Create Retell LLM and Update Retell LLM.

Field Type Default Description
general_prompt string "" The prompt.
general_tools array [] Functions available for the whole call.
begin_message string or null null First line. null lets the model write it; "" waits for the caller. See Welcome message.
start_speaker agent or user agent Who speaks first.
begin_after_user_silence_ms integer or null null When the user speaks first, the agent starts after this much silence.
model string gpt-5.6-terra The language model. See LLM options.
model_temperature number 0 to 1 0 Randomness of replies.
tool_call_strict_mode boolean true Function arguments always match their JSON schema.
knowledge_base_ids array [] Attached knowledge bases.
kb_config object { "top_k": 3, "filter_score": 0.6 } Retrieval settings.
default_dynamic_variables object {} Values used when a call does not provide a variable.
mcps array none MCP servers whose tools the agent can call.
states, starting_state array, string [], null Add states to make a multi-prompt agent.

Example#

curl https://api.tried.com.au/create-retell-llm \
  -H "Authorization: Bearer $TRIED_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-5.6-terra",
    "general_prompt": "## Identity\nYou are Ava, the receptionist for {{business_name}}.\n\n## Task\nAnswer questions about opening hours and services. If the caller wants a person, call transfer_to_front_desk.",
    "begin_message": "Hi, thanks for calling {{business_name}}. How can I help?",
    "general_tools": [
      { "type": "end_call", "name": "end_call", "description": "End the call when the caller is done." },
      {
        "type": "transfer_call",
        "name": "transfer_to_front_desk",
        "description": "Transfer the caller to a person at the front desk.",
        "transfer_destination": { "type": "predefined", "number": "+61290000001" }
      }
    ],
    "default_dynamic_variables": { "business_name": "Harbourside Dental" }
  }'

Then create the agent with response_engine: { "type": "retell-llm", "llm_id": "<llm_id from the response>" }.

Limits#

  • A prompt can be up to 32,768 tokens, estimated as characters divided by 4. The count covers the general prompt, the welcome message, the functions and the largest state. Saving a larger prompt returns a 400 error that suggests moving reference material to a knowledge base.
  • Prompts above 4,000 tokens raise the billed LLM cost in proportion: a 6,000 token prompt bills the LLM part at 1.5 times. It appears as an llm_prompt_length line in call_cost.

Tips#

Tip

Keep facts that change, such as prices and opening hours, in a knowledge base or in dynamic variables. The prompt stays short and you can update the facts without a new version.

  • Test each change in Test LLM before you publish. Edit a turn and rerun it to compare replies.
  • When the prompt grows sections for different stages of the call, move to multi-prompt or a conversation flow.
  • The model only knows the current time if you give it: add {{current_time}} to the prompt.