Skip to main content
Brand-new LP creation via the same four-agent debate that powers rebalance. Scout surveys live pools on the chain, Strategist proposes 2-5 candidates across multiple pools, Critic stress-tests each against your goal, Arbiter resolves on deadlock.

What you can say

The parser tolerates many phrasings. The load-bearing fields are which token and how much; everything else has a sensible default. Risk-profile aliases:
  • passive, safe, cautious, defensive → conservative
  • balanced, moderate → balanced
  • aggressive, active, yolo, degen, spicy → aggressive
Exposure preference:
  • stay long ETH, keep my X, hold my X → exposureBias=long-token (range shifted so capital token sits more in the position)
  • default → neutral (centered on current price, ~50/50 deposit)

What happens

  1. Goal extraction: parser fills createGoal. Missing capital triggers one clarification turn.
  2. CLI sends flow_create_start to Scout (or runs the in-process orchestrator if AXL nodes aren’t visible).
  3. Scout calls discoverPools(chainId) - real on-chain probe of the v4 PoolManager via StateView. Returns initialized pools with non-zero liquidity, ranked by liquidity descending. Per-pool: vol, yield estimate, regime classification.
  4. Strategist proposes 2-5 (poolIndex, widthMultiplier, centerOffset, exposureBias) candidates. The LLM picks proportions; deterministic helpers snap to tickSpacing and compute deposit amounts via allocateForCreate.
  5. Critic runs deterministic stress (1×, 2×, 3× vol) per candidate and judges against the user’s risk profile. Vetoes weak candidates, asks for revisions, accepts winners.
  6. On accept: emits plan_ready with kind: "create". CLI shows the prepared mint action and waits for approve it.
  7. On deadlock after ZUNO_MAX_DEBATE_ROUNDS: Arbiter picks one candidate from the latest proposal with explicit reasoning.
  8. apply it builds the v4 mint via buildMint, signs through Turnkey, submits. The new tokenId becomes visible after one confirmation in inspect my positions.

Example

Pool universe

Pool discovery is real and dynamic. Zuno enumerates every (token0, token1, feeTier) combination from its token registry, computes the deterministic v4 pool id for each, and reads StateView.getSlot0 + getLiquidity to confirm initialization. Unknown tokens (anything not in the registry) are excluded. To extend: add the token to packages/chain/src/tokens/constants.ts. To force a re-probe:
Caches at ~/.zuno/pools-{chainId}.json with a 30-min TTL.

Risk-profile floors

The Critic’s veto thresholds are keyed to your risk profile: Override per session with ZUNO_RISK_PROFILE=conservative|balanced|aggressive.

Without the mesh

If the four AXL agent peers aren’t visible, the CLI runs the same four handlers in-process via runDebateCreate. If OPENAI_API_KEY is also unset, set ZUNO_DETERMINISTIC=true to use the deterministic fallback shapes. Pool discovery doesn’t need an LLM.