Skip to main content

Accumulation desk — repurposing the mob for HARVEST

Design document — the desk is live in a different shape

This spec converts the perp mobs into an intelligent accumulator: buy dips, sell rebounds above cost, and arrive at the cycle-bottom targets with more dollars — and therefore more coins — than a passive ladder would. The desk that actually runs (accum-desk: five parallel analysts → thesis officer every 30 min, dream judge every 2 h, decision officer every 6 h) shipped with different souls, a different decision contract, a fixed cadence, and auto-execution. The running contract and cadence are on HARVEST — as built (§3–§5); sections below carry an As built note where they diverge.

1. The two-sleeve principle​

The intelligence never replaces the ladder — it runs beside it.

TREASURY
├── CORE SLEEVE (majority) the HARVEST ladder — rule-based, fires at
│ trigger prices no matter what the desk thinks.
│ Guarantees the floor outcome.
└── SWING SLEEVE (bounded) desk-managed: accumulate dips early, distribute
into rebounds above cost basis, re-accumulate
lower. Grows the USD stack on the way down.

Hard rules enforced deterministically outside the mob (same doctrine as today — agents decide, code disposes):

  1. The swing sleeve can never draw USD reserved for unfired ladder rungs.
  2. distribute is only valid above the sleeve's own cost basis (VWAP) plus a fee/slippage edge. The desk sells rebounds, never realizes losses to "trade better later".
  3. When the deep ladder rungs arm, the sleeve is force-converted to full coin holdings and frozen — the bottom is the thing we waited for; swinging stops.
  4. Spot only, long-USD or long-coin only. No leverage, no shorts, no perps as a venue (perp data stays — see §3).
  5. The desk supplies intent and conviction; the executor derives clip sizes and works the fills through the same Metis clip engine as the ladder.
  6. Sleeve capital and inventory live in the treasury allocator's HOT/WARM tiers only (HARVEST §6) — USD earns on lending and SOL stays staked while waiting, but nothing the sleeve may need to sell into a rebound ever sits in an LP.
As built — the allocation is three sleeves, not two (2026-09-09)

The running desk splits NAV three ways: 40 % LP positions / 40 % Kamino USDC lending / 20 % swing sleeve. Because the targets are shares of NAV, a deposit re-prices every one of them.

Rule 6's "nothing the sleeve may need to sell into a rebound ever sits in an LP" no longer holds — an LP is one of the desk's swing instruments — and since the owner policy of 2026-09-09 an LP's USDC leg is charged to the LP's own 40 % share, never to the 20 % swing sleeve, which budgets resting swing orders and swing inventory alone. The owner: "i want to decouple lp usdc legs so 40/40 for kamino and lps and a 20% for the swings".

Closing the LP gap is a standing per-cycle instruction in a stated funding order: Kamino's excess first whenever lending sits above its own 40 % share, then unstaked JitoSOL, then the shallowest ladder rungs; below-spot ranges are preferred because they hold USDC and convert to SOL only as price falls.

There is also no standing stables reserve — "i don t need reserve because for me kamino is the reserve and it s easy to withdraw or to cancel orders to buy the ladder" — so a lending_withdraw or a cancelled resting bid is the funding path, and the code-owned float floor is $750.

Deployed 2026-09-09 (nexus-platform 944a30a + 9835e03, nexus-gitops f9d8965); the desk host had not been restarted at the time of writing, so the doctrine takes effect at the next session_rollover. Detail: HARVEST — as built §4 and §6.

2. Decision contract v3​

The live contract (a fenced JSON block emitted by the risk officer, parsed by the meerkat host) keeps its shape but swaps its vocabulary. Direction dies; phase and bands replace it.

