Create one in the wizard
- Open
/agentsto click Create agent. - 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)
- Click Create. Your wallet pops to sign a personal message (
DarkPool · Create agent · owner=0x… · ts=…). - Backend verifies the signature, mints an ephemeral keypair, AES-GCM encrypts it, signs two sponsored PTBs (
predict::create_manager, thenbalance_manager::new+mint_trade_cap+agent::register_agent), and transfers theAgentOwnerCapto your wallet. - If you provided initial funding, the wizard signs a separate
predict_manager::deposit<DUSDC>PTB from your wallet (sponsored), then POSTs/v1/agents/:id/sweepso the funds land in the agent’s PredictManager. - The success panel shows the 4 created object IDs. Within 15 minutes (default fleet tick), the agent ticks for the first time.
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 viaverifyPersonalMessageSignature(@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. Updateslast_funded_msso auto-disable doesn’t fire. - Reclaim $X.
POST /v1/agents/:id/reclaim. Server decrypts the agent key, signspredict_manager::withdraw_all<DUSDC>andtransferObjectsto a fixed recipient (ownerAddressfrom DB, never user-supplied). - Pause / Resume. owner signs
agent::pause/agent::resumefrom 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:.env so the frontend shows it:
AGENT_KEY or AGENT_STATUS_PORT. It reads encrypted rows out of agent_runtime.

