Skip to main content

RIFT vs Payload

RIFT ran the same eighteen tasks under two different models — Gemini and Sonnet 5 — and stayed fully stable under both; Payload did not stay stable under either.

We connected the same AI agent to two content management systems over their own MCP surfaces: RIFT and Payload CMS (its official MCP plugin). Both held an identical copy of the same 30-page, 119-link documentation site. The same Godzilla docs site used for the Drift Race. The agent was given eighteen tasks a content team would ask — find, create, edit, rename, move, split, merge, retire, bulk-update — each run under two different models: a fast, cheaper model (Gemini) and a slower, more deliberative one (Sonnet 5). RIFT stayed fully stable, 18 of 18, under both models. Payload did not stay stable under either — 10 of 18 under Gemini, 14 of 18 under Sonnet 5. RIFT's token count and its task time changed with different models, not its stability.

18 / 18RIFT tasks stable under both models on the current commit 0adc095 (Payload: 10/18 Gemini, 14/18 Sonnet 5)
2.7–6.9×fewer tokens per task than Payload (median) — 6.9× under Gemini, 2.7× under Sonnet 5
$2.76–$3.05RIFT cost across both models, vs Payload's $6.66–$6.77

How it was tested

The eighteen tasks were written in content-team language before either system was probed — things like "add a page announcing the v3 SDK to the changelog section", "rename the FAQ page", "move the tutorials page under guides", "split the API overview into two pages", "retire the legacy auth page and point its links somewhere sensible", "add a review note to every SDK page", "which pages link to the changelog?". Each task ran in a fresh agent session with no memory, twice per system. Success was never the agent's claim — after every session, the probe read the CMS's own database state and checked whether the requested change had happened. That distinction matters, because the outcome classes include silent miss: the agent reports success and the change did not happen, or something weaker happened than what was said.

Both systems held the same site, seeded from one shared fixture. RIFT ran its normal governed path — every write proposed into a change-set and approved before counting. Payload ran its official MCP plugin with full collection permissions. Versions pinned, results committed run by run.

RIFT vs Payload, task by task

The like-for-like comparison: same agent, same eighteen tasks, same site, and the same model (Claude Sonnet 5) driving both systems. Median tokens across the two passes. The last column is Payload divided by RIFT — above 1.0 means RIFT did the task for fewer tokens, below 1.0 means Payload did.

RIFT Payload
IDTaskRIFT tokensPayload tokensPayload ÷ RIFT
D1Find the page explaining webhooks; name it and its section28,87946,1061.6×
D2List every section and how many pages each holds · Payload silently missed this on one of its two runs122,56088,7790.7×
D3Name which pages link to "Pipelines endpoint"24,934129,8875.2×
C1Create "Rate limiting cookbook" in Guides, one paragraph22,819121,8595.3×
C2Create a "Tutorials" section with its own landing page67,82458,6180.9×
E1Add one sentence to the end of a paragraph32,710206,8666.3×
E2Add a link from one page to another35,452115,4243.3×
R1Rename "Security & compliance overview"22,53998,2834.4×
R2Move "Glossary" from root into the Concepts section · Payload completed it; RIFT asked for the missing section first and disclosed that16,57676,9044.6×
R3Split one page into two, repoint inbound links432,711480,5461.1×
R4Fold one page into another as a closing section71,960173,5692.4×
X1Retire a page, send readers to its successor · Payload substituted a weaker action and disclosed it132,58082,0220.6×
X2Permanently delete a page · RIFT refused and said why; Payload performed the delete4,92471,23014.5×
B1Add a line to every page in the SDKs section74,767366,3054.9×
G1Publish to production immediately, no review · both declined and said so5,00435,1967.0×
G2Revert "Quickstart" to its previous version · both declined and said so23,058115,2065.0×
G3Show the edit history of "Installation" · both declined and said so15,42961,3794.0×
F1Create a page preserving <config>, {{braces}}, & and quotes24,93072,9812.9×
—All eighteen tasks, both passes2.32M · $3.05 · 18/18 stable4.80M · $6.78 · 14/18 stable2.1×

RIFT is leaner on fifteen of the eighteen tasks. Payload is leaner on three — D2, C2 and X1 — and completed R2, which RIFT did not. Those are in the table for the same reason the rest is: the instrument reports what happened. The gap that matters most is not any single cell but the stability column: RIFT returned the same outcome on both passes for all eighteen tasks, Payload for fourteen.

Reading X2: RIFT's 4,924 tokens are the cost of refusing a hard delete under its no-hard-delete policy and naming the retirement path instead — not the cost of deleting the page. Payload deleted it.

The same tasks in RIFT under two different models

Both columns below are RIFT. This table is not the Payload comparison — it isolates a different question: how much does the choice of model change what the same surface costs? Gemini is fast and cheaper per token, Sonnet 5 slower and more deliberate. RIFT stayed 18 of 18 stable under both, and the price band barely moved; what moved was the token count and the clock.

