Solana yield allocation engine. Optimizes net APR after IL drag, utilization stress, borrow carry, and rebalance friction.
Chasing headline APR is how allocators end up long emissions they cannot exit, overexposed to high-utilization lending books, or stuck inside LP routes with invisible IL drag. The job is not to farm the biggest number. The job is to route capital into the cleanest net carry after friction.
Nova maintains a registry of live Solana yield routes, decomposes gross APR into fee APR, emissions APR, lending carry, borrow cost, IL drag, and utilization penalty, then asks a Claude agent to assemble a concentration-aware rebalance plan.
The allocator is intentionally conservative around emissions that cannot be exited cleanly.
SCAN -> DECOMPOSE -> FILTER -> ALLOCATE -> REBALANCE
Live Allocation Desk • How Nova Allocates • At a Glance • Operating Surfaces • How It Works • Example Output • Technical Spec • Risk Controls • Quick Start
Use case: route Solana capital into cleaner net carry instead of headline APRPrimary input: fee APR, emissions APR, lending carry, IL drag, utilization, rebalance frictionPrimary failure mode: allocating into yield that cannot actually be keptBest for: operators who care more about realized carry than advertised yield
Live allocation desk for Nova: route registry, APR decomposition, current portfolio, allocation plan, Claude allocation loop, risk controls, and hard gates for keepable Solana yield.
How Nova allocates: scan route APR, decompose headline yield into carry and drag, filter routes through hard gates, allocate only to keepable net APR, and rebalance only when the edge clears friction.
Live Allocation Desk: shows route decomposition, current portfolio, allocation plan, and enforced risk gatesNet APR Model: exposes the components hidden behind headline yieldRebalance Planner: promotes route changes only when the edge clears frictionHow Nova Allocates: explains why headline APR is filtered before capital is routed
Most yield dashboards do not separate gross reward numbers from the frictions that make those numbers misleading. An allocator can easily end up long emissions it cannot exit, pushed into lending books that are already stressed, or carrying IL that quietly erases the headline spread.
Nova exists to force every route through a net-carry lens before it gets capital.
Nova treats allocation as a filtration problem:
- load live Solana yield routes from the venue registry
- break each route into fee carry, emissions, borrow, IL drag, and utilization stress
- reject routes where the reward mix is too fragile or too hard to exit
- cap concentration so one venue cannot dominate the allocator
- propose a rebalance only when the net edge is strong enough to matter after friction
This is why Nova is more conservative than a simple yield board. It is optimizing for keepable yield, not optical APR.
- gross APR survives after drag and borrow costs are removed
- utilization is not already stretched
- emissions can actually be exited into real depth
- route concentration remains inside the portfolio limits
If those conditions are missing, the route should not absorb capital just because the raw number is large.
NOVA // ALLOCATION PLAN
lead route Kamino SOL lending
net apr 8.30%
exit depth strong
utilization 74%
portfolio weight 40%
allocation note: carry is clean and friction stays below the rebalance threshold
Nova ranks routes by net APR rather than gross APR:
NetAPR = feeAPR + emissionAPR + lendingCarryAPR - borrowAPR - ILDragAPR - utilizationPenalty
Where:
ILDragAPRis estimated fromIL = 2 * sqrt(r) / (1 + r) - 1, scaled by realized volatilityutilizationPenaltyincreases once utilization rises above 70%rebalance frictionis converted to APR-equivalent drag from the configured route size
Allocation rules:
- reject venues below
MIN_NET_APR - reject routes whose projected utilization would exceed
MAX_POST_TRADE_UTILIZATION - reject emissions-heavy routes when
rewardExitDepthUsd < MIN_EXIT_DEPTH_USD - keep capital concentration below
MAX_PROTOCOL_WEIGHT - LP routes must justify IL drag relative to carry
utilization cap: blocks routes where post-trade utilization becomes too stressedexit-depth filter: blocks rewards that cannot be exited cleanlyconcentration cap: prevents one protocol from dominating the allocatorfriction-aware rebalance: rejects route changes that do not clear real costs
Nova should under-rotate rather than overtrade into noisy yield.
venue registry
-> net APR model
-> claude allocation loop
-> portfolio summary and route board
git clone https://github.com/NovaFarming/Nova
cd Nova && bun install
cp .env.example .env
bun run devANTHROPIC_API_KEY=sk-ant-...
TOTAL_CAPITAL_USD=10000
MIN_NET_APR=0.08
MAX_POST_TRADE_UTILIZATION=0.90
MIN_EXIT_DEPTH_USD=25000
MAX_PROTOCOL_WEIGHT=0.45- Planned commit sequence:
docs/commit-sequence.md - Draft engineering issues:
docs/issue-drafts.md
MIT
allocate to carry you can actually keep.

