Rokha

White paper · v0.4

How Rokha scores paid promotion.

Rokha pays people to promote agent capabilities on X, and scores that promotion with one published formula that anyone can recompute. This paper states the formula, its provenance, what it refuses to count, and how a participant checks our arithmetic against their own posts.

As of 2026-10-03 Status draft — sections 1–7 Live figures read from production on 2026-09-23, marked where used

What changed on 2026-10-02. The Wall is retired. Rokha is the AI studio and launchpad: build in the Studio, launch on the Rokha Network, and the Network carries it and pays the people who do. From the payout of 2026-10-02 (22:00 UTC) onward: tag boosts end, so every post scores the same multiplier (section 2.5); the weekly pot is 50% of Network plan revenue with a $100/week house floor for the first eight weeks (section 4); and Network rank is earned, never bought (section 7). Rules that applied before that payout are marked as history.

Tailwind v3 (2026-10-02). Every post made from 2026-10-02 22:00 UTC is scored exactly the way X's open-source ranker scores — a straight weighted sum of the engagements public metrics show, with X's own weights, no damping and no per-post cap (section 2). From the 2026-10-09 payout the pot is split across the top 20 places by seeds1.5 (section 4). Earlier posts and rounds keep the rules below them, marked as history.

The day decay (2026-10-03). One deliberate departure from X: per author per UTC day, the best 3 posts earn their full seeds, the 4th to 6th earn a capped, halving share, and from the 7th on a post earns nothing (section 2.2.1). X has no per-author day cap; without one the pot paid for volume.

1. The thesis

Paid promotion is priced on numbers the buyer cannot verify and the seller can buy. We price it on one published formula, computed from a public API, and we show every participant the arithmetic behind their own number.

Three failures make attention markets dishonest, and each has a specific answer here.

Reach is purchasable; interaction is not. Impressions can be bought for cents. A reply cannot: someone has to read the post and write something. So engagement carries the score and impressions carry none — exactly as in X's own ranker, which has no weight for an impression.

Use the platform's own rules. X published the ranker that decides what its users see. We score with the same weights rather than inventing our own: a post that X's ranker would push further earns more here, in the same proportion. A post that nobody engaged with still earns nothing at all, regardless of how many people saw it.

“Trust us” is not a receipt. A promoter told they earned less than they expected has no way to check. So every score opens its own working: post by post, weight by weight, multiplier by multiplier, from the same code path that computes the payout. If our explanation and our payment ever disagree, that is a bug we own — and section 5 is how we test exactly that across every participant.

One principle runs through every term below: the score is built only from things that can be counted, and counted again. A reply, a repost, a like, a view — anyone can re-fetch them from X and get the same number. Nothing in the score is an opinion: no model reads your post and grades it, no heuristic sizes up your audience. Where we once used judgement calls, we removed them (section 6 says what and why).

What we claim is narrow, and we would rather state it precisely than broadly: the score is reproducible, its inputs are public, and its arithmetic is inspectable by the person it was levelled at. We do not claim it measures the value of a post, or that it cannot be gamed — only that gaming it costs more than it pays, and that every number in it can be checked.

2. The Tailwind

Every constant below is a single named value in one module, read identically by the ranking query and by the explanation shown to the participant. Sections 2.1 and 2.2 are the live rules (posts from 2026-10-02 22:00 UTC); 2.3–2.7 describe the model they replaced, kept for recomputing past rounds.

2.1 Qualifying

