Skip to content

Intent catalogue

Every intent BlazAI understands, what it extracts, and what the UI renders. This is the reference for "can BlazAI do X".

Intent source: bz-agent/src/utils/constant.ts → AVAILABLE_INTENTS
Action source: bz-backend/v1/models/blazMessage.js → BLAZ_ACTIONS
Renderer: defi-dex/src/component/defi/swapAI/BotMessage.tsx

Intent vs action

An intent is what the classifier decided the user wanted. An action is the discriminator that tells the frontend which component to render. They are usually 1:1, but not always — CREATE_DAPP and MODIFY_DAPP both map to the create_dapp action because DappPreview handles both.

Trading & wallet

IntentExtractsActionRenders
SWAPfromToken, toToken, chain, amountquotesquotes/QuotesContainer
BRIDGEfromToken, toToken, fromChain, toChain, amountquotesquotes/QuotesContainer
SEND_TOKENrecipient (address or name.blazpay username), token, amount, chainsend_tokenSendTransaction
BUYfiat amount, currency, target tokenbuy_sellbuy/BuyQuoteContainer
BUY_BZ_TOKENamountbuy_bz_tokenpresale/PresaleMessage
DCAfrequency (interval multiplier), interval (unit), occurrence (order count), tokens, amountdcaDca/Dca
LIMIT_ORDERpair, side, target price, amountlimit_orderno handler; falls through to text
SWITCH_CHAINtarget chainswitch_chainChain-switch card
CHECK_BALANCEtoken and/or chaincheck_balanceBalance card
PORTFOLIOportfolioportfolio/UserPortfolio
TX_HISTORYtx_historyactions/TxHistory
TX_INFOtransaction hashtx_infoactions/TxInfo
PRICE_ALERTtoken, threshold, directionprice_alertAlert confirmation

SWAP versus BRIDGE is decided by whether fromChain and toChain differ. The entry prompt says so explicitly, because users say "swap" for both.

CHECK_BALANCE is also the intent for follow-up questions about worth, price or value of tokens already discussed — that is in its description on purpose, so "how much is that worth?" does not fall through to conversation.

Safety

IntentExtractsActionRenders
CONTRACT_AUDITaddress, chain, source (pasted Solidity), contractNamecontract_auditactions/AuditResult
TOKEN_SAFETYtoken address, chaintoken_safetyactions/TokenSafetyResult
WALLET_CARDaddress, ENS, or Blazpay usernamewallet_cardactions/WalletCardResult
REVOKE_APPROVALSchain (defaults to connected wallet)revoke_approvalsactions/ApprovalRevoker

The intent descriptions carry explicit negative examples, because these four overlap heavily in user phrasing:

  • CONTRACT_AUDIT is not for "what is an audit" (that is CONVERSATION) and not for token rug checks (that is TOKEN_SAFETY).
  • TOKEN_SAFETY is token-specific — ownership, mint, blacklist, tax, holder distribution.

See safety suite and contract auditor.

Automation

IntentExtractsActionRenders
AUTOPILOTsub-action (create/status/pause/resume/close/help) plus a policy draftautopilotactions/AutopilotCard

The description carefully separates Autopilot from its neighbours: it is a persistent budgeted agent with guardrails — not a single one-off swap (SWAP) and not a simple recurring-buy form (DCA). Triggers on "autopilot", "trading agent", "auto-trade my budget", or a budget combined with multiple rules.

Discovery & market data

IntentExtractsActionRenders
NFT_INFOcollection, tokenId, chain, or an OpenSea linknft_infoactions/NftInfo
MARKET_INTELsubject (price / gas / trending / overview / dominance / market cap)market_intelMarket card

MARKET_INTEL is for data questions — "price of ETH", "gas on Arbitrum", "top gainers", "BTC dominance" — explicitly not for swapping or trading.

dApp builder

IntentPreconditionActionRenders
CREATE_DAPPcreate_dappdapp/DappPreview
MODIFY_DAPPAn active dApp project in the sessioncreate_dappdapp/DappPreview
SHOW_DAPPAn active dApp projectcreate_dappdapp/DappPreview
GO_ONCHAINAn active dApp projectSmart-account setup
DEPLOY_CONTRACTSAn active project and a smart account already set upDeploy flow

GO_ONCHAIN and DEPLOY_CONTRACTS are easy to confuse

GO_ONCHAIN is first-time smart-account setup ("go onchain", "set up smart account"). DEPLOY_CONTRACTS is deploying Solidity ("deploy my contracts", "deploy via smart account", "generate contracts"). Both descriptions carry explicit do-NOT-use-for lists because the classifier used to conflate them.

The active project is tracked as activeDappProjectId on blazSession and passed to bz-agent with every request, which is how the precondition is enforced.

See dApp builder.

Composition

IntentWhat it doesAction
WORKFLOWSequential chained steps — "bridge 1 ETH from Arbitrum to BSC then swap to BNB". Detects "then", "and then", "after that" followed by another actionworkflow
BATCHSame action, many targets — "send 5 BNB to marcpr, patrickbit, and davidgod". Detects lists, multiple recipients, or the word "each"batch

These are genuinely different and the descriptions say so: BATCH is not for sequential chaining, WORKFLOW is not for single intents.

Conversation & fallback

IntentWhenAction
CONVERSATIONCasual chat, or a question answerable from known contexttextResponseCard (markdown)
FALLBACKNo known intent matches, or the model does not know. Routes to vectorNode (RAG lookup over PGVector) then conversationNodefallback

FALLBACK's description instructs the model not to generate text — the vector node supplies the grounding instead.

Non-intent actions

Some actions are emitted by the backend without a corresponding classified intent:

ActionEmitted whenRenders
connect_walletAn intent needs a wallet and none is connectedConnectWallet (EVM only)
errorA handler threwText card
textAnything conversationalResponseCard
historyLegacy

The follow_up convention

Every intent node uses the same pattern:

  • If all required fields are present: set state.intent = AVAILABLE_INTENTS.X.name and state.text = 'no-text'.
  • If something is missing: set state.intent = 'follow_up' and put the clarifying question in state.text.

So a partially-specified request produces a question rather than a guess. "Swap some ETH" asks how much; it does not pick a number.

Complete action enum

For anyone matching against BLAZ_ACTIONS:

quotes            history           text              error
connect_wallet    fallback          send_token        portfolio
buy_bz_token      buy_sell          dca               tx_info
tx_history        nft_info          limit_order       check_balance
price_alert       switch_chain      create_dapp       contract_audit
token_safety      wallet_card       revoke_approvals  workflow
market_intel      batch             autopilot

MODIFY_DAPP maps to create_dapp, so there are 27 keys and 26 distinct string values.

Adding a new intent

Nine files, three repos, in order. There is a checklist: add an AI intent.

Known gaps

IntentGap
LIMIT_ORDERClassifies and extracts, but no backend handler exists. The user gets text, which reads as a failure
DCAamount semantic mismatch — template says per-cycle, app deposits as total
PerpetualsNo intent at all
LiquidityNo intent at all
Copy tradingNo intent; a read-only COPY_TRADE intent is planned as part of CT-1

Internal + developer documentation. Usage figures are point-in-time snapshots — re-verify before publishing them.