Perp contract (today)Accumulation contract (target)
action: open|close|cancel|raise_stop|set_tp|set_policyaction: accumulate|distribute|hold|set_bands|cancel
dir: long|short(removed)
entry_price resting pullback limitlevel — same mechanism, now the core primitive: a named buy (or sell) level resting for ~1 cycle
stop_floor/ceiling, tp_floor/ceiling corridorsaccumulation_band / distribution_band — strategic zones the executor works inside
conviction 0–100 → size + stopconviction 0–100 → clip size only (no stops in spot accumulation)
exit_policy per positionscale_policy per tranche (rebound scale-out fractions, re-entry discipline)
(no forecasting)forecasts + thesis blocks every cycle (§7) — horizon predictions and target probability; designed to be episode-resolved and Brier-scored (no resolver or scorer exists as of 2026-09-05 — see §7)

Empty decisions array remains a valid VETO / hold-everything verdict — and in an accumulation desk, hold is the most common correct decision.

As built

Contract v3 as tabled was never built. The shipped contract is the decision officer's JSON — posture, ladder_proposal, swing_plan, order_plan (place/cancel/amend/keep with paired exits), treasury_plan (lending, float, staking), reserves (the float and gas the officer sets), lp_plan (Orca/Meteora open/close/collect/remove), swing_state, treasury_actions, invalidation — plus the thesis officer's forecasts and thesis blocks. Reproduced in full in as built §4.

3. Soul conversions​

Per the audit, the live 5-step flow (gate → analyst → strategist → challenge → final) and cross-model adversarial pattern are kept; mandates are rewritten:

SoulToday (perp)Target (accumulation)
desk_lead"Both directions are your mandate… shorts collect funding""Coins-at-target is your mandate." Accumulate weakness, distribute strength above cost, and beat the passive-ladder benchmark or shrink. Patience is a position; the fallback rule exists so you never refuse to buy higher — your job is to buy lower.
risk_officerFinal gate; stop corridors, 3× round-trip hurdle, conviction→sizeStays final gate (APPROVE/MODIFY/VETO). New hurdle: a distribute needs an expected retracement ≥ 3× spot round-trip cost, else hold. Enforces cost-basis discipline, band sanity vs the ladder, and dry-powder budget. Emits contract v3.
regime_analystfavored_direction: long|short|both|neitherphase: accumulate_aggressively|accumulate|hold|distribute. Same five axes; crowding now reads as fuel for capitulation/rebound calls.
technical_analystper-coin long/short bias, 26 coinstwo assets, deep: dip depth vs structure, rebound potential, distance-to-target, false-bottom signatures.
derivatives_analyst"where does leverage sit and how could it unwind"kept, inverted: a long-liquidation cascade is a spot bid opportunity; a crowded-long unwind is the rebound to distribute into. Funding/OI/basis become sentiment + capitulation detectors, not carry math.
execution_advisorfunding carry vs edgeMetis quote impact, clip sizing, venue liquidity (cbBTC pools are thin — this seat matters more, not less).
thesis_challenger, data_quality_guardcross-family refutation; PASS/DEGRADED/FAIL gateunchanged in role; the challenger's new favorite question is "is this a real bottom or are you anchoring?"

The dead v1 spec under nexus-mobs/ (10-step DAG, unused JSON schemas with PROPOSE_LONG/PROPOSE_SHORT) is reconciled or deleted as part of this work so there is one source of truth.

4. KPI layer — the deepest change​

Every current metric (win rate, R-multiple, MFE/MAE, long-vs-short calibration) is per-trade, stop-referenced, and bidirectional. None of it can express accumulation success. The scorer is rebuilt around:

MetricMeaning
Cost basis vs targetsleeve VWAP per asset, tracked against the bottom-zone target
Coins-per-dollar vs benchmarkthe headline: coins acquired per USD deployed, versus (a) the passive ladder and (b) a naive fixed-interval DCA, both run continuously in the paper realm via the existing desk.explore counterfactual stream
USD-stack growthrealized dollars gained from distribute→re-accumulate round trips
Round-trip auditsold a rebound → did price come back lower (good, quantified in extra coins) or run away above re-entry (bad, quantified in coins lost)? Replaces MFE/MAE post-mortems.
Dry-powder disciplineladder reserves untouched; deployment pace vs plan

