<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Johmisking</title>
    <description>The latest articles on DEV Community by Johmisking (@jaehyun_cho_0dff271e0d2e5).</description>
    <link>https://dev.to/jaehyun_cho_0dff271e0d2e5</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4152263%2F585d5c8d-9d4a-4345-a948-492267896aca.png</url>
      <title>DEV Community: Johmisking</title>
      <link>https://dev.to/jaehyun_cho_0dff271e0d2e5</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jaehyun_cho_0dff271e0d2e5"/>
    <language>en</language>
    <item>
      <title>Same model, 68% to 88% fewer tokens: Antigravity CLI vs Claude Code vs Codex, measured</title>
      <dc:creator>Johmisking</dc:creator>
      <pubDate>Thu, 22 Oct 2026 15:23:39 +0000</pubDate>
      <link>https://dev.to/jaehyun_cho_0dff271e0d2e5/same-model-68-to-88-fewer-tokens-antigravity-cli-vs-claude-code-vs-codex-measured-36k1</link>
      <guid>https://dev.to/jaehyun_cho_0dff271e0d2e5/same-model-68-to-88-fewer-tokens-antigravity-cli-vs-claude-code-vs-codex-measured-36k1</guid>
      <description>&lt;p&gt;Google stopped serving Gemini CLI to personal accounts on June 18, 2026 and moved people to its new Antigravity CLI (&lt;code&gt;agy&lt;/code&gt;). Antigravity can run Claude models too, which makes a rare test possible: the same model, Claude Opus 5.5, in two different coding tools. So I ran Antigravity CLI, Claude Code and Codex on the same prompts, 44 runs in total, and checked every game they built in a headless browser.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I measured
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Windows 11, 2026-10-22. Every run in its own empty folder, one after another&lt;/li&gt;
&lt;li&gt;Claude Code 2.1.295 with Opus 5.5 (Max plan)&lt;/li&gt;
&lt;li&gt;Codex CLI 0.162 with gpt-6-luna (ChatGPT plan)&lt;/li&gt;
&lt;li&gt;Antigravity CLI 1.4.5 with Gemini 4 Argon and with Claude Opus 5.5 (personal Google account)&lt;/li&gt;
&lt;li&gt;Startup test: "Reply with the single word OK." with 0, 1, 10 and 30 dummy MCP tools, 2 runs each&lt;/li&gt;
&lt;li&gt;Task: a brick-breaker game in one index.html with 2 levels, a score and 3 lives, medium effort, 3 runs each&lt;/li&gt;
&lt;li&gt;Token counts are what each CLI reports in its JSON output&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Result 1: tokens before doing anything
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Input tokens for "OK"&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Claude Code + Opus 5.5&lt;/td&gt;
&lt;td&gt;35,781&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Codex + gpt-6-luna&lt;/td&gt;
&lt;td&gt;14,818&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Antigravity + Gemini 4 Argon&lt;/td&gt;
&lt;td&gt;6,745&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Antigravity + Opus 5.5&lt;/td&gt;
&lt;td&gt;5,326 (+5,167 cache reads)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Most of this is each tool's own instructions and tool definitions, which go out again with every request.&lt;/p&gt;

&lt;h2&gt;
  
  
  Result 2: the same coding task
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Input&lt;/th&gt;
&lt;th&gt;Output&lt;/th&gt;
&lt;th&gt;Seconds&lt;/th&gt;
&lt;th&gt;Lines&lt;/th&gt;
&lt;th&gt;Games working&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Claude Code + Opus 5.5&lt;/td&gt;
&lt;td&gt;78,671&lt;/td&gt;
&lt;td&gt;7,313&lt;/td&gt;
&lt;td&gt;58&lt;/td&gt;
&lt;td&gt;451&lt;/td&gt;
&lt;td&gt;3 of 3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Codex + gpt-6-luna&lt;/td&gt;
&lt;td&gt;55,680&lt;/td&gt;
&lt;td&gt;4,563&lt;/td&gt;
&lt;td&gt;68&lt;/td&gt;
&lt;td&gt;42 (minified)&lt;/td&gt;
&lt;td&gt;3 of 3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Antigravity + Gemini 4 Argon&lt;/td&gt;
&lt;td&gt;13,041 (+6,796 cache)&lt;/td&gt;
&lt;td&gt;6,373&lt;/td&gt;
&lt;td&gt;81&lt;/td&gt;
&lt;td&gt;608&lt;/td&gt;
&lt;td&gt;3 of 3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Antigravity + Opus 5.5&lt;/td&gt;
&lt;td&gt;9,822 (+15,381 cache)&lt;/td&gt;
&lt;td&gt;4,378&lt;/td&gt;
&lt;td&gt;42&lt;/td&gt;
&lt;td&gt;236&lt;/td&gt;
&lt;td&gt;3 of 3&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;With the same Opus 5.5, Antigravity read 68% to 88% fewer input tokens than Claude Code, wrote 40% fewer output tokens and finished 27% faster. Claude Code's games were longer (451 lines against 236), and Claude Code put each run at $0.37 at API prices. Antigravity and Codex show no price on a subscription.&lt;/p&gt;

&lt;p&gt;All 12 games worked: the score rises when bricks break, level 2 appears, lives go 3, 2, 1, 0. My automatic check could not read the score in two of the Codex games, so I checked those by hand; both scored.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a range, not one number
&lt;/h2&gt;

&lt;p&gt;Antigravity's JSON reports &lt;code&gt;input_tokens&lt;/code&gt; and &lt;code&gt;cache_read_tokens&lt;/code&gt; separately, and its documentation does not say whether one contains the other. In the Opus runs the cache reads (15,381) were larger than the input (9,822), so there they cannot be inside it. I show both: the reported input as the low end (88% fewer) and input plus cache reads as the high end (68% fewer). Even the high end is far below Claude Code.&lt;/p&gt;

&lt;h2&gt;
  
  
  MCP tools barely matter any more
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;30 MCP tools added&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Claude Code&lt;/td&gt;
&lt;td&gt;+388 tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Codex&lt;/td&gt;
&lt;td&gt;+0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Antigravity + Gemini&lt;/td&gt;
&lt;td&gt;+582&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Antigravity + Opus&lt;/td&gt;
&lt;td&gt;+417&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;In Antigravity one tool already added about 280 to 460 tokens and the next 29 added little. All four setups now seem to load a tool's full definition only when it is used.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to take away
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The coding tool around the model matters as much as the model. The same Opus 5.5 read a fraction of the input in Antigravity.&lt;/li&gt;
&lt;li&gt;Fewer tokens is not the same as a better result. Claude Code wrote longer games; all of them worked in every tool.&lt;/li&gt;
&lt;li&gt;If you were on Gemini CLI with a personal account, Antigravity CLI is the replacement, and it is lean.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Limits
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;2 runs per startup test, 3 per game. One task, one machine, one day&lt;/li&gt;
&lt;li&gt;Each tool counts cache differently, so compare within a tool's own column with care&lt;/li&gt;
&lt;li&gt;I cannot see how Antigravity sets up Opus 5.5 behind its &lt;code&gt;claude-opus-5-5-medium&lt;/code&gt; name&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Data
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Full data, per-run CSV and method (CC BY 4.0, DOI 10.5281/zenodo.23569397): &lt;a href="https://tokensave.app/data/antigravity-cli-vs-claude-code-vs-codex" rel="noopener noreferrer"&gt;https://tokensave.app/data/antigravity-cli-vs-claude-code-vs-codex&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;The earlier Claude Code vs Codex test: &lt;a href="https://tokensave.app/data/claude-code-vs-codex-tokens" rel="noopener noreferrer"&gt;https://tokensave.app/data/claude-code-vs-codex-tokens&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>gemini</category>
      <category>productivity</category>
    </item>
    <item>
      <title>How many tokens does Blender MCP really use? 72 Claude Code runs, and a racing scene for $0.47</title>
      <dc:creator>Johmisking</dc:creator>
      <pubDate>Thu, 22 Oct 2026 12:17:50 +0000</pubDate>
      <link>https://dev.to/jaehyun_cho_0dff271e0d2e5/how-many-tokens-does-blender-mcp-really-use-72-claude-code-runs-and-a-racing-scene-for-047-5hl3</link>
      <guid>https://dev.to/jaehyun_cho_0dff271e0d2e5/how-many-tokens-does-blender-mcp-really-use-72-claude-code-runs-and-a-racing-scene-for-047-5hl3</guid>
      <description>&lt;p&gt;People say hooking Blender up to Claude through MCP eats tokens. I couldn't find a single measurement, so I took the most popular server, MCP for Blender, and ran it 72 times in Claude Code: describing scenes, building furniture, recolouring and checking with screenshots, two worst cases, and one showcase, a racing car with a chase camera. I also ran every task through the small proxy I built for browser MCP, now version 0.3, to see whether it helps here.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I measured
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Claude Code 2.1.295, Opus 5.5, effort medium, Windows 11 with a GTX 1650 (2026-10-22)&lt;/li&gt;
&lt;li&gt;Blender 5.2.2 LTS, MCP for Blender via &lt;code&gt;uvx mcp-for-blender&lt;/code&gt; (add-on 1.8, telemetry off)&lt;/li&gt;
&lt;li&gt;Only the Blender server attached; web, file and shell tools disabled, and the server's 3D-generation and asset-download tools too&lt;/li&gt;
&lt;li&gt;Scenes made by my own script, identical every run: a room with 13 objects, a city block with 580 objects, and an empty scene&lt;/li&gt;
&lt;li&gt;Every run checked afterwards by reading the saved .blend file: the table and four chairs exist, the chairs are really red, the animation is 120 frames, the camera follows the car. 72 of 72 passed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Result 1: everyday tasks cost $0.16 to $0.23
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Task (5 runs each)&lt;/th&gt;
&lt;th&gt;Input tokens&lt;/th&gt;
&lt;th&gt;Cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Describe a small room&lt;/td&gt;
&lt;td&gt;69,606&lt;/td&gt;
&lt;td&gt;$0.16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Describe a 580-object city block&lt;/td&gt;
&lt;td&gt;115,868&lt;/td&gt;
&lt;td&gt;$0.19&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Build a low-poly table and four chairs&lt;/td&gt;
&lt;td&gt;125,563&lt;/td&gt;
&lt;td&gt;$0.23&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Make the chairs red, then check with a screenshot&lt;/td&gt;
&lt;td&gt;124,649&lt;/td&gt;
&lt;td&gt;$0.20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Look at the table from four sides&lt;/td&gt;
&lt;td&gt;112,118&lt;/td&gt;
&lt;td&gt;$0.21&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;(Cost at Opus 5.5 API prices, as reported by Claude Code.)&lt;/p&gt;

&lt;p&gt;The largest text result in these 25 runs was 2,347 characters. The current MCP for Blender is already careful: scene info lists 20 objects per call by default and screenshots default to 768 pixels. Most of each request (about 25,000 tokens) is Claude Code's own instructions, sent again at every step.&lt;/p&gt;

&lt;h2&gt;
  
  
  Result 2: a racing scene cost $0.47
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F55s3l2ap9awf2d9rh12g.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F55s3l2ap9awf2d9rh12g.jpg" alt="Six frames from the racing scenes" width="800" height="900"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I asked for a low-poly racing car of its own design, a circuit with a corner, a 5-second animation through the corner and a chase camera. Claude did it in about 10 requests and 93 seconds, for $0.47 on average ($0.42 to $0.56 over 5 runs). All 10 runs, with and without the proxy, produced a working animation. I rendered them afterwards in EEVEE; that took about 90 seconds per clip on the GTX 1650 and is not part of the measured cost.&lt;/p&gt;

&lt;h2&gt;
  
  
  Result 3: the one expensive case is a long script output
&lt;/h2&gt;

&lt;p&gt;I asked Claude to print every property of all 580 objects. The script returned 122,373 characters. Claude Code refused it as too large, so Claude ran it again in four chunks of about 32,000 characters each, and all four stayed in the context:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;242,782 input tokens, $0.87 per task, more than four times an everyday task&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Printing all 19,042 vertices of a sphere did not get that far: Claude Code refused it, and Claude reported that the vertices were printed and stopped there: $0.17.&lt;/p&gt;

&lt;h2&gt;
  
  
  The proxy: tokensave-mcp-diet 0.3
&lt;/h2&gt;

&lt;p&gt;It sits in front of the server and passes every tool through. For Blender, version 0.3 does two things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Long text results&lt;/strong&gt; (over 8,000 characters) keep their first 2,000 and last 1,000 characters plus a summary of the hidden middle. On the property dump it read: "568 lines (132,418 characters) hidden ... 568 lines like: &lt;code&gt;name=Building ## | type=MESH | location=(#, #, #) ...&lt;/code&gt;". The full text stays in memory, and a new tool &lt;code&gt;result_detail&lt;/code&gt; returns any part by line range or search.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smaller images by default&lt;/strong&gt;: tools with a &lt;code&gt;max_size&lt;/code&gt; get 512 pixels unless the model asks for more than 1,000.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Setup:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"blender"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"github:johnisking/tokensave-mcp-diet"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"--"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"uvx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"mcp-for-blender"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Task&lt;/th&gt;
&lt;th&gt;Cost, as shipped&lt;/th&gt;
&lt;th&gt;With the proxy&lt;/th&gt;
&lt;th&gt;Change&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Print every property of 580 objects (3 runs)&lt;/td&gt;
&lt;td&gt;$0.873&lt;/td&gt;
&lt;td&gt;$0.166&lt;/td&gt;
&lt;td&gt;−81%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Racing scene (5 runs)&lt;/td&gt;
&lt;td&gt;$0.471&lt;/td&gt;
&lt;td&gt;$0.445&lt;/td&gt;
&lt;td&gt;−6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Everyday tasks (5 runs each)&lt;/td&gt;
&lt;td&gt;$0.16 to $0.23&lt;/td&gt;
&lt;td&gt;$0.15 to $0.21&lt;/td&gt;
&lt;td&gt;−4% to −8%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;To be honest about the rest: the proxy cut image tokens on the racing scene by 62%, but images were a small part of the input, so the scene cost only 6% less, and that is within run-to-run noise. The small-room description, where the proxy changed nothing at all, came out 4% cheaper too. So the everyday differences are noise. The proxy is a safety net for the long-output case, not a discount on every task.&lt;/p&gt;