A post enters scoring if it mentions an official Rokha account or a live member of the Rokha Network, or is authored by an official account. Nothing else is collected. (Until the 2026-09-25 22:00 UTC payout a post could also qualify by a house cashtag; that rule is retired for every post made after that payout. $ROKHA plays no part in scoring: it is Rokha's utility coin, issued by Rokha AI LLC, with one use, fuel.) Attribution keys on the author's stable numeric X user id, never on the handle — an account that renames keeps everything it earned.

2.2 Scoring the X way (live from 2026-10-02 22:00 UTC)

X's current For You ranker is open source (xai-org/x-algorithm, commit 76843a5, 2026-10-02). It scores a post as a straight weighted sum of engagement terms (compute_weighted_score): no logarithm, no cap, and no per-author limit (author diversity exists in the code and is switched off in that release). We use its weights on the engagements that public metrics show:

EngagementX weightHere
Reply5.05.0
Quote5.05.0
Repost1.01.0
Like0.50.5
Bookmark, impressionno weight in X's ranker0
Clicks, dwell, shares, follows, video, negative feedbackweighted by Xnot public — left out
seeds(p) = 10 · ( 0.5·likes + 1·reposts + 5·replies + 5·quotes ) 0 if the post fails Rule Zero or is a proven copy

Rule Zero still reads the engagement units of section 2.2a, not these weights: a post needs 2.0 of them, views excluded — one reply, one bookmark, two reposts or four likes clear it. A bookmark clears Rule Zero but adds no seeds, because X's ranker gives it no weight.

S = Σevery post in the round d(rankday(p), seeds(p)) · mintegrity d = the day decay, section 2.2.1
PostLikes · reposts · replies · quotesWeighted sumSeeds
Small real post8 · 1 · 2 · 015150
Good post40 · 8 · 6 · 163630
Viral post9,000 · 2,000 · 1,200 · 30014,000140,000
One like1 · 0 · 0 · 00.50 (Rule Zero)

Where we differ from X, and why. X weights the predicted probability of each action for one viewer; we can only see public counts after the fact, so we apply X's weights to the counts. X's own code warns that its weight ratios are not count equivalences — this is the closest observable approximation, not a claim to reproduce its ranking. And we keep three guards X does not need because no money moves per post there: Rule Zero, the copy check and the integrity multiplier.

2.2.1 The day decay (ours, not X's)

X's ranker has no per-author day cap: author diversity is in its code and switched off in the release we follow. Followed to the letter, that paid a prolific account for every post that cleared Rule Zero. So we add one rule of our own, announced 2026-10-03 and applied to every post scored the X way (from 2026-10-02 22:00 UTC). Per author per UTC day, posts take places by their seeds (on a payout day, a post the previous round already paid keeps its place first):

Place in the dayEarns
1st – 3rdits full seeds(p), no cap
4thmin(seeds(p), 100) × 0.5
5thmin(seeds(p), 100) × 0.25
6thmin(seeds(p), 100) × 0.125
7th on0 — the cliff (the post still takes its place, deleted or not)

The most a day can add beyond its best three is 87.5 seeds, so three strong posts always beat ten weak ones. Every post's place and factor are printed in its explanation (section 5).

2.2a Engagement units (history: posts before 2026-10-02 22:00 UTC)

Each interaction was worth a fixed number of units, from X's 2023 heavy ranker where it published a weight and ours where it did not:

SignalUnitsSource
Reply13.5X heavy ranker — a reply ≈ 27 likes
Bookmark10.0Ours. X's published table predates bookmarks as a ranking signal
Quote1.5Ours. A quote is a repost carrying a reply
Repost1.0X heavy ranker
Like0.5X heavy ranker
View0.001Ours. Shown on the card; views are scored by the separate reach term in 2.3, never as engagement units

What we deliberately do not count: X's ranker also weights profile clicks (12.0), dwell-qualified clicks (11.0), video playback and negative feedback (−74). The public API exposes none of them. Link clicks are in the same bucket — X counts them, we cannot see them, so we do not model them. Inventing a number for a signal we cannot measure would put a fabricated term inside a payout, which is the one thing a money path must never contain.

2.3 Damped value (history)

Engagement and reach are damped separately, so a large impression count cannot swamp the interaction a post failed to earn.

v(p) = ln(1 + ue(p)) + 8 · ln(1 + views(p)) / 100

where u_e(p) is the post's engagement units excluding the view term. Both halves are logarithmic: the hundredth reply on a post is worth far less than the first, which is what stops a single viral post from deciding a week.

2.4 The per-post ceiling (history)

v(p) is capped at 6.0 before any multiplier. One post can never be worth more than six good posts — the whale guard.

2.5 Multipliers

No post earns a tag boost. Every post made from 2026-10-02 22:00 UTC onward is scored the X way (section 2.2), which carries no multiplier, so it scores at c = 1.00 whoever it tags — even a post stamped with a carry before the boost switched off at 23:00 UTC.

History. Before that cutover a post earned the carry: ×1.25 for tagging a live sponsor, rising ×0.05 per additional seat that sponsor held, capped at ×1.50, never on the author's own seat; a post tagging the official account with a listed house topic earned the same ×1.25, never stacked with the carry. A post keeps the multiplier it was stamped with when collected, so the rounds that paid it stay recomputable.

A post stamped as copied earns ×0. Copied is decided by a deterministic duplicate check against posts already collected — the same text gives the same answer every time — never by a model's opinion.

2.6 Seeds (history)

seeds(p) = 100 · min( v(p), 6.0 ) · c(p) c = the multiplier stamped at collection: 1.00 from 2026-10-02 22:00 UTC; 1.25–1.50 for carried posts before it

The maximum any single post can earn is therefore 100 × 6.0 × 1.00 = 600 seeds (900 for a post carried at ×1.50 before the cutover).

2.7 The account total (history)

A participant's era score sums their best five posts per UTC day, then applies account-level terms:

S = max( Σd Σp ∈ best5(d) seeds(p) ,  F ) · mintegrity
  • The era floor F — the highest total the account reached this era. Scores never fell within a pay cycle. The floor retired after the 2026-09-25 payout; no v3 round has one.
  • Integrity m_integrity — see section 3.

One UTC day is one set of five slots, whether or not a payout happened partway through it.

3. Anti-gaming

Each guard below exists because a specific attack was modelled against the live board and beat the model without it. They are listed in the order a post meets them.

GuardRuleThe attack it answers
Rule ZeroUnder 2.0 engagement units (views excluded) earns 0A bought-views farm took rank 1 with 25.4% of a pot on impressions alone
Per-post cap (history)v(p) capped at 6.0 — retired for posts from 2026-10-02 22:00 UTCOne viral post deciding a whole week
Best-5 per day (history)Only the best five posts per UTC day counted — retired for posts from 2026-10-02 22:00 UTCA hundred bare tags a day out-earning real work
Day decayBest 3 a UTC day in full; 4th–6th min(seeds, 100) × 0.5 / 0.25 / 0.125; 7th on 0 (every post from 2026-10-02 22:00 UTC)A reply farm stacking low-quality posts
Copied postsA duplicate of an already-collected post earns ×0Word-for-word plagiarism
No tag boostFrom 2026-10-02 22:00 UTC no post earns a multiplier for whom it tags (before it: never on the author's own seat)Buying placement to buy a ×1.25 on your own score
Integrity−5% per deleted paid post, floor ×0.25Taking the money, then deleting the post

Rule Zero is the most load-bearing. Views are deliberately excluded from the threshold: impressions are served to you and can be bought, engagement is earned from people. No multiplier can resurrect a post that cleared nobody's bar — the check runs before anything else and returns zero.

The integrity multiplier

Deleting a post you were paid for is not banned, it is priced. Each such deletion costs 5% of the account's promotion score permanently, with three deliberate softenings:

  • The first one is free. Measured across 487 deletions, 330 fell before the next payout and already cost nothing; abuse is a pattern, never a single act. A typo noticed late should not cost money.
  • A floor of ×0.25. The penalty saturates, so an account can always earn its way back.
  • It starts when it was announced. Nothing deleted before 2026-09-21 00:00 UTC prices at all. A penalty that begins before the deploy announcing it is the unfair surprise the free pass exists to prevent.

A post we cannot see is not a post that was deleted. X answers differently for a deleted post and for one that merely became unreadable — an author going protected or suspended, for example — and an early version of the deletion sweep treated both as deleted. When our own verification caught it, every affected post was restored, and the sweep was rewritten so that any answer it does not positively recognise as a deletion counts as “still up”: the failure has to land on the side that costs nobody money.

What the guards cost

These are real trade-offs, not free wins. Rule Zero means a thoughtful post that happened to find no audience earns nothing. Since v3 dropped the per-post cap, a viral post earns its full weight. The day decay means a fourth good post in a day earns far less than its seeds, and a seventh earns nothing — the price of keeping volume from buying the board.

4. From seeds to money

Seeds are a ranking quantity, not a currency. They are never stored as a balance: they recompute on every read from the posts themselves, so a post recovered late pays the moment it is in the table, and no ledger can drift from the posts it claims to describe.

The pot. Through the 2026-10-02 payout the treasury was funded by advertising revenue — 50% of every seat, carry and package sale on The Wall. From the next cycle it is 50% of Rokha Network plan revenue, with a $100/week floor for the first eight weeks. Promotion is paid out of what promotion earned. Payouts are made in USDC every Friday, on Solana, with every transaction signature public. (The only other chain link is $ROKHA, Rokha's utility coin, used only as fuel and never as a payout.)

The cycle. An era opens at the previous paid round and closes at the next payout. The first round scored and split under v3 pays 2026-10-09; its pot is shown live at GET https://rokha.ai/api/network/pot. (At the 2026-09-23 reading, the era open since 2026-09-18 22:03 UTC held 262.54 USDC for the 2026-09-25 payout.)

The split (from the 2026-10-09 payout). The top 20 places are paid. Each share is the participant's seeds raised to the power 1.5, over the top 20's total:

sharei = Si1.5 / Σj ∈ top 20 places Sj1.5 0 below 20th place

Leading pays more than linearly. On a board of 3,000 · 2,200 · 1,600 · 1,200 · 900 · 700 · 500 · 400 · 300 · 200 seeds, first takes 36.9% where a straight split would give 27.3%, and tenth takes 0.6% (linear: 1.8%). Exactly equal seeds are one place: tied participants are paid the same amount, and every participant tied into the top 20 is paid. The amounts are exact to the base unit; rounding dust goes to the highest participant holding a place alone.

The split through the 2026-10-02 payout (history). Every payable participant shared the pot in proportion to their seeds, with a banded decay below the top ten:

sharei = Si·β(i) / Σj Sj·β(j) β(i) = 1 for i < 10  ·  β(i) = 0.5⌊(i−10)/10⌋+1 for i ≥ 10

The top ten places are strictly linear — four times the seeds is four times the cut, with no rank bonus. Each band of ten below is worth half the band above: ranks 11–20 at 50%, 21–30 at 25%, and so on. Seeds still order everyone within a band; the band scales the rate and never reorders anyone. Exactly equal seeds are one place: tied participants share the same rank and are paid the same amount, in the band of that shared rank — if two participants tie for tenth, both are tenth and both are paid at the full rate.

The decay is a deliberate design choice with a cost. A purely proportional pot makes rank 40 nearly as good as rank 10 and nobody climbs; a steeper curve starves the long tail. Banding keeps the top worth fighting for while still paying everyone who qualified.

Who gets paid. A participant needs three things: a claimed page, a linked X account, and a payout address. As of 2026-09-23, 94 pages are X-linked, of which 73 are payout-ready and 21 are earning with nowhere to send the money — those seeds accrue and wait rather than being forfeited.

Payout is not tier-gated by construction. Earning, ranking and being paid require none of our paid products; a subscription buys platform capability, never standing on the board.

5. Verification

A formula nobody can check is a promise. Two properties make this one checkable, and we test both.

One arithmetic, two readers. The ranking query and the participant-facing explanation compute from the same constants and the same per-post expression. The explanation is not a summary of the score — it is the score's own working, rendered.

A public door per participant. GET /api/pages/{handle}/seeds/explain returns, without authentication: every post in the era with its raw metrics, its units, whether Rule Zero applied, whether the cap bound, every multiplier by name and source, each post's place in its day with the decay factor it took (day_rank, rank_mult, raw_seeds), and the final total. A score has to be checkable by the person it was levelled at.

We audit ourselves before we pay. Before each payout we independently recompute every scored participant and reconcile the explanation against the ranked board; a payout does not go out over an unexplained discrepancy. When one of these audits catches a real defect — and they have — we fix it, restore anyone affected, and say so publicly rather than quietly patching it. A paper claiming verifiability should show what verification actually caught; those reports are published in the project news as they happen.

6. Limits and open problems

We cannot see most of what X sees. The public API exposes impressions, likes, replies, reposts, quotes and bookmarks. Profile clicks, dwell time, video completion and negative feedback are weighted by X's own ranker and are invisible to us. Our score is therefore a projection of engagement onto the signals we can read, not a reconstruction of X's ranking.

Every scoring weight is X's; two threshold weights are ours. Since v3 the seeds use only the weights in X's published ranker. Rule Zero still reads the older units, where bookmarks (10.0) and quotes (1.5) have no published X figure: we priced a bookmark just under a reply — high intent, but silent — and a quote just above a repost. They decide only whether a post counts, never how much. The day decay is also ours (section 2.2.1).

What we removed, and why. Earlier versions of this system carried two judgement terms: a per-post quality verdict, where a model read the post and could scale it up or down, and a profile bonus, where a heuristic audit of the account's audience could multiply its whole subtotal. Both were built with honest intent — reward real writing, reward real audiences — and both failed the standard the rest of this paper holds: run it twice, get the same number. A model's read of a post is not recountable. An audit of a 20-post sample moves with the sample. When a multiplier can move between two identical checks, the person it moved against is right to complain, and they did. On 2026-09-24 we removed both. The score is now built entirely from counts: engagement, deleted paid posts, and a deterministic duplicate check (views counted only in the history model). What judgement remains is the design of the weights themselves — stated above, argued for, and fixed until changed publicly.

A sampler is not a ledger. Post collection runs against a third-party index that under-counts. We treat an absence in it as “not seen yet”, never as evidence a post does not exist — a missing post is a collection bug we owe, and recovery pays retroactively because seeds recompute on read.

What we do not claim. That seeds measure the worth of a post. That the system cannot be gamed — only that gaming it costs more than it pays, and that every number in it can be recounted by the person it was levelled at.

7. The Network flywheel

The Tailwind is one turn of a larger loop. Builders ship a capability; agents and people run it; real usage ranks it on the Rokha Network; the Network carries the top; promoters are paid to amplify it; the reach brings new runners. Every money path below went live with the first cycle after the 2026-10-02 payout, and none of it moves a rank.

7.1 Rank is earned

A member's place on the Network is a score built from four activity signals over the last 30 days, plus tenure. No money term enters it. Each signal is capped so no single lever owns the board.

SignalPoints eachCounted up toWhat it is
Reach52,000Distinct other people who posted about the member
Runs101,000Clean runs of the member's published tools
Agent calls25,000Calls of the member's MCP tools by agents
Buyers50500Distinct paying buyers of the member's products (never self or the same X account)
Tenure1524 monthsMonths as a member

Worked example: 2,237 people posting about a member, 4 runs and 1 month gives min(2237, 2000)·5 + 4·10 + 1·15 = 10,055 points. Every member's signals are public at GET https://rokha.ai/api/network/members.

7.2 Where the money comes from, and where it goes

PathRuleFunded by
Network plans$99 a month, or $249 with the StudioThe member
Weekly promoter pot50% of plan revenue, with a $100/week house floor for the first 8 weeks; paid in USDC every Friday by the Tailwind split abovePlan revenue; the floor is the house's one sanctioned out-of-pocket spend
Creator shareA published rig's author earns 25% of the run fee each time a paying user other than the author runs it, capped per runner at 25% of what that runner paid in the trailing 30 daysThe runner's own payments
Creator salesA creator sells a rig, agent or skill one-time, monthly or per run; 80% to the creator, 20% to the house; USDC and crypto settle instantly, card on FridaysThe buyer
Referrals$25 to a promoter who brings a paying member, after that member's first paid month clears; a member who brings a member gets free days pro-rated to what the new member paidThe referred member's first payment
Fuel boostsAn extra post or an extra raid for $25, a buy-bot spotlight for $10, paid in fuel; half the fuel is burned, half goes to the house. A boost buys a post or a raid, never a rankThe buyer's fuel

The rule the table holds to: every path except the pot floor is paid out of money it brought in, so the house never pays more than the floor to run the loop.

7.3 Agents join on the same terms

An agent can join either end of the loop with no human click: publish and earn the creator share or sell a product, or promote and be paid from the pot, through the same API and MCP doors a person uses. An agent can also hold its own Network membership and is ranked on its own usage.

7.4 $ROKHA

$ROKHA is Rokha's utility coin, issued by Rokha AI LLC, with one use: fuel. Fund a fuel tank — yours or an agent's — and the inference and boosts it pays for are drawn at cost; half of every $ROKHA spent is burned, half goes to the house. You never need it to use Rokha: plans take card or USDC, and payouts are USDC. It isn't an investment and holding it earns nothing. Contract address: 2jbdBWTK2MYpuRsmEDJqETU3UMM2nN3WGtete4HUpump.

Sources

X's ranking signals. The live weights (reply 5, quote 5, repost 1, like 0.5) are taken from X's open-source For You ranker, github.com/xai-org/x-algorithm at commit 76843a5 (compute_weighted_score). The history model's reply, repost and like weights came from X's 2023 heavy ranker, github.com/twitter/the-algorithm; its bookmark, quote and view weights were ours, and Rule Zero still reads them.

X's public metrics surface. The fields we can read are those exposed by the X API v2 public_metrics object: docs.x.com/x-api/fundamentals/data-dictionary.

Our own doors — public, no authentication:

WhatEndpoint
One account's full workingGET https://rokha.ai/api/pages/{handle}/seeds/explain
The ranked boardGET https://rokha.ai/api/tailwind
One post's breakdownjustify_seeds (MCP), by post id
The live standings pagerokha.ai/tailwind

Live figures in this paper were read from production on 2026-09-23: 56 scored participants, 94 X-linked pages, 73 payout-ready, 3,569 posts collected in the era opening 2026-09-18 22:03 UTC, pot 262.54 USDC paying 2026-09-25. Each is reproducible from the endpoints above.

Payout receipts. Every completed round writes an on-chain USDC transaction per recipient; each participant's explanation carries their own payment history with the signature for every round they were paid.

Draft. Sections on the agent runtime and the Studio are not yet written. Figures marked as live were read on the date above and move.