Extra Settings Reference¶
This page is a single, consolidated reference for the extra settings (user/group variables) that PrimeThink features read at runtime — primarily the secrets and configuration values that capabilities and tool plugins resolve through ${SETTING_NAME} placeholders.
Each setting is also documented in its own topic page, in context. This page collects them all in one place so you can see, at a glance, every setting the platform's documented features expect and where each one is used.
These are your settings, not fixed platform keys
Extra settings are user-defined. You choose the name — it only has to match the ${...} placeholder you write in a capability's options (or the key your plugin reads via get_user_setting_value). The names in the catalog below are the ones used throughout this documentation's examples; rename them freely as long as the placeholder and the setting agree.
What Counts as an "Extra Setting"¶
PrimeThink has three distinct kinds of configuration. This page covers the first:
| Kind | Where it lives | What it does | Reference |
|---|---|---|---|
| Extra settings (variables) | The Variables page, plus per-workspace and per-chat variables | Key-value pairs (API tokens, base URLs, credentials) consumed by capabilities and plugins | This page |
| App settings | Settings page | Profile, message preferences, group settings | App Settings |
| UI settings | Backend feature toggles | Show/hide interface features per user or group | UI Settings |
Extra settings are the values you store under App Settings → Variables Management. Two consumers read them:
- Capabilities (MCP, API, Sandbox, Computer Use) — via
${SETTING_NAME}placeholders in theiroptions. - Tool plugins — programmatically, via the injected
context.get_user_setting_value(name, user_id, group_id). See Tool Plugins → Plugin Context.
How Placeholder Resolution Works¶
Any string value in a capability's options can contain ${SETTING_NAME} placeholders. They are resolved when the agent's tools are built:
- The system scans the
optionsfor${...}tokens. - For each token it resolves the setting against the current user's settings, then the group's. (Capability options are built without a chat context, so the chat and workspace levels described in the settings hierarchy do not apply here.)
- The returned value replaces the placeholder.
- If a setting can't be resolved (missing or empty), an
UnresolvedPlaceholderErroris raised and that capability/tool is skipped with a logged error — the rest of the agent still loads.
Rules:
- Setting names must be word characters only — letters, digits, and underscore.
${HA_REMOTE_TOKEN}is valid;${ha-token}is not. - Names are case-sensitive:
${MY_KEY}looks for a setting named exactlyMY_KEY. - Resolution scope by capability type:
- MCP —
server_label,server_url,require_approval,headers, and any extra string/dict values. - API —
urlandheaders. - Sandbox —
envvalues passed into the sandbox. - Computer Use —
promptandactionstext.
- MCP —
Configuring a Setting¶
Variables have their own Variables page in the administration area, listing every variable by name and value with a New variable button above it. Pick the level you want — your own or the group's — and add a name and a value:
Each variable also carries two switches:
- Private value — masks the value everywhere, in the interface and in the API. Turn it on for anything secret; a masked value can still be read by the agent that needs it, but nobody can read it back out. If you save a variable whose name looks like a secret — it contains
secret,password,keyortoken— with this switch off, PrimeThink asks first and offers to turn it on for you. That check is a courtesy, not a rule: name a credential something else and nothing will warn you. A private variable can still be edited: its edit dialog opens with an empty value box labelled New value, and saving needs a new value to be typed in, because the stored one is never shown again. - Inject into sandbox — makes the value available as an environment variable when the agent runs commands in a sandbox. Off by default. On a shared level PrimeThink warns before enabling it, because everyone who can run the agent there can then read the value. Setting this needs the edit permission for that level's variables, so a reader sees the switch explaining what it would require rather than a switch that silently does nothing.
The value is then available as ${WEATHER_API_KEY} in any capability's options for that user/group. Settings can also be managed via the admin API.
Where a Value Comes From: the Settings Hierarchy¶
A setting name can be stored at four levels. When a value is resolved, the most specific level that holds the name wins, and the rest are ignored:
| Level | Applies to | Who can set it |
|---|---|---|
| Chat | one conversation | members of that chat, with the Chat Variables permissions |
| Workspace | every chat in a shared workspace, for every member | the workspace owner, or any member when the workspace is fully Shared, with the Workspace Variables permissions |
| User | one person, across all their chats | that person, with the Group Variables / user variable permissions |
| Group | everyone in the group | Group Admins, with the Group Variables permissions |
If none of the four holds the name, resolution falls back to the platform's own configuration, and finally to an empty value. A level is skipped entirely when there is no context for it — a background job with no chat has no chat or workspace level to consult, and resolves exactly as it always did.
A setting's flags (whether its value is private, whether it may be injected into a sandbox) always come from the same row that supplied the winning value, never from a less specific level.
Where each level is edited¶
All four levels use the same editor, so a variable is described the same way wherever it lives — only the reach differs.
| Level | Where to set it |
|---|---|
| User and Group | The Variables page in the administration area |
| Workspace | The Variables tab in the workspace's panel |
| Chat | The Variables tab in the chat's right sidebar |
The tab appears only where you may read that level's variables, so a level your role does not grant you shows no Variables tab at all rather than an empty one. Two more rules follow from the table further down: a workspace you can read but not write shows its variables without the means to change them, and a View Only workspace shows no tab to anyone but its owner. A direct message has no chat variables — the tab is not offered there.
Because the levels override one another, the same name at a narrower level silently wins. When a value is not the one you expect, check the narrower levels before changing the one you set: a leftover chat variable is invisible from the group's Variables page.
Workspace values belong to the workspace, not to a member
A workspace-level value means the same thing for every member and keeps meaning it as members join and leave — it is resolved from the workspace itself, not from whoever happens to be sending the message. This is what makes it safe for a shared persistent sandbox, where a value that varied per member would make the sandbox's behaviour depend on who ran the turn. User-level values are deliberately kept out of shared sandboxes for that reason; chat and workspace values are one shared row and are not.
Where the chat and workspace levels take effect¶
The two new levels are consulted wherever a value is resolved with a chat in hand:
${SETTING}expansion in the text of a user's message${SETTING}expansion in an agent's system prompt- Retrieval tuning — the number of results and the similarity threshold used for document search
- The agent job timeout
- Sandbox provider configuration and the environment variables injected into a sandbox
Capability option placeholders are the exception. The ${SETTING_NAME} tokens in a capability's options are resolved when the agent's tools are built, which happens without a chat context, so they continue to resolve over the user and group levels only. Do not expect a chat- or workspace-level variable to override a credential referenced from a capability's options.
Managing the new levels over the API¶
Workspace and chat variables have the same endpoints as group variables — list, read by name, create, update, and delete — under the workspace and the chat respectively, split the same way into managed and not managed settings.
Access is gated twice. The caller needs the matching Workspace Variables or Chat Variables permission, and must pass the ordinary access check for the container:
| Caller | Workspace variables |
|---|---|
| Workspace owner | read and write |
Member of a Shared workspace | read and write |
Member of an Owner Only workspace | read only |
Member of a View Only workspace | no access |
| Not a member, another group, or not a workspace at all | reported as not found |
For chat variables, reading requires membership of the chat, and writing follows the same rule as renaming a chat or editing its goal. A chat or workspace you are not in is reported as not found rather than forbidden, so its existence is not disclosed.
Reading a setting by name at any level returns only stored values. It never falls through to the platform's own configuration or environment, so a caller cannot use it to read server secrets by guessing names.
Settings Catalog¶
The settings below are referenced throughout the documentation. Each links to the page where it is used in full context.
API Capabilities¶
| Setting | Holds | Used in |
|---|---|---|
WEATHER_API_KEY | Bearer token for the example weather API | API Capabilities · Capabilities · Tool Plugins |
NEWSAPI_KEY | X-Api-Key for the NewsAPI example | API Capabilities |
RESEND_API_KEY | Bearer token for the Resend email API example | API Capabilities |
SMS_API_KEY | Bearer token for the SMS-provider example | Tool Plugins |
Web Search¶
| Setting | Holds | Used in |
|---|---|---|
SERPER_API_KEY | API key for Google Serper search | Internal Capabilities · Read Content of URL |
WEB_SEARCH_MAX_RESULTS | Result count for provider-side web search (default 5) | Internal Capabilities |
WEB_SEARCH_ENGINE | Search engine for OpenRouter's web plugin: native, exa, firecrawl, parallel, or perplexity | Internal Capabilities |
Web Page Fetching¶
Used by the Read Content of URL tool when a site blocks a direct fetch or serves a page with no readable content.
| Setting | Holds | Used in |
|---|---|---|
WEB_FETCH_PROVIDER | Hosted page fetcher: Auto (default), Tavily, Firecrawl, Jina, Serper, or None | Read Content of URL |
WEB_FETCH_STRATEGY | fallback (default — only when the direct fetch fails) or always | Read Content of URL |
TAVILY_API_KEY | API key for Tavily; shared with web search | Read Content of URL |
FIRECRAWL_API_KEY | API key for Firecrawl | Read Content of URL |
JINA_API_KEY | API key for Jina Reader; optional, raises its rate limit | Read Content of URL |
WEB_FETCH_USER_AGENT | Overrides the User-Agent the direct fetch sends | Read Content of URL |
MCP Capabilities¶
| Setting | Holds | Used in |
|---|---|---|
HA_REMOTE_TOKEN | Bearer token for a remote Home Assistant MCP server | MCP Capabilities · Tool Plugins |
GITHUB_MCP_PAT | Personal access token for the GitHub MCP server | MCP Capabilities |
Sandbox Capabilities¶
| Setting | Holds | Used in |
|---|---|---|
GITHUB_TOKEN | GitHub token injected into the sandbox env (e.g. as GH_TOKEN) | Sandbox Capabilities |
X_API_KEY | Generic API key injected into the sandbox env as a secret | Sandbox Capabilities |
Computer Use Capabilities¶
| Setting | Holds | Used in |
|---|---|---|
ACME_USER | Login username for the supplier-portal example | Computer Use Capabilities |
ACME_PASSWORD | Login password for the supplier-portal example | Computer Use Capabilities |
Tool Plugins¶
Plugins read settings programmatically rather than through ${...} placeholders, using context.get_user_setting_value(...) (often wrapped in a settings-provider class). The example management plugin reads:
| Setting | Holds | Used in |
|---|---|---|
manage_base_url | Base URL of the management system the plugin calls | Tool Plugins |
manage_token | API token for the management system | Tool Plugins |
Security Notes¶
- Never hard-code secrets in capability options, prompts, scripts, or plugin code. Always store them as settings and reference them with
${...}(or read them viaget_user_setting_value). - Scope tokens to the minimum access your agent needs — a compromised token grants whatever access it carries.
- Prefer Group Variables for shared service credentials so they're managed in one place; use User Variables for per-person tokens.
- Use a Workspace Variable when a value belongs to a project rather than a person — every member then resolves the same value, and it survives members joining and leaving. Remember it is readable by the workspace's members, so it is the wrong place for a personal credential.
- A Chat Variable is narrower still, and is the right level for a one-off override that must not leak into the rest of your work. It disappears with the chat.
- Settings values are write-focused in the UI — treat them like passwords.
Related Topics¶
- App Settings — where User and Group Variables are configured
- UI Settings — the separate interface feature-toggle system
- Capabilities — overview of agent capabilities
- API Capabilities · MCP Capabilities · Sandbox Capabilities · Computer Use Capabilities
- Tool Plugins — reading settings from plugin code