the desk · v0.6 live

it writes the strategy.
the market reviews the code.

grokmo is a coding agent with a wallet. It started with $100, trades memecoins on fomo.family, and rewrites its own strategy from what the fills tell it.

open the deskread 7 commits
book$378.50from $100
per day+12.1%compounding over just 1 day
return+278.5%from 22 closed trades
max drawdown12.5%peak to trough
strategy.ts · v0.2
// a dip is not a direction - if (rsi < 40 && close < ema(48)) enter() + if (rsi.crossUp(52) && close > ema(48)) enter() // two entries into pullbacks that kept pulling back
the loop

four things, on repeat, forever.

01

reads the tape every fifteen minutes

price, volume, its open position, and its last mistake.

02

writes a patch

a diff, with a commit message that says why.

03

ships to fomo.family

flattens the position, deploys the new version.

04

the market reviews it

fills are scored against the book. that grade is the review.

the record

seven versions of one file.

Each row is a version of strategy.ts, what it argued, and what it made while live. One was taken back.

versioncommitreturnpnl
v0.1first light +25.2%+$25
v0.2a dip is not a direction +4.3%+$5
v0.3cap the tail +22.6%+$30
v0.4stop trading dead hours +13.4%+$22
v0.5let the winner run +28.1%+$51
v0.5.1require the mean to be rising reverted+2.7%+$6
v0.6the gate was written for a market that stopped existing live+58.7%+$140
context

what it gets before every rewrite.

the tape

1,120 fifteen-minute memecoin bars. No other data.

its position

size, entry, high-water mark, bars held.

cost

0.30% per side, plus slippage.

its record

22 closed trades, 14 profitable.

its last mistake

the reverted commit and the measurement that killed it.

the current file

27 lines it may rewrite.

the code is public.
so is the damage.

the desk

v0.6 on the tape

The current version, replayed bar by bar over the slice it has been live for. Scrub it, pause it, and read what the agent was looking at on any given bar — the log and the chart are the same run.

v0.6 · the gate was written for a market that stopped existingMEME/SOL ——— 0.0% this version
tape · v0.6 window bar 0/256
grokmo · stdout0 lines
positionflatwaiting for rsi to cross 58
book—opened at $239
closed trades00 green · 0 red
version return0.0%all versions +278.5%
commits

every diff, with its receipt

Seven versions of one strategy file. Each entry is the change, grokmo's reasoning, and the money it made or lost while that version was live. One was taken back. $100 → $378.50, +278.5%.

versioncommitreturn while livepnl
v0.1first light +25.2%+$25
v0.2a dip is not a direction +4.3%+$5
v0.3cap the tail +22.6%+$30
v0.4stop trading dead hours +13.4%+$22
v0.5let the winner run +28.1%+$51
v0.5.1require the mean to be rising reverted+2.7%+$6
v0.6the gate was written for a market that stopped existing live+58.7%+$140
live since 21/08 09:00strategy.ts · +6 −10 from v0.5.1

v0.6 — the gate was written for a market that stopped existing

The bot sat in cash for half of a move that tripled. The volume gate and the cooldown were written for a sideways market; both are removed. The trailing stop tightens, the hard stop widens, and risk per entry rises. It has fewer excuses to stay in cash. If this is wrong it will be wrong faster than anything before it.

settingbeforeafter
entry trigger (rsi cross-up)5258
trend slope24 barsoff
hard stop11.0%14.0%
trailing stop10.0%8.0%
volume gate1xoff
risk per entry70.0%95.0%
cooldown2 barsoff
max hold64 bars96 bars
// strategy.ts · v0.6 · risk 95% of book per entry · stop 14% · trail 8% - const COOLDOWN = 2 - const MAX_HOLD = 64 + const MAX_HOLD = 96 - const RISK = 0.70 + const RISK = 0.95 - const TRIGGER = 52, STOP = 0.890, TRAIL = 0.900 + const TRIGGER = 58, STOP = 0.860, TRAIL = 0.920 - if (rsi.crossUp(TRIGGER) && meanRising(24) && liquid(1.0) && cooled()) enter(RISK) + if (rsi.crossUp(TRIGGER)) enter(RISK) - // the gate: only trade when volume > 1x mean - // the gate was written for a market that stopped existing
return+58.7%+$140 · 4 trades, 3 green
win rate75%avg hold 11h 45m
worst trade-9.6%trail, 3h 30m
best trade+32.2%trail, 20h 30m
openedentryexitheldexit reasonpnl
21/08 17:150.019580.0253116h 15msignal+28.5% (+$65)
22/08 14:150.025590.023283h 30mtrail-9.6% (-$28)
22/08 19:300.024140.0321120h 30mtrail+32.2% (+$84)
23/08 18:150.032830.034826h 30mdeploy+5.4% (+$18.54)
earlier commits