&lt;p&gt;One bug I hit on the way: MCP for Blender also returns each result as &lt;code&gt;structuredContent&lt;/code&gt;, and Claude Code shows that instead of the text, so my first diet runs of the long-output task were not shortened at all. Version 0.3 now shortens those fields too, and I re-ran those tasks after the fix.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to take away
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Blender MCP in Claude Code is not a token hog for normal work. Cost follows the number of steps, and most of each step is Claude Code itself.&lt;/li&gt;
&lt;li&gt;Watch out for scripts that print a lot. One property dump cost more than four normal tasks. Ask for counts, summaries or a file instead of "print everything".&lt;/li&gt;
&lt;li&gt;If you use a client that passes large tool results straight through, the same dump would land in the context in one piece. That is where a proxy like this pays off most.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Limits
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;One model, one machine, one client. 5 runs per task (3 for the two worst cases).&lt;/li&gt;
&lt;li&gt;Costs vary by run because Claude takes a different number of steps each time.&lt;/li&gt;
&lt;li&gt;Image tokens are estimated from image size (width × height / 750); the input totals are exact.&lt;/li&gt;
&lt;li&gt;MCP for Blender changes fast; this is the 2026-10 version.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Data
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Full data, method and per-run CSV (CC BY 4.0, DOI 10.5281/zenodo.23562484): &lt;a href="https://tokensave.app/data/blender-mcp-token-cost" rel="noopener noreferrer"&gt;https://tokensave.app/data/blender-mcp-token-cost&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;tokensave-mcp-diet (MIT): &lt;a href="https://github.com/johnisking/tokensave-mcp-diet" rel="noopener noreferrer"&gt;https://github.com/johnisking/tokensave-mcp-diet&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;The same test for browser MCP: &lt;a href="https://tokensave.app/data/browser-mcp-token-cost" rel="noopener noreferrer"&gt;https://tokensave.app/data/browser-mcp-token-cost&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>mcp</category>
      <category>blender</category>
      <category>claude</category>
      <category>ai</category>
    </item>
    <item>
      <title>Browser MCP token cost: 68 runs of Playwright MCP vs Chrome DevTools MCP, and a proxy that cuts snapshots by up to 96%</title>
      <dc:creator>Johmisking</dc:creator>
      <pubDate>Thu, 22 Oct 2026 06:06:30 +0000</pubDate>
      <link>https://dev.to/jaehyun_cho_0dff271e0d2e5/browser-mcp-token-cost-68-runs-of-playwright-mcp-vs-chrome-devtools-mcp-and-a-proxy-that-cuts-1ee</link>
      <guid>https://dev.to/jaehyun_cho_0dff271e0d2e5/browser-mcp-token-cost-68-runs-of-playwright-mcp-vs-chrome-devtools-mcp-and-a-proxy-that-cuts-1ee</guid>
      <description>&lt;p&gt;You often hear that hooking a browser MCP server up to Claude Code burns tokens, and some posts put it at 10,000 to 50,000 tokens every time the agent looks at a page. I wanted to know whether that holds up, and whether it can be reduced, so I measured the two most popular servers: Microsoft's Playwright MCP and Google's Chrome DevTools MCP. Along the way I ended up building a small tool to cut the cost, so the results for that are here too.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I measured
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Claude Code 2.1.295, Opus 5.5, effort medium, Windows 11 (2026-10-22)&lt;/li&gt;
&lt;li&gt;Exactly one MCP server per run; web search, web fetch, file tools and shell were disabled, so only the browser tools could be used&lt;/li&gt;
&lt;li&gt;Playwright MCP 0.0.83 and Chrome DevTools MCP 1.11.0, both headless&lt;/li&gt;
&lt;li&gt;7 tasks: 2 runs each for everyday tasks, 5 runs each for snapshot tasks (3 for the full-snapshot probe), 68 runs in total&lt;/li&gt;
&lt;li&gt;Tokens come from the per-request usage in Claude Code's log (all input: uncached, cache read and cache write)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Result 1: everyday tasks were lighter than expected
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Task&lt;/th&gt;
&lt;th&gt;Playwright input tokens&lt;/th&gt;
&lt;th&gt;Cost&lt;/th&gt;
&lt;th&gt;Chrome DevTools input tokens&lt;/th&gt;
&lt;th&gt;Cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;TodoMVC: add 3 items, complete 1&lt;/td&gt;
&lt;td&gt;178,408&lt;/td&gt;
&lt;td&gt;$0.19&lt;/td&gt;
&lt;td&gt;199,737&lt;/td&gt;
&lt;td&gt;$0.22&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wikipedia: who designed Python, first year&lt;/td&gt;
&lt;td&gt;115,888&lt;/td&gt;
&lt;td&gt;$0.17&lt;/td&gt;
&lt;td&gt;117,240&lt;/td&gt;
&lt;td&gt;$0.17&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hacker News: top 5 stories&lt;/td&gt;
&lt;td&gt;90,006&lt;/td&gt;
&lt;td&gt;$0.16&lt;/td&gt;
&lt;td&gt;93,496&lt;/td&gt;
&lt;td&gt;$0.17&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wikipedia table: 5 release dates&lt;/td&gt;
&lt;td&gt;91,350&lt;/td&gt;
&lt;td&gt;$0.16&lt;/td&gt;
&lt;td&gt;93,683&lt;/td&gt;
&lt;td&gt;$0.16&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;(Average of 2 runs, cost at Opus 5.5 API prices.)&lt;/p&gt;

&lt;p&gt;All 16 runs got the right answer, and the largest single tool result was 6,012 characters. Opus 5.5 did not read whole pages. It ran short scripts that pulled out just what it needed, or used Playwright's find tool.&lt;/p&gt;

&lt;p&gt;So where did the tokens go? Each request carried about 23,000 tokens, and most of that was Claude Code's own instructions and tool definitions, not the browser. Browser work takes many small steps, and that fixed amount is sent again with every step. The to-do task was the most expensive not because the page was big but because it took the most clicks and keystrokes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Result 2: reading a long page in one go is over 200,000 tokens
&lt;/h2&gt;

&lt;p&gt;Then I forced the worst case: open the English Wikipedia article "Python (programming language)" and take one accessibility snapshot of the whole page.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Playwright MCP: 504,168 characters&lt;/li&gt;
&lt;li&gt;Chrome DevTools MCP: 427,400 characters&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I sent that text to Opus 5.5 to count it: &lt;strong&gt;205,642 and 208,926 tokens&lt;/strong&gt;. That is about $1.65 for one snapshot at Opus list price. OpenAI's o200k tokenizer counts 133,668 and 138,745, so the same text comes out more than 50% bigger on Claude. Text full of link targets and element ids is especially expensive for Claude's tokenizer.&lt;/p&gt;

&lt;p&gt;The good news: Claude Code already stops this. Every time, it refused the result as too large, saved it to a file and told the model to read it in pieces. So 200,000 tokens never landed in the context in Claude Code. A client without that guard could take the whole page in one go. I only measured Claude Code, so I can't say which other clients do that.&lt;/p&gt;

&lt;h2&gt;
  
  
  Result 3: medium pages get straight through
&lt;/h2&gt;

&lt;p&gt;Pages Claude Code does not block are the real issue. The Hacker News front page snapshot came straight in and grew the next request by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Playwright MCP: 18,407 tokens&lt;/li&gt;
&lt;li&gt;Chrome DevTools MCP: 14,115 tokens&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most of that is noise: a URL line under every link, "clickable" markers, empty layout cells, "|" separators and deep indentation.&lt;/p&gt;

&lt;h2&gt;
  
  
  So I built a proxy: tokensave-mcp-diet
&lt;/h2&gt;

