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_order— no handler; falls through to text
SWITCH_CHAINtarget chainswitch_chainChain-switch card
CHECK_BALANCEtoken and/or chaincheck_balanceBalance card
PORTFOLIO—portfolioportfolio/UserPortfolio
TX_HISTORY—tx_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_DAPP—create_dappdapp/DappPreview
MODIFY_DAPPAn active dApp project in the sessioncreate_dappdapp/DappPreview
SHOW_DAPPAn active dApp projectcreate_dappdapp/DappPreview
GO_ONCHAINAn active dApp project—Smart-account setup
DEPLOY_CONTRACTSAn active project and a smart account already set up—Deploy 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 contexttext → ResponseCard (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.