Skip to main content
Variables are an advanced feature for people building assistants. They let you put a value into prompts without copying it into every assistant. Variables exist only inside a Digital Twin; personal accounts cannot create them.

What are Substitution Variables

Dynamic prompt placeholders. A variable is a named token like ${slack_webhook_url} that Pria replaces with a value every time an assistant runs. Think of it as mail‑merge for prompts: the assistant’s instructions stay clean and reusable, and the value lives in one place that you can change independently. Here is an example assistant instruction using the variable ${praxis-ai-slack-url}:
How they work. Just before a request is sent to the model, Pria replaces every ${...} placeholder with the matching variable’s value. The replacement happens on Pria’s servers. Distinction from User Parameters. Shared variables belong to the Digital Twin and are the same for everyone using it. A person’s own remembered details (user parameters) belong to that person and differ for each of them. Use variables for shared things like URLs, IDs and instructions; use parameters for personal context.

Syntax

Variables use the form ${key} in any prompt or instruction text.
Keep keys to letters, digits, underscores and dashes, with no spaces (for example course_title or quiz-id-v1). If no variable with that key is available to the person, the literal ${key} is left in the prompt — useful for spotting typos quickly.
There are no built‑in variables in Pria. Every variable you reference must be created first. Personal details like the user’s name, course context and the Digital Twin’s name are already given to the model by Pria — you do not need to template them in.

Benefits

  • Single source maintenance — when a Canvas quiz ID changes from 123 to 789, update one ${quiz_id} variable and every dependent assistant picks up the new value automatically.
  • Cross‑assistant instruction reuse — store a shared instruction block as a variable and reference it from several assistants for consistency.
  • Cleaner prompts — long URLs and IDs live in the variable store, not inside the instruction text.
  • Composable workflows — when one assistant calls another (e.g. a teaching bot that calls a grading bot), each can reference the same values.

Where Variables Resolve

Variables are replaced in:
  • Typed conversations — in everything Pria sends to the model: the instructions, the retrieved passages, the conversation so far and the person’s own message.
  • Convo Mode (voice) sessions — the spoken conversation runs on the same replaced instructions.
  • The Chat Completions API — requests through the OpenAI-compatible endpoint are replaced too.
Replacement only happens while the person works inside the Digital Twin where the variable was created, and only with the variables available to that person (see Scoping Rules).

Variables in Assistants

Variables are created in the assistant editor: open an assistant’s Instructions tab and use the Variables panel beside the instructions (administrators see Add Variable there). Click a variable to insert it at the cursor.
Assistant featuring a substitution variable

Assistant with Variable

Create or Edit a Variable

Create assistant Variable

Create a variable

When adding a variable, define: Key — letters, digits, underscores and dashes; no spaces (slack_webhook_url, quiz-id-fall-2026). A key is unique within the Digital Twin. Default Value — any text. It is inserted into the prompt exactly as written, so treat it with the same care as the prompt itself. Plain text or a URL is best. Shared with Instance — off keeps the variable personal: it resolves only for you. On lets everyone in the Digital Twin reference it. Admin Only — for a shared variable: marks it as one for administrators. Editable by others — for a shared variable: other admins can change it. By default only its creator can.
The variable still resolves for everyone it is shared with, and people in the Digital Twin can see shared variables and their values in the Variables panel of the assistant editor.

Scoping Rules

At runtime, two kinds of variables resolve for a conversation:
  1. Your own variables — resolve only for the person who created them.
  2. Shared variables — variables with Shared with Instance on resolve for everyone in that Digital Twin.
A key is unique within a Digital Twin — one variable per key, whether it is personal or shared. To hand a personal variable to everyone, turn on Shared with Instance rather than creating a second one.

Naming Conventions

  • lowercase_underscore or lowercase-dash for keys (course_id, welcome-message). Pick one style and stick with it.
  • Prefix by purpose when the list grows — slack_*, canvas_*, prompt_* make related variables easy to find.
  • Prefer specific names (student_full_name, course_canvas_id) over generic words you might also write in prompt text (name, id, value).
  • Document the variable in its value, or in a sibling variable, when its meaning isn’t obvious from the key.

Security Considerations

Variables put content directly into what the model reads. Treat them with the same care as any prompt:
  • Do not put secrets (long‑lived API keys, passwords) in variables. A user can sometimes coax the model into repeating its instructions, and a person who types ${key} in a message gets that variable’s value put into their own question. Use Pria’s connectors and integrations for credentials that must stay hidden.
  • Webhook URLs and quiz IDs are typically fine — they are already shared with third‑party systems and have their own access controls.
  • Values are used verbatim — a careless or hostile value can change the model’s behaviour. Only turn on Editable by others if you trust the other admins.
  • Review before sharing — once a variable is shared, everyone in the Digital Twin can reference it and see its value.

Testing Variable Resolution

The fastest way to confirm a variable resolves is to write a tiny test assistant whose instruction is:
Run any prompt against this assistant; the response will echo the value. If the literal ${my_variable_key} comes back, the key is misspelled or the variable is not available to you.

Common Patterns

Define a shared variable like ${welcome_subject} (“Biology 101” / “Onboarding”) and use it in the assistant’s opening line so the same assistant feels course‑specific.
Store a Slack webhook, a Canvas quiz endpoint, or a custom API URL in a single variable. Several assistants reference it. Changing the URL is a one‑field edit.
Write a long, refined refusal policy or formatting guideline once as a variable, then reference it from every assistant that needs the same behaviour. Editing the variable updates them all.
Two Digital Twins built from the same assistants can each define their own ${org_short_name}, ${primary_color} or ${escalation_email} without touching the assistant instructions.