One factory call returns the array of action providers you drop straight into AgentKit.from. There is no separate register step — registration is just adding to the actionProviders array.
- Import the factory:
import { createTrue402ActionProviders } from '@true402.dev/agentkit'; - Build the providers with your payer key:
createTrue402ActionProviders({ payerPrivateKey: process.env.PAYER_PRIVATE_KEY! }) - Pass the result as
actionProviders to AgentKit.from({ walletProvider, actionProviders: [...] }). - Surface the actions to your LLM framework with an adapter —
getLangChainTools(agentKit) or getVercelAITools(agentKit). That is the only extra step.
The agent now carries six actions: true402_token_report (the primary pre-trade gate), true402_token_safety, true402_address_safety, true402_deployer_check, true402_tx_preflight and true402_liquidity_history. They map to the stalls POST /v1/base/token-report (composite avoid/caution/ok verdict, ~$0.01), POST /v1/token-safety (structural score 0-100, ~$0.005), POST /v1/base/address-safety (~$0.005), POST /v1/base/deployer-check (~$0.008), POST /v1/base/tx-preflight (~$0.008) and POST /v1/base/liquidity-history (~$0.005), all off the API base https://true402.dev/api.
The last two are the ones most integrations miss. true402_tx_preflight takes the unsigned transaction your agent is about to sign — it receives no private key and no signature, so it cannot broadcast or front-run what it inspects — and returns three lenses: a simulation against current state (does it revert?), the decoded intent (is this an unlimited approval that outlives the trade?), and the counterparty's liquidity-removal history. true402_liquidity_history answers the question a live simulation structurally cannot, because it is about the past: every removal event observed against the token, with amount, block and transaction hash, plus the other tokens drained in the same transaction. A pool drained last month simulates perfectly today if someone re-seeded it. Neither action ever returns a verdict of safe — each answer carries the block range the index actually covers, so none observed is not a claim of safety.