Accumulation desk — repurposing the mob for HARVEST
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):
- The swing sleeve can never draw USD reserved for unfired ladder rungs.
distributeis 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".- 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.
- Spot only, long-USD or long-coin only. No leverage, no shorts, no perps as a venue (perp data stays — see §3).
- The desk supplies intent and conviction; the executor derives clip sizes and works the fills through the same Metis clip engine as the ladder.
- 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.
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_policy | action: accumulate|distribute|hold|set_bands|cancel |
dir: long|short | (removed) |
entry_price resting pullback limit | level — same mechanism, now the core primitive: a named buy (or sell) level resting for ~1 cycle |
stop_floor/ceiling, tp_floor/ceiling corridors | accumulation_band / distribution_band — strategic zones the executor works inside |
conviction 0–100 → size + stop | conviction 0–100 → clip size only (no stops in spot accumulation) |
exit_policy per position | scale_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.
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:
| Soul | Today (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_officer | Final gate; stop corridors, 3× round-trip hurdle, conviction→size | Stays 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_analyst | favored_direction: long|short|both|neither | phase: accumulate_aggressively|accumulate|hold|distribute. Same five axes; crowding now reads as fuel for capitulation/rebound calls. |
technical_analyst | per-coin long/short bias, 26 coins | two 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_advisor | funding carry vs edge | Metis quote impact, clip sizing, venue liquidity (cbBTC pools are thin — this seat matters more, not less). |
thesis_challenger, data_quality_guard | cross-family refutation; PASS/DEGRADED/FAIL gate | unchanged 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:
| Metric | Meaning |
|---|---|
| Cost basis vs target | sleeve VWAP per asset, tracked against the bottom-zone target |
| Coins-per-dollar vs benchmark | the 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 growth | realized dollars gained from distribute→re-accumulate round trips |
| Round-trip audit | sold 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 discipline | ladder 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.
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 stance | Automatic effect | Human-gated effect |
|---|---|---|
on_track | none — ladder waits | — |
watch | swing sleeve may run at full allowed activity | — |
at_risk (weeks, per config) | alert + weekly digest prominence | system 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 above | strong 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
- Contract v3 + deterministic sleeve guards (code first, souls second).
- Soul + skill rewrites (Tier 1 files from the audit: risk_officer, desk_lead, derivatives_analyst, the gitops flow messages).
- KPI scorer + benchmark streams (ladder + naive DCA in paper realm).
- Dream-mob horizon extension + coin-denominated scoring.
- Thesis monitor: forecast/thesis contract blocks, episode resolvers for long horizons, Brier calibration loop, thesis time series + digest.
- 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).
Related
- HARVEST — as built — the running desk, contract and executor
- HARVEST (Solana accumulation) — the ladder this desk runs beside
- Monitoring & alerting — sleeve state joins the HARVEST panel