- Create a brand-new position - point Zuno at a token + amount, the Scout surveys live pools on the chain, the Strategist proposes 2-5 pool/range candidates, the Critic stress-tests them, the Arbiter resolves on deadlock. See CLI / create.
- Rebalance an existing position - the same four agents debate whether and how to move its range. See CLI / plan.
Why four agents
LP management is a real tension between fee density (tight ranges, high yield) and survival (wide ranges, low exit risk). A single scoring function picks one side. A debate models the tension explicitly - and makes the reasoning auditable.| agent | does |
|---|---|
| Scout | reads the position + pool, classifies the regime in plain English |
| Strategist | proposes 2-5 candidate ranges, revises after critique |
| Critic | stress-tests every candidate, vetoes weak ones with concrete reasons |
| Arbiter | only joins on deadlock - picks final candidate from full transcript |
What’s deterministic, what isn’t
The agents use the LLM to reason. The LLM never owns arithmetic.- Tick math, range checks, allocation, and stress simulation are pure functions in TypeScript.
- Volatility comes from a real CoinGecko series; gas comes from
eth_gasPriceon the position’s chain; yield is estimated fromliquidity × feeTier × in_range_share. - The Strategist picks
(widthMultiplier, centerOffset)proportions - it can’t fabricate raw tick numbers. - The Critic scores against deterministic floors keyed to the user’s
risk profile (
conservative | balanced | aggressive). - The Arbiter writes the final paragraph, but the chosen candidate index is bounded by the actual proposal.
OPENAI_API_KEY is unset, every agent has a deterministic fallback.
The mesh shape and message kinds are identical.
Working surfaces
- Create + rebalance via the four-agent debate over AXL.
- Real on-chain v4 pool discovery (StateView probe of every
(token0, token1, feeTier)candidate from the curated registry). - Live
agent_thoughttranscript rendered in the CLI and persisted inrisk.reasonssoexplain recommendationcan replay it. - In-process orchestrator fallback when the AXL mesh is offline.
- Deterministic fallback when no LLM key is available.
- Background monitor worker with optional Telegram delivery, dedup,
and a local
~/.zuno/alerts.jsonstore. - Email-OTP sign-in, per-user Turnkey sub-org with isolated wallet.
applyrequires explicit approval and signs through the Turnkey boundary only after policy checks pass.