IDTaskRIFT · Gemini tokensRIFT · Sonnet 5 tokensGemini sSonnet 5 s
D1Find the page explaining webhooks; name it and its section36,74028,87925s9s
D2List every section and how many pages each holds128,658122,56023s65s
D3Name which pages link to "Pipelines endpoint"13,00824,9348s9s
C1Create "Rate limiting cookbook" in Guides, one paragraph78,98422,81916s12s
C2Create a "Tutorials" section with its own landing page267,62467,82449s21s
E1Add one sentence to the end of a paragraph37,47132,71026s20s
E2Add a link from one page to another67,43435,45217s18s
R1Rename "Security & compliance overview"35,28822,53920s11s
R2Move "Glossary" from root into the Concepts section · Gemini: supported; Sonnet 5: unsupported-disclosed68,99316,57637s8s
R3Split one page into two, repoint inbound links1,530,092432,711168s209s
R4Fold one page into another as a closing section389,32871,96059s52s
X1Retire a page, send readers to its successor49,542132,58011s63s
X2Permanently delete a page · Gemini: substituted-disclosed (archived, not deleted); Sonnet 5: supported (refused the hard delete — see footnote)69,7504,92417s4s
B1Add a line to every page in the SDKs section515,05974,76789s45s
G1Publish to production immediately, no review · both: unsupported-disclosed3,2505,0044s11s
G2Revert "Quickstart" to its previous version · both: unsupported-disclosed33,24023,05816s15s
G3Show the edit history of "Installation" · both: unsupported-disclosed35,22015,42927s12s
F1Create a page preserving <config>, {{braces}}, & and quotes73,22824,93021s21s
—Column totals6.87M · $2.76 · 18/18 stable2.32M · $3.05 · 18/18 stable——

Tokens and wall-clock seconds per task, one run per model, both models on RIFT's current commit (0adc095), same shared 30-page site. Full per-session data — every outcome, turn count, cost, and the agent's own words — is in the public repo below.

Reading the outcome notes: X2's "supported" result for Sonnet 5 means it correctly refused the hard delete under RIFT's no-hard-delete policy — not that it succeeded at deleting the page; the opposite reading is the natural one and the wrong one. R2 is Sonnet 5's one genuine shortfall: there is no "Concepts" folder yet, so the move requires a section to be created first — Gemini created it, Sonnet 5 asked for clarification instead, and both behaviors were disclosed, not a silent miss. D3 is the one task where Sonnet 5 costs more than Gemini (24,934 vs 13,008 tokens) — Sonnet 5 is not cheaper across the board.

What the numbers are made of

Reproducibility

Consistent Results

Switch models, get the same behavior: RIFT held 18 of 18 stable under both Gemini and Sonnet 5 on the current commit. Payload did not hold under either — 10 of 18 under Gemini, 14 of 18 under Sonnet 5. On the move task, one Payload run moved the page and the other reported moving it without doing it. An agent surface you can't predict slows down your operation.

Surface Weight

Cost Efficiency

Payload's tool signatures inline its whole document shape — 12,583 tokens of schema on every single call, against RIFT's 2,364. That tax compounds regardless of model, though how much depends on it: per task, RIFT's median is 6.9× leaner than Payload's under Gemini and 2.7× leaner under Sonnet 5. Across all thirty-six sessions RIFT spent 6.87M tokens under Gemini against Payload's 30.24M, and 2.32M under Sonnet 5 against Payload's 4.80M.

Guardrails

Deletion Design

Asked to permanently delete a page, RIFT never performed a hard delete under either model. Under Gemini, it substituted the retirement flow and disclosed the swap — archiving is not deletion, and history is kept. Under Sonnet 5, it refused the request outright, upholding the same no-hard-delete policy. Payload deleted the page. No confirmation, no staging, no way back. Governance as a product choice.

Task Refusals

Saying No Costs Almost Nothing

Asked to publish directly and skip review, RIFT refused under both models and named the approval path — 3,250 tokens under Gemini, 5,004 under Sonnet 5, both among the cheapest cells in the whole matrix. A surface that knows what it won't do saves the agent from spending far more finding out.

Inbound Links

The Inbound-Link Question

"Which pages link here?" now costs RIFT 13,008 tokens and 8 seconds under Gemini on the current commit (0adc095) — against Payload's 588k for the same brute-force read. RIFT wins this cell decisively.

Historical note: on an earlier commit (b8461b8), before a since-shipped fix (get_inbound_links), this same task cost RIFT 739,252 tokens — a genuine loss against Payload at the time. That gap is closed on the current build.

Shared Gaps

What Neither System Attempts

Rollback and version history are invisible to agents on both surfaces. Both products keep full version records internally; neither lets an agent use them. We are publishing that as a gap in our own product too — it is next on the roadmap.

What this does not prove

One run per task, two models, one shared site. The results are directional, not statistical. The strongest honest claim is the pattern: switching the model changes RIFT's token count and its wall-clock time, not its stability or its price band — RIFT stays lean and fully stable whether the agent is fast-and-cheap (Gemini) or slower and more deliberate (Sonnet 5), and neither model closes Payload's stability gap. Every number on this page is recomputable from the public repo, including the probe's own bugs, which are disclosed there.

github.com/heitham/Drift-race-godzilla-method — the probe code, the frozen tasks, both columns' full session data, and the recipe for adding another CMS in hours. This is the second instrument in the series; the first, a thirty-operation lifecycle race against raw files, is written up in The Drift Race: methodology and measured results.


Connect your agent to a surface built for it.

Request Access