mounte

The operating systemfor trading agents.

A strategy starts as a sentence — written by you, or by your agent over MCP. Mounte compiles it into a deterministic rule, arms it behind hard gates, runs it against the live market tick by tick, and signs a receipt for every move it makes.

strategy.enplain english
buy ETH for $100 when RSI-14 < 30
compiled · gauntlet passed · armed

01 · english

It starts as a sentence.

No DSL. No YAML. No strategy builder with forty dropdowns. Language — written by you in the app, or by your agent over MCP.

buy ETH for $100 when RSI-14 < 30

four tokens understood — now it has to survive compilation

Figures throughout illustrate the mechanism. They are not a track record.

02 · compile

English in. Determinism out.

The model proposes. The compiler disposes. Your sentence becomes a declarative rule — a fixed JSON schema with nothing creative left in it. No prose reaches the runtime. Ever.

Same English + same model + same prompts
= the same strategy, byte for byte.

mounte.declarative_rulecompiled
{  "schema": "mounte.declarative_rule",  "action": {    "type": "swap",    "venue": "<allowlisted>",    "asset_in": "USDC",    "asset_out": "ETH",    "size_usd": 100,    "max_slippage_bps": 50  },  "condition": {    "op": "lt",    "left": { "indicator": "rsi_14" },    "right": { "const": 30 }  }}
fingerprint  sha256 · b3a9f2…71e4c8provenance bound: nl_text ⊕ model_id ⊕ prompt_sha256

03 · the gauntlet

Four gates. No exceptions.

Every compiled rule runs the gauntlet before it can touch capital. A rule is either fully valid or loudly dead — there is no half-deployed.

gate iparsecanonical-safe · depth-bounded · int-only sizes
gate iiindicatorsregistered ids only — nothing hallucinated
gate iiiboundssize ≤ cap · slippage bounded · venue allowlist
gate ivfail loudGauntletError or pass — never coerced
rejected · fail loud
GauntletError: unknown indicator id 'momentum_vibes'
  gate ii of iv (indicators) — id not in IndicatorRegistry
  rule rejected · nothing deployed · no partial state

hallucinated indicators die here — capital never meets them

04 · arm

Armed means reconciled.

Before the first tick, the predeploy gate checks the world against the books. Wallet inventory is read from the chain and reconciled with persisted state.

If world and state disagree in an unsafe direction, the runtime refuses to start. Not a warning. A refusal.

draftparsedvalidatedarmed
  • wallet reconciliationon-chain inventory vs persisted state — must agree
  • capital boundsper-run budget ceiling · max cumulative loss set
  • venue lockswap intents route to the allowlisted venue — nowhere else

05 · run

Then it lives.

Every few seconds: fetch a fresh anchor block, recompute indicators, evaluate the rule. decide() is a pure function of market state — no memory, no mood. While the condition is false, it holds. The moment it's true, an intent fires.

decision log · strategy b3a9…71e4
t+04s anchor seq 041 · rsi_14 32.9 · lt → false · HOLDt+08s anchor seq 042 · rsi_14 31.9 · lt → false · HOLDt+12s anchor seq 043 · rsi_14 30.5 · lt → false · HOLDt+16s anchor seq 044 · rsi_14 29.4 · lt → true · FIREt+20s anchor stale · STALENESS HALT · no trade · position held · flattener armedt+52s feed fresh · 3-probe hysteresis · RESUME

The market doesn't stop at 3am. Neither does the thing protecting you.

tick 000rsi_14 34.3flatheld
30 — condition boundary
anchorindicatorsdecide()act
SwapIntent { venue: allowlisted, USDC → ETH, size: $100, slippage bounded }
atomic state persistencestartup reconciliationper-run budgetstaleness haltkill-switchhalt policy

the intent is on its way to the chain — and so is its receipt

06 · attest

Every move leaves a receipt.

Executions emit signed cassettes — replayable records of what the strategy saw, decided, and did. Realized P&L is re-derived from the committed swap logs. Performance isn't claimed by a dashboard. It's derived from evidence.

swap confirmed · seq 044 · allowlisted dex

$ mounte verify b3a9…71e4
REPLAY OK — every receipt replays against its signed cassette. Independent verification is what we're building next.

mounte · cassette№ 000412
strategy
b3a9…71e4
venue
allowlisted dex
action
swap USDC → ETH
size
$100.00
seq
044
condition
rsi_14 29.4 < 30 → fired
series
signed · ed25519mounte_runtime_signaturepubkey 9d41…c7e2 · seq chained
tier 2 · attested

07 · evolve

The loop closes.

Every realized trade folds back into performance state the strategy itself can read. Win rate and drawdown become operands — legal in entry and exit conditions alike. A strategy that reads its own P&L.

PerformanceState · derived from committed logs
n_trades
14
realized_pnl
+$4.20
win_rate_bps
5,714 (57.1%)
max_drawdown_bps
212 (2.1%)

Figures throughout illustrate the mechanism. They are not a track record.

droprequest_strategy_drop()

stop it — runtime honors at the next boundary, never mid-swap

tunerequest_strategy_tune()

re-compile it from new English, provenance preserved

evolverequest_strategy_evolve()

fork it forward — a new strategy with inherited lineage

it started as a sentence — now it writes its own

exit when max_drawdown > 4% or win_rate < 45%

08 · your agent

Bring the brain you already built.

Everything this page just walked through is what your agent does over MCP — author, deploy, monitor, evolve. LangGraph, CrewAI, raw Python: Mounte doesn't care what the brain runs on.

agent.py · mounte mcpany framework
# the agent watches the attested feed — and acts
perf = mounte.get_strategy_attested_performance("b3a9…71e4")

if perf.win_rate_bps < 4500:
    mounte.request_strategy_tune(
        "b3a9…71e4",
        nl_text="buy ETH for $100 when RSI-14 < 25",
        reason="tighten entry under chop",
    )

strategy control surface

  • get_strategy_attested_performance()signed feed · integer micro-USD
  • list_strategy_performance_feeds()every strategy that publishes
  • request_strategy_drop()stop at next boundary
  • request_strategy_tune()re-compile from new English
  • request_strategy_evolve()fork forward, lineage kept

+ 23 portfolio & token-research tools — oracle prices, holder distribution, risk flags, liquidity.

Your agent is the user. The UX is for you.

09 · questions

Honest answers, before you ask.

Mounte is an operating system for trading strategies that survive unattended. You — or your agent over MCP — describe a strategy in plain English. Mounte compiles it into a fixed, bounded program (no AI improvising with your money), arms it behind hard gates with caps you set, runs it tick by tick, and signs a receipt for every move. Funds stay in your own wallet; Mounte holds a trade-only key you can revoke anytime. Built for people and agents who want a strategy that runs for weeks — and fails safe, not silent.

10 · request access

Run your first sentence.

You just watched one sentence compile, survive the gauntlet, trade, and sign its receipt. The founding cohort writes the next ones.

  • Progressive early access — each phase ships to the cohort first
  • A direct line to the founders while the MCP surface is still taking shape
  • Your strategies on attested rails from day one

Which describes you best?

We tailor onboarding to how you'll use Mounte.

— · the loop stays open

Now write yours.

You just watched one sentence become a bounded program that runs itself and signs for what it does. Yours is one paragraph of English away.

No commitment. Invitation-only.