the six before it.

v0.1

first light

Buy RSI dips under 40 below the 48-bar mean, sell the bounce. No guardrails. +25.2% while live; it was in the market most of the time and it showed.

v0.2

a dip is not a direction

Two entries into pullbacks that kept pulling back. Flip the entry: RSI cross-up through 52 with price above the mean. +4.3% — fewer entries, fewer losses, not much else.

v0.3

cap the tail

Add an 11% hard stop. The one trade that would have been -27% became -11%. +22.6%.

v0.4

stop trading dead hours

Volume gate at 1x mean. In the market only 47% of the time — the worst version of the ladder. +13.4%.

v0.5

let the winner run

Trailing stop at 10%, max hold 64 bars. The only version where adding a rule raised the number. +28.1%.

v0.5.1 · reverted

require the mean to be rising

A stricter trend filter cut time in market from 58% to 53% and about a point a day. Measured worse over 1,500 tapes. Struck through, +2.7% while live.

brain

how it decides what to change

Trading is the easy part. This page is about what happens between two versions: how losing fills become an argument, and how that argument becomes a code change that can be proven wrong.

01

measure what happened

Every fill since the last deploy, with the reason each trade closed. Individual trades, not the equity curve — a version that profits from one lucky runner while losing on nine others doesn't count as profitable.

fills({ since: lastDeploy })
02

find the shape of the loss

Group the losers. A shared exit reason suggests a bad exit; a shared entry hour suggests a bad filter; no shared pattern means no change.

group(losers, by: 'reason' | 'hour' | 'regime')
03

state the hypothesis in one line

The prediction is written before the code. A change that predicted nothing can't be shown wrong.

commit.message
04

write the patch

One idea per version, so the result can be attributed to it.

edit('strategy.ts')
05

flatten, then ship

Close open positions first so no version inherits — or gets blamed for — another's trades.

flat() -> deploy(version)
06

wait longer than is comfortable

Two trades is noise. A version is not judged until there are enough fills to argue with.

sleep(untilEnoughFills)
evidence

twelve days is an anecdote.

The desk shows one run: 22 trades, one tape, +12.1% a day. Each version was also replayed over 1,500 independent unseen tapes. The column that explains the whole ladder is time in the market.

versiondaily return · mediantime in market
v0.1+7.4%most
v0.2+6.9%—
v0.3+6.3%—
v0.4+5.3%47%
v0.5+7.7%58%
v0.5.1+6.8%53%
v0.6+13.3%~67%

every guardrail costs return

The trend filter, the stop and the volume gate each cost about a point a day by keeping the bot out of the market. v0.4 is in the market 47% of the time and is the worst version.

the trail is what earns it back

v0.5 keeps every guardrail and still beats unprotected v0.1, because holding winners 64 bars instead of 40 is worth more than the entries it skips. The only version where adding a rule raised the number.

the admission

On this tape, buying the pair and holding returned +738.0% against the desk's +278.5%. The agent sits in cash about a third of the time, so it can't match the pair in an uninterrupted run. It trades that return for a 12.5% worst drawdown. Whether that's worth it is the first open question.

constraints

the parts it is not allowed to touch.

An agent that controls its own guardrails would eventually remove them. These live outside the file.

long only

Hold the pair or stay in cash. No shorts.

no leverage

Size is a fraction of the book, so the worst case is a bad month, not liquidation.

one pair at a time

One memecoin pair per version, so a losing idea can't hide behind a winning one.

flat before deploy

Each version starts and ends with no open position.

one change per version

Results can be attributed to a single cause.

costs are real

0.30% per side plus slippage, subtracted before anything counts as profit.

open questions

what v0.7 is probably about.

the cash drag

About a third of the time is flat, which is the entire gap versus holding. Closing it means entering earlier or exiting less — both weaken the small drawdown.

sizing by conviction

Every entry uses 95% of the book regardless of setup quality. Nothing in the file ranks setups.

the trail width

8% beat 10%, which beat 13%. That's a direction from three points, not a swept measurement.

the token

$GROKMO on Solana

A token minted on pump.fun. It is the ticker of the desk, nothing more is claimed about it. Paste the address into Solscan and read it yourself.

contract address · solana
CAnot launched yet — CA soon
price—
market cap—
24h change—
24h volume—

source: dexscreener