Funding an agent
An agent needs two different assets, for two different jobs. Getting this wrong is the most likely reason an otherwise-working agent sits silent.
Two assets, not one
| Asset | What it pays for |
|---|---|
| tUSDC | Trading collateral. This is the capital the agent puts at risk. |
| STT | Inference fuel. Every decision costs 0.24 STT, spent as msg.value when the contract asks the LLM. |
An agent with collateral but no STT looks broken for reasons nobody can see from the outside — it simply never asks a question. So the UI surfaces fuel directly: every agent shows how many decisions it can still afford, and openWindow reverts early with a named InsufficientFuel error rather than creating an underfunded request that silently times out.
Where 0.24 STT comes from
Somnia’s agent platform splits the deposit into an operations reserve and an agent reward pot. For LLM inference at the default subcommittee size of three:
operations floor 0.01 STT × 3 validators = 0.03
agent reward 0.07 STT × 3 validators = 0.21
─────
0.24 STTPaying only the floor is a trap: the reward pot would be zero, every runner would skip the request, and it would sit idle until it timed out. Whatever isn’t claimed is rebated automatically — the first live decision got 0.0248 STT back.
Deploying is free, when the treasury has funds
A stranger who finds the site has a wallet and no testnet tokens. Telling them to go find a faucet ends the funnel, so the factory holds a treasury that seeds each new agent with a fuel grant (a few STT) for its first decisions.
It is capped per address, capped globally, and has an off-switch. If it runs dry the deploy still succeeds — it emits a “grant skipped” event and the owner funds the agent manually. The deploy button’s “first decisions on us” copy reflects a funded treasury; when it is empty the grant is skipped (a few roster entries were seeded before the treasury ran out, and later deploys were not).
Funding one yourself
Three steps, after which the wallet is never needed again:
- Deploy — one transaction creates your clone, with your prompt, your mandate, and you as owner.
- Fund collateral — approve tUSDC, then
fundCollateral(amount). The agent pulls it and holds it itself. - Fund fuel — send STT straight to the agent address. Its
receive()accepts both your transfer and the platform’s rebates.
None of these are things the site can send for you. Deploying and transferring are wallet-signed transactions on the Somnia explorer or your wallet; funding collateral and fuel are owner-only contract calls (the site can surface your address and the market state, but the chain requires your signature). tUSDC here has 6 decimals — an amount of 5_000_000 is 5.0 tUSDC, so read balances in six-decimal units, not 18.
withdrawCollateral and withdrawFuel are owner-only. You are delegating the decisions, not the keys. Compare the alternative every other agent project requires: paste a private key into a .env on a machine you are trusting. Here there is no key to paste, because there is no process to paste it into.Where the testnet tokens come from
STT comes from the Somnia Shannon faucets — Somnia’s own faucet on the testnet portal, a Google Cloud faucet for Shannon, or a community faucet like Stakely. Show up each day and the drip replenishes. The deploy button can cover a new agent’s first decisions from the factory treasury, but for collateral you’ll want some yourself.
tUSDC has a mint switch on testnet: the token-faucet contract (requestTokens) or the DreamDEX UI’s debug panel. Either way you get testnet tUSDC with a faucet-permissioned wallet, then approve it to the agent.
Both are testnet-only and worthless — which is the point. Nothing real is at risk; an agent’s entire proof is that it read, decided, and traded on-chain, under validator consensus, not that it made money. The exact faucet addresses are on Run one yourself.
Ready to try it? Deploy an agent →