Skip to main content
The hosted path is the supported flow as of v0.3. Self-host instructions follow at the bottom.

Create one in the wizard

  1. Open /agents to click Create agent.
  2. Fill the wizard:
    • Name (e.g. “Mean-reversion BTC trader”)
    • Mandate (markdown. risk appetite, market prefs, patience rules)
    • Model. pick from the 3 tested-working options. See LLM Strategy.
    • Initial funding (optional, $X DUSDC)
  3. Click Create. Your wallet pops to sign a personal message (DarkPool · Create agent · owner=0x… · ts=…).
  4. Backend verifies the signature, mints an ephemeral keypair, AES-GCM encrypts it, signs two sponsored PTBs (predict::create_manager, then balance_manager::new + mint_trade_cap + agent::register_agent), and transfers the AgentOwnerCap to your wallet.
  5. If you provided initial funding, the wizard signs a separate predict_manager::deposit<DUSDC> PTB from your wallet (sponsored), then POSTs /v1/agents/:id/sweep so the funds land in the agent’s PredictManager.
  6. The success panel shows the 4 created object IDs. Within 15 minutes (default fleet tick), the agent ticks for the first time.
That’s it. No env vars, no pnpm dev, no port to open. The hosted fleet polls /v1/agents/fleet and starts ticking your agent automatically.

Per-owner cap

MAX_AGENTS_PER_OWNER=3 (default). Returns 429 per_owner_cap if exceeded.

Required wallet signature

The signature check is non-optional. Backend verifies via verifyPersonalMessageSignature(@mysten/sui/verify) with a 5-minute replay window. Without it anyone could curl-spam create on any address.
buildCreateAgentChallenge(addr, ts) in both packages/frontend/src/lib/sign-message.ts and packages/server/src/routes/agent-fleet.ts must agree byte-for-byte.

Fund / Reclaim later

/agents/:agentId Owner Controls exposes:
  • Fund agent. inline amount + Deposit. Builds predict_manager::deposit<DUSDC>, signs from owner wallet (sponsored), then POSTs /v1/agents/:id/sweep. Updates last_funded_ms so auto-disable doesn’t fire.
  • Reclaim $X. POST /v1/agents/:id/reclaim. Server decrypts the agent key, signs predict_manager::withdraw_all<DUSDC> and transferObjects to a fixed recipient (ownerAddress from DB, never user-supplied).
  • Pause / Resume. owner signs agent::pause / agent::resume from their wallet. See Owner Controls.

Signal-only mode

A new agent that hasn’t been funded ticks but doesn’t mint. Open /agents/:id, click Why? on any settled tick: the reasoning panel shows the model’s full decision (BUY_YES @ $65,000 conf=78 etc.) even though no transaction landed. Fund the agent, and within one tick the next decision becomes a real mint.

Self-host (single agent, legacy)

Pre-v0.3 path. Still works for power users who want to run their own runtime against their own key:
Update .env so the frontend shows it:
The hosted fleet does not read AGENT_KEY or AGENT_STATUS_PORT. It reads encrypted rows out of agent_runtime.

Register on chain (CLI path)

If you want a TradeAgent identity outside the wizard (e.g. for a script that mints with its own key):
With a real V3 TradeCap:

Docker

Hosted fleet:
See Docker Compose.