03 / Using Synaplan
Tools & approvals
On this page 10
Some things an assistant does only read data. Others change something outside Synaplan — send mail, write a file, call an HTTP API. This page is how those actions are listed, how an operator decides what may run on its own, and how you approve the rest.
Since 4.8 the tool registry, approvals and custom HTTP tools are all on by
default (TOOLS.REGISTRY_ENABLED, TOOLS.APPROVALS_ENABLED,
TOOLS.CUSTOM_HTTP_ENABLED); an operator can switch any of them off under
Operate → System configuration → Features → Tools & approvals. The registry
switch doubles as a kill-switch: off restores the older per-loop catalogues.
In three sentences#
Every callable — web search, file tools, connected apps, and your own HTTP APIs — lives in one registry. Read-class tools run; write-class tools wait for you; destructive tools stay blocked unless you change the default. When something waits, a card appears in the chat and under Manage → Automations → Approvals.
Who this is for#
| You are… | What you do |
|---|---|
| Everyone | Approve or reject a waiting action in chat or in the Approvals inbox. Pick instant email or a daily digest. |
| An operator | Keep approvals and custom HTTP tools on (or switch them off), set the read / write / destructive defaults, and set how long a request waits. |
What you see#
Chat#
When a write-class tool needs consent, the answer shows an approval card: what it wants to do, Approve, Reject, and Always allow for this assistant (a personal override that never loosens a hard block). A rejected or expired request does not run.
Deciding does not leave the thread silent: approving or rejecting — in the chat or from the inbox — appends one follow-up message to that conversation with the outcome ("Done: …", "OK — I didn't run it. Nothing was sent.", or the failure reason). The open thread reloads itself; clients without a live socket catch up on the next refresh.
Approvals inbox#
Manage → Automations → Approvals (/channels/approvals) lists Waiting
and Decided; the menu entry carries a badge with the number of pending
requests. Open a row to jump back to the chat or the Saved Task that asked. The
page is absent while TOOLS.APPROVALS_ENABLED is off.
You choose Email me as soon as something waits or Send me a daily summary. Pending requests expire after the operator's window (default 72 hours).
Saved Tasks#
An unattended run that hits a write-class tool pauses. The task card shows that it is waiting. Approve it in the inbox (or from a link on the task) and the run continues; let it expire and that step is skipped. Three consecutive failures still auto-pause the task, as before. Plan steps that would write (send, create, upload) require approval even when the planner generated them on the fly.
Each saved task also has a Steps editor (WORKFLOWS.BUILDER_ENABLED, on by
default): a tool step that calls a connected custom or MCP tool, a
condition on a previous result, an outbound webhook (with a write-only
secret and an HMAC signature revealed once), and Ask me before on any tool
step — the same approval card as above. A task can additionally be started by an
incoming webhook (per-task URL and token, rate-limited, queued and answered
with 202). Save as template / Use template produce a paused copy that stays off and names the
connections and assistants the copy still needs.
Custom HTTP tools#
When TOOLS.CUSTOM_HTTP_ENABLED is on (the default), Manage → Connections →
Connected apps (/channels/connections) grows a Custom tools section
under your mailboxes and folders. Connected apps itself is visible to every
signed-in user; only the custom-tools section follows the flag. Saved custom
tools are offered to the assistant in chat like any built-in tool.
- Add a custom tool — name, title, what it does, HTTP method and URL, an optional JSON body template, and a class: Reads data, Changes something, or Deletes something. That class uses the same policy as built-in tools.
- Import from OpenAPI — paste a document or a URL, pick operations, set a base URL, import the selected ones.
- Try it — a test call that never saves the response. Secrets show as
***.
Credentials stay on this server. The backend pins DNS, rejects a templated origin, caps streamed bodies (default 1 MB), and refuses plain HTTP unless an operator allows it. Tokens are never written into an export file.
The flags (operators)#
The three switches sit under Operate → System configuration → Features → Tools & approvals; the policies and the expiry window under Operate → System configuration → Routing → Tool policies. Changes apply without a restart.
| Setting | Environment pin | Default | What it does |
|---|---|---|---|
TOOLS.REGISTRY_ENABLED |
FEATURE_TOOLS_REGISTRY_ENABLED |
on | One tool registry. Off restores the previous per-loop catalogues (kill-switch). |
TOOLS.APPROVALS_ENABLED |
FEATURE_TOOLS_APPROVALS_ENABLED |
on | Approval cards, the Approvals inbox, and pause / resume on Saved Tasks. |
TOOLS.CUSTOM_HTTP_ENABLED |
FEATURE_TOOLS_CUSTOM_HTTP_ENABLED |
on | Custom HTTP / OpenAPI tools on Connected apps. |
WORKFLOWS.BUILDER_ENABLED |
FEATURE_WORKFLOWS_BUILDER_ENABLED |
on | The Steps editor and the webhook trigger on saved tasks. |
TOOLS.POLICY.read |
– | auto |
Default for tools that only read. |
TOOLS.POLICY.write |
– | approve |
Default for tools that change something. |
TOOLS.POLICY.destructive |
– | block |
Default for tools that delete something. |
TOOLS.APPROVAL_EXPIRY_HOURS |
– | 72 |
Hours a pending request waits (1–720). |
TOOLS.CUSTOM_HTTP_ALLOW_PLAIN_HTTP |
– | 0 |
Allow http:// targets for custom tools. |
TOOLS.CUSTOM_HTTP_MAX_RESPONSE_BYTES |
– | 1048576 |
Cap on a custom tool's response body. |
auto / approve / block are the only policy values. Always allow is a
per-user, per-assistant override and cannot turn a block into a run.
Setting a FEATURE_* variable to false pins the feature off for the whole
deployment and locks the admin toggle (it names the variable). SQL still works
for automation that talks to the database (group TOOLS, owner 0, value
'1' / '0'); the app picks the change up on the next runtime-config fetch.
The full list of flags: Administration → Feature flags.
What is not here#
Running code is not a general tool: the
Secure compute module offers one narrow capability — short
Python or Node file work on copies of the files a user chose — behind
COMPUTE.ENABLED with the sidecar up (Run the compute sidecar),
and its unattended runs pause in this same approvals inbox. Interactive chat
approvals run the tool when you approve and continue the turn with a follow-up
message carrying the outcome.
Related pages#
- Assistants — which tools and skills a published assistant may use
- Using Synaplan — chat, Saved Tasks, Connections
- Administration — where the flags sit
- Run the compute sidecar — how operators start file work
- Connections guide — Microsoft 365, Dropbox, WebDAV, CalDAV, Jira / Confluence (main repository)