The desk must beat its benchmarks or shrink: calibration feedback tunes the sleeve's allowed activity level the way the conviction gate is auto-tuned today.

5. Dream mode conversion​

Mechanics stay (curate → learn → report; Rust promotion gate of confidence ≥ threshold + ≥2 distinct resolved episodes; human approval for soul changes; closed-loop demotion). What changes:

  • Episodes become swing round-trips and missed-opportunity counterfactuals (a dip the desk didn't buy, a rebound it didn't sell — measurable from the same frozen snapshots).
  • Outcome horizons extend: 5m–24h is scalping tempo; accumulation lessons need 3d and 7d resolution horizons added to the resolver set.
  • Lesson scoring is coin-denominated: knowledge whose attributed decisions lose coins versus the passive benchmark gets retired, exactly as PnL-negative knowledge is retired today.
  • The lesson space that matters: rebound signatures in downtrends, false-bottom patterns, capitulation markers that precede tradable bounces, regime conditions under which distributing is a mistake.

6. Cadence & autonomy​

The 15-minute perp cycle is the wrong tempo for accumulation, but a slow cron alone would miss capitulation wicks. Target: a two-speed cycle:

  • Hourly light cycle — cheaper models only: market read, short-horizon (≤24h) forecasts, band checks, wake-trigger evaluation. No orchestrator turn unless something warrants it.
  • Daily deep cycle — the full desk including the orchestrator: long horizons (1w / 1m / 3m), the thesis score (§7), and any swing-plan revisions.
  • Event-driven wake — deterministic threshold rules (volatility spike, funding flush / liquidation cascade, price entering a standing band, rebound reaching distribution territory) escalate a light cycle into a full one. The desk is expensive and should think hard only when the market gives it something to think about.

The ladder itself never waits on the desk — triggers fire from the oracle plane regardless.

Autonomy over human-away periods follows the spec's approval-gate defaults: below-threshold actions proceed; above-threshold actions block on Telegram; fallback-DCA vetoes are default-on (silence = proceed). Everything the desk does while unattended is reconstructable from decision traces, episodes, and the monitoring alert history.

As built

Cadence is fixed: analysis every 30 min, dream every 2 h, decision every 6 h, execution sweep every 30 min — one model set, no light/deep tiering, no event-driven wake. Autonomy: Solana buys, lending, staking and LP execute unattended within caps; over-cap actions are rejected, not escalated; sells, CEX actions, fallback activation and breakout tranches wait for /approve. Fallback DCA is approve-in (silence = nothing happens), the opposite of the veto model above. Under a stale-feed blackout the decision officer freezes placements and amendments (rule adopted 2026-09-03/04); in code the blackout gate (audit H12, deployed 2026-09-05) blocks the decision pass only — standing hygiene runs before it (audit 2026-09-05 F3, fix in progress). The souls that run are structure_analyst, flow_analyst, venue_analyst, narrative_analyst, challenger (Codex), thesis_officer, dream_judge, decision_officer; data quality is computed mechanically and injected, not an agent.

7. Thesis monitor — horizon forecasts & target probability​

The desk's opinion about whether the bottom thesis will happen at all is as valuable as its trades — but only if it is tracked, resolved, and calibrated. Every cycle the contract carries two additional blocks:

"forecasts": [
{ "asset": "SOL", "horizon": "1d|1w|1m|3m",
"direction": "down|flat|up",
"expected_range": [lo, hi], "confidence": 0-100 }
],
"thesis": {
"target_prob": { "SOL": 0-100, "BTC": 0-100 },
"delta_vs_prev": ..., "drivers": ["..."],
"stance": "on_track | watch | at_risk | unlikely"
}
  • target_prob = the desk's probability that the asset reaches its bottom-zone target before the thesis deadline (owner inputs, kept in the internal spec).
  • Every forecast is an episode. Design: it persists, resolves at its horizon (long horizons resolve via staged direction checks along the way), and is Brier-scored; the rolling calibration record is injected back into the desk as a prior — the same mechanism as today's trade-calibration memory — so over months the desk earns (or loses) the right to be believed about long horizons. As built (2026-09-05): forecasts ship in every brief, but no resolver and no scorer exist for the accumulation desk and no calibration record is fed back — the dream judge scores qualitatively (audit M3 open). The prompts no longer tell the desk its forecasts are "Brier-scored" (nexus-gitops 97f01fc, 2026-09-05); they say forecasts are recorded and will be scored once a resolver exists.
  • The thesis score is a time series: sparkline on the HARVEST monitoring panel, trend in the weekly digest, alert on sustained decay.

