Every walkthrough, action and process the assistant can offer
The full catalogues by key — three actions, nineteen processes with their steps, twenty-one walkthroughs — plus the nine model tools and the provider gate that withholds two of the three tiers.
Actions explains the three tiers and the two allowlists. This page is the contents of all three catalogues, by key, so you can answer "what exactly is ticked?" without reading a React file.
Everything here is read-only data shipped with the build. There are nine catalogues; the three the customer assistant can offer are what this page spells out, and the rest are here so the numbers agree:
| Catalogue | Entries | Whose |
|---|---|---|
| Actions | 3 | Customer |
| Processes | 19 | Customer |
| Walkthroughs | 21 | Customer |
Activity areas get_my_activity can read |
9 | Customer |
| Customer screens the assistant may open | 83 | Customer |
| Admin procedures | 34 | Operator — see the operator's own assistant |
| Admin actions | 6 | Operator |
| Admin readers | 3 | Operator |
| Admin screens the assistant may open | 120 | Operator |
The console at /admin/ai/support/workflows fetches the customer three at page
load:
Read this first: two of the three tiers are gateway-only
actionsAvailable() requires both aiSupportProvider === "mashdiv" and
aiSupportOperationsEnabled. An install running its own Anthropic key or an
OpenAI-compatible endpoint is offered no actions and no processes, however
the switches are set and however many keys are ticked.
The console says which of the two is missing rather than going quiet: the
workflow route returns blocked: "provider" when the provider is wrong and
blocked: "disabled" when the switch is off. The remedies are different — one is
a switch you own, the other is a provider you have to choose — which is why they
are two states and not one message.
The reason is not a paywall across an arbitrary feature. An action is the only thing in this addon that writes, and three properties behind it come from the gateway rather than from a model: the audit trail is double-entry across both sides, the spend is bounded by an allowance this install cannot edit, and the catalogue is versioned centrally so an action found to be unsafe is withdrawn for every buyer at once rather than when each next upgrades.
Walkthroughs are not gated this way, for the same reason: a walkthrough writes nothing, needs no accounting, and withholding it would be an arbitrary paywall.
The three actions
An action is a single reversible, non-financial change. The model may propose one from this fixed list and nothing else; the customer reads a constant description and confirms it, and the write then happens through an ordinary authenticated route under the customer's own session. The model executes nothing, and no action takes a parameter from the model — every value a runner uses is derived from the confirming user's session.
| Key | Button | Confirmation | Offered when |
|---|---|---|---|
resend_verification_email |
Resend the verification email | One tap | verifyEmailStatus is on and the customer's address is unverified |
cancel_pending_kyc |
Withdraw my verification submission | Modal | The customer has a kycApplication in PENDING |
mark_notifications_read |
Mark my notifications as read | One tap | The customer has at least one unread notification |
requiresStepUp is false on all three, and the console shows the flag rather
than assuming it. None of them changes an authentication factor or moves value.
Three things worth knowing before you switch actions on:
cancel_pending_kycstarts a 24-hour cooldown. Setting the application toREJECTEDis what the submit route's rejection check reads, so the customer cannot submit for that level again for a day. The description the customer confirms says exactly that. It is still usually a good trade — a reviewer rejection starts the same clock — but it is the reason this one is behind a modal rather than a single tap.- Verification emails are capped at three per account per hour. Over that, the customer gets a plain sentence rather than an error, and is offered a person.
- An offer expires after 24 hours (
PROPOSAL_TTL_MS). A transcript is readable forever; without an expiry a customer scrolling back through an old conversation could confirm an action proposed for a situation that no longer exists.
The nineteen processes
A process is a sequence over the same action allowlist, plus navigation.
There are no new runners: an operation step runs the very definition above, a
navigate step opens a page and writes nothing, and a guide step runs a
walkthrough and writes nothing. The model picks which process; it does not
compose, order or describe the steps, and after the first step it is not in the
request at all — the confirm route writes the next step itself.
aiSupportWorkflowKeys is the allowlist and empty means none.
| Key | Title | Steps, in order | Needs |
|---|---|---|---|
catch_up_on_notifications |
Clear a backlog of notifications | action mark_notifications_read → /user/notification |
— |
find_missing_money |
Track down a payment you cannot find | guide find_a_transaction → guide understand_my_wallets → /support/new |
— |
first_deposit |
Add funds for the first time | guide understand_my_wallets → guide make_a_deposit → /finance/history |
— |
first_withdrawal |
Take money out for the first time | guide complete_verification → guide understand_my_wallets → guide make_a_withdrawal |
— |
join_a_token_sale |
Take part in a token sale | guide complete_verification → guide join_a_token_sale → /ico/transaction |
extension ico |
place_a_store_order |
Buy something from the store | guide shop_and_checkout → /ecommerce/cart → /ecommerce/order |
extension ecommerce |
recover_access |
Get back into your account | action resend_verification_email → /login |
— |
redo_verification |
Start your verification again | action cancel_pending_kyc → /user/kyc |
— |
secure_my_account |
Lock down your account | guide secure_my_account → /user/notification |
— |
start_binary_trading |
Get started with binary options | guide learn_binary_trading → guide understand_my_wallets |
setting binaryStatus |
start_copy_trading |
Follow another trader | /copy-trading → /copy-trading/subscription |
extension copy_trading |
start_forex_investing |
Invest in a managed forex plan | /forex/plan → /forex/investment |
extension forex |
start_forex_trading |
Get started on the forex terminal | guide understand_my_wallets → guide learn_the_forex_terminal |
extension forex_trading |
start_investing |
Put money into an investment plan | guide understand_my_wallets → guide invest_in_a_plan → /investment/portfolio |
setting investment |
start_p2p_trading |
Buy or sell peer-to-peer for the first time | /p2p/payment-methods → guide find_someone_to_trade_with → /p2p/trades |
extension p2p |
start_referring |
Start earning from referrals | /affiliate → /affiliate/reward |
extension mlm |
start_spot_trading |
Place your first trade | guide understand_my_wallets → guide learn_the_trading_terminal |
— |
start_staking |
Stake for the first time | guide understand_my_wallets → guide choose_a_staking_pool → /staking/position |
extension staking |
start_swapping |
Swap one token for another | guide learn_token_swapping → /finance/history |
extension dex |
This is the only process whose first step changes something consequential. Step 1
is cancel_pending_kyc, which sets the customer's pending application to
REJECTED and starts the 24-hour cooldown; step 2 then opens /user/kyc and
tells them, in the step's own constant text, that the next submission opens in
24 hours.
Read the step list on the console before ticking this one. "Let the assistant redo verification" is not enough information to consent to, which is why the route returns the steps rather than the titles.
Two of the forex entries are genuinely different products: start_forex_trading
needs the forex_trading extension (the multi-asset terminal), start_forex_investing
needs forex (managed plans). An install can have one and not the other.
Eleven of the nineteen are gated, and the row is still shown
Nine name an addon in requires.extension — ico, ecommerce, copy_trading,
forex, forex_trading, p2p, mlm, staking, dex — and two name a
platform setting: binaryStatus and investment. availableWorkflows() drops
them when the addon is not installed and enabled, or the setting is off.
The console still lists them, but it only reports the addon half of that.
installed is derived from requires.extension alone, so a process whose addon
is absent comes back installed: false: the row is dimmed, its switch is
disabled, the badge naming the addon turns to a warning tone, and a link to the
product page appears where a store slug is known.
The two setting-gated processes are the exception, and it is worth knowing before
you go looking for a warning that is not there. start_binary_trading and
start_investing name a setting rather than an extension, so they have no
requires.extension and always serialise as installed: true — even when the
setting is off. Their rows are never dimmed, their switches stay live, and the
badge naming binaryStatus or investment is drawn in the same neutral tone
either way. Ticking one saves happily and still offers nothing, because
availableWorkflows() reads the setting at request time and drops the process
when it is off. If one of those two is ticked and never appears, check the
platform setting itself — this screen will not tell you.
Hiding an unavailable process is the tempting choice and it is wrong twice: an operator who cannot see it cannot discover it exists, and a missing row is indistinguishable from a build that does not ship it.
A workflow abandoned mid-way expires after seven days (WORKFLOW_TTL_MS) —
longer than a single offer, because a process legitimately spans days. See
Scheduled jobs for why that expiry has to be a
sweep and not only a lazy check.
The twenty-one walkthroughs
A walkthrough opens a page the customer's own session may already open and points at the controls on it, one stop at a time. It writes nothing, reads nothing about the account, and never fills anything in — it says which box, and the customer types.
aiSupportGuideKeys is the allowlist and empty means all.
| Key | Page | Stops |
|---|---|---|
browse_the_nft_market |
/nft/marketplace |
5 |
choose_a_futures_market |
/futures |
5 |
choose_a_staking_pool |
/staking/pool |
5 |
choose_a_trader_to_copy |
/copy-trading/leader |
5 |
complete_verification |
/user/kyc |
4 |
find_a_transaction |
/finance/history |
3 |
find_someone_to_trade_with |
/p2p/market |
5 |
invest_in_a_plan |
/investment/plan |
6 |
join_a_token_sale |
/ico/offer |
6 |
learn_binary_trading |
/binary |
the page's own tour, binary-trading-intro |
learn_the_forex_terminal |
/forex-trading |
the page's own tour, fx-terminal-intro |
learn_the_trading_terminal |
/trade |
the page's own tour, trading-pro-intro |
learn_token_swapping |
/dex/swap |
the page's own tour, dex-swap-intro |
make_a_deposit |
/finance/deposit |
5 |
make_a_withdrawal |
/finance/withdraw |
7 |
open_a_ticket |
/support |
3 |
run_a_trading_bot |
/trading-bot/dashboard |
5 |
secure_my_account |
/user/profile |
3 |
shop_and_checkout |
/ecommerce/product |
5 |
understand_my_wallets |
/finance/wallet |
4 |
understand_referral_rewards |
/affiliate/dashboard |
6 |
Four of them carry no stops of their own. The binary, spot pro, forex and swap terminals each shipped an onboarding tour long before this addon existed; those guides name the existing tour and the frontend starts it, rather than authoring a second, worse tour of the same screen that drifts the first time either changes.
Walkthroughs carry no requires field. Their gate is their route's gate:
each is pre-flighted through resolveAction, the same call the navigation tool
makes, so a guide for a page an addon does not provide — or that this particular
customer's verification level cannot enter — is never offered. That is per
customer, not only per install.
The console shows every stop's wording, not a count. A stop's text is a constant the customer reads while something on their screen is highlighted; "put your wallet address here" aimed at the wrong field is a lost deposit, and it is your product being described, so you are the one who has to be able to check the words.
Why the two allowlists point opposite ways
| List | Empty means | Because |
|---|---|---|
aiSupportWorkflowKeys |
none | A process runs an authenticated write. The catalogue grows in upgrades, so "empty means all" would grant a capability by upgrading rather than by a decision. |
aiSupportGuideKeys |
all | A walkthrough cannot write. A new one is a new explanation of a page you already ship, to customers already standing on it. Requiring a tick each would leave every install that never opens this screen with an assistant that can only teleport people and abandon them. |
That is the sharp edge of "empty means all", and the console makes it
unreachable: unticking the last remaining walkthrough turns the master switch
aiSupportGuidesEnabled off instead of writing an empty list. Which is what you
meant, and it is reversible.
The API can still be driven directly, so if you write aiSupportGuideKeys: []
yourself, you have enabled every walkthrough in the build.
The nine tools behind all of it
These are what the model is actually offered. Every one reads the customer id from the authenticated session — no tool schema accepts a user id, because a tool that took one would be a lateral-read primitive one prompt injection away. None of them mutates anything.
| Tool | Touches the account | Withheld unless |
|---|---|---|
propose_action |
No | Always offered. Renders a button for one of the 83 paths in the customer route catalogue, pre-flighted for this customer |
propose_steps |
No | Always offered. A numbered walkthrough in the reply; each step's route is pre-flighted, and a failing one renders as text rather than a dead button |
request_human |
No | Always offered. Ends the turn and hands over |
get_account_summary |
Yes | aiSupportAccountToolsEnabled |
get_recent_transactions |
Yes | aiSupportAccountToolsEnabled. Amounts and statuses only — never addresses or transaction hashes |
get_my_activity |
Yes | aiSupportAccountToolsEnabled, and at least one of its nine areas is available on this install — see below |
propose_operation |
No | actionsAvailable() — gateway provider and aiSupportOperationsEnabled |
propose_workflow |
No | actionsAvailable(), plus aiSupportWorkflowsEnabled, plus at least one key ticked |
propose_guide |
No | aiSupportGuidesEnabled, and at least one walkthrough this customer can reach |
A tool that cannot run is withheld from the prompt, not merely refused when called. A model shown a tool it will always be refused for offers it in prose — "I can resend that for you" — and then nothing happens; the refusal is invisible to the customer and reads as the product being broken.
Individual agents can narrow this further with their own tool list — see Agents.
The nine areas of get_my_activity, and what gates each one
Each area is a separate reader with its own gate, and the tool's area enum is
built from the ones this install actually has. An area that is not available is
not in the enum and is refused area_unavailable if a model names it anyway.
| Area | What it reads | Gated on |
|---|---|---|
orders |
Recent spot orders, filled or not, and why a cancelled one was cancelled | Nothing. Spot trading is core |
p2p |
The customer's own trades and posted offers, with escrow and payment-window state | Extension p2p |
staking |
What is locked, in which pool, until when, and whether an unstake has been requested | Extension staking |
ico |
Token-sale purchases and the status of each | Extension ico |
forex |
Their forex accounts and managed investments | Extension forex |
ecommerce |
Their shop orders and what state each is in | Extension ecommerce |
affiliate |
How many people they referred, how many were approved, what was paid | Extension mlm — the addon is not named for the area |
investments |
Their investment plans: how much is in each, when it ends, how a finished one turned out | Setting investment, not an extension |
binary |
Their binary options positions and how each settled | Setting binaryStatus, not an extension |
Three of those are worth reading twice, because each is a place an operator looks for the wrong thing when the assistant says it cannot see something:
investmentsandbinaryare gated on a platform setting, exactly like thestart_investingandstart_binary_tradingprocesses above. There is no addon to install and no addon to check. If the assistant will not discuss a customer's investment plans, the switch isinvestmenton the platform settings screen.affiliateneeds themlmextension. The area key and the addon name are different words for the same product, and only one of them is searchable.ordersis ungated, so the tool is never dropped for want of an area — the enum shrinks instead. "No areas at all" is not a state this addon reaches.
The catalogue is cached for a minute and sorted, because it lands in the prompt prefix the provider caches on: an order that wobbles between requests turns every cache read into a write.
aiSupportAccountToolsEnabled, precisely
This is the Super-Admin switch on the Guardrails tab labelled Account tools enabled, and it ships on. Turning it off is "docs-only mode": the three tools marked Yes above are dropped from the tool spec and refused again at call time, so nothing about any customer's account leaves the install for a model. The assistant answers from documentation alone.
This switch has exactly one effect, in both places it is checked: it removes the
tools flagged as account readers. get_account_summary, get_recent_transactions
and get_my_activity carry that flag. propose_operation, propose_workflow
and propose_guide do not, and no runner behind any of them consults this
setting — not the tool, not the confirm route, not the step runner.
So an install with account tools off and aiSupportOperationsEnabled on
still offers actions, still starts processes, and still executes both when the
customer confirms. That is deliberate rather than an oversight: an action runs
under the customer's own session and derives every value it uses from that
session, so it never needed the assistant to read their account in the first
place.
If what you want is an assistant that answers questions and touches nothing, you
have to turn both off — account tools and aiSupportOperationsEnabled.
One is not a shortcut for the other.
The three propose tools have their own gates, and none of them is this one:
propose_operation and propose_workflow on actionsAvailable(),
propose_guide on aiSupportGuidesEnabled plus at least one walkthrough this
customer can reach.
All three of aiSupportOperationsEnabled, aiSupportWorkflowsEnabled and
aiSupportWorkflowKeys are Super-Admin only, and the Actions console is where
they are changed. See All settings for the full protected list
and Permissions for who can open the screen.
The operator's four catalogues
None of the above is what the assistant on the Handbook screen works from. That surface has its own four catalogues, sharing no entries with the customer ones, and the operator's own assistant is where they are described. The counts, so this page and that one agree:
| Catalogue | What it holds | Gate |
|---|---|---|
| 34 admin procedures | Set up deposits, investigate a stuck withdrawal, prepare for an update, and so on | Every step's own permission, and every action step's allowlist entry. You are offered a procedure only if you could finish it |
| 6 admin actions | Rebuild the knowledge index, reload the settings cache, back up the database, re-sync the currency icons, send yourself a test email, test the AI provider | aiSupportAdminActionsEnabled, a tick in aiSupportAdminActionKeys, and the action's own permission |
| 3 admin readers | The operations queue, platform health, recent admin activity | Section by section, on the key of the screen that shows the same thing |
| 120 admin screens | Every console the assistant may open for you | That screen's own permission |
All four are dark until aiSupportAdminAssistantEnabled is on, which ships off
and only a Super Admin can change. And all four are filtered against the asking
administrator's own permissions on every request, so the assistant is never a
second, weaker door to a console that would have refused them.