// End-to-end workflow for onboarding a new asset to the market maker. Use when adding BTC, ETH, SOL, or any Hyperliquid perpetual. Covers viability analysis, config generation via auto_derive, spread profile selection, paper validation, and live deployment.
[HINT] Download the complete skill directory including SKILL.md and all related files
name
add-asset
description
End-to-end workflow for onboarding a new asset to the market maker. Use when adding BTC, ETH, SOL, or any Hyperliquid perpetual. Covers viability analysis, config generation via auto_derive, spread profile selection, paper validation, and live deployment.
disable-model-invocation
true
context
fork
agent
general-purpose
argument-hint
[asset] [capital_usd]
allowed-tools
Read, Grep, Glob, Bash
Add Asset Workflow
End-to-end process for onboarding a new Hyperliquid perpetual asset to the market maker. This workflow covers viability analysis, configuration generation, paper validation, and live deployment. Follow each step in order.
Arguments: [asset] is the symbol (e.g., BTC, ETH, SOL, HYPE) and [capital_usd] is the capital to allocate in USD.
# List available assets and their metadata
cargo run --release --bin market_maker -- --asset <ASSET> --dry-run
# List HIP-3 DEXs
cargo run --release --bin market_maker -- --list-dexs
Determine asset type:
Validator perp: Standard asset on Hyperliquid (BTC, ETH, SOL, etc.). Cross-margin supported, high leverage.
HIP-3 builder-deployed: DEX-specific token (HYPE on hyna, etc.). Isolated margin only, lower leverage, may have OI cap.
Check AssetRuntimeConfig::from_asset_meta() in config/runtime.rs -- HIP-3 detection happens at startup.
Red Flags (Do Not Proceed)
Volume < $500K/day: fills too infrequent for learning loops to converge
No Binance pair AND low volume: both signals and fills will be poor
Leverage 1x: cannot size positions meaningfully with limited capital
Asset recently delisted or about to be delisted
OI cap extremely low relative to intended capital deployment
Decision
If all minimum criteria are met, proceed to Step 2.
If the asset is borderline, consider starting with paper trading only (Step 4) before committing capital.
If red flags are present, do not onboard. Document the reason for future reference.
Step 2: Config Generation
Configuration is driven by the auto_derive() function in src/market_maker/config/auto_derive.rs. It takes a single sizing input (capital_usd), a SpreadProfile, and ExchangeContext to produce self-consistent parameters.
SpreadProfile Selection
Choose the profile based on asset characteristics. Defined in src/market_maker/config/spread_profile.rs:
Profile
Target Spread
Gamma (risk aversion)
Sizing Fraction
Kappa Prior
Use For
Default
40-50 bps
0.3
20% of max_pos
500-2500
BTC, ETH, SOL, standard perps
Hip3
15-25 bps
0.15
30% of max_pos
1500
HYPE, PURR, HIP-3 DEX tokens
Aggressive
10-20 bps
0.10
40% of max_pos
2000
High-confidence assets (EXPERIMENTAL)
How to choose:
Standard validator perps with Binance pair: Default
HIP-3 builder-deployed tokens: Hip3
Only use Aggressive for assets where you have strong alpha conviction and want tight spreads
cargo run --release --bin market_maker -- \
--asset <ASSET> \
--capital-usd <AMOUNT> \
--spread-profile <default|hip3|aggressive> \
--dex <DEX_NAME> # Only for HIP-3 assets (e.g., "hyna") \
--initial-isolated-margin 1000 # Only for HIP-3 (default $1000) \
--force-isolated # Force isolated margin on validator perps
Step 3: Key Config Decisions
After auto-derive produces base parameters, several critical decisions remain.
Binance Signal Flags
THIS IS THE MOST COMMON MISCONFIGURATION BUG.
In src/market_maker/strategy/signal_integration.rs, two flags control Binance-dependent signals:
use_lead_lag: bool -- Binance-to-Hyperliquid price lead-lag signal
use_cross_venue: bool -- Binance order flow signal
Rules:
If resolve_binance_symbol(asset) returns Some(...): set both to true
If resolve_binance_symbol(asset) returns None: BOTH MUST BE false
What happens if you get this wrong: The system enables staleness detection for signals that can never arrive. The SignalIntegrator applies a permanent 2x staleness multiplier to spreads because the Binance feed will never produce data. This was the root cause of HIP-3 live getting stuck in NoQuote after 1 fill (see MEMORY.md, 2026-02-09).
Fix if misconfigured: Call disable_binance_signals() on the SignalIntegrator (wired in src/market_maker/mod.rs:624). The startup code in market_maker.rs does this automatically when no Binance symbol is found.
Kill Switch Thresholds
Scale with capital allocation. The kill switch monitors drawdown as a percentage of account_value (NOT peak PnL -- that was a bug, fixed in state.rs).
Capital
Daily Drawdown Limit
Reasoning
<$500
10% ($50)
Small account, preserve capital
$500-$5K
5%
Standard risk management
$5K-$50K
3%
Significant capital at risk
>$50K
2%
Conservative, protect large account
The kill switch state persists across restarts via KillSwitchCheckpoint (24h expiry).
HIP-3 Specific Configuration
If the asset is a HIP-3 builder-deployed token, additional considerations apply:
Lower volume = slower learning: Kappa and AS classifiers need fills to learn. HIP-3 tokens may take 48h+ to reach meaningful calibration.
Wider natural spreads = more edge opportunity: HIP-3 tokens often have 15-30 bps spreads, providing more room for market making profit.
API quota may be limited: The hyna DEX has been observed with only 7% API headroom, triggering inventory-forcing mode. Monitor quota_headroom in logs.
Risk model blend: Set risk_model_blend = 1.0 for HIP-3 tokens. This uses the calibrated risk model (log-additive gamma) instead of the data-driven model, preventing gamma explosion in thin markets.
Isolated margin only: HIP-3 assets use isolated margin (is_cross = false). The initial_isolated_margin flag controls the initial allocation (default $1000).
OI cap: HIP-3 tokens may have open interest caps. Check AssetRuntimeConfig.oi_cap_usd (unlimited for validator perps, finite for HIP-3).
Collateral: HIP-3 DEXs may use different stablecoins (USDE, USDH, USDC). This is resolved at startup from spot metadata.
Monopolist pricing: RiskConfig::hip3() enables use_monopolist_pricing for tokens where the MM may be the sole liquidity provider. This adds a markup based on taker elasticity.
RL Configuration
rl_enabled: Should be true for all assets
The RL model (RLEdgeModel) participates as an ensemble member with a minimum 5% floor weight
For new assets, Q-values start cold and only seed from prior states (states with n=0)
Do NOT import Q-table from a different asset -- the state space is asset-specific
Session Position Ramp
Configured in AssetRuntimeConfig via SessionPositionRamp:
Default: 30-minute sqrt ramp, starting at 10% capacity
For HIP-3 tokens: consider extending to 60 minutes due to slower calibration
The ramp prevents full position exposure before models have calibrated
Step 4: Paper Validation
Before deploying live capital, validate the configuration in paper trading mode.
References the /paper-trading workflow for detailed setup instructions.
Setup
# Build paper trader
cargo build --release --bin paper_trader
# Run paper trader (user executes manually)
RUST_LOG=info ./target/release/paper_trader \
--asset <ASSET> \
--capital-usd <AMOUNT> \
--spread-profile <PROFILE> \
--dex <DEX_NAME> # if HIP-3
Duration
Asset Type
Minimum Duration
Recommended
Major (BTC, ETH)
24h
48h
Mid-cap with Binance
24h
48h
HIP-3 token
48h
72h
Low volume (<$5M/day)
72h
1 week
Validation Criteria
All criteria must be met before proceeding to live deployment:
Metric
Minimum
Target
Fail
Edge (bps)
> 0 bps
> 1.5 bps
< 0 bps
Fill rate
> 10 fills/hr
> 30 fills/hr
< 5 fills/hr
Adverse selection rate
< 40%
< 25%
> 50%
Sharpe ratio
> 0
> 1.0
< 0
Kill switch triggers
0
0
Any
Spread vs market
< 2x typical
~1x typical
> 3x typical
Calibration progress
> 50%
> 80%
< 20%
Three Critical Feedback Loops
Verify these are all working within the first 30 minutes of paper trading:
Kappa from own fills: estimator.on_own_fill() called on simulated fills. Check: kappa_confidence increasing from 0.
AS outcome feedback: PendingFillOutcome queue with 5s markout. Check: pre_fill_classifier outcome counts > 0.
The SharedMarginPool in src/market_maker/multi/margin_pool.rs enforces:
Total utilization cap: 80% of account value (leaves buffer for adverse moves)
Per-asset concentration: No single asset > 30% of total capital
Reduce-only mode: Triggered at 80% utilization
Quoting capacity: Computed per-asset respecting both global and per-asset limits
Cross-Asset Risk
When adding a correlated asset (e.g., adding ETH when already trading BTC):
Net directional exposure is higher than individual positions suggest
Kill switch should consider portfolio-level drawdown, not just per-asset
High-vol regimes affect all correlated assets simultaneously -- may need wider spreads across the board
When adding an uncorrelated asset (e.g., adding HYPE when trading BTC):
Diversification benefit -- portfolio risk lower than sum of parts
Independent kill switch thresholds per asset are appropriate
API quota is shared -- more assets = less headroom per asset
Adding to Existing Portfolio
Start the new asset in paper trading while existing assets continue live
Verify the new asset does not degrade existing assets (check for API quota pressure)
Deploy live at 25% capital, monitor portfolio-level metrics
Let the allocator rebalance naturally (5-minute interval)
Monitor concentration -- new asset should not crowd out existing profitable ones
Quick Reference: Asset Onboarding Decision Tree
Is the asset on Hyperliquid?
No -> Cannot onboard
Yes -> Is it a HIP-3 token?
Yes -> Use SpreadProfile::Hip3
Set --dex <name>
Set use_lead_lag=false, use_cross_venue=false
Need collateral in correct token (USDE/USDH/USDC)
No -> Does it have a Binance pair? (check resolve_binance_symbol())
Yes -> Use SpreadProfile::Default
Set use_lead_lag=true, use_cross_venue=true
No -> Use SpreadProfile::Default
Set use_lead_lag=false, use_cross_venue=false
(Limited alpha without lead-lag signal)
Is volume > $1M/day?
No -> Do not onboard (fills too infrequent)
Yes -> Is capital >= minimum viable? (check auto_derive viability)
No -> Increase capital or pick different asset
Yes -> Proceed to paper validation (Step 4)