Skip to content

What is a Smart Agent

You already know what a Smart App is: infrastructure you deploy. A Smart Agent is the part that does things. It’s an autonomous actor with its own cryptographic identity, its own multisig wallet, and an authority bounded by a rulebook it cannot rewrite. When you hear “AI agent that trades”, “treasury bot” or “automated alerting”, the Smart Engines primitive underneath is a Smart Agent.

Trading is the headline use, but it’s one capability of six. An agent declares its capabilities when it is created: trade (a DEX offer), payout, token (mint, burn or transfer), notify, read, and function-invoke (run one of your app’s functions as the agent). It acts on its own triggers, a schedule or an event in its app’s namespace, with no person or HTTP call in the loop. See Agent rules for the capabilities and Lifecycle & autonomy for triggers.


A Smart Agent is a record with:

Field What it is
agentId The agent’s handle in the agents API.
name, type A label and a classification (trading, monitoring, analytics, custom). The type is stored for your own use; nothing on the platform acts on it.
status Current lifecycle state. See Lifecycle & autonomy.
ownerWallet The person, app or customer in control: withdraw, pause, change rules, approve, revoke.
agentWallet The wallet the agent acts as. It runs the agent’s capabilities, only within the rules.
capabilities The verbs the agent may run. Anything else is refused.
treasuryAccount The multisig account that holds the agent’s funds. On XRPL it is the same account as agentWallet.
primaryChain, additionalChains The chains the agent operates on.
ruleRef, rulesHash Where the agent’s rulebook is published on Hedera Consensus Service, and a fingerprint for audit.
rulesConfig The agent’s runtime config: its trade market, its off-chain and function allow-lists, and its triggers.
entityId The canonical entity id from the agent’s DKG creation.

The key behind the agent’s wallet is created by DKG and exists only as validator shares. It is never assembled, not at rest and not while signing, so neither the agent nor the owner can sign alone. The owner controls; a threshold of validators signs.


Agent vs App — the distinction that matters

Section titled “Agent vs App — the distinction that matters”
flowchart TB
    subgraph App["Smart App — infrastructure"]
        direction LR
        Code["Your container<br/>+ your functions"]
        Agent["Smart Agent — actor"]
    end
    Code -->|owns / governs| Agent
    Trigger["Trigger<br/>(schedule or app event)"] -->|wakes| Agent
    Agent -->|proposes ops within rules| Gate["Rule check (fail-closed)"]
Smart App Smart Agent
What it is Infrastructure you deploy An actor that proposes transactions
Identity App entity Its own entity and multisig wallet
Does it act on its own? No, it hosts code Yes, on its triggers, within its rules
Holds value? Indirectly Yes, in its own multisig account
Created by hsuite subscribe, then hsuite deploy Your app, through the SDK’s two-phase create on XRPL (prepareCreateAgentWithIntent → sign the reserve payment → executeCreateAgent)

An app can own and govern many agents, or create them for its customers. The app is the building; the agent is the employee.


1. Autonomous trader

On a schedule, the agent runs one of your app’s functions. The function decides whether to trade and returns the offers it proposes. The rules cap the size of each trade and the daily volume, and send anything above a threshold to you for approval. The function is only a proposer: an order above the cap is never signed. On XRPL a trade is an OfferCreate, so the rules must grant the offer action type (see Agent rules).

2. Treasury manager

An agent pays out from a treasury: payout reaches only allow-listed addresses, allocationLimits set a per-token ceiling, approvalThreshold forces your approval above a set amount, and operationalWindow bounds the period in which it may act.

3. Moderator / monitor

An agent with only off-chain capabilities (read, notify) watches your app’s events, such as a lapsed subscription or a new write to a collection, and posts alerts to your webhook. It needs no balance beyond its reserve.