What the score is allowed to touch (deterministic policy, not agent discretion):

Sustained thesis stanceAutomatic effectHuman-gated effect
on_tracknone — ladder waits—
watchswing sleeve may run at full allowed activity—
at_risk (weeks, per config)alert + weekly digest prominencesystem proposes a ladder adjustment via the Telegram approval gate — raising rungs is built (below); shifting deep-rung budget toward DCA is design only
unlikely (sustained)as abovestrong proposal; still human-approved

The scores never move the ladder by themselves. Since 2026-09-09 that is enforced by code rather than by convention, in a shape that is flatter than the table above: the raise-the-rungs proposal is now a three-cycle vote, not a stance weighting.

As built. Analysis and dream cycles vote through their ladder_alert block; the decision officer votes through ladder_proposal.changes[] ({rung, trigger, budget_usdc?}) and is the only source of concrete rung numbers. The worker's accum_ladder job counts the votes in a rolling window — by default 24 h, at least 3 analysis cycles, one dream and one decision (ACCUM_LADDER_CONSENSUS_*) — and only when every gate passes and numbers exist for that asset does it raise a single ladder_raise Telegram approval, deduped on the rung+price set. The job never moves a rung. An owner on the TELEGRAM_ALLOWED_USERS allowlist runs it with /approve <id>, which calls the exec's POST /v1/ladder/reprice; the exec re-checks its own bounds — each new trigger at least 5% below the live oracle index, no single call raising a trigger by more than 25%, the total ladder budget free to shrink but never to grow, rungs still strictly descending, and Armed / Firing / fired / cancelled rungs refused — and applies the whole set or none of it. The same rung view is available on demand with /ladder. Nothing in this path shifts deep-rung budget toward DCA. The refusal guards were exercised against the live SOL ladder on 2026-09-09 and each refused with the ladder unchanged, but no rung has been moved yet — no consensus has formed, so the accepting path is still unexercised (HARVEST — as built).

The existing mechanical fallback rule (price 25% above the next rung with a higher-low structure, weeks-confirmed) remains the hard backstop underneath — if the humans and the desk are both wrong, the DCA still fires.

8. Rollout​

  1. Contract v3 + deterministic sleeve guards (code first, souls second).
  2. Soul + skill rewrites (Tier 1 files from the audit: risk_officer, desk_lead, derivatives_analyst, the gitops flow messages).
  3. KPI scorer + benchmark streams (ladder + naive DCA in paper realm).
  4. Dream-mob horizon extension + coin-denominated scoring.
  5. Thesis monitor: forecast/thesis contract blocks, episode resolvers for long horizons, Brier calibration loop, thesis time series + digest.
  6. Paper-only swing sleeve through the HARVEST shadow period; live activation follows the existing promotion policy (human-approved).

As built: items 1–2 shipped in a different shape (see above); the sleeve engine (trade ledger, fill-watcher, automatic paired exits, realized PnL — a USDC ledger figure on nominal order economics, not a total-portfolio USDT return; see Measuring success) and operator cost-basis attribution (/basis) exist and are not in this list; items 3–5 (KPI scorer, benchmark streams, coin-denominated dream scoring, forecast resolvers and Brier calibration) are not built — the dream judge scores briefs qualitatively and additionally flags capital left sleeping; item 6 did not happen (the sleeve trades live).