&lt;p&gt;It sits in front of Playwright MCP or Chrome DevTools MCP and does three things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Compact:&lt;/strong&gt; if a snapshot is large, strip link targets, cursor markers, separators and empty wrappers, and shrink the indentation. Element refs stay, so clicking and typing work as before.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Outline:&lt;/strong&gt; if it is still too big, send only headings, form fields, buttons and links, with long runs of links (like Wikipedia's references) collapsed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Read on demand:&lt;/strong&gt; keep the full snapshot in memory and add a &lt;code&gt;snapshot_detail&lt;/code&gt; tool that returns any part of it by ref or by text.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Setup is one change in your MCP config. No npm account or API key:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"playwright"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"github:johnisking/tokensave-mcp-diet"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"--"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@playwright/mcp@latest"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Same tasks, with and without it:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Task&lt;/th&gt;
&lt;th&gt;Server&lt;/th&gt;
&lt;th&gt;Snapshot tokens, as shipped&lt;/th&gt;
&lt;th&gt;With the diet&lt;/th&gt;
&lt;th&gt;Task cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Hacker News top 5&lt;/td&gt;
&lt;td&gt;Playwright&lt;/td&gt;
&lt;td&gt;18,407&lt;/td&gt;
&lt;td&gt;6,792 (−63%)&lt;/td&gt;
&lt;td&gt;$0.298 → $0.205 (−31%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hacker News top 5&lt;/td&gt;
&lt;td&gt;Chrome DevTools&lt;/td&gt;
&lt;td&gt;14,115&lt;/td&gt;
&lt;td&gt;8,066 (−43%)&lt;/td&gt;
&lt;td&gt;$0.271 → $0.224 (−18%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wikipedia facts&lt;/td&gt;
&lt;td&gt;Playwright&lt;/td&gt;
&lt;td&gt;refused in 3 of 5 runs&lt;/td&gt;
&lt;td&gt;9,193&lt;/td&gt;
&lt;td&gt;$0.181 → $0.236 (+30%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wikipedia facts&lt;/td&gt;
&lt;td&gt;Chrome DevTools&lt;/td&gt;
&lt;td&gt;refused every time&lt;/td&gt;
&lt;td&gt;8,479&lt;/td&gt;
&lt;td&gt;$0.230 → $0.237 (+3%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wikipedia full snapshot&lt;/td&gt;
&lt;td&gt;Playwright&lt;/td&gt;
&lt;td&gt;about 205,600 (refused by Claude Code)&lt;/td&gt;
&lt;td&gt;9,193 (−96%)&lt;/td&gt;
&lt;td&gt;$0.154 → $0.222 (+44%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wikipedia full snapshot&lt;/td&gt;
&lt;td&gt;Chrome DevTools&lt;/td&gt;
&lt;td&gt;about 208,900 (refused by Claude Code)&lt;/td&gt;
&lt;td&gt;8,479 (−96%)&lt;/td&gt;
&lt;td&gt;$0.160 → $0.221 (+38%)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;(Cost is the average of 5 runs, 3 for the full snapshot. On Hacker News the 5 runs were within one cent of each other, and snapshot tokens varied by at most 4% between runs.)&lt;/p&gt;

&lt;p&gt;On Hacker News, snapshot tokens fell 43% to 63% and the task cost 18% to 31% less, with the same answer in all 5 runs.&lt;/p&gt;

&lt;p&gt;To be honest about Wikipedia: inside Claude Code the proxy lost money. Where Claude Code would have sent a short refusal note, the proxy sent a 9,000-token outline, and the task cost 3% to 44% more. In a client that passes large results through, the same outline turns 200,000 tokens into 9,000, a 96% cut. The tool pays off on medium-size pages, and in clients that don't have Claude Code's guard.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Update (same day): version 0.2 fixes the Wikipedia loss.&lt;/strong&gt; Pages over 60,000 characters now get only a table of contents (headings with their refs, about 1,100 tokens), and a heading ref returns that whole section. Re-measured with 5 runs each: finding facts on the Wikipedia article now costs $0.181 → $0.173 (−4%) on Playwright and $0.230 → $0.178 (−23%) on Chrome DevTools, a bare full snapshot costs about the same as Claude Code's own refusal (+2% and +3%), and Hacker News stays at −30% and −17%. The full Wikipedia snapshot goes from about 205,600 Claude tokens to about 1,140 (−99%). The install command above now gets 0.2.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What to take away
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;In Claude Code, most of the browser-MCP bill is the number of steps, not the pages. Saying clearly what you want, so the agent finishes in fewer steps, helps most.&lt;/li&gt;
&lt;li&gt;The expensive request is "read the whole page". Ask for a specific element, a search or a short script instead.&lt;/li&gt;
&lt;li&gt;If your client passes large tool results straight through, put a proxy like tokensave-mcp-diet in front, or turn on a server option that saves snapshots to files.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Limits
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;2 runs per everyday task, 5 per snapshot task (3 for the full snapshot), one model, one machine. Hacker News is live, so points changed between runs.&lt;/li&gt;
&lt;li&gt;Only Claude Code was measured. I did not check whether Claude Desktop, Cursor or Codex pass a 200,000-token result through.&lt;/li&gt;
&lt;li&gt;Snapshot formats change between server versions. Playwright MCP already saves the snapshot to a file on navigation.&lt;/li&gt;
&lt;li&gt;The outline drops body text, so the model has to ask for details, which can add steps.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Browser MCP does not burn huge numbers of tokens on every step. Opus 5.5 mostly read only what it needed, and the cost was driven by Claude Code's fixed per-request block and the number of steps. But one full read of a long page is over 200,000 tokens, and medium pages get through even in Claude Code. tokensave-mcp-diet is a free tool for those two cases.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Full data (CSV, CC BY 4.0): &lt;a href="https://tokensave.app/data/browser-mcp-token-cost" rel="noopener noreferrer"&gt;https://tokensave.app/data/browser-mcp-token-cost&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;tokensave-mcp-diet (MIT): &lt;a href="https://github.com/johnisking/tokensave-mcp-diet" rel="noopener noreferrer"&gt;https://github.com/johnisking/tokensave-mcp-diet&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Count the tokens in your own prompt: &lt;a href="https://tokensave.app/" rel="noopener noreferrer"&gt;https://tokensave.app/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>mcp</category>
      <category>claude</category>
      <category>ai</category>
      <category>playwright</category>
    </item>
    <item>
      <title>Gemini 4 Argon has a new tokenizer: Korean and Japanese got 8% cheaper, Indian languages up to 19% dearer</title>
      <dc:creator>Johmisking</dc:creator>
      <pubDate>Wed, 21 Oct 2026 12:13:51 +0000</pubDate>
      <link>https://dev.to/jaehyun_cho_0dff271e0d2e5/gemini-4-argon-has-a-new-tokenizer-korean-and-japanese-got-8-cheaper-indian-languages-up-to-19-4890</link>
      <guid>https://dev.to/jaehyun_cho_0dff271e0d2e5/gemini-4-argon-has-a-new-tokenizer-korean-and-japanese-got-8-cheaper-indian-languages-up-to-19-4890</guid>
      <description>&lt;p&gt;Gemini 4 Argon ships with a new tokenizer. The same text no longer gives the same token count as on Gemini 3.x, and token counts are what you pay for and what fills the context window. So I measured what changed, in 41 languages.&lt;/p&gt;

&lt;p&gt;The short version:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Korean needs 8% fewer tokens and Japanese 7% fewer for the same text. English did not change by a single token.&lt;/li&gt;
&lt;li&gt;Indian languages went the other way: Hindi, Tamil and Kannada need 12% to 19% more.&lt;/li&gt;
&lt;li&gt;Added up over all 41 languages the change is only +0.7%. The tokenizer did not get better or worse overall; the cost moved between languages.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The test
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;10 everyday requests (write a function, plan a trip, a product description, meeting notes and so on), translated into 41 languages: 410 texts&lt;/li&gt;
&lt;li&gt;Counted in the Google AI Studio token counter on Gemini 4 Argon and Gemini 3.8 Flash, 2026-10-21. Gemini 3.8 Flash and 3.1 Pro gave identical counts in an earlier test, so I call them 3.x&lt;/li&gt;
&lt;li&gt;The counter adds a fixed amount, which I subtracted: on Argon the one-letter text "a" shows 32, so 31; on 3.8 Flash it shows 2, so 1&lt;/li&gt;
&lt;li&gt;GPT (o200k) and Claude Haiku 5.5 numbers are from the same 410 texts, measured earlier&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Result 1: the same 10 texts, before and after
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Language&lt;/th&gt;
&lt;th&gt;Gemini 3.x&lt;/th&gt;
&lt;th&gt;Gemini 4 Argon&lt;/th&gt;
&lt;th&gt;Change&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;English&lt;/td&gt;
&lt;td&gt;373&lt;/td&gt;
&lt;td&gt;373&lt;/td&gt;
&lt;td&gt;0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chinese (Simplified)&lt;/td&gt;
&lt;td&gt;360&lt;/td&gt;
&lt;td&gt;354&lt;/td&gt;
&lt;td&gt;-2%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Japanese&lt;/td&gt;
&lt;td&gt;417&lt;/td&gt;
&lt;td&gt;387&lt;/td&gt;
&lt;td&gt;-7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Korean&lt;/td&gt;
&lt;td&gt;498&lt;/td&gt;
&lt;td&gt;456&lt;/td&gt;
&lt;td&gt;-8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hindi&lt;/td&gt;
&lt;td&gt;470&lt;/td&gt;
&lt;td&gt;528&lt;/td&gt;
&lt;td&gt;+12%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kannada&lt;/td&gt;
&lt;td&gt;679&lt;/td&gt;
&lt;td&gt;794&lt;/td&gt;
&lt;td&gt;+17%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tamil&lt;/td&gt;
&lt;td&gt;568&lt;/td&gt;
&lt;td&gt;675&lt;/td&gt;
&lt;td&gt;+19%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;What matters is that the direction is consistent. English was identical on all 10 texts. Korean and Japanese went down on all 10 (-3% to -15% per text), and Hindi, Kannada and Tamil went up on all 10 (+6% to +31% per text). This is the tokenizer, not one odd sentence.&lt;/p&gt;

&lt;p&gt;In characters it reads like this: one Korean token now holds 1.94 characters instead of 1.78, so the same context window fits about 9% more Korean text. One Kannada token went from 2.71 characters to 2.32.&lt;/p&gt;

&lt;h2&gt;
  
  
  Result 2: group by script and a pattern appears
&lt;/h2&gt;

&lt;p&gt;All 41 languages (one request text each), grouped by writing system. Numbers are the median change from Gemini 3.x.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Script&lt;/th&gt;
&lt;th&gt;Languages&lt;/th&gt;
&lt;th&gt;Median change&lt;/th&gt;
&lt;th&gt;Range&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Indic scripts (Hindi, Bengali, Tamil, ...)&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;+17%&lt;/td&gt;
&lt;td&gt;-8% to +24%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chinese, Japanese, Korean&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;-6%&lt;/td&gt;
&lt;td&gt;-15% to -3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Thai&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;-9%&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Arabic, Persian, Hebrew&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;-5%&lt;/td&gt;
&lt;td&gt;-6% to -3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Latin (English, Spanish, ...)&lt;/td&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;td&gt;-2%&lt;/td&gt;
&lt;td&gt;-10% to +3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cyrillic, Greek&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;0%&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;9 of the 10 Indic-script languages went up (the exception is Punjabi, -8%), and all four CJK languages went down. Among Latin-script languages, English, German and French stayed put, while languages with long, heavily inflected words dropped: Finnish -10%, Hungarian -8%, Polish -7%. Russian, Ukrainian and Greek did not change by a single token.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it suggests: same total, different split
&lt;/h2&gt;

&lt;p&gt;Summed over the 41 texts, Gemini 3.x needs 2,069 tokens and Argon 2,083, a difference of +0.7%. The median "language tax" (extra tokens versus English) is +41% on both.&lt;/p&gt;

&lt;p&gt;A tokenizer splits text using a vocabulary of fixed size. Languages whose common character sequences get more entries in that vocabulary need fewer tokens. These results look like what you would expect if part of the vocabulary moved from Indic scripts to CJK and some European languages. Google has not described the change, so this is an inference from the measurements, not a confirmed fact.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gemini's edge in Indian languages mostly went away
&lt;/h2&gt;

&lt;p&gt;Gemini 3.x was unusually efficient for Indian languages. Much of that advantage is gone in Argon. Tokens for the one request text:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Language&lt;/th&gt;
&lt;th&gt;GPT (o200k)&lt;/th&gt;
&lt;th&gt;Gemini 3.x&lt;/th&gt;
&lt;th&gt;Gemini 4 Argon&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Hindi&lt;/td&gt;
&lt;td&gt;51&lt;/td&gt;
&lt;td&gt;41 (-20% vs GPT)&lt;/td&gt;
&lt;td&gt;48 (-6%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bengali&lt;/td&gt;
&lt;td&gt;57&lt;/td&gt;
&lt;td&gt;39 (-32%)&lt;/td&gt;
&lt;td&gt;46 (-19%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tamil&lt;/td&gt;
&lt;td&gt;67&lt;/td&gt;
&lt;td&gt;52 (-22%)&lt;/td&gt;
&lt;td&gt;63 (-6%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kannada&lt;/td&gt;
&lt;td&gt;61&lt;/td&gt;
&lt;td&gt;58 (-5%)&lt;/td&gt;
&lt;td&gt;72 (+18%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Malayalam&lt;/td&gt;
&lt;td&gt;63&lt;/td&gt;
&lt;td&gt;65 (+3%)&lt;/td&gt;
&lt;td&gt;71 (+13%)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Hindi went from 20% fewer tokens than GPT to 6% fewer, and Kannada and Malayalam now need more than GPT.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next to the other models
&lt;/h2&gt;

&lt;p&gt;Total tokens for the same 10 texts:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Language&lt;/th&gt;
&lt;th&gt;Gemini 4 Argon&lt;/th&gt;
&lt;th&gt;GPT (o200k)&lt;/th&gt;
&lt;th&gt;Claude Haiku 5.5&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;English&lt;/td&gt;
&lt;td&gt;373&lt;/td&gt;
&lt;td&gt;350&lt;/td&gt;
&lt;td&gt;520&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Korean&lt;/td&gt;
&lt;td&gt;456&lt;/td&gt;
&lt;td&gt;534&lt;/td&gt;
&lt;td&gt;935&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Japanese&lt;/td&gt;
&lt;td&gt;387&lt;/td&gt;
&lt;td&gt;570&lt;/td&gt;
&lt;td&gt;684&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hindi&lt;/td&gt;
&lt;td&gt;528&lt;/td&gt;
&lt;td&gt;565&lt;/td&gt;
&lt;td&gt;1,223&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kannada&lt;/td&gt;
&lt;td&gt;794&lt;/td&gt;
&lt;td&gt;679&lt;/td&gt;
&lt;td&gt;3,276&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;In English GPT needs 6% fewer tokens than Argon, but in Korean the order flips: Argon needs 15% fewer than GPT and 51% fewer than Claude. Fewer tokens is not automatically cheaper, since the price per token differs by model.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changes in practice
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Korean or Japanese on Gemini:&lt;/strong&gt; at the same price per token, input costs drop 7% to 8%, and the same context window holds more text. Token-based limits and free tiers last correspondingly longer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Indian-language products moving from 3.x to Argon:&lt;/strong&gt; budget for 10% to 20% more input tokens on the same traffic. For Kannada and Malayalam, GPT now needs fewer tokens.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;English-only products:&lt;/strong&gt; no change in token counts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost estimators:&lt;/strong&gt; rules of thumb like "characters divided by a constant" tuned on 3.x no longer hold for Korean or Indian languages. Measure per model.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Limits
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Input tokens only. Output very likely uses the same tokenizer, but I did not check it&lt;/li&gt;
&lt;li&gt;The 10-text comparison with Gemini 3.x covers 7 languages. The 41-language comparison uses one text, so single languages can move by a few percentage points; on that text Korean showed a larger -15%&lt;/li&gt;
&lt;li&gt;AI Studio counter numbers; the API's countTokens may differ by a few tokens&lt;/li&gt;
&lt;li&gt;The vocabulary explanation is an inference from the data, not something Google has confirmed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All 41 languages, chart and CSV (CC BY 4.0): &lt;a href="https://tokensave.app/data/language-tax-index" rel="noopener noreferrer"&gt;https://tokensave.app/data/language-tax-index&lt;/a&gt;&lt;br&gt;
Count your own text: &lt;a href="https://tokensave.app" rel="noopener noreferrer"&gt;https://tokensave.app&lt;/a&gt;&lt;/p&gt;

</description>
      <category>gemini</category>
      <category>ai</category>
      <category>llm</category>
      <category>tokenization</category>
    </item>
    <item>
      <title>Sending text as images cut my Claude tokens by up to 81%. It also started inventing numbers.</title>
      <dc:creator>Johmisking</dc:creator>
      <pubDate>Wed, 21 Oct 2026 07:14:03 +0000</pubDate>
      <link>https://dev.to/jaehyun_cho_0dff271e0d2e5/sending-text-as-images-cut-my-claude-tokens-by-up-to-81-it-also-started-inventing-numbers-57ol</link>
      <guid>https://dev.to/jaehyun_cho_0dff271e0d2e5/sending-text-as-images-cut-my-claude-tokens-by-up-to-81-it-also-started-inventing-numbers-57ol</guid>
      <description>&lt;p&gt;There is a trick going around for cutting Claude Code bills: render bulky context (system prompt, tool docs, logs, old history) as dense PNG images instead of text. An image is billed by its pixel size, not by how much text is inside it, so a page packed with small characters can cost far fewer tokens than the same text.&lt;/p&gt;

&lt;p&gt;The open-source proxy pxpipe does exactly this and reports a 59-70% lower bill. Its own README is honest that the method is lossy. I wanted an independent number for both sides: how many tokens it really saves, and what the model can still read back.&lt;/p&gt;

&lt;h2&gt;
  
  
  The test
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Six documents, 10,600 to 23,200 characters: one of our articles in English, Korean and Japanese, a JavaScript file, a generated JSON API response and a generated 230-line server log&lt;/li&gt;
&lt;li&gt;Planted in each: five lines like "ticket T123 uses build hash 3f9a1c7e02bd and a timeout of 19043 ms". For the JSON and the log I also asked about five records that were already there&lt;/li&gt;
&lt;li&gt;Three ways to send it: plain text, pxpipe's own output (page images plus its text "factsheet" of exact identifiers), and the images alone&lt;/li&gt;
&lt;li&gt;Claude Haiku 5.5, Sonnet 5.5, Opus 5.5 and Fable 5.1 through Claude Code, 2 runs each, 144 calls, exact-match scoring&lt;/li&gt;
&lt;li&gt;System prompt: answer from the document only, null if unsure&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Tokens: the saving is real
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Document&lt;/th&gt;
&lt;th&gt;As text&lt;/th&gt;
&lt;th&gt;As pxpipe images&lt;/th&gt;
&lt;th&gt;Change&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;English prose&lt;/td&gt;
&lt;td&gt;5,870&lt;/td&gt;
&lt;td&gt;2,100&lt;/td&gt;
&lt;td&gt;-64%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Korean prose&lt;/td&gt;
&lt;td&gt;9,483&lt;/td&gt;
&lt;td&gt;2,142&lt;/td&gt;
&lt;td&gt;-77%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Japanese prose&lt;/td&gt;
&lt;td&gt;8,678&lt;/td&gt;
&lt;td&gt;2,374&lt;/td&gt;
&lt;td&gt;-73%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code&lt;/td&gt;
&lt;td&gt;7,586&lt;/td&gt;
&lt;td&gt;1,906&lt;/td&gt;
&lt;td&gt;-75%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;JSON&lt;/td&gt;
&lt;td&gt;8,274&lt;/td&gt;
&lt;td&gt;2,022&lt;/td&gt;
&lt;td&gt;-76%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Server log&lt;/td&gt;
&lt;td&gt;13,053&lt;/td&gt;
&lt;td&gt;2,935&lt;/td&gt;
&lt;td&gt;-78%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;(Opus 5.5; Haiku and Sonnet were the same within a few tokens. Fable's denser layout: -68% to -81%.)&lt;/p&gt;

&lt;p&gt;The more tokens a language costs as text, the more an image saves. Korean and Japanese gained the most.&lt;/p&gt;

&lt;h2&gt;
  
  
  Exact values: this is where it breaks
&lt;/h2&gt;

&lt;p&gt;As plain text, every model answered every item correctly. Through pxpipe:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Planted ids&lt;/th&gt;
&lt;th&gt;Planted numbers&lt;/th&gt;
&lt;th&gt;Other ids in JSON/log&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Haiku 5.5&lt;/td&gt;
&lt;td&gt;21/60&lt;/td&gt;
&lt;td&gt;22/60&lt;/td&gt;
&lt;td&gt;0/20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sonnet 5.5&lt;/td&gt;
&lt;td&gt;49/60&lt;/td&gt;
&lt;td&gt;40/60&lt;/td&gt;
&lt;td&gt;0/20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Opus 5.5&lt;/td&gt;
&lt;td&gt;58/60&lt;/td&gt;
&lt;td&gt;44/60&lt;/td&gt;
&lt;td&gt;0/20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fable 5.1&lt;/td&gt;
&lt;td&gt;41/60&lt;/td&gt;
&lt;td&gt;28/60&lt;/td&gt;
&lt;td&gt;0/20&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Three things stood out:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The ids came back through the factsheet, not the image.&lt;/strong&gt; All planted ids happened to be in pxpipe's text list. The log had 235 ids and only 94 made the list. The ids that were left out were read 0 of 80 times, across all four models.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Numbers were the weak spot.&lt;/strong&gt; Opus 5.5, the best here, got 44 of 60. In Korean prose it got 3 of 10.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wrong answers looked right.&lt;/strong&gt; Despite "null if unsure", models sometimes returned a plausible wrong value: 94392 read as 9392, a number that is not in the document, or (Fable 5.1) a real value from the factsheet attached to the wrong ticket.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  So when is it worth it?
&lt;/h2&gt;

&lt;p&gt;Use image context for what the model needs to understand, not for what it needs to copy. A long article to summarize, a design doc to review, old conversation history: fine. Ids, hashes, prices, line numbers, code you want edited: keep them as text.&lt;/p&gt;

&lt;h2&gt;
  
  
  I added a button for it
&lt;/h2&gt;

&lt;p&gt;Because the saving is large for long non-English text, I added an experimental &lt;strong&gt;Text → image&lt;/strong&gt; button to the free token counter at &lt;a href="https://tokensave.app" rel="noopener noreferrer"&gt;https://tokensave.app&lt;/a&gt;. It renders your text into PNG pages in the browser (nothing is uploaded), estimates the image tokens for the GPT, Claude or Gemini model you picked next to the text tokens, and lets you copy or download the pages. A 9,000-character Korean article came out at about 1,400 image tokens on Claude versus 8,229 as text.&lt;/p&gt;

&lt;p&gt;Two caveats. The button uses a larger, plainer font than pxpipe's 5x8 pixel cells, so it saves somewhat less and I have not measured its read-back accuracy yet. And the warning above applies: do not use it for anything that has to be exact.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limits of this test
&lt;/h2&gt;

&lt;p&gt;Two runs per cell and six documents, so treat single cells as examples. I measured exact recall only; pxpipe's own tests report good results on gist and arithmetic questions, which I did not repeat. In normal use pxpipe images older history and the system prompt while recent turns stay text, so the saving on a full bill depends on your session.&lt;/p&gt;

&lt;p&gt;Full tables, method and CSV (CC BY 4.0): &lt;a href="https://tokensave.app/data/text-as-image-token-cost" rel="noopener noreferrer"&gt;https://tokensave.app/data/text-as-image-token-cost&lt;/a&gt;&lt;br&gt;
Corpus, rendered pages, raw answers and scripts: &lt;a href="https://github.com/johnisking/token-cost-by-language/tree/main/text-as-image" rel="noopener noreferrer"&gt;https://github.com/johnisking/token-cost-by-language/tree/main/text-as-image&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>llm</category>
      <category>productivity</category>
    </item>
    <item>
      <title>I paused Claude Code for 0 to 65 minutes to see when the prompt cache expires</title>
      <dc:creator>Johmisking</dc:creator>
      <pubDate>Tue, 20 Oct 2026 10:50:34 +0000</pubDate>
      <link>https://dev.to/jaehyun_cho_0dff271e0d2e5/i-paused-claude-code-for-0-to-65-minutes-to-see-when-the-prompt-cache-expires-4ggl</link>
      <guid>https://dev.to/jaehyun_cho_0dff271e0d2e5/i-paused-claude-code-for-0-to-65-minutes-to-see-when-the-prompt-cache-expires-4ggl</guid>
      <description>&lt;p&gt;You work in Claude Code all morning, go to lunch, come back and send one more message. The first reply is slow and your usage jumps. The usual suspect is the prompt cache: once it expires, the next message has to re-process the whole conversation.&lt;/p&gt;

&lt;p&gt;But how long does the cache actually last? Guides say five minutes, others say an hour, and in April 2026 there was a whole controversy about it. I couldn't find anyone who had simply waited and measured, so I did.&lt;/p&gt;

&lt;h2&gt;
  
  
  The test
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Claude Code 2.1.295, Opus 5.5, medium effort, signed in with a subscription, headless (&lt;code&gt;-p&lt;/code&gt;), no MCP servers&lt;/li&gt;
&lt;li&gt;Turn 1: build a small brick-breaker game in one &lt;code&gt;index.html&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Wait 0, 4, 6, 15, 30, 55 or 65 minutes&lt;/li&gt;
&lt;li&gt;Turn 2 in the same session (&lt;code&gt;--resume&lt;/code&gt;): "Make the ball red and slightly faster."&lt;/li&gt;
&lt;li&gt;Each pause in its own session, all started within a minute of each other, run twice (October 20, 2026)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the cache lasts five minutes, the cost should jump between 4 and 6 minutes. If it lasts an hour, between 55 and 65.&lt;/p&gt;

&lt;h2&gt;
  
  
  Results
&lt;/h2&gt;

&lt;p&gt;First model call of the next message, mean of two runs. Cost is Claude Code's API list-price estimate.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pause&lt;/th&gt;
&lt;th&gt;Read from cache&lt;/th&gt;
&lt;th&gt;Written to cache&lt;/th&gt;
&lt;th&gt;Next message cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0 min&lt;/td&gt;
&lt;td&gt;41,436&lt;/td&gt;
&lt;td&gt;496&lt;/td&gt;
&lt;td&gt;$0.039&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4 min&lt;/td&gt;
&lt;td&gt;43,232&lt;/td&gt;
&lt;td&gt;466&lt;/td&gt;
&lt;td&gt;$0.042&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6 min&lt;/td&gt;
&lt;td&gt;42,440&lt;/td&gt;
&lt;td&gt;496&lt;/td&gt;
&lt;td&gt;$0.042&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;15 min&lt;/td&gt;
&lt;td&gt;43,076&lt;/td&gt;
&lt;td&gt;502&lt;/td&gt;
&lt;td&gt;$0.041&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;30 min&lt;/td&gt;
&lt;td&gt;42,636&lt;/td&gt;
&lt;td&gt;494&lt;/td&gt;
&lt;td&gt;$0.043&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;55 min&lt;/td&gt;
&lt;td&gt;43,183&lt;/td&gt;
&lt;td&gt;502&lt;/td&gt;
&lt;td&gt;$0.043&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;65 min&lt;/td&gt;
&lt;td&gt;15,925&lt;/td&gt;
&lt;td&gt;27,460&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$0.253&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Up to 55 minutes nothing changed. At 65 minutes the cache was gone: 27,460 tokens had to be written again and the same message cost &lt;strong&gt;507% more&lt;/strong&gt;. Both runs agreed. Every cache write in the log was &lt;code&gt;ephemeral_1h&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why an hour, and when it's five minutes
&lt;/h2&gt;

&lt;p&gt;Per Claude Code's docs, the default lifetime depends on how you sign in:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;How you sign in&lt;/th&gt;
&lt;th&gt;Main conversation&lt;/th&gt;
&lt;th&gt;Subagents, compaction, etc.&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Subscription, within included usage&lt;/td&gt;
&lt;td&gt;1 hour&lt;/td&gt;
&lt;td&gt;5 minutes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Subscription, drawing on usage credits&lt;/td&gt;
&lt;td&gt;5 minutes&lt;/td&gt;
&lt;td&gt;5 minutes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API key or cloud provider&lt;/td&gt;
&lt;td&gt;5 minutes&lt;/td&gt;
&lt;td&gt;5 minutes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;On Opus 5.5 a one-hour cache write costs $8 per million tokens (+100% vs normal input), a cache read $0.20 (-95%). So the expiry tax grows with conversation size: re-writing a 200,000-token conversation costs about $1.60 before your message does anything.&lt;/p&gt;

&lt;h2&gt;
  
  
  Before a long break
&lt;/h2&gt;

&lt;p&gt;We only measured pause lengths; these come from the docs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Under an hour:&lt;/strong&gt; do nothing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Long break, same task:&lt;/strong&gt; &lt;code&gt;/compact&lt;/code&gt; before you leave. It's cheap while the cache is warm, and leaves only a small summary to re-cache.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Long break, new task:&lt;/strong&gt; &lt;code&gt;/clear&lt;/code&gt; (the docs say it costs nothing).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check:&lt;/strong&gt; from v2.1.251, &lt;code&gt;/usage&lt;/code&gt; shows whether the cache is warm or cold.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Choose the TTL yourself:&lt;/strong&gt; &lt;code&gt;promptCacheTtl&lt;/code&gt; (&lt;code&gt;5m&lt;/code&gt; or &lt;code&gt;1h&lt;/code&gt;, v2.1.242+). Run &lt;code&gt;claude -p "hello" --output-format json&lt;/code&gt; and look for &lt;code&gt;ephemeral_1h_input_tokens&lt;/code&gt; vs &lt;code&gt;ephemeral_5m_input_tokens&lt;/code&gt; to see which you get.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One small project and two runs, so treat the exact numbers as an example. The full write-up, with the pricing table, the bigger-session math and the limitations, is here:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://tokensave.app/blog/claude-code-cache-break-cost" rel="noopener noreferrer"&gt;https://tokensave.app/blog/claude-code-cache-break-cost&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Raw logs and CSV are open under CC BY 4.0.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>productivity</category>
      <category>devtools</category>
    </item>
    <item>
      <title>Do AI coding agents search the web in your language? I tested Claude Code and Codex in 5 languages</title>
      <dc:creator>Johmisking</dc:creator>
      <pubDate>Mon, 19 Oct 2026 02:31:24 +0000</pubDate>
      <link>https://dev.to/jaehyun_cho_0dff271e0d2e5/do-ai-coding-agents-search-the-web-in-your-language-i-tested-claude-code-and-codex-in-5-languages-bho</link>
      <guid>https://dev.to/jaehyun_cho_0dff271e0d2e5/do-ai-coding-agents-search-the-web-in-your-language-i-tested-claude-code-and-codex-in-5-languages-bho</guid>
      <description>&lt;p&gt;When you ask an AI agent something in Korean or Spanish, does it search in that language? I ran 320 web-search sessions with Claude Code (Opus 5.5) and Codex CLI to find out.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Global topic (AI products), asked in Korean, Japanese, Spanish or Ukrainian:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;205 of 206 searches were in English.&lt;/li&gt;
&lt;li&gt;0 of the 222 cited pages were in the question's language.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Local topic (metro fare, this week's news, restaurants in Seoul, Tokyo, Madrid, Kyiv), 5 runs per question:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Claude Code&lt;/th&gt;
&lt;th&gt;Codex&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Asked in the local language: searches in that language&lt;/td&gt;
&lt;td&gt;82%&lt;/td&gt;
&lt;td&gt;50%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Asked in English: searches in the local language&lt;/td&gt;
&lt;td&gt;49%&lt;/td&gt;
&lt;td&gt;17%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Asked in English about Tokyo, Codex searched in Japanese 1 time out of 56.&lt;/li&gt;
&lt;li&gt;Madrid was the exception for both: even in English, most cited pages were Spanish (Claude 42 of 53, Codex 26 of 31).&lt;/li&gt;
&lt;li&gt;Asked in Ukrainian for Ukraine's news, all 15 links Codex cited were English-language outlets.&lt;/li&gt;
&lt;li&gt;All 320 answers came back in the language of the question, so you usually can't tell from the answer which language the sources were in.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; if you publish in a language other than English, AI agents may only find you for local topics. For global topics, the English web wins.&lt;/p&gt;

&lt;p&gt;Every query, cited URL and the language of each cited page are in the dataset (CSV/JSON, CC BY 4.0): &lt;a href="https://tokensave.app/data/claude-web-search-by-language" rel="noopener noreferrer"&gt;https://tokensave.app/data/claude-web-search-by-language&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>codex</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How to Check Claude Code, Codex and Cursor Usage and Cost (2026)</title>
      <dc:creator>Johmisking</dc:creator>
      <pubDate>Thu, 15 Oct 2026 12:13:58 +0000</pubDate>
      <link>https://dev.to/jaehyun_cho_0dff271e0d2e5/how-to-check-claude-code-codex-and-cursor-usage-and-cost-2026-1405</link>
      <guid>https://dev.to/jaehyun_cho_0dff271e0d2e5/how-to-check-claude-code-codex-and-cursor-usage-and-cost-2026-1405</guid>
      <description>&lt;p&gt;Claude Code shows you how close you are to your plan limit, but not where the tokens went. Inside a session, &lt;code&gt;/usage&lt;/code&gt; gives you a percentage bar for the 5-hour window and the week, and on the API it gives you an estimated dollar figure for the current session. What it does not give you is a simple history: how much did last Tuesday cost, which project ate most of the month, and was the Max plan actually worth it compared with paying per token?&lt;/p&gt;

&lt;p&gt;That information is already on your computer. Claude Code writes every conversation to a log file, and each reply in that file records the model and the exact token counts. Command-line tools such as ccusage and CodeBurn read those files and add them up. I wanted the same answer without installing anything, so I built a &lt;a href="https://tokensave.app/claude-code-usage" rel="noopener noreferrer"&gt;Claude Code usage analyzer&lt;/a&gt; that reads the logs inside the browser. It also reads Codex logs and Cursor's usage export.&lt;/p&gt;

&lt;p&gt;This post explains where the usage data lives, the ways to check it, and what I found when I ran my own logs through the analyzer. Every number below comes from those logs and from the official price lists, checked on October 15, 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where Claude Code stores your usage
&lt;/h2&gt;

&lt;p&gt;Claude Code keeps a transcript of every session under &lt;code&gt;~/.claude/projects/&lt;/code&gt;. Each project gets its own folder, and each session is a &lt;code&gt;.jsonl&lt;/code&gt; file: one JSON object per line. Subagent conversations sit in a &lt;code&gt;subagents/&lt;/code&gt; folder next to the session they belong to.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;OS&lt;/th&gt;
&lt;th&gt;Folder&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Windows&lt;/td&gt;
&lt;td&gt;&lt;code&gt;%USERPROFILE%\.claude\projects&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;macOS&lt;/td&gt;
&lt;td&gt;&lt;code&gt;~/.claude/projects&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Linux&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;~/.claude/projects&lt;/code&gt; (or &lt;code&gt;projects/&lt;/code&gt; inside &lt;code&gt;CLAUDE_CONFIG_DIR&lt;/code&gt; if you set it)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Every reply from the model has a &lt;code&gt;usage&lt;/code&gt; block with five numbers that matter for cost:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;input tokens&lt;/strong&gt;: new input that was not cached&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;cache creation tokens&lt;/strong&gt;: input written to the prompt cache, split into 5-minute and 1-hour writes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;cache read tokens&lt;/strong&gt;: input served from the cache&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;output tokens&lt;/strong&gt;: what the model wrote, including thinking&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;model&lt;/strong&gt;: for example &lt;code&gt;claude-opus-5-5&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Two details trip people up. First, the same reply is often written on several lines while it streams, and it can be copied again when you resume a session, so a naive sum counts it more than once. The analyzer keeps one copy per message ID and request ID. Second, the files do not live forever. According to the Claude Code documentation, it deletes transcripts older than &lt;code&gt;cleanupPeriodDays&lt;/code&gt;, and &lt;strong&gt;the default is 30 days&lt;/strong&gt;. If you want a longer history, raise that value in &lt;code&gt;~/.claude/settings.json&lt;/code&gt; before the old files disappear.&lt;/p&gt;

&lt;h2&gt;
  
  
  Four ways to check Claude Code usage
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbvud9oi5nsk8t1ah0jhj.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbvud9oi5nsk8t1ah0jhj.jpg" alt="Four ways to check Claude Code usage: Method, What you see, Install, History by day and project, Plan vs API, Codex and Cursor" width="800" height="496"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbvud9oi5nsk8t1ah0jhj.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbvud9oi5nsk8t1ah0jhj.jpg" alt="Four ways to check Claude Code usage: Method, What you see, Install, History by day and project, Plan vs API, Codex and Cursor" width="800" height="496"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Method&lt;/th&gt;
&lt;th&gt;What you see&lt;/th&gt;
&lt;th&gt;Install&lt;/th&gt;
&lt;th&gt;History by day and project&lt;/th&gt;
&lt;th&gt;Plan vs API&lt;/th&gt;
&lt;th&gt;Codex and Cursor&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;/usage&lt;/code&gt; inside Claude Code&lt;/td&gt;
&lt;td&gt;Plan limit bars, current session, what counts against the limit&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ccusage (&lt;code&gt;npx ccusage&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Daily, monthly and session reports in the terminal&lt;/td&gt;
&lt;td&gt;Node.js&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Focused on Claude Code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CodeBurn (&lt;code&gt;npx codeburn&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Terminal dashboard, many tools&lt;/td&gt;
&lt;td&gt;Node.js&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes, Cursor estimated&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://tokensave.app/claude-code-usage" rel="noopener noreferrer"&gt;TokenSave usage analyzer&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Cost by day, project, model and tool, CSV&lt;/td&gt;
&lt;td&gt;None, runs in the browser&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;/usage&lt;/code&gt; is the right place to check whether you are about to hit a limit. On Pro and Max it also shows what is eating that limit, such as subagents, MCP servers or cache misses. It is not built for looking back over weeks. ccusage and CodeBurn are good if you already live in the terminal; both read the same &lt;code&gt;.jsonl&lt;/code&gt; files. The browser analyzer is for people who would rather not install Node.js, or who want the plan-versus-API comparison on one screen.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to use the analyzer
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft1e57xgeud2bw97tatye.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft1e57xgeud2bw97tatye.jpg" alt="The file picker and the folder paths for Claude Code, Codex and Cursor" width="799" height="357"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open &lt;a href="https://tokensave.app/claude-code-usage" rel="noopener noreferrer"&gt;tokensave.app/claude-code-usage&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Choose folder&lt;/strong&gt; and pick your &lt;code&gt;projects&lt;/code&gt; folder. On Windows, paste &lt;code&gt;%USERPROFILE%\.claude\projects&lt;/code&gt; into the address bar of the folder picker. On a Mac, press ⌘ + Shift + G and paste &lt;code&gt;~/.claude/projects&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Optional: add &lt;code&gt;~/.codex/sessions&lt;/code&gt; for Codex, and a Cursor usage CSV (Cursor dashboard → Usage → Export CSV).&lt;/li&gt;
&lt;li&gt;Read the results. Switch the period between all, 7 days, 30 days and this month, and pick your plan to compare.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A few notes on reading the screen. "Replies" counts model responses after duplicates are removed, not your prompts; one prompt to an agent usually produces many replies, because each tool call and each step is a separate response. "Tokens" adds input, output and both kinds of cache traffic, so it will look enormous next to the size of your actual conversation. The project names come from the working folder recorded in each log, which is why the same repository can appear twice if you opened it from two different paths. If a model has no known price yet, the analyzer lists it under the tables instead of guessing, and the &lt;strong&gt;Download CSV&lt;/strong&gt; button gives you one row per day with every token type and the cost, ready for a spreadsheet.&lt;/p&gt;

&lt;p&gt;Chrome may ask "Upload files to this site?" when you pick a folder. That is the browser's fixed wording for folder access. The page reads the files with the browser's File API and only adds up numbers; your prompts and code never leave the tab, and nothing is sent to a server.&lt;/p&gt;

&lt;h2&gt;
  
  
  What my own logs showed
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkgf08qzlh9or3u7kft0n.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkgf08qzlh9or3u7kft0n.jpg" alt="Analyzer results: API-equivalent cost, tokens, cache savings and cost by tool" width="800" height="473"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I loaded three sets of logs: the Claude agent sessions I used to build and maintain this site (they are written in the same Claude Code format), the Codex sessions on my PC, and the Cursor usage CSV from my account.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Replies&lt;/th&gt;
&lt;th&gt;Tokens&lt;/th&gt;
&lt;th&gt;API-equivalent cost&lt;/th&gt;
&lt;th&gt;Plan I was on&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Claude Code (Opus 5.5)&lt;/td&gt;
&lt;td&gt;1,636&lt;/td&gt;
&lt;td&gt;277.5M&lt;/td&gt;
&lt;td&gt;$145.90&lt;/td&gt;
&lt;td&gt;Max 5×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Codex (GPT-5.6 Terra, GPT-6 Luna)&lt;/td&gt;
&lt;td&gt;108&lt;/td&gt;
&lt;td&gt;6.5M&lt;/td&gt;
&lt;td&gt;$1.98&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cursor (Grok 4.6)&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;379K&lt;/td&gt;
&lt;td&gt;$0.29&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The Claude Code part covers 10 active days between September 29 and October 15. The busiest day, October 8, came to about $39 at API prices.&lt;/p&gt;

&lt;p&gt;The token split was the real surprise. Of 277.5 million tokens, only about 3,000 were fresh input. Around 264 million were cache reads, about 10.8 million were cache writes and 1.8 million were output. In other words, &lt;strong&gt;more than 95% of what Claude Code "used" was the same context being read again from the cache.&lt;/strong&gt; That is how an agent works: on every step it re-sends the conversation, the files it opened and the tool results, and the cache makes that cheap.&lt;/p&gt;

&lt;p&gt;Cheap is not free, though. Here is where the $145.90 went, priced at Opus 5.5 rates:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Part&lt;/th&gt;
&lt;th&gt;Price per 1M tokens&lt;/th&gt;
&lt;th&gt;Share of cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Cache reads&lt;/td&gt;
&lt;td&gt;$0.20&lt;/td&gt;
&lt;td&gt;about 36%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5-minute cache writes&lt;/td&gt;
&lt;td&gt;$5.00&lt;/td&gt;
&lt;td&gt;about 34%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Output&lt;/td&gt;
&lt;td&gt;$20.00&lt;/td&gt;
&lt;td&gt;about 25%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1-hour cache writes&lt;/td&gt;
&lt;td&gt;$8.00&lt;/td&gt;
&lt;td&gt;about 4%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fresh input&lt;/td&gt;
&lt;td&gt;$4.00&lt;/td&gt;
&lt;td&gt;under 1%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Cache reads are 95% cheaper than normal input on Opus 5.5, but there are so many of them that they still made up the largest share. Cache writes were almost as large, because every new file, tool result or long answer has to be written into the cache before it can be read cheaply. Output was only 1.8 million tokens, yet a quarter of the bill, because output costs $20 per million.&lt;/p&gt;

&lt;p&gt;Without the cache, the same cache reads would have cost about $1,017 more at the plain input price. That is the "Saved by caching" figure in the screenshot.&lt;/p&gt;

&lt;h2&gt;
  
  
  Is Claude Max worth it? Plan vs API
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F21rktu4ekeje0ya981o9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F21rktu4ekeje0ya981o9.jpg" alt="Plan comparison: Claude Max 5× for 17 days vs the same usage on the API" width="799" height="153"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The analyzer compares the plan you pick with the API cost of the same tool over the same period. My Claude logs span 17 days. Max 5× is $100 a month before VAT, so 17 days of it is about $56.67. The same tokens on the API would have cost $145.90, which means &lt;strong&gt;I used about 257% of the fee in API value.&lt;/strong&gt; For heavy agent work, the subscription was clearly cheaper than paying per token.&lt;/p&gt;

&lt;p&gt;Two cautions when you read your own result:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Plans have limits.&lt;/strong&gt; Pro and Max reset every 5 hours and also have a weekly cap. If your API-equivalent figure is many times the fee, you are probably hitting those limits, and the real choice is between waiting, upgrading or paying for extra usage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Light users can lose money on a plan.&lt;/strong&gt; My Codex and Cursor usage was on free plans and came to $1.98 and $0.29. If I had paid for ChatGPT Plus ($20 a month) for that Codex usage, the plan would have been worth less than the fee. The analyzer shows this case in amber.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you have never used Claude Code and want a forecast rather than a history, the &lt;a href="https://tokensave.app/agents" rel="noopener noreferrer"&gt;Claude Code cost calculator&lt;/a&gt; estimates a month from task size and tasks per day.&lt;/p&gt;

&lt;h2&gt;
  
  
  Codex and Cursor usage
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Codex&lt;/strong&gt; keeps its logs in &lt;code&gt;~/.codex/sessions/YYYY/MM/DD/&lt;/code&gt;, one &lt;code&gt;rollout-….jsonl&lt;/code&gt; file per session. Instead of one usage block per reply, it writes a running total for the whole session at each step. The analyzer takes the difference between steps and prices it at OpenAI's API rates, with cached input at the cached rate. In my files, GPT-5.6 Terra costs $2 per million input tokens, $0.20 cached and $12 output; GPT-6 Luna costs $0.10, $0.01 and $0.50. Archived sessions are moved to &lt;code&gt;archived_sessions/&lt;/code&gt; with the same name, so the analyzer counts a file name only once.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cursor&lt;/strong&gt; is different. I opened Cursor's local database on my PC, and every conversation had its token count stored as zero. Current builds simply do not keep token counts locally, which is why command-line tools can only estimate Cursor usage from text length. The accurate source is the usage export on the Cursor dashboard: go to Usage and click &lt;strong&gt;Export CSV&lt;/strong&gt;. Each row has the date, model, input with and without cache writes, cache reads, output and the cost Cursor charged. The analyzer uses that cost as it is.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to bring the number down
&lt;/h2&gt;

&lt;p&gt;Knowing that most of the cost is cache traffic and output points to a few habits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Start fresh sessions for new tasks.&lt;/strong&gt; &lt;code&gt;/clear&lt;/code&gt; drops the old context, so the next steps stop re-reading it. Long sessions keep paying cache reads on everything that came before.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use Sonnet for routine work.&lt;/strong&gt; Sonnet 5.5 is $2/$10 per million against Opus 5.5's $4/$20, so the same session costs about 50% less at API prices.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Watch the expensive days.&lt;/strong&gt; The daily chart makes it easy to see which day, and so which kind of task, pushed the cost up.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trim tools you do not use.&lt;/strong&gt; On a plan, &lt;code&gt;/usage&lt;/code&gt; shows which MCP servers and subagents take a share of your limit.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are more ideas in &lt;a href="https://tokensave.app/blog/claude-code-save-tokens" rel="noopener noreferrer"&gt;ways to save tokens in Claude Code&lt;/a&gt;, and the limits themselves are covered in &lt;a href="https://tokensave.app/blog/claude-code-usage-limits" rel="noopener noreferrer"&gt;Claude Code usage limits&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;How do I see my Claude Code usage history?&lt;/strong&gt;&lt;br&gt;
Open your &lt;code&gt;~/.claude/projects&lt;/code&gt; folder with the &lt;a href="https://tokensave.app/claude-code-usage" rel="noopener noreferrer"&gt;usage analyzer&lt;/a&gt;, or run &lt;code&gt;npx ccusage&lt;/code&gt; in a terminal. &lt;code&gt;/usage&lt;/code&gt; inside Claude Code shows the current limits, not a history.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does the analyzer upload my code?&lt;/strong&gt;&lt;br&gt;
No. It reads the files in your browser tab and only sums the token numbers. Nothing is sent anywhere.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why is my API-equivalent cost so much higher than my plan?&lt;/strong&gt;&lt;br&gt;
Agents re-read the whole context on every step, which creates huge cache traffic. On a plan you pay a flat fee, so the API-equivalent figure is what the same tokens would cost if you paid per token.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why does it only show the last month?&lt;/strong&gt;&lt;br&gt;
Claude Code deletes transcripts older than 30 days by default. Raise &lt;code&gt;cleanupPeriodDays&lt;/code&gt; in &lt;code&gt;settings.json&lt;/code&gt; to keep more.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can it read Gemini CLI, Copilot or Windsurf?&lt;/strong&gt;&lt;br&gt;
Not yet. It reads Claude Code, Codex and the Cursor CSV today.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;Claude Code already records every token you use; the hard part is reading it. &lt;code&gt;/usage&lt;/code&gt; tells you how close you are to the limit, while the logs in &lt;code&gt;~/.claude/projects&lt;/code&gt; tell you where the money went. In my own 17 days of agent work, almost all tokens were cache reads, cache traffic made up about three quarters of the API-equivalent cost, and Max 5× returned about 257% of its fee. Codex and Cursor on free plans came to a couple of dollars. If you want to see your own numbers, load your folder into the &lt;a href="https://tokensave.app/claude-code-usage" rel="noopener noreferrer"&gt;usage analyzer&lt;/a&gt; and compare the result with your plan.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://code.claude.com/docs/en/claude-directory" rel="noopener noreferrer"&gt;Claude Code docs: Explore the .claude directory (transcripts and the 30-day cleanup)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://code.claude.com/docs/en/costs" rel="noopener noreferrer"&gt;Claude Code docs: Manage costs effectively (/usage)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://platform.claude.com/docs/en/about-claude/pricing" rel="noopener noreferrer"&gt;Anthropic API pricing (prompt caching rates)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.openai.com/api/docs/pricing" rel="noopener noreferrer"&gt;OpenAI API pricing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://claude.com/pricing" rel="noopener noreferrer"&gt;Claude plans&lt;/a&gt; · &lt;a href="https://cursor.com/pricing" rel="noopener noreferrer"&gt;Cursor pricing&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/ryoppippi/ccusage" rel="noopener noreferrer"&gt;ccusage&lt;/a&gt; · &lt;a href="https://github.com/getagentseal/codeburn" rel="noopener noreferrer"&gt;CodeBurn&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://tokensave.app/blog/check-claude-code-usage" rel="noopener noreferrer"&gt;tokensave.app&lt;/a&gt;. Try the &lt;a href="https://tokensave.app/claude-code-usage" rel="noopener noreferrer"&gt;usage analyzer&lt;/a&gt; with your own logs.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>productivity</category>
      <category>devtools</category>
    </item>
    <item>
      <title>How to Make a Roblox Game in 2026: Step by Step with Roblox AI</title>
      <dc:creator>Johmisking</dc:creator>
      <pubDate>Tue, 13 Oct 2026 07:15:34 +0000</pubDate>
      <link>https://dev.to/jaehyun_cho_0dff271e0d2e5/how-to-make-a-roblox-game-in-2026-step-by-step-with-roblox-ai-468e</link>
      <guid>https://dev.to/jaehyun_cho_0dff271e0d2e5/how-to-make-a-roblox-game-in-2026-step-by-step-with-roblox-ai-468e</guid>
      <description>&lt;p&gt;Most guides on how to make a Roblox game start with "you don't need to know how to code," and then drop you into Roblox Studio, a window with dozens of buttons and no obvious first move. This guide follows one real first session instead. I installed Roblox Studio for the first time on Windows, made a block, got stuck putting a script in the wrong place, and then had Roblox's built-in AI build a disappearing stepping-stone course. Along the way I dropped in a free car from the Creator Store. Every screenshot is from that session. Anything that can change, like system requirements, publishing rules and payouts, was checked against Roblox's official documentation on October 13, 2026.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxnbbiyc44lp4yitnhrs8.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxnbbiyc44lp4yitnhrs8.jpg" alt="Roblox Creator Hub landing page with the Start Creating button" width="800" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What you need to make a Roblox game
&lt;/h2&gt;

&lt;p&gt;Roblox games are made in &lt;strong&gt;Roblox Studio&lt;/strong&gt;, a free app. Roblox's official requirements:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Minimum&lt;/th&gt;
&lt;th&gt;Recommended&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Operating system&lt;/td&gt;
&lt;td&gt;Windows 10, macOS 10.14&lt;/td&gt;
&lt;td&gt;Windows 11, macOS 14+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Memory (RAM)&lt;/td&gt;
&lt;td&gt;3 GB&lt;/td&gt;
&lt;td&gt;8 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Screen resolution&lt;/td&gt;
&lt;td&gt;1600×900 or higher&lt;/td&gt;
&lt;td&gt;1600×900 or higher&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Price&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;You also need a Roblox account. Your normal player account works, and if you don't have one you can create it during setup. Studio runs &lt;strong&gt;only on Windows and Mac&lt;/strong&gt;. If you want to make a game on a phone or iPad, see "Making a Roblox game on mobile" further down.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Install Roblox Studio and sign in
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;On the Creator Hub (create.roblox.com), click &lt;strong&gt;Start Creating&lt;/strong&gt;, then &lt;strong&gt;Download Studio&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Run the installer: &lt;code&gt;RobloxStudioInstaller.exe&lt;/code&gt; on Windows, &lt;code&gt;RobloxStudio.dmg&lt;/code&gt; on Mac. Windows shows a security prompt; check that the publisher is Roblox Corporation and click Run.&lt;/li&gt;
&lt;li&gt;When the install finishes, Studio opens on a sign-in screen.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fod5h662x5c29lewz4p3o.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fod5h662x5c29lewz4p3o.jpg" alt="Roblox Studio sign-in screen" width="799" height="505"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;Log In&lt;/strong&gt; and a browser opens. If you're new, choose &lt;strong&gt;Create account&lt;/strong&gt;, then enter a birthday, username and password. The username field itself warns you not to use your real name.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fezh0949d6zgb2eycgcnm.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fezh0949d6zgb2eycgcnm.jpg" alt="Roblox account sign-up screen" width="799" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After that you'll see a "Continue to Roblox Studio" screen and the Terms of Service. Accept them and Studio opens on its start page. It offers a guided tour, which you can skip.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Pick a template
&lt;/h2&gt;

&lt;p&gt;Click &lt;strong&gt;New Experience&lt;/strong&gt; or &lt;strong&gt;Templates&lt;/strong&gt; to see starting maps. My list had 15:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F09dhw8ja342u8517bojf.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F09dhw8ja342u8517bojf.jpg" alt="Roblox Studio template list" width="799" height="505"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Templates&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Empty maps&lt;/td&gt;
&lt;td&gt;Baseplate, Classic Baseplate, Flat Terrain&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Game genres&lt;/td&gt;
&lt;td&gt;Platformer, Laser Tag, FPS System, Racing, Classic Obby&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Worlds&lt;/td&gt;
&lt;td&gt;Village, Castle, Suburban, Pirate Island, Starting Place, Modern City&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Other&lt;/td&gt;
&lt;td&gt;UGC Homestore&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For a first project, &lt;strong&gt;Baseplate&lt;/strong&gt; is the easiest. It's just a floor and a SpawnLocation (where your character appears), so you can see exactly what you add. If you already know you want an obby or a racing game, starting from Classic Obby or Racing and editing it is faster.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Add a block and change its color
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcbn9pc99pyzkpt20vt8o.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcbn9pc99pyzkpt20vt8o.jpg" alt="Baseplate with the SpawnLocation recolored" width="799" height="505"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Studio window has four areas you'll use constantly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;3D viewport (center):&lt;/strong&gt; your map. Hold the right mouse button and drag to turn the camera; move with W, A, S and D.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Home tab (top):&lt;/strong&gt; Part, Move, Scale, Rotate, Color and Anchor.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Explorer (right):&lt;/strong&gt; every object in the game as a tree. Anything under &lt;strong&gt;Workspace&lt;/strong&gt; is physically in the map.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Properties (bottom right):&lt;/strong&gt; values of the selected object, such as Color, Material and Transparency.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Click &lt;strong&gt;Part&lt;/strong&gt; on the Home tab and a gray block appears. Click Color in Properties to open the color picker; I tried it on the SpawnLocation and turned it lime green. Click &lt;strong&gt;Anchor&lt;/strong&gt; so the block can't roll or be pushed. Press the blue ▶ (Play) to test with your own character.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Add a script, and where I got stuck
&lt;/h2&gt;

&lt;p&gt;To make a block &lt;em&gt;do&lt;/em&gt; something you need a &lt;strong&gt;script&lt;/strong&gt;, written in Luau, Roblox's version of Lua. This one makes a block go see-through when a player steps on it, then disappear a second later:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;part&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;script&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Parent&lt;/span&gt;
&lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;touched&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;

&lt;span class="n"&gt;part&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Touched&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;Connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hit&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;touched&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt;
    &lt;span class="kd"&gt;local&lt;/span&gt; &lt;span class="n"&gt;humanoid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;hit&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Parent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;FindFirstChildOfClass&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Humanoid"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;humanoid&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
        &lt;span class="n"&gt;touched&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
        &lt;span class="n"&gt;part&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Transparency&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;
        &lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;wait&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;part&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;Destroy&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To add it, hover over your Part in the Explorer, click &lt;strong&gt;+ → Script&lt;/strong&gt;, delete the &lt;code&gt;print("Hello world!")&lt;/code&gt; line in the editor and paste the code.&lt;/p&gt;

&lt;p&gt;That sounds simple. It wasn't. I pressed Play, stepped on the block, and nothing happened. The Output window showed this in red:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frrs69htgg1jtvmluuiuc.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frrs69htgg1jtvmluuiuc.jpg" alt="Output window showing " width="799" height="505"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Three things had gone wrong at once:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What you see&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;th&gt;Fix&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Touched is not a valid member of Workspace&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The script sits directly under Workspace, not inside the Part, so &lt;code&gt;script.Parent&lt;/code&gt; is Workspace&lt;/td&gt;
&lt;td&gt;Drag the Script onto the Part in the Explorer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nothing runs at all&lt;/td&gt;
&lt;td&gt;One stray character (&lt;code&gt;s&lt;/code&gt;) pasted on the last line; a single typo stops the whole script&lt;/td&gt;
&lt;td&gt;Delete it&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Your fixes vanish&lt;/td&gt;
&lt;td&gt;You edited while Play mode was running&lt;/td&gt;
&lt;td&gt;Press the red ■ (Stop) first, then edit&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The parent-child tree in the Explorer is the most confusing part for a beginner. On my next try the script landed under the Baseplate and the new blocks ended up nested under a Texture. At that point I switched to the easier route: Roblox's AI.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Make the game with Roblox Assistant (AI)
&lt;/h2&gt;

&lt;p&gt;Roblox Studio has a built-in AI called &lt;strong&gt;Assistant&lt;/strong&gt;. According to Roblox's docs it answers questions, creates and edits objects and scripts, inserts Creator Store assets and generates 3D models. Click &lt;strong&gt;Assistant&lt;/strong&gt; at the right end of the top bar and a chat panel opens.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fleey825vhalnk47ewcek.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fleey825vhalnk47ewcek.jpg" alt="Roblox Studio with the Assistant panel open" width="799" height="505"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You just describe what you want. I sent four requests:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;"Make a red block, put it in front of the spawn point, and when a player steps on it make it go half-transparent and disappear after 1 second."&lt;/li&gt;
&lt;li&gt;Edit: add a respawn so the block comes back after it disappears.&lt;/li&gt;
&lt;li&gt;Make 10 of them in a line as stepping stones.&lt;/li&gt;
&lt;li&gt;Edit: give all 10 the same behavior as the first block, including the respawn.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe68tbur0qf9fcqfltq6b.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe68tbur0qf9fcqfltq6b.jpg" alt="The red block Assistant created" width="799" height="505"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Each request took &lt;strong&gt;15 to 30 seconds&lt;/strong&gt;. The disappearing block I'd failed to wire up by hand came out right on the first request, with the script already inside the block.&lt;/p&gt;

&lt;p&gt;After the third request Assistant summarized what it built: 3×1×3 pads, 4 studs apart so you can jump between them, ten in a row starting in front of the spawn, grouped in a folder called RedSteppingStones. Then it asked whether it should give the stepping stones the same disappear-and-respawn behavior.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ficao6xnhhd7pkl5ftec3.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ficao6xnhhd7pkl5ftec3.jpg" alt="Ten red stepping stones built by Assistant" width="799" height="505"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After the fourth request the course worked as asked. Each stone turns see-through when you land on it, disappears a second later, and comes back three seconds after that.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5o3prxu3agpegkmp4qog.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5o3prxu3agpegkmp4qog.gif" alt="Stepping stones disappearing as the character crosses them" width="400" height="191"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmrip9xpyxz8exrkmoq1f.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmrip9xpyxz8exrkmoq1f.jpg" alt="Playtesting the stepping-stone course" width="799" height="505"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By the screenshot timestamps, it took about 15 minutes from opening Assistant to running across all ten stones. That was less than the time I'd spent fighting with one script by hand.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to write requests that work.&lt;/strong&gt; Roblox's own Build guide says to be specific about how the game plays. A request like the first one above, with the color, position, trigger and timing in one sentence, needs fewer corrections than "make a fun obby."&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6: Save your game
&lt;/h2&gt;

&lt;p&gt;There are two ways to save:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;File → Save As:&lt;/strong&gt; saves a &lt;code&gt;.rbxl&lt;/code&gt; file on your computer. That's what I did.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;File → Publish:&lt;/strong&gt; uploads the game to Roblox's cloud and ties it to your account, so you can keep working from any computer. A published game is still private: only you and people with edit access can join until you release it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Add a free car from the Creator Store
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;Toolbox&lt;/strong&gt; on the left searches the Creator Store, where people share models. Plenty are free and some are paid. I searched for a car, inserted the free "Drift Car mobile", and it drove straight away, speedometer included.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqwwmfsr3p29puedhzk9i.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqwwmfsr3p29puedhzk9i.jpg" alt="Inserting a free car model from the Creator Store" width="799" height="505"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuuu1bq0j0rrplbcmj8ea.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuuu1bq0j0rrplbcmj8ea.jpg" alt="Driving the free car in a playtest" width="799" height="505"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Models made by other people often come with scripts inside. After inserting one, look in the Explorer to see what came with it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Is Roblox's AI free? Usage, API keys and MCP
&lt;/h2&gt;

&lt;p&gt;Open the &lt;strong&gt;…&lt;/strong&gt; menu at the top right of the Assistant panel to get to Assistant settings. It has four tabs: Usage, API key, MCP servers and Skills.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq9i7yplnlakdfai13uuu.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq9i7yplnlakdfai13uuu.jpg" alt="Assistant usage screen showing 6% of the free allowance used" width="800" height="565"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Usage.&lt;/strong&gt; There is a free allowance bar. After all four requests above it read &lt;strong&gt;6% used&lt;/strong&gt;, &lt;strong&gt;resets in 6 days&lt;/strong&gt;. You can switch on buying extra usage with Robux and set a daily spending cap. On my screen that switch was off and the cap field showed 500 Robux. Roblox's docs don't publish the exact size of the free allowance, so treat the 6% as a rough measure of what a small feature costs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzauk0vef5jt8qhccysj3.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzauk0vef5jt8qhccysj3.jpg" alt="Assistant API key settings" width="800" height="565"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;API key.&lt;/strong&gt; The default model is "Roblox default" and follows a daily limit. You can instead plug in your own Anthropic (Claude), OpenAI or Google API key. Then you pay that company's API rates, and Studio warns that your data goes to that provider. To estimate what that costs, run your prompts through the &lt;a href="https://tokensave.app/" rel="noopener noreferrer"&gt;token cost calculator&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3ugsf9w9o4fewo8u5fky.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3ugsf9w9o4fewo8u5fky.jpg" alt="Assistant MCP server settings" width="800" height="565"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MCP server.&lt;/strong&gt; Turn on "Use Studio as MCP server" and an outside AI coding tool can drive your open Studio session. Per Roblox's docs it can read and edit scripts, run Luau code, start and stop playtests, move the character, simulate keyboard and mouse input and capture the viewport. Quick connect supports Antigravity, Codex CLI, Claude Code, Claude Desktop, Cursor, Gemini CLI and Visual Studio Code. My screen only listed the four I had installed. For costs, see &lt;a href="https://tokensave.app/blog/claude-code-cost-per-month" rel="noopener noreferrer"&gt;Claude Code pricing&lt;/a&gt; and &lt;a href="https://tokensave.app/blog/codex-pricing" rel="noopener noreferrer"&gt;Codex pricing&lt;/a&gt;. How the tools compare on the same task is in &lt;a href="https://tokensave.app/blog/claude-code-vs-codex-vs-cursor-cost" rel="noopener noreferrer"&gt;Claude Code vs Codex vs Cursor&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Making a Roblox game on mobile: Build
&lt;/h2&gt;

&lt;p&gt;Studio is desktop-only, but in July 2026 Roblox added &lt;strong&gt;Build&lt;/strong&gt; to the mobile app. According to Roblox's docs, you describe a game in the Build tab and the AI generates gameplay, characters, environment, sound and achievements, and you can publish with one tap. For now it focuses on &lt;strong&gt;2D and 2.5D games&lt;/strong&gt; such as clickers, arcade games and side-scrollers. You get a set number of free prompts per day and can buy more with Robux.&lt;/p&gt;

&lt;h2&gt;
  
  
  Releasing your game and earning from it
&lt;/h2&gt;

&lt;p&gt;I didn't release this test game, but here is what Roblox's docs require:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Release to ages 16+:&lt;/strong&gt; your account must be at least 2 days old and you must complete an age check (facial age estimation or government ID). Answer the content-maturity question in the Publish window and the game goes live.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Release to all ages:&lt;/strong&gt; everything above, plus verifying your account, turning on 2FA, and either 2 consecutive months of Roblox Plus or Premium or a refundable 1,000 Robux publishing fee. You get the fee back if the game keeps 25 highly engaged players for 60 days.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Earning:&lt;/strong&gt; you earn Robux from passes, developer products, subscriptions, paid private servers and more, and turn it into money through the Developer Exchange (DevEx). The standard rate is $0.0038 per Robux, so 30,000 Robux = $114. You need to be at least 13 and have at least 30,000 earned Robux to cash out.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What it was actually like
&lt;/h2&gt;

&lt;p&gt;With Assistant, a first-timer can go from installing Studio to a working disappearing stepping-stone course in a little over an hour. My honest take after the session:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;To make a proper game, the free allowance probably isn't enough. The Assistant panel is narrower than I expected. It doesn't cover the game view, but it would have been nice to pop just the Assistant out into its own window. With free assets and templates, plus paid ones, there's a lot of variety, so building looks easy.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;One small feature used 6% of the free allowance. A game with a full map, a shop and saved progress will likely need more than the free tier through Assistant alone. For bigger builds, plan on buying extra usage with Robux or connecting Claude Code or Codex over MCP.&lt;/p&gt;

&lt;h2&gt;
  
  
  How long will your game take, and what will it cost?
&lt;/h2&gt;

&lt;p&gt;A stepping-stone course is a starting point. A real game's time and cost depend on genre and size. In the &lt;a href="https://tokensave.app/ai-game-cost-calculator" rel="noopener noreferrer"&gt;AI game cost calculator&lt;/a&gt;, choose Roblox as the platform and enter your genre and scope. It returns the expected build time, AI tool costs and a ready-to-paste kickoff prompt. If you don't have an idea yet, start from &lt;a href="https://tokensave.app/blog/roblox-trending-games" rel="noopener noreferrer"&gt;what's trending on Roblox right now&lt;/a&gt;. Real numbers from games I built solo with AI are in &lt;a href="https://tokensave.app/blog/indie-game-development-cost" rel="noopener noreferrer"&gt;indie game development cost&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is it free to make a Roblox game?&lt;/strong&gt;&lt;br&gt;
Installing Studio, building and publishing to the cloud are free. Assistant has a free allowance; past it you buy more with Robux. Releasing to all ages requires a Plus or Premium subscription or a refundable 1,000 Robux fee.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I need to know how to code?&lt;/strong&gt;&lt;br&gt;
Not for simple games. The stepping-stone course here was built without writing a line of code, just by describing it to Assistant. Knowing how to read the Explorer tree (what sits inside what) saves a lot of time when something breaks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I make a Roblox game on my phone or iPad?&lt;/strong&gt;&lt;br&gt;
Roblox Studio is Windows and Mac only. On a phone, the Build feature in the Roblox app makes 2D and 2.5D games with AI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do I show my game to friends before releasing it?&lt;/strong&gt;&lt;br&gt;
Use File → Invite early testers to invite up to 10 similar-aged friends to a preview.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Sources: Roblox Creator Hub, &lt;a href="https://create.roblox.com/docs/studio/setup" rel="noopener noreferrer"&gt;Studio setup&lt;/a&gt;, &lt;a href="https://create.roblox.com/docs/production/publishing/publish-experiences-and-places" rel="noopener noreferrer"&gt;Create and publish games and places&lt;/a&gt;, &lt;a href="https://create.roblox.com/docs/assistant/guide" rel="noopener noreferrer"&gt;Assistant for Studio&lt;/a&gt;, &lt;a href="https://create.roblox.com/docs/studio/mcp" rel="noopener noreferrer"&gt;Connect to the Studio MCP server&lt;/a&gt;, &lt;a href="https://create.roblox.com/docs/ai/build" rel="noopener noreferrer"&gt;Create games with Build&lt;/a&gt; and &lt;a href="https://create.roblox.com/docs/production/monetization/developer-exchange" rel="noopener noreferrer"&gt;Developer Exchange&lt;/a&gt;, checked October 13, 2026. Screenshots taken October 13, 2026 on Windows 11.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://tokensave.app/blog/how-to-make-a-roblox-game-with-ai" rel="noopener noreferrer"&gt;tokensave.app&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>roblox</category>
      <category>gamedev</category>
      <category>ai</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Claude Opus 5.5 Effort Levels Tested: Low to Max</title>
      <dc:creator>Johmisking</dc:creator>
      <pubDate>Fri, 09 Oct 2026 11:06:54 +0000</pubDate>
      <link>https://dev.to/jaehyun_cho_0dff271e0d2e5/claude-opus-55-effort-levels-tested-low-to-max-4p97</link>
      <guid>https://dev.to/jaehyun_cho_0dff271e0d2e5/claude-opus-55-effort-levels-tested-low-to-max-4p97</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flta205b7o3yujpy0hmx3.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flta205b7o3yujpy0hmx3.jpg" alt="Claude Opus 5.5 Effort Levels Tested: Low to Max" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm a solo developer in Korea who builds games with AI. Claude Opus 5.5 has five effort levels, so I ran the same prompt at every one of them and measured it.&lt;/p&gt;

&lt;p&gt;Claude &lt;strong&gt;Opus 5.5&lt;/strong&gt; has an &lt;strong&gt;effort&lt;/strong&gt; setting that controls how deeply it thinks, with five levels: low, medium, high, xhigh and max. Higher levels are supposed to give better results, but the official docs give no numbers for how much extra time and money each level costs. So on October 9, 2026 we ran the same game-building request once at each level and compared time, tokens, cost and the result. The fastest level took 32 seconds and the slowest took 22 minutes. Here is what changed at each level and which level to use for which task, along with hands-on experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  What effort is
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It sets how much the model thinks.&lt;/strong&gt; Thinking can't be turned off on Opus 5.5; effort controls how deep it goes. Thinking tokens are billed as output tokens.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The default is medium.&lt;/strong&gt; Opus 5 defaulted to high; Opus 5.5 defaults to one level lower, medium (per Anthropic's docs).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How to change it:&lt;/strong&gt; in Claude Code use the &lt;code&gt;--effort&lt;/code&gt; option (low to max); in the API set the &lt;code&gt;effort&lt;/code&gt; value.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How we measured
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model:&lt;/strong&gt; Claude Opus 5.5 in Claude Code on a Windows PC&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prompt (verbatim):&lt;/strong&gt; "Make a brick-breaker game that runs in the browser as a single file named index.html in the current folder. It needs 2 levels, a score display and 3 lives, and it must be playable with the keyboard and the mouse. Write the file and finish."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Method:&lt;/strong&gt; the same prompt five times, changing only effort. Each level ran in its own folder so runs could not affect each other.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Measurement:&lt;/strong&gt; tokens and cost with the free tool ccusage, time from start and end timestamps. Cost is converted at API prices.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Results: time, tokens and cost
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fod43mddsatf755w3sga9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fod43mddsatf755w3sga9.jpg" alt="Results: time, tokens and cost: Effort, Time, Output tokens, Total tokens, Cost, Game code" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Effort&lt;/th&gt;
&lt;th&gt;Time&lt;/th&gt;
&lt;th&gt;Output tokens&lt;/th&gt;
&lt;th&gt;Total tokens&lt;/th&gt;
&lt;th&gt;Cost&lt;/th&gt;
&lt;th&gt;Game code&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;low&lt;/td&gt;
&lt;td&gt;32 s&lt;/td&gt;
&lt;td&gt;3,368&lt;/td&gt;
&lt;td&gt;129,315&lt;/td&gt;
&lt;td&gt;$0.48&lt;/td&gt;
&lt;td&gt;138 lines&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;medium (default)&lt;/td&gt;
&lt;td&gt;52 s&lt;/td&gt;
&lt;td&gt;6,299&lt;/td&gt;
&lt;td&gt;133,428&lt;/td&gt;
&lt;td&gt;$0.56&lt;/td&gt;
&lt;td&gt;358 lines&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;high&lt;/td&gt;
&lt;td&gt;1 min 50 s&lt;/td&gt;
&lt;td&gt;12,376&lt;/td&gt;
&lt;td&gt;222,854&lt;/td&gt;
&lt;td&gt;$0.75&lt;/td&gt;
&lt;td&gt;523 lines&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;xhigh&lt;/td&gt;
&lt;td&gt;4 min 32 s&lt;/td&gt;
&lt;td&gt;32,435&lt;/td&gt;
&lt;td&gt;472,082&lt;/td&gt;
&lt;td&gt;$1.36&lt;/td&gt;
&lt;td&gt;639 lines&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;max&lt;/td&gt;
&lt;td&gt;22 min 22 s&lt;/td&gt;
&lt;td&gt;160,033&lt;/td&gt;
&lt;td&gt;2,504,957&lt;/td&gt;
&lt;td&gt;$5.25&lt;/td&gt;
&lt;td&gt;1,121 lines&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Low and medium are almost the same.&lt;/strong&gt; Low cost 14% less and took 38% less time, but that is 8 cents.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High cost only 34% more than medium.&lt;/strong&gt; Time went from 52 seconds to 1 minute 50 seconds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;xhigh is where costs jump.&lt;/strong&gt; It cost 143% more than medium and took 4 minutes 32 seconds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Max is in a league of its own.&lt;/strong&gt; Medium took 52 seconds and $0.56; max took 22 minutes 22 seconds and $5.25. Output tokens went from 6,299 to 160,033.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbrd2z1ic1sjfbitit61g.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbrd2z1ic1sjfbitit61g.jpg" alt="Time and cost by effort level: from low at 32 s and $0.48 to max at 22 min 22 s and $5.25" width="799" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffmitmaogy59l6emb3z2f.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffmitmaogy59l6emb3z2f.jpg" alt="ccusage measurement record: tokens and cost for the five Opus 5.5 effort levels" width="800" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The five games side by side
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy2nc8w2erxtae8j5hgml.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy2nc8w2erxtae8j5hgml.jpg" alt="The five brick-breaker games built at each Opus 5.5 effort level, side by side" width="800" height="514"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;All five games ran without errors and met the request: 2 levels, score, 3 lives, keyboard and mouse controls. The differences are in what each level added on top.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Effort&lt;/th&gt;
&lt;th&gt;What it added&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;low&lt;/td&gt;
&lt;td&gt;Single-color bricks, the plainest screen, no pause&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;medium&lt;/td&gt;
&lt;td&gt;Rainbow bricks, pause, restart&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;high&lt;/td&gt;
&lt;td&gt;+ particle effects, saved best score&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;xhigh&lt;/td&gt;
&lt;td&gt;Particle effects, more polished design (no saved best score)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;max&lt;/td&gt;
&lt;td&gt;+ sound effects, level names, an invader-shaped level 2, screen shake, victory fireworks&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;From high up, the model tried to check its own work.&lt;/strong&gt; High and xhigh tried a code syntax check, and max tried an automated play test. All three needed permission to run, so none actually ran; each says it re-read the code instead. Low and medium finished without checking.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bricks that take two hits&lt;/strong&gt; appeared at every level even though we did not ask for them.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Level-by-level review
&lt;/h2&gt;

&lt;p&gt;We played each game and checked it against the summary the model left at the end and the code itself.&lt;/p&gt;

&lt;h3&gt;
  
  
  low: 32 seconds, $0.48
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw624hraf2g2yqf11oiz9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw624hraf2g2yqf11oiz9.jpg" alt="Start screen and gameplay of the game built at effort low" width="800" height="388"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What it built:&lt;/strong&gt; level 1 is four rows of blue bricks; level 2 mixes orange bricks that take two hits with gaps, and the ball is faster. It has level-clear, game-over and win screens and a restart.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Good:&lt;/strong&gt; every requested feature is there, and where the ball hits the paddle changes its angle. Done in 32 seconds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Weak:&lt;/strong&gt; black background and single-color bricks make it the plainest. No pause, and at 138 lines the shortest code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use it when:&lt;/strong&gt; you just need to check that something works and will polish it later.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  medium: 52 seconds, $0.56 (default)
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8bzcfndmq31y6wdh42yw.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8bzcfndmq31y6wdh42yw.jpg" alt="Start screen and gameplay of the game built at effort medium" width="800" height="388"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What it built:&lt;/strong&gt; level 1 is a 5×10 rainbow grid; level 2 has gaps and bricks that take 2 or 3 hits, showing hits left and fading as they take damage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Good:&lt;/strong&gt; pause (P or Esc), restart (Enter) and auto-pause when the window loses focus. Scoring depends on brick strength and level.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Weak:&lt;/strong&gt; no sound or particle effects.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use it when:&lt;/strong&gt; most of the time. It costs 8 cents more than low and is a clear step up.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  high: 1 minute 50 seconds, $0.75
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbvm0sbwrr23s6w0gpwy2.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbvm0sbwrr23s6w0gpwy2.jpg" alt="Start screen and gameplay of the game built at effort high" width="800" height="388"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What it built:&lt;/strong&gt; level 2 is a diamond pattern of bricks that take 2 or 3 hits, and bricks throw particles when they break.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Good:&lt;/strong&gt; a level-clear bonus, a bonus for lives left, a saved best score and touch controls. It also tried a syntax check on its own code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Weak:&lt;/strong&gt; it took 112% longer than medium (52 seconds to 1 minute 50 seconds).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use it when:&lt;/strong&gt; you need a prototype to show people or coding where quality matters. It cost only 34% more than medium.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  xhigh: 4 minutes 32 seconds, $1.36
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk0kt8i8jye7inca56z2c.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk0kt8i8jye7inca56z2c.jpg" alt="Start screen and gameplay of the game built at effort xhigh" width="800" height="388"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What it built:&lt;/strong&gt; level 2 is a diamond ringed with steel bricks that crack after the first hit. Bricks are worth 10 to 50 points by color.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Good:&lt;/strong&gt; the tidiest-looking screen, and mixing mouse and keyboard works smoothly: whichever you used last moves the paddle.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Weak:&lt;/strong&gt; it dropped the saved best score and touch controls that high had. It cost 143% more than medium without adding features over high.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use it when:&lt;/strong&gt; not for small tasks like this. Per Anthropic, it suits long-running work.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  max: 22 minutes 22 seconds, $5.25
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8weebgawdkbdtz3sv3xo.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8weebgawdkbdtz3sv3xo.jpg" alt="Start screen and gameplay of the game built at effort max" width="800" height="388"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What it built:&lt;/strong&gt; named levels ("Rainbow Wall", "Space Invader"), an invader-shaped level 2 whose 14 silver bricks take two hits, and a narrower paddle on level 2.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Good:&lt;/strong&gt; sound effects (M to toggle), saved best score, touch controls, screen shake, victory fireworks and auto-pause: the most of any level. It looks like a finished game.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Weak:&lt;/strong&gt; by far the slowest, partly because it tried to run an automated play test that needed permission.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use it when:&lt;/strong&gt; quality matters most and you have time and limits to spare, or nothing else solves the problem.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Hands-on: medium day to day, high for coding
&lt;/h2&gt;

&lt;p&gt;I use Opus 5.5 on the Claude Max 20x plan to build games. This is how it feels in daily use, not a measurement.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;My setting:&lt;/strong&gt; I leave effort on auto. It usually runs at medium and goes up to high when I'm coding.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;low:&lt;/strong&gt; it felt sluggish, so I used it a few times and stopped.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;high:&lt;/strong&gt; the results are clearly better.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;xhigh and max:&lt;/strong&gt; I tried them about once and rarely have a reason to use them.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Compared with the measurements, low was actually the fastest but gave the plainest result, so the sluggish feeling was about the output rather than speed. The sense that high gives better results, and that xhigh and max are rarely needed, matched the numbers.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Anthropic recommends
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Medium is strong.&lt;/strong&gt; In Anthropic's testing, Opus 5.5 at medium matched or beat Opus 5 at high on coding and knowledge work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Low comes close to medium on coding,&lt;/strong&gt; at much lower cost, according to Anthropic. In our test the difference in output was noticeable.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reserve xhigh and max for work where you've measured a quality gain.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Changing effort mid-conversation can break the prompt cache.&lt;/strong&gt; In the API, use a per-message effort change to keep the cache.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Independent testing agrees.&lt;/strong&gt; Artificial Analysis found Opus 5.5 at max effort used 63% more output tokens per task than Opus 5 (per press reports).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Which effort for which task
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnbsuczokvez04b2f4hth.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnbsuczokvez04b2f4hth.jpg" alt="Which effort for which task: Task, Recommended effort, Why" width="800" height="553"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Our recommendations, combining the measurements, my experience and Anthropic's guidance:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Task&lt;/th&gt;
&lt;th&gt;Recommended effort&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Simple edits, renaming, tidying files&lt;/td&gt;
&lt;td&gt;low or medium&lt;/td&gt;
&lt;td&gt;Fast and cheap, but low's output is plain&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Everyday coding and new features&lt;/td&gt;
&lt;td&gt;medium (default)&lt;/td&gt;
&lt;td&gt;Usable results in 52 seconds for $0.56&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Game or app prototypes, coding where quality matters&lt;/td&gt;
&lt;td&gt;high&lt;/td&gt;
&lt;td&gt;34% more cost for clearly better output&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Runs over 30 minutes, big refactors&lt;/td&gt;
&lt;td&gt;xhigh&lt;/td&gt;
&lt;td&gt;Per Anthropic's guidance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hard problems nothing else solves&lt;/td&gt;
&lt;td&gt;max&lt;/td&gt;
&lt;td&gt;Only when needed: time and cost jump&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Start at medium.&lt;/strong&gt; Move only the tasks where the result falls short up to high.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;On a plan, think in limits.&lt;/strong&gt; The higher the API-equivalent cost, the faster your Max or Pro limit drains. One max run used more than nine medium runs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Caveat:&lt;/strong&gt; one run per level on a fairly small task. Bigger projects may show different gaps.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion: medium by default, high when it matters
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Default: medium.&lt;/strong&gt; Usable results in 52 seconds for $0.56.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When quality matters: high.&lt;/strong&gt; Only 34% more than medium for clearly better output. The best value of the five.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;xhigh: skip it for small tasks.&lt;/strong&gt; 143% more than medium but no more features than high. Worth it only for long runs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;max: only when you need it.&lt;/strong&gt; The flashiest result, but 22 minutes and $5.25.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;low: not recommended.&lt;/strong&gt; Saving 8 cents over medium just gets you a plainer result.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is Opus 5.5's default effort?&lt;/strong&gt;&lt;br&gt;
Medium. Opus 5 defaulted to high. API requests that don't set effort run at medium on Opus 5.5.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is max always better?&lt;/strong&gt;&lt;br&gt;
In our test it added the most features and polish, but took 22 minutes and $5.25 versus 52 seconds and $0.56 for medium. Too much for simple work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does low save a lot?&lt;/strong&gt;&lt;br&gt;
In our test low was only 14% cheaper than medium. Given the plainer result, medium is the better choice.&lt;/p&gt;

&lt;h2&gt;
  
  
  Calculate it for your own work
&lt;/h2&gt;

&lt;p&gt;In the &lt;a href="https://tokensave.app/agents" rel="noopener noreferrer"&gt;coding agent cost calculator&lt;/a&gt;, enter task size and tasks per day to see a month on Opus 5.5. Check a single prompt's cost in the &lt;a href="https://tokensave.app/" rel="noopener noreferrer"&gt;token counter&lt;/a&gt;. For price and performance differences between Opus 5 and 5.5, see &lt;a href="https://tokensave.app/blog/claude-opus-5-vs-5-5" rel="noopener noreferrer"&gt;Claude Opus 5 vs 5.5&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Measured October 9, 2026. Cost is ccusage's conversion at API prices; results may change with model and Claude Code updates.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://platform.claude.com/docs/en/build-with-claude/effort#recommended-effort-levels-for-claude-opus-5-5" rel="noopener noreferrer"&gt;Anthropic: Effort&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-claude-opus-5-5" rel="noopener noreferrer"&gt;Anthropic: Prompting Claude Opus 5.5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://platform.claude.com/docs/en/models/opus-5-5/migration-guide" rel="noopener noreferrer"&gt;Anthropic: Migrating from Claude Opus 5 to Opus 5.5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://officechai.com/ai/claude-opus-5-5-creates-5-point-lead-over-gpt-6-astra-jumps-to-top-spot-on-artificial-analysis-intelligence-index/" rel="noopener noreferrer"&gt;OfficeChai: Artificial Analysis Intelligence Index report&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ryoppippi/ccusage" rel="noopener noreferrer"&gt;ccusage: Claude Code usage tool (GitHub)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://tokensave.app/blog/claude-opus-5-5-effort" rel="noopener noreferrer"&gt;tokensave.app&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>llm</category>
      <category>gamedev</category>
    </item>
    <item>
      <title>3 Days to Build, 14 Days to Debug: The 14 Bugs I Fixed in My Vibe-Coded Game (Google Play Closed Testing)</title>
      <dc:creator>Johmisking</dc:creator>
      <pubDate>Thu, 08 Oct 2026 10:27:25 +0000</pubDate>
      <link>https://dev.to/jaehyun_cho_0dff271e0d2e5/3-days-to-build-14-days-to-debug-the-14-bugs-i-fixed-in-my-vibe-coded-game-google-play-closed-3ncm</link>
      <guid>https://dev.to/jaehyun_cho_0dff271e0d2e5/3-days-to-build-14-days-to-debug-the-14-bugs-i-fixed-in-my-vibe-coded-game-google-play-closed-3ncm</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsqnge7ujft4uhv28qiro.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsqnge7ujft4uhv28qiro.jpg" alt="3 days to build, 14 days to debug — Sperm Race dev log, part 2" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In &lt;a href="https://tokensave.app/blog/vibe-coding-a-game-beginner" rel="noopener noreferrer"&gt;part 1&lt;/a&gt; I made a game in 3 days with zero coding experience, just by describing it to an AI. I was ready to hit "publish" when Google Play stopped me: a new personal developer account has to run a &lt;strong&gt;closed test with at least 12 testers for 14 days&lt;/strong&gt; before it can launch.&lt;/p&gt;

&lt;p&gt;Fourteen days. More than four times longer than building the game. Instead of just waiting, I decided to play it every day. And I found out that without those 14 days, launch would have been a disaster.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3 days to build, 14 days to debug.&lt;/strong&gt; This is the story of the 14 bugs I fixed, from building through the closed test to after launch.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Google Play's 14-day closed test?
&lt;/h2&gt;

&lt;p&gt;If you created a &lt;strong&gt;personal&lt;/strong&gt; Google Play developer account after November 13, 2023, you have to run a closed test before your app can go to production.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Testers:&lt;/strong&gt; at least 12 people who opted in&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Duration:&lt;/strong&gt; those testers stay opted in for 14 days&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Then:&lt;/strong&gt; apply for production access from the Play Console dashboard&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Organization accounts don't have this requirement. I found about 20 testers through &lt;strong&gt;test-for-test swaps&lt;/strong&gt; with other indie developers. A lot of solo developers treat these 14 days as dead time. For me, they were the last chance to catch bugs before launch.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F208h13aa22xs2auwzqob.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F208h13aa22xs2auwzqob.jpg" alt="The road to launch: 3 days to build, 14-day closed test, after launch" width="800" height="473"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Sperm Race's code, by the numbers
&lt;/h2&gt;

&lt;p&gt;I counted the code in the version files still on my computer (translation files excluded).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2seciv0jwkbqrcd92ed9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2seciv0jwkbqrcd92ed9.jpg" alt="Lines of code: first version 3,112, build done 6,341, Android app 8,513, latest 13,822" width="800" height="487"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the first two days I got &lt;strong&gt;16 revisions&lt;/strong&gt; from the AI, and the code &lt;strong&gt;doubled&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;While turning it into an Android app, about &lt;strong&gt;2,250 lines&lt;/strong&gt; were added, and the "this used to be a bug" notes in the code went &lt;strong&gt;from 8 to 17&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;From the first version to the latest, about &lt;strong&gt;10,900 lines&lt;/strong&gt; were added. That includes new features like Survival mode and Play with friends, not just bug fixes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I didn't write a single one of those lines. All I did was play and describe what I saw. The code passed 8,000 lines, and a Claude Pro plan was still enough all the way to launch. If you want to know how many tokens your own code is, paste it into the &lt;a href="https://tokensave.app/claude-token-counter" rel="noopener noreferrer"&gt;Claude token counter&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  "Find the bug" doesn't work
&lt;/h2&gt;

&lt;p&gt;At first I just said "find the bug and fix it." The AI would confidently say "Fixed!", but the bug was still there, and something that used to work was now broken. It was like walking into a doctor's office and saying "fix whatever's wrong" without saying where it hurts.&lt;/p&gt;

&lt;p&gt;What worked was saying &lt;strong&gt;which mode + what I did + what happened&lt;/strong&gt;. Honestly, my own reports were vague at first too. The quoted bug titles below are what I actually typed (translated from Korean), and many of them, like "drag controls feel harder than before," leave out where and how.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Vague&lt;/th&gt;
&lt;th&gt;Specific&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;"Find the bug and fix it"&lt;/td&gt;
&lt;td&gt;"In racing, the lap counter jumps from 1/3 to 2/3 right after I cross the start line"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"Drag controls feel harder than before" (what I said)&lt;/td&gt;
&lt;td&gt;"In racing, when I drag far to the side on a curve, it suddenly brakes"&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Luckily, every time the AI fixed something it left a note in the code like "this used to cause a problem," so the bug history was all still there. The screens below were reproduced &lt;strong&gt;in the real game&lt;/strong&gt;, either by running those old version files or by undoing just one fix. Bugs that would have broken the game or failed review are &lt;strong&gt;major bugs&lt;/strong&gt;; the rest are &lt;strong&gt;minor bugs&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  7 major bugs
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. One lap done before the race even started&lt;/strong&gt; (while building)&lt;br&gt;
In racing mode, the light went green, I moved one step, and the lap counter went up. To the game, the sperm parked just behind the start line looked like racers "about to finish a full lap." A 3-lap race was really a 2-lap race. Moving the grid in front of the line fixed it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft8t5k2za9j77ybhto5o8.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft8t5k2za9j77ybhto5o8.jpg" alt="Reproduction: Lap 1/3 on the start line becomes Lap 2/3 one step later" width="800" height="637"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Cutting in for first place&lt;/strong&gt; (while building)&lt;br&gt;
In racing, finishing your laps opens a gate to the center, and the first sperm to touch the egg inside wins. But the gate opened for everyone as soon as anyone finished their laps. So I could sit at the start line, wait for an NPC to finish its laps, then slip through the gate and win. It worked the other way too: I'd finish my laps and head for the egg, and an NPC that had been wandering around the track would slip in and take first place.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0c4v3bzi2m6pm4qgy442.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0c4v3bzi2m6pm4qgy442.gif" alt="Reproduction GIF: an NPC finishes its laps, the gate opens, and my sperm, still on Lap 1/3, goes through and finishes 1st" width="480" height="266"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So I asked for two rules: "a sperm that hasn't finished its laps can't go inside" and "you only finish by actually touching the egg." Both came from me getting annoyed while playing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. "Pressing the back button mid-game closes the app"&lt;/strong&gt; (closed test)&lt;br&gt;
I accidentally hit the phone's back button mid-race and the app just closed. A race I was winning, gone. If that had shipped, the first review would have been "back button closes the game, 1 star." Now it returns to the main menu during a game.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. The sperm betting parlor&lt;/strong&gt; (closed test)&lt;br&gt;
During the test period I read through Google Play's policies and broke into a cold sweat. Derby mode said "odds" and asked "who will you back?" A game where you bet on racing sperm. To a reviewer, that looks exactly like a gambling app. I changed it to star ratings (★★★☆☆) and "who will you cheer for?"&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe7cttg0sfwv8gua6g2d9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe7cttg0sfwv8gua6g2d9.jpg" alt="Old derby screen with odds next to the new screen with star ratings" width="800" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Tap for free stuff&lt;/strong&gt; (closed test)&lt;br&gt;
A fake purchase button from development was still in the game. Tapping it charged nothing and instantly said "purchase complete." A fake ad gave the reward after waiting 5 seconds. Heaven for players, deceptive behavior to Google. I removed all of it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. The whole game froze&lt;/strong&gt; (after launch)&lt;br&gt;
I made it through the 14 days and launched. I thought I was done, but the scary part came next. I submitted the game to another platform and got rejected. The timer was stuck at 00.0s and the racing screen was black. All four modes.&lt;/p&gt;

&lt;p&gt;The culprit was the gamepad. Sperm Race supports gamepads, so every frame it checks "is a gamepad connected?" On that platform, checking for a gamepad wasn't allowed at all. Every check threw an error, and every error froze the game. It never happened on my phone, no matter what I tried. A nice-to-have feature froze the entire game somewhere else.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkd7fppbc22g8jde239tq.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkd7fppbc22g8jde239tq.jpg" alt="In an environment that blocks gamepad checks, the game freezes on a black screen at 00.0s; after the fix, racing runs normally" width="800" height="829"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Korean for everyone else&lt;/strong&gt; (after launch)&lt;br&gt;
Sperm Race supports 13 languages. But anyone whose phone language wasn't one of those 13 got the whole game in Korean. The culprit was written right there in an August 20 note: "If detection fails, default to Korean." A default I set while building it in 3 days came back as a bug a month later. Now unknown languages get English.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2vc693eal2y14a8d74bn.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2vc693eal2y14a8d74bn.jpg" alt="A phone set to Hungarian showing Korean before the fix, and English after" width="800" height="558"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  7 minor bugs
&lt;/h2&gt;

&lt;p&gt;Not game-breaking, but you'd notice right away.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Endless spinning at the egg:&lt;/strong&gt; On the last lap, NPC sperm kept spinning in front of the egg instead of going in. They turned too fast and kept bouncing out. Now they slow down for sharp turns.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Head here, tail there:&lt;/strong&gt; When you hit an obstacle, the head bounced back but the tail stayed put, so the tail stuck out in front of the head.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Game sound keeps playing in the background":&lt;/strong&gt; Even with the app minimized or the screen off, the game sounds kept going. The sperm were still racing in my pocket.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The silent soundtrack:&lt;/strong&gt; When the phone blocked the first attempt to play music, the game assumed "music is already playing" and never tried again.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Drag controls feel harder than before":&lt;/strong&gt; On curves, if my finger drifted down even a little, the game read it as braking, so every curve meant a sudden stop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"The typhoon isn't working or I can't see it":&lt;/strong&gt; The new obstacle only showed up from stage 29. I had never gotten that far. I moved it up to stage 12.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero isn't a number to the AI:&lt;/strong&gt; A maze meant to have "0 rivals" had 3. The code read 0 as "no value" and filled in the default of 3. The cause was a single symbol.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq7wgz2n781990rifufep.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq7wgz2n781990rifufep.jpg" alt="The tail sticking out in front of the head right after a hit, and the fixed version" width="799" height="229"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How to use your 14-day closed test
&lt;/h2&gt;

&lt;p&gt;If you're waiting out your closed test right now, here are three things you can take straight from my experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Report bugs to the AI with this template
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Mode/screen] Racing mode, Stadium track
[What I did] Pressed gas after the start signal and crossed the start line
[Expected] Lap stays at 1/3
[What happened] Lap jumped to 2/3 immediately
[Every time?] Every time
[Device] Android app (phone model)
After fixing it, leave a comment in the code explaining why it happened.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Keep that last line. My AI left a "this used to cause a problem" note every time it fixed something, so I could always look back at what was changed and why. Those notes are how I was able to write this post.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. A checklist for the 14 days
&lt;/h3&gt;

&lt;p&gt;I wrote this so it works for any mobile game, whatever the genre. In brackets are the bugs I actually hit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Things your phone does&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Press &lt;strong&gt;back&lt;/strong&gt; in the middle of a game (the app just closed)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Minimize the app, turn the screen off, and come back&lt;/strong&gt; mid-game. Does the sound stop? Does the game resume? (sound kept playing)&lt;/li&gt;
&lt;li&gt;Check the sound works &lt;strong&gt;right after first launch, before you tap anything&lt;/strong&gt;, and after your first tap (music never started)&lt;/li&gt;
&lt;li&gt;Try &lt;strong&gt;other phones and screen ratios&lt;/strong&gt;. Ask your testers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Saving&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Change settings and progress, then &lt;strong&gt;fully close and reopen the app&lt;/strong&gt;. Is everything still there?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Language&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Set your phone to &lt;strong&gt;a language your game doesn't support&lt;/strong&gt; and launch it (Korean for everyone else)&lt;/li&gt;
&lt;li&gt;For each supported language, check &lt;strong&gt;text doesn't overflow its buttons&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Play to the end, and cheat&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Play &lt;strong&gt;to the last stage&lt;/strong&gt;. If that takes too long, ask the AI for a test-only skip (the stage-29 typhoon)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Try to cheat the win condition:&lt;/strong&gt; stand still, go backwards, steal what someone else set up (cutting in for first)&lt;/li&gt;
&lt;li&gt;Put &lt;strong&gt;0 or the maximum&lt;/strong&gt; into number settings: 0 enemies, 0 seconds, max level (0 rivals, 3 showed up)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Store policy&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Look for words like &lt;strong&gt;"odds," "bet," or "wager"&lt;/strong&gt; that could make the game look like gambling (the betting parlor)&lt;/li&gt;
&lt;li&gt;Remove any &lt;strong&gt;fake purchases, fake ads, and test buttons&lt;/strong&gt; from development (tap for free stuff)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Features that might be unavailable&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Have the AI check that &lt;strong&gt;the game keeps running when optional features like gamepads, vibration or notifications are blocked&lt;/strong&gt; (the whole game froze)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Two safeguards for bugs you can't see
&lt;/h3&gt;

&lt;p&gt;After launch, bugs show up on devices, languages and platforms you've never seen. Sperm Race now has these two. You can ask the AI for them like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bug report button:&lt;/strong&gt; "Add a bug report button to the settings screen. When someone reports, send the game version, device info and the most recent error along with it." To quote the note the AI left: "With the version, the device and the last error together, you can usually narrow down the cause on the spot."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A no-freeze safety net:&lt;/strong&gt; "If an error happens while drawing a frame, don't let the whole game stop, and log the error. For optional features like gamepads, just skip them quietly if they don't work."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The 14-day closed test felt like a chore at first. Now I'm grateful for it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try Sperm Race
&lt;/h2&gt;

&lt;p&gt;Sperm Race is free on Google Play. If you run into a bug, please tap the bug report button on the settings screen. Those reports are my favorite thing to get.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Google Play&lt;/strong&gt;: &lt;a href="https://play.google.com/store/apps/details?id=com.spermrace.game&amp;amp;hl=en" rel="noopener noreferrer"&gt;Sperm Race&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Web version (itch.io)&lt;/strong&gt;: &lt;a href="https://johnisking.itch.io/sperm-race" rel="noopener noreferrer"&gt;Sperm Race&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Curious what an AI-made game costs in money and time? Plug your genre and size into the &lt;a href="https://tokensave.app/ai-game-cost-calculator" rel="noopener noreferrer"&gt;AI game cost calculator&lt;/a&gt;. And put bug-fixing time in your schedule. For me, it took more than four times as long as building.&lt;/p&gt;

&lt;p&gt;How did you use your closed test? Any bugs that only showed up on someone else's phone?&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>ai</category>
      <category>android</category>
      <category>beginners</category>
    </item>
    <item>
      <title>A Beginner Vibe-Codes a Game — Zero Coding, 3 Days, $45</title>
      <dc:creator>Johmisking</dc:creator>
      <pubDate>Mon, 05 Oct 2026 12:37:15 +0000</pubDate>
      <link>https://dev.to/jaehyun_cho_0dff271e0d2e5/a-beginner-vibe-codes-a-game-zero-coding-3-days-45-371f</link>
      <guid>https://dev.to/jaehyun_cho_0dff271e0d2e5/a-beginner-vibe-codes-a-game-zero-coding-3-days-45-371f</guid>
      <description>&lt;p&gt;I had zero coding experience. I didn't even know what a "game engine" was. Still, by describing what I wanted to an AI in plain words, I made a game in 3 days, and getting it to launch cost &lt;strong&gt;$45&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F87typrs1nemgpmsa1isi.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F87typrs1nemgpmsa1isi.jpg" alt="Sperm Race Google Play feature graphic" width="800" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is part 1 of the dev log for Sperm Race, a silly sperm-racing game.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Google Play&lt;/strong&gt;: &lt;a href="https://play.google.com/store/apps/details?id=com.spermrace.game&amp;amp;hl=en" rel="noopener noreferrer"&gt;Sperm Race&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Web version (itch.io)&lt;/strong&gt;: &lt;a href="https://johnisking.itch.io/sperm-race" rel="noopener noreferrer"&gt;Sperm Race&lt;/a&gt; — it came out on itch.io first, then on Google Play.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  "Let's make an easy game" took me all the way back to sperm
&lt;/h2&gt;

&lt;p&gt;My goal at the start was simple: &lt;strong&gt;"Just make an easy game."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;But the more I thought about what "easy" means, the more primal my ideas got. A game with one rule. A game that needs no explanation. A game everyone already knows. Following that line all the way back, I ended up at &lt;strong&gt;sperm&lt;/strong&gt;. Swim forward, reach the egg, done. When you think about it, it's the one race every one of us has already won once.&lt;/p&gt;

&lt;p&gt;The moment that thought hit me, I laughed out loud. &lt;strong&gt;"Wait, this is funny."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That one reaction set the direction. Not a serious game, but a goofy one that makes you smirk the second you see it.&lt;/p&gt;

&lt;h2&gt;
  
  
  I didn't know what a game engine was
&lt;/h2&gt;

&lt;p&gt;I had never written code. I didn't know engines like Unity or Godot existed, let alone what they do.&lt;/p&gt;

&lt;p&gt;So I started without one. I told Claude (Sonnet) in Korean, "I want to make a game like this," and what came back was a single HTML file that ran right in the browser. Later I wrapped that same file into an Android app and put it on Google Play. Building by describing what you want to an AI instead of writing code yourself has a name now: &lt;strong&gt;vibe coding&lt;/strong&gt;. Looking back, starting without knowing anything was actually faster. No engine to install, nothing to study, and I could play it on day one.&lt;/p&gt;

&lt;h2&gt;
  
  
  The first prompt: "I want to make a game where a sperm swims to meet the egg"
&lt;/h2&gt;

&lt;p&gt;That one sentence produced the first version. A sperm appeared on screen, and I could move it with my finger.&lt;/p&gt;

&lt;p&gt;The problem was the tail. It was stiff as a stick, more matchstick than sperm. So the second thing I said was:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Add a wave to the tail."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fru22r62umdiq4fj8q45d.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fru22r62umdiq4fj8q45d.gif" alt="Left: the first version with a stiff tail. Right: the next version with a wave" width="800" height="280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On the left is the stiff tail from the first version; on the right is the next version with the wave. Just making the tail wiggle finally made it look like a living sperm. That's how the main character was born.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three days of adding, cutting and adding again
&lt;/h2&gt;

&lt;p&gt;After that I couldn't stop. Every time I played a build, the next idea showed up. If it came to mind, I added it. If it didn't work, I cut it. Then I added again.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;"Make a map."&lt;/strong&gt; Now there was somewhere to swim.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Add obstacles too."&lt;/strong&gt; Once there was something to dodge, it became a game. This is today's Adventure mode.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Add sperm racing, like real car racing."&lt;/strong&gt; A Racing mode with 3 laps around a track.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Make a mode where they run on their own like horse racing, and I place obstacles."&lt;/strong&gt; Pick a sperm to root for and help it win with obstacles. This is Derby mode.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Make a survival mode where you run away, with cancer as the motif."&lt;/strong&gt; Dodge cancer cells in a maze and survive for 1 minute 30 seconds.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The file dates left in my Downloads folder show how fast it went. I got the first HTML file in the early hours of August 19, and by the next afternoon I had downloaded a new version &lt;strong&gt;16 times&lt;/strong&gt;. That's "fix this → download the new file → play" four or five times every half day. Meanwhile the code grew from 47 KB to 149 KB. By August 21 I was already taking screenshots for the store.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9rx4u63lk7ucnxas9ewd.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9rx4u63lk7ucnxas9ewd.jpg" alt="Sperm Race main menu (current version — the Play with friends button was added after launch)" width="525" height="1058"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Graphics and sound effects, all in code
&lt;/h2&gt;

&lt;p&gt;There isn't a single image file in this game. The character, backgrounds, tracks and mazes were all drawn in code by Sonnet.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnun9z96iunr0yz1c2rdx.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnun9z96iunr0yz1c2rdx.jpg" alt="Four modes drawn entirely in code: Adventure, Racing, Derby, Survival" width="799" height="241"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From left: Adventure, Racing, Derby, Survival. The sperm is one ellipse and a wiggling line, the track is a thick curve, and the maze is glowing straight lines. For a silly game, that simplicity actually worked.&lt;/p&gt;

&lt;p&gt;Same with sound effects. There are no sound files; Sonnet synthesized the sounds in code. The only audio file in the game folder is free background music from Pixabay.&lt;/p&gt;

&lt;h2&gt;
  
  
  The testers' first reaction: "That's so original"
&lt;/h2&gt;

&lt;p&gt;Before launch I showed it to testers. What came back was: &lt;strong&gt;"That's so original."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The idea that started with "wait, this is funny" wasn't funny only to me.&lt;/p&gt;

&lt;p&gt;Here's what was in the game at launch:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;4 modes: Adventure (120 stages), Racing (3 laps), Derby, Survival (last 1 minute 30 seconds)&lt;/li&gt;
&lt;li&gt;13 languages&lt;/li&gt;
&lt;li&gt;Controls: drag, arrow keys/WASD, gamepad&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Multiplayer with friends (up to 10 players in Derby, 4 in the other modes) came later, in an update after launch.&lt;/p&gt;

&lt;h2&gt;
  
  
  So what did it cost? $45
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;What I used&lt;/th&gt;
&lt;th&gt;Cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Code&lt;/td&gt;
&lt;td&gt;Claude Pro subscription (Sonnet)&lt;/td&gt;
&lt;td&gt;$20 (one month)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Graphics&lt;/td&gt;
&lt;td&gt;Drawn in code&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Background music&lt;/td&gt;
&lt;td&gt;Free tracks from Pixabay&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sound effects&lt;/td&gt;
&lt;td&gt;Made in code&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Launch&lt;/td&gt;
&lt;td&gt;Google Play developer registration&lt;/td&gt;
&lt;td&gt;$25 (one-time)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$45&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;I use Claude Max 20× now, but Sperm Race was built &lt;strong&gt;entirely on the Pro plan.&lt;/strong&gt; It was done within a month, so I only paid for one month.&lt;/p&gt;

&lt;p&gt;For comparison, if you run a small game through the &lt;a href="https://tokensave.app/ai-game-cost-calculator" rel="noopener noreferrer"&gt;AI game cost calculator&lt;/a&gt;, the standard stack (image and music AI plus Claude Max) comes out at $128–181. Sperm Race came in at about 25–35% of that.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next time
&lt;/h2&gt;

&lt;p&gt;So far it looks like "AI made a game in 3 days, easy." But the real struggle came after. Building took 3 days; fixing bugs took 14.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Next: 3 days to build, 14 days to fix bugs&lt;/strong&gt; — why AI pokes at the wrong code when you ask it to "find the bug," and how I ended up finding bugs myself and having the AI fix them.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://tokensave.app/blog/vibe-coding-a-game-beginner" rel="noopener noreferrer"&gt;tokensave.app&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>ai</category>
      <category>beginners</category>
      <category>claude</category>
    </item>
  </channel>
</rss>
