A budget for every agent
A fleet holds CREDIT for a team of agents and gives each agent wallet an allowance it collects itself, straight into its Orbio balance and never more than you set.
A wallet full of tokens
An agent that calls models needs inference on hand. The quick way to give it some is to fill the agent's wallet with tokens and top it up when it runs low.
That has three problems. The agent's key lives on a server, and whoever gets that key can move everything the wallet holds. Nothing paces the spending, so one runaway loop can use a month of budget in an afternoon. And topping up many wallets by hand is easy to forget, so agents run dry halfway through a task.
A fleet replaces the full wallet with an allowance.
How a fleet works
An operator creates a fleet and funds it with CREDIT, or with USDG spent on orbio's book in the same transaction through fundFromBook. USDG the book does not use comes back. Anyone may add CREDIT to any fleet, and only the operator can take it out.
Then the operator adds bots, up to 64 per fleet. A bot is a wallet with three numbers:
- a rate, the CREDIT it earns each period
- a period, from one minute to one year
- a cap, the most its allowance can bank
Say a bot earns 5 CREDIT an hour with a cap of 60. If it sits idle for two days, it comes back to 60 CREDIT ready to collect, not 240. The rest stays in the fleet.
The bot collects with refuel(fleetId, botId). Anyone may call it, but it only ever pays the bot, and the minimum is 0.01 CREDIT. If the fleet runs low, a refuel pays what the balance covers and the rest stays banked for the bot. refuelAll(fleetId) pays every active bot that has earned the minimum.
Inference, not tokens
Each bot has a delivery mode. By default a refuel is activated: it becomes Orbio balance on the bot's own Orbio account, ready for inference. In transfer mode the bot receives CREDIT tokens instead.
Activated inference cannot be transferred or sold. A bot funded that way never holds CREDIT it could lose, so a leaked bot key cannot drain anything. The fleet's CREDIT stays in escrow and leaves only two ways: as a refuel to a bot, or as a withdrawal by the operator.
That is why an allowance beats a full wallet:
- a bot can collect only what it has earned, never more than its cap
- inference arrives at the pace you set
- a single top-up funds the whole team
- unspent CREDIT stays in the fleet, and the operator can withdraw it at any time
The operator stays in charge
- Pause a bot and its allowance stops growing, and it cannot refuel. What it earned before the pause is kept. Resume it and it starts fresh from that moment, so a paused week never turns into one large refuel.
- Retune a bot's rate, period or cap at any time. What it earned is kept, up to the new cap.
- Rotate a bot to a new wallet with
setBotWalletwhen an agent key changes. What it earned moves with it. - Hand the fleet to another operator in two steps:
proposeOperator, thenacceptOperatorfrom the new wallet. Until they accept, you stay the operator.
Three calls for the agent
An agent does not need the website. Every step is a contract call on Robinhood Chain, chain 4663.
slotsOf(wallet, skip, limit)lists the fleet and bot pairs that have named this wallet, newest first.available(fleetId, botId)returns what the bot has earned and the part the fleet can pay now.refuel(fleetId, botId)collects it.
Anyone can add any wallet to a fleet of their own, and the list keeps past entries, so an agent keeps only slots where getBot(fleetId, botId) still names its wallet and whose operator it trusts.
To spend an activated refuel, the agent signs Orbio API key · chain 4663 · epoch 0 with the same wallet. The key is sk-orb-0- followed by the base64 of the signature, and it works with orbio's OpenAI-compatible API at https://www.orbio.so/api/v1.
const slots = await fleet.slotsOf(me, 0, 20); // newest first
for (const { fleetId, botId } of slots) {
const [, deliverable] = await fleet.available(fleetId, botId);
if (deliverable > 0n) await fleet.refuel(fleetId, botId);
}
const sig = await wallet.signMessage({ message: 'Orbio API key · chain 4663 · epoch 0' });
const key = `sk-orb-0-${Buffer.from(sig.slice(2), 'hex').toString('base64')}`;No owner, no fee
The fleet contract, like the other two orbio.bot contracts, has no owner, no fee and no upgrade path, and its source is verified on Sourcify. Every address is in contracts.json.
Try it
Create a fleet, fund it and add your first bot at orbio.bot/fleets. Connect an agent wallet on the same page to see and collect what fleets pay it. The full rules and the agent code are at orbio.bot/docs.