Skip to content
Mainnet

Docs · Protocol

The vault agent

One signer that trades each vault on its venue under on-chain limits: selling slowly into strength, buying dips with what it sold, and paying backers back when the vault has grown.

What it does

The agent sells slowly into strength: the higher the multiple over cost and the more real buy volume, the more it may sell, sized so it doesn’t dent the chart, only at or above one band over the EMA and the vault’s average cost plus the band. Its own policy buys dips below the 15-minute high (by default at least 15%), in clips sized to the pool’s depth; the program puts no price limit on buys, only the per-window budget, price impact and the vault floor. Buys can lose quote (SOL, USDC or the stock) if the price keeps falling. All sell proceeds stay in the vault as quote.

Its budget for each vault is split between two strategies, each with its own ledger and P&L: a conservative one (the EMA-band strategy above) and an adaptive one that reads drawdown, liquidity and momentum. Weights start at 70% conservative and 30% adaptive; every 6 hours, if both traded enough to compare, they shift 5 points toward the one with the better measured risk-adjusted result (P&L against its deepest drawdown over the period), within 50–90% conservative and 10–50% adaptive. A better past period guarantees nothing about the next, and the on-chain limits below apply to both.

When the vault's liquid quote is 5× what it held at launch and the chart is strong, the agent may pay backers back (principal first, then 15% of the vault at most every 4h). Buying back dips always comes first.

The rules, on-chain

Limits are copied into each launch at creation (terms); the values below are today’s defaults from /api/platform. The program checks every one on the measured fill of each agent trade. Launches created before the per-window sell cap was dropped may still have one (their token page shows it); newer launches limit sells only by price impact per trade.

RuleBuy (agent_buy)Sell (agent_sell)
Price vs EMANo price limitSpot ≥ EMA + band
Fill vs vault costNo cost checkFill ≥ vault average cost + band
Budget per windowShare of vault quote per windowShare of vault tokens per window, or none (see above)
Price impactCappedCapped
Vault floorVault quote stays ≥ the quote's floor (min_vault)—
RateOne agent trade per slotOne agent trade per slot
PauseRefused while agents are pausedRefused while agents are paused
ProceedsPaid from vault quoteStay in the vault as quote
Payback (payout_backers)Rule
SignerAgent authority only
Vault quote≥ 5× initial_vault_quote (liquid quote; tokens don't count)
ChartStrong: price above the EMA band, real buy flow, not in a drawdown (the agent's own check; the program enforces every other row)
AmountThe principal first, then 15% of vault quote
FrequencyAt most one payout per 4h, the principal payout included
FloorNever below the vault floor (min_vault)

Which venue it trades

Venue stateAgent trades
Trading on the curveOn the curve: LaunchLab, pump.fun or Meteora DBC (exact-in buys and sells)
Curve complete, waiting for the venue's migrationRefused (VenueMigrating) until the pool exists
Graduated (graduate recorded the pool)On the graduated pool: Raydium CPMM, PumpSwap or Meteora DAMM v2

The EMA

The EMA is sampled by the program at every agent trade, before reserves change:

update_ema
ema += (spot − ema) · dt / (dt + period)   // dt = seconds since the last agent trade, clamped to the period

Spot is read from the venue’s reserves in the quote’s raw units. A single large trade moves the EMA only a little, so the EMA is a slow reference for where the agent may sell. It does not limit buys.

Who runs it

The agent is an off-chain service holding the platform’s agent authority key, the only key that can sign agent_buy, agent_sell and payout_backers. The trades themselves are signed on the venue by the launch’s own authority address, so there are no separate trading wallets: the vault buys and sells as itself. Every executed trade is a Trade event; ticks where it decides to do nothing aren’t logged on-chain. Its reasoning for each launch is public at /agents.

Checking indexerAgent online· tick 74,604Mainnet