<?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: Hisashi Space</title>
    <description>The latest articles on DEV Community by Hisashi Space (@hisashispace).</description>
    <link>https://dev.to/hisashispace</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%2F3305583%2F2d37bacf-221e-40fa-ac4c-1fda4aac21ed.png</url>
      <title>DEV Community: Hisashi Space</title>
      <link>https://dev.to/hisashispace</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hisashispace"/>
    <language>en</language>
    <item>
      <title>Claude vs GPT-6.1 Terra: Half the Price. I Tested It on My Real Work.</title>
      <dc:creator>Hisashi Space</dc:creator>
      <pubDate>Tue, 03 Nov 2026 13:00:00 +0000</pubDate>
      <link>https://dev.to/hisashispace/claude-vs-gpt-61-terra-half-the-price-i-tested-it-on-my-real-work-5b59</link>
      <guid>https://dev.to/hisashispace/claude-vs-gpt-61-terra-half-the-price-i-tested-it-on-my-real-work-5b59</guid>
      <description>&lt;p&gt;Using Claude? OpenAI's new GPT-6.1 Terra is half the price of Claude Sonnet.&lt;/p&gt;

&lt;p&gt;I run about forty Claude sessions a day, so a model at half the price is worth a real look.&lt;br&gt;
I made a video about it, but a video can only show a few numbers.&lt;br&gt;
This article has all of them: every price, every effort setting on OpenAI's charts, two independent tests, and my own test with the exact prompts, timings and token counts, so you can run it yourself.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/VlZw7JAVjxY" width="710" height="399"&gt;
  &lt;/iframe&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%2Fdpsillvqg8fir3lxu5xz.webp" 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%2Fdpsillvqg8fir3lxu5xz.webp" alt="Claude vs GPT-6.1 Terra" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The short version
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Terra is exactly half the price of Claude Sonnet 5.5 per token. But Anthropic already sells a model at Terra's exact price (Haiku 4.5), and Haiku 5.5 is ten times cheaper.&lt;/li&gt;
&lt;li&gt;On OpenAI's own charts, Terra comes close to Claude Opus 5.5 on computer use at about one ninth of the cost per task.&lt;/li&gt;
&lt;li&gt;On coding in the terminal, Terra is far behind Claude Sonnet 5.5: 50.3% against 70.6%. OpenAI itself says to use its bigger models for complex coding.&lt;/li&gt;
&lt;li&gt;The effort setting matters as much as the model. On OpenAI's computer use test, Terra at its lowest setting costs one sixth of Terra at max, and scores only about 4 points lower.&lt;/li&gt;
&lt;li&gt;In my test, Terra did three small real jobs correctly and finished each one 1.4 to 1.8 times faster than OpenAI's bigger Sol. I did not time Claude.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What GPT-6.1 Terra is
&lt;/h2&gt;

&lt;p&gt;OpenAI now names its models Luna, Terra, Sol and Astra, from small to large.&lt;br&gt;
Terra sits above Luna and below Sol and Astra.&lt;br&gt;
It came out on October 26, 2026.&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%2F3pewhiicv3jfnxp546f9.webp" 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%2F3pewhiicv3jfnxp546f9.webp" alt="Four steps, with Terra second from the bottom" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here is what the model docs say.&lt;/p&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;GPT-6.1 Terra&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Where you can use it&lt;/td&gt;
&lt;td&gt;ChatGPT (Plus, Pro, Enterprise, Edu), Codex, and the API as gpt-6.1-terra&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Context window&lt;/td&gt;
&lt;td&gt;1,050,000 tokens (max input 922,000)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Max output&lt;/td&gt;
&lt;td&gt;128,000 tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Input / output&lt;/td&gt;
&lt;td&gt;Text and images in, text out. No audio, no video&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Knowledge cutoff&lt;/td&gt;
&lt;td&gt;June 1, 2026&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Effort settings&lt;/td&gt;
&lt;td&gt;none, low, medium (default), high, xhigh, max&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API rate limits (Standard)&lt;/td&gt;
&lt;td&gt;Build 5,000 requests/min, 1M tokens/min. Launch 10,000 / 4M. Grow 15,000 / 40M&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fine-tuning&lt;/td&gt;
&lt;td&gt;Not available&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The announcement names Plus, Pro, Enterprise and Edu.&lt;br&gt;
Free, Go and Business are not named.&lt;/p&gt;
&lt;h2&gt;
  
  
  The price, next to every Claude model
&lt;/h2&gt;

&lt;p&gt;API prices per million tokens.&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;Input&lt;/th&gt;
&lt;th&gt;Output&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Claude Haiku 5.5 (prompts up to 100K tokens)&lt;/td&gt;
&lt;td&gt;$0.10&lt;/td&gt;
&lt;td&gt;$0.50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Haiku 5.5 (prompts over 100K tokens)&lt;/td&gt;
&lt;td&gt;$0.50&lt;/td&gt;
&lt;td&gt;$2.50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Haiku 4.5&lt;/td&gt;
&lt;td&gt;$1&lt;/td&gt;
&lt;td&gt;$5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GPT-6.1 Terra&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$1&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$5&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Sonnet 5.5&lt;/td&gt;
&lt;td&gt;$2&lt;/td&gt;
&lt;td&gt;$10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Opus 5.5&lt;/td&gt;
&lt;td&gt;$4&lt;/td&gt;
&lt;td&gt;$20&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&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%2Fh88tmd0wu17jfnyqwkng.webp" 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%2Fh88tmd0wu17jfnyqwkng.webp" alt="Output price per 1M tokens: Haiku 5.5 $0.50, Haiku 4.5 $5, GPT-6.1 Terra $5, Sonnet 5.5 $10, Opus 5.5 $20" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Two things most launch posts missed.&lt;/p&gt;

&lt;p&gt;First, OpenAI's own "50% lower" is against its own models, GPT-5.6 Terra and GPT-6.1 Sol.&lt;br&gt;
It is not a claim about Claude.&lt;br&gt;
It just happens that Sonnet 5.5 is also $2 and $10.&lt;/p&gt;

&lt;p&gt;Second, if you already live in Claude, the model at Terra's price is Haiku 4.5.&lt;br&gt;
And Haiku 5.5 is ten times cheaper than Terra.&lt;br&gt;
So Terra is not the cheap option. It sits between Haiku and Sonnet.&lt;/p&gt;
&lt;h2&gt;
  
  
  Caching changes the real bill
&lt;/h2&gt;

&lt;p&gt;The price table is for fresh input.&lt;br&gt;
Terra also has a cache.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Terra token type&lt;/th&gt;
&lt;th&gt;Price per 1M tokens&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Input&lt;/td&gt;
&lt;td&gt;$1.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cached input&lt;/td&gt;
&lt;td&gt;$0.05&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cache writes (kept 30 minutes)&lt;/td&gt;
&lt;td&gt;$1.25&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Output&lt;/td&gt;
&lt;td&gt;$5.00&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This matters for agents.&lt;br&gt;
An agent session reads the same long context again and again: the files, the rules, the history.&lt;/p&gt;

&lt;p&gt;Here is the math with the official prices.&lt;br&gt;
Say a session has a 100,000 token context and makes 20 calls, each writing 2,000 tokens.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Without the cache: 20 × 100,000 = 2,000,000 input tokens = $2.00. Output 40,000 tokens = $0.20. Total $2.20.&lt;/li&gt;
&lt;li&gt;With the cache: one write of 100,000 tokens = $0.125. Then 19 reads of 100,000 cached tokens = $0.095. Output $0.20. Total about $0.42.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's about five times cheaper, from the cache alone.&lt;br&gt;
The catch is the 30 minutes.&lt;br&gt;
If your agent waits longer than that between calls, it pays to write the cache again.&lt;/p&gt;

&lt;p&gt;Claude has a prompt cache too, so this is not a Terra only discount.&lt;br&gt;
From Anthropic's pricing page, per million tokens:&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;Input&lt;/th&gt;
&lt;th&gt;Cache write (5 min)&lt;/th&gt;
&lt;th&gt;Cache write (1 hour)&lt;/th&gt;
&lt;th&gt;Cache read&lt;/th&gt;
&lt;th&gt;Output&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GPT-6.1 Terra&lt;/td&gt;
&lt;td&gt;$1.00&lt;/td&gt;
&lt;td&gt;$1.25 (30 min)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;$0.05&lt;/td&gt;
&lt;td&gt;$5.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Haiku 4.5&lt;/td&gt;
&lt;td&gt;$1.00&lt;/td&gt;
&lt;td&gt;$1.25&lt;/td&gt;
&lt;td&gt;$2.00&lt;/td&gt;
&lt;td&gt;$0.10&lt;/td&gt;
&lt;td&gt;$5.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Sonnet 5.5&lt;/td&gt;
&lt;td&gt;$2.00&lt;/td&gt;
&lt;td&gt;$2.50&lt;/td&gt;
&lt;td&gt;$4.00&lt;/td&gt;
&lt;td&gt;$0.10&lt;/td&gt;
&lt;td&gt;$10.00&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The same session on Claude, with the 5 minute cache:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Claude Sonnet 5.5: $4.40 without the cache, about $0.84 with it.&lt;/li&gt;
&lt;li&gt;Claude Haiku 4.5: $2.20 without the cache, about $0.52 with it.&lt;/li&gt;
&lt;li&gt;GPT-6.1 Terra: $2.20 without the cache, about $0.42 with it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So with caching on both sides, Terra is still half of Sonnet.&lt;br&gt;
Against Haiku 4.5, the gap is small: the price list is the same, and only the cache read differs ($0.05 against $0.10).&lt;br&gt;
Claude's cache lasts 5 minutes by default, or 1 hour if you pay twice the input price to write it. Terra keeps it for 30 minutes.&lt;/p&gt;

&lt;p&gt;So for agent work, compare the cached price, not just the headline price.&lt;br&gt;
A Hacker News post on October 27 redid the price comparison for exactly this kind of cache-heavy session.&lt;/p&gt;
&lt;h2&gt;
  
  
  OpenAI's charts, every setting
&lt;/h2&gt;

&lt;p&gt;OpenAI published four charts that compare Terra with Claude.&lt;br&gt;
The video showed one number from each.&lt;br&gt;
Here is every point, from the data inside the charts on OpenAI's announcement page.&lt;br&gt;
These are OpenAI's numbers, not independent ones.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agents' Last Exam (the AI uses a computer to do professional work)&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;Model&lt;/th&gt;
&lt;th&gt;Effort&lt;/th&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;th&gt;Cost per task&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Claude Opus 5.5&lt;/td&gt;
&lt;td&gt;Max&lt;/td&gt;
&lt;td&gt;63.2%&lt;/td&gt;
&lt;td&gt;$8.82&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-6.1 Terra&lt;/td&gt;
&lt;td&gt;Max&lt;/td&gt;
&lt;td&gt;60.0%&lt;/td&gt;
&lt;td&gt;$1.01&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-6.1 Terra&lt;/td&gt;
&lt;td&gt;Xhigh&lt;/td&gt;
&lt;td&gt;58.5%&lt;/td&gt;
&lt;td&gt;$0.66&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-6.1 Terra&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;57.2%&lt;/td&gt;
&lt;td&gt;$0.39&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-6.1 Terra&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;57.6%&lt;/td&gt;
&lt;td&gt;$0.29&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-6.1 Terra&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;55.9%&lt;/td&gt;
&lt;td&gt;$0.16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-6.1 Sol&lt;/td&gt;
&lt;td&gt;Max&lt;/td&gt;
&lt;td&gt;58.6%&lt;/td&gt;
&lt;td&gt;$2.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.6 Terra&lt;/td&gt;
&lt;td&gt;Max&lt;/td&gt;
&lt;td&gt;50.7%&lt;/td&gt;
&lt;td&gt;$3.58&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&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%2Fwi1dzsw8tkkfyklpsm2t.webp" 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%2Fwi1dzsw8tkkfyklpsm2t.webp" alt="Agents' Last Exam at max effort: Claude Opus 63.2% at $8.82 per task, Terra 60% at $1.01 per task" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Opus still leads, by 3 points, at nearly nine times the cost.&lt;br&gt;
Terra at Max also beats OpenAI's bigger Sol at Max, for half the cost.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OSWorld 2.1, offline set (using desktop apps)&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;Model&lt;/th&gt;
&lt;th&gt;Effort&lt;/th&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;th&gt;Cost per task&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Claude Sonnet 5.5&lt;/td&gt;
&lt;td&gt;Max&lt;/td&gt;
&lt;td&gt;83.9%&lt;/td&gt;
&lt;td&gt;$5.74&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Sonnet 5.5&lt;/td&gt;
&lt;td&gt;Xhigh&lt;/td&gt;
&lt;td&gt;81.0%&lt;/td&gt;
&lt;td&gt;$2.22&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Sonnet 5.5&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;73.3%&lt;/td&gt;
&lt;td&gt;$1.39&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Sonnet 5.5&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;65.9%&lt;/td&gt;
&lt;td&gt;$0.93&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-6.1 Sol&lt;/td&gt;
&lt;td&gt;Max&lt;/td&gt;
&lt;td&gt;78.0%&lt;/td&gt;
&lt;td&gt;$1.15&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-6.1 Terra&lt;/td&gt;
&lt;td&gt;Max&lt;/td&gt;
&lt;td&gt;74.2%&lt;/td&gt;
&lt;td&gt;$1.19&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-6.1 Terra&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;66.7%&lt;/td&gt;
&lt;td&gt;$0.50&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&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%2Fo7t6l39t4ob3hbtbyk39.webp" 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%2Fo7t6l39t4ob3hbtbyk39.webp" alt="OSWorld 2.1: Sonnet 83.9% at $5.74, Terra 74.2% at $1.19, Sonnet at the same budget 73.3% at $1.39" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sonnet wins at the top.&lt;br&gt;
At the same budget of about $1.20 to $1.40 per task, Sonnet High and Terra Max score about the same.&lt;br&gt;
And look at Sol: 78.0% at $1.15, a higher score than Terra Max for slightly less money.&lt;br&gt;
On this chart, the cheaper model is not the better deal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Terminal-Bench 4.0 (coding in the terminal)&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;Model&lt;/th&gt;
&lt;th&gt;Effort&lt;/th&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;th&gt;Cost per task&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Claude Sonnet 5.5&lt;/td&gt;
&lt;td&gt;Max&lt;/td&gt;
&lt;td&gt;70.6%&lt;/td&gt;
&lt;td&gt;$10.44&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Sonnet 5.5&lt;/td&gt;
&lt;td&gt;Xhigh&lt;/td&gt;
&lt;td&gt;61.5%&lt;/td&gt;
&lt;td&gt;$4.34&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Sonnet 5.5&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;43.0%&lt;/td&gt;
&lt;td&gt;$1.46&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-6.1 Sol&lt;/td&gt;
&lt;td&gt;Max&lt;/td&gt;
&lt;td&gt;55.9%&lt;/td&gt;
&lt;td&gt;$1.98&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-6.1 Sol&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;47.1%&lt;/td&gt;
&lt;td&gt;$0.76&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-6.1 Terra&lt;/td&gt;
&lt;td&gt;Max&lt;/td&gt;
&lt;td&gt;50.3%&lt;/td&gt;
&lt;td&gt;$1.84&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-6.1 Terra&lt;/td&gt;
&lt;td&gt;Xhigh&lt;/td&gt;
&lt;td&gt;46.4%&lt;/td&gt;
&lt;td&gt;$0.99&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-6.1 Terra&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;35.8%&lt;/td&gt;
&lt;td&gt;$0.46&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&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%2Fznrwintej6v38aqi3dvv.webp" 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%2Fznrwintej6v38aqi3dvv.webp" alt="Terminal-Bench 4.0 at max effort: Sonnet 70.6% at $10.44 per task, Terra 50.3% at $1.84 per task" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the one place Terra falls way behind.&lt;br&gt;
Sonnet at Max is 20 points ahead.&lt;br&gt;
Even inside OpenAI's lineup, Sol at Low (47.1%, $0.76) beats Terra at Xhigh (46.4%, $0.99).&lt;br&gt;
OpenAI says it plainly: "For the most complex coding tasks, GPT-6.1 Sol and GPT-6 Astra remain the better choice."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Terminal-Bench-Science 0.1&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;Model&lt;/th&gt;
&lt;th&gt;Effort&lt;/th&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;th&gt;Cost per task&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Claude Opus 5.5 with fallbacks&lt;/td&gt;
&lt;td&gt;Max&lt;/td&gt;
&lt;td&gt;63.3%&lt;/td&gt;
&lt;td&gt;$23.21&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-6.1 Terra&lt;/td&gt;
&lt;td&gt;Max&lt;/td&gt;
&lt;td&gt;58.3%&lt;/td&gt;
&lt;td&gt;$4.15&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-6.1 Sol&lt;/td&gt;
&lt;td&gt;Max&lt;/td&gt;
&lt;td&gt;57.0%&lt;/td&gt;
&lt;td&gt;$5.47&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Here Terra Max edges past Sol Max, and costs less than a fifth of Opus.&lt;/p&gt;
&lt;h2&gt;
  
  
  The effort setting is a second price list
&lt;/h2&gt;

&lt;p&gt;The tables above show something the headline price hides.&lt;br&gt;
The same model costs very different amounts depending on how hard you let it think.&lt;/p&gt;

&lt;p&gt;On Agents' Last Exam, Terra at Low scored 55.9% for $0.16 per task.&lt;br&gt;
At Max it scored 60.0% for $1.01.&lt;br&gt;
That's about six times the cost for about 4 more points.&lt;br&gt;
And Medium (57.6%) actually scored a little higher than High (57.2%).&lt;/p&gt;

&lt;p&gt;On Terminal-Bench, it goes the other way.&lt;br&gt;
Terra climbs from 35.8% at Medium to 50.3% at Max.&lt;br&gt;
For hard coding, the extra thinking is worth more.&lt;/p&gt;

&lt;p&gt;So pick the effort per job, not per model.&lt;br&gt;
For checks and short answers, start low and go up only if the answers get worse.&lt;/p&gt;
&lt;h2&gt;
  
  
  Fewer made up answers
&lt;/h2&gt;

&lt;p&gt;OpenAI also published an internal test of how often the model states something wrong.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model and setting&lt;/th&gt;
&lt;th&gt;Error rate&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.6 Terra, lowest effort&lt;/td&gt;
&lt;td&gt;53.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-6.1 Terra, lowest effort&lt;/td&gt;
&lt;td&gt;16.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-6.1 Terra, max effort&lt;/td&gt;
&lt;td&gt;4.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&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%2F5618451el7bh2auhom39.webp" 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%2F5618451el7bh2auhom39.webp" alt="Error rate on OpenAI's internal test: GPT-5.6 Terra 53.6%, GPT-6.1 Terra 16.7%" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;People on Hacker News called the drop "staggering".&lt;br&gt;
It's still OpenAI's test and OpenAI's number, with no Claude on the chart.&lt;/p&gt;
&lt;h2&gt;
  
  
  Independent tests
&lt;/h2&gt;

&lt;p&gt;Two independent sites test every model the same way.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Artificial Analysis&lt;/strong&gt; (read November 2, 2026)&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;GPT-6.1 Terra (Max)&lt;/th&gt;
&lt;th&gt;Claude Sonnet 5.5 (Max)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Intelligence Index v5.0&lt;/td&gt;
&lt;td&gt;51&lt;/td&gt;
&lt;td&gt;54&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rank of 59 models&lt;/td&gt;
&lt;td&gt;13th&lt;/td&gt;
&lt;td&gt;9th&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Output speed&lt;/td&gt;
&lt;td&gt;106.8 tokens/s&lt;/td&gt;
&lt;td&gt;138.4 tokens/s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost per index task&lt;/td&gt;
&lt;td&gt;$0.96&lt;/td&gt;
&lt;td&gt;$10.02&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&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%2Fss1kw2ofto68xap176bf.webp" 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%2Fss1kw2ofto68xap176bf.webp" alt="Artificial Analysis Intelligence Index v5.0: Sonnet 54 at $10.02 per task, Terra 51 at $0.96 per task" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sonnet is 3 points smarter on this index, and about ten times more expensive per task.&lt;br&gt;
Note the speed row: on Artificial Analysis, Sonnet writes its output faster than Terra.&lt;br&gt;
"Faster" in OpenAI's announcement means faster than OpenAI's own bigger models.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vals AI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Vals ranks Terra 11th of 32 models, with a Vals Index of 60.54%.&lt;br&gt;
Its own Terminal-Bench 4.0 run gave 49.49%, close to OpenAI's 50.3%.&lt;br&gt;
And it noted something useful: on legal and tax questions, Terra "often declines to reach conclusions".&lt;br&gt;
If those are your questions, Terra is not your model.&lt;/p&gt;
&lt;h2&gt;
  
  
  What Hacker News argued about
&lt;/h2&gt;

&lt;p&gt;The launch thread got 637 points and 427 comments.&lt;br&gt;
The main threads:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Can anyone give me the compelling reason for Terra and Sonnet to exist?" The argument: you can go up a tier with less thinking, or down a tier with more.&lt;/li&gt;
&lt;li&gt;The names. Luna, Terra, Sol and Astra confused a lot of people.&lt;/li&gt;
&lt;li&gt;Terminal-Bench looks weak. One comment: Terra at Xhigh costs more than Sol at Low and still does worse. The table above shows the same.&lt;/li&gt;
&lt;li&gt;Price against score charts are chosen by the vendor, so some called them "mostly uninformative".&lt;/li&gt;
&lt;li&gt;And the positive one I agree with: "This tier is what I'd actually point opencode at for PR reviews. The top models are too slow and expensive to run on every diff."&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  My test: 3 real jobs
&lt;/h2&gt;

&lt;p&gt;Charts are charts, so I gave Terra three jobs from my own week.&lt;br&gt;
I gave the same jobs to OpenAI's bigger Sol, to see what you lose by going cheaper.&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%2Fgedk4qglhlvozf6vy9ph.webp" 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%2Fgedk4qglhlvozf6vy9ph.webp" alt="Timing the jobs with a stopwatch" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Setup: Codex CLI 0.164.0 on my Mac, signed in with my ChatGPT plan (not the API).&lt;br&gt;
Each job ran on each model twice: effort "none" (my Codex default) and "medium" (the API default).&lt;br&gt;
One run each, timed with &lt;code&gt;time&lt;/code&gt;, including Codex startup.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Job 1: a YouTube description with chapters.&lt;/strong&gt;&lt;br&gt;
The prompt:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Read the file (path to my script). It is the script for my English YouTube video (the English column is the narration). Write a YouTube description for it: exactly 5 lines of English text, then a chapters list starting at 0:00 with at least 3 chapters (estimate timestamps from the script, about 150 spoken words per minute). Do not use em dashes or en dashes. Output only the description.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The script was my previous video about the AI bubble.&lt;br&gt;
All four answers followed every rule: 5 lines, no dashes, 11 chapters from 0:00.&lt;br&gt;
The chapter times were almost the same across models.&lt;br&gt;
Terra at Medium added the concrete names from the script (Anthropic, CoreWeave, Tokyo).&lt;br&gt;
I found no factual errors. I'd paste any of them with light edits.&lt;/p&gt;

&lt;p&gt;Terra's first line at none: "What happens to the AI tools you rely on if the bubble pops?"&lt;br&gt;
Sol's: "If the AI bubble pops, what happens to the tools you use every day?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Job 2: checking an illustration.&lt;/strong&gt;&lt;br&gt;
Every illustration in my videos gets checked for impossible phones and laptops: a screen on the back, a lid on the wrong side.&lt;br&gt;
The prompt:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This is an illustration for an Instagram carousel. Check only one thing: is the smartphone drawn correctly? The screen must face the person holding it, and there must be no screen on the back of the phone. Answer OK or NG on the first line, then explain in 2 to 3 sentences what you see.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;All four answered OK and described the back of the phone with the camera facing the viewer.&lt;br&gt;
That's correct. I checked the drawing myself.&lt;br&gt;
Terra at none: "The visible side of the phone has a camera lens and no screen, so it appears to be the back."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Job 3: fixing a bug.&lt;/strong&gt;&lt;br&gt;
A small script that lists the days a video is scheduled to post. It drops the last day of the range.&lt;br&gt;
The prompt:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Users report that the schedule printed by schedule.py is missing the last day: posting_days(start, end) should include both start and end. Find the bug, fix it in schedule.py, and run python3 schedule.py to check. Then explain the fix in one sentence.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;All four fixed it and ran the script, which printed November 1 to November 7.&lt;br&gt;
They fixed it in two different places, and both are correct.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;# Terra (none)
&lt;span class="gd"&gt;-    n = (end - start).days
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;span class="gi"&gt;+    n = (end - start).days + 1
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;# Sol (none)
&lt;span class="gd"&gt;-    for i in range(n):
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;span class="gi"&gt;+    for i in range(n + 1):
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I ran every fixed file again myself. All four printed all seven days.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The results&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;Job&lt;/th&gt;
&lt;th&gt;Terra none&lt;/th&gt;
&lt;th&gt;Sol none&lt;/th&gt;
&lt;th&gt;Terra medium&lt;/th&gt;
&lt;th&gt;Sol medium&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Description&lt;/td&gt;
&lt;td&gt;15.9 s, 12,889 tokens&lt;/td&gt;
&lt;td&gt;25.6 s, 13,376 tokens&lt;/td&gt;
&lt;td&gt;15.4 s, 17,965 tokens&lt;/td&gt;
&lt;td&gt;23.6 s, 13,406 tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Drawing check&lt;/td&gt;
&lt;td&gt;6.9 s, 2,820 tokens&lt;/td&gt;
&lt;td&gt;9.8 s, 7,236 tokens&lt;/td&gt;
&lt;td&gt;6.9 s, 16,971 tokens&lt;/td&gt;
&lt;td&gt;10.3 s, 20,583 tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bug fix&lt;/td&gt;
&lt;td&gt;12.9 s, 16,700 tokens&lt;/td&gt;
&lt;td&gt;22.5 s, 7,113 tokens&lt;/td&gt;
&lt;td&gt;9.7 s, 6,781 tokens&lt;/td&gt;
&lt;td&gt;17.1 s, 7,141 tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&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%2Fql0kwqi19grgcqq1lf2m.webp" 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%2Fql0kwqi19grgcqq1lf2m.webp" alt="My test in Codex on November 2: Terra vs Sol, in seconds. Description 15.9 vs 25.6, drawing check 6.9 vs 9.8, bug fix 12.9 vs 22.5" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What I read from it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Terra was faster than Sol on every job, 1.4 to 1.8 times. Not the "over three times" in OpenAI's announcement, but these jobs are so small that Codex startup is a big part of the time.&lt;/li&gt;
&lt;li&gt;Faster does not mean fewer tokens. On the bug fix at none, Terra used 16,700 tokens and Sol 7,113.&lt;/li&gt;
&lt;li&gt;Medium effort can multiply tokens on easy jobs. The drawing check went from 2,820 to 16,971 tokens on Terra, with the same answer.&lt;/li&gt;
&lt;li&gt;Quality: I couldn't see any difference. Every answer was usable.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Run the same test yourself
&lt;/h2&gt;

&lt;p&gt;These are the commands I used, with Codex CLI signed in to ChatGPT.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Job 1: text from a file&lt;/span&gt;
codex &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-m&lt;/span&gt; gpt-6.1-terra &lt;span class="nt"&gt;--skip-git-repo-check&lt;/span&gt; &lt;span class="nt"&gt;-C&lt;/span&gt; ./work &lt;span class="s2"&gt;"&amp;lt;prompt&amp;gt;"&lt;/span&gt;

&lt;span class="c"&gt;# Job 2: an image&lt;/span&gt;
codex &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-m&lt;/span&gt; gpt-6.1-terra &lt;span class="nt"&gt;--skip-git-repo-check&lt;/span&gt; &lt;span class="nt"&gt;-C&lt;/span&gt; ./work &lt;span class="nt"&gt;-i&lt;/span&gt; drawing.png &lt;span class="s2"&gt;"&amp;lt;prompt&amp;gt;"&lt;/span&gt;

&lt;span class="c"&gt;# Job 3: let it edit files in the folder&lt;/span&gt;
codex &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-m&lt;/span&gt; gpt-6.1-terra &lt;span class="nt"&gt;--skip-git-repo-check&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; workspace-write &lt;span class="nt"&gt;-C&lt;/span&gt; ./work &lt;span class="s2"&gt;"&amp;lt;prompt&amp;gt;"&lt;/span&gt;

&lt;span class="c"&gt;# Same job on Sol, or at another effort&lt;/span&gt;
codex &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-m&lt;/span&gt; gpt-6.1-sol ...
codex &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-m&lt;/span&gt; gpt-6.1-terra &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="nv"&gt;model_reasoning_effort&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;medium ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Put &lt;code&gt;time&lt;/code&gt; in front to get the seconds.&lt;br&gt;
Codex prints "tokens used" at the end of each run.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I didn't test
&lt;/h2&gt;

&lt;p&gt;To be fair:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I didn't time Claude on these jobs. So I'm not saying Terra is faster than Claude.&lt;/li&gt;
&lt;li&gt;I only gave it a drawing that was correct. I don't know yet if it catches a broken one.&lt;/li&gt;
&lt;li&gt;One run per setting. Times will move a little from run to run.&lt;/li&gt;
&lt;li&gt;Small jobs only. Nothing here tests the long, hard coding where Sonnet leads by 20 points.&lt;/li&gt;
&lt;li&gt;Codex on my ChatGPT plan shows tokens, not dollars. So I have no cost per job of my own.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Which model for which job
&lt;/h2&gt;

&lt;p&gt;Am I switching? No. This is how I'm splitting the work.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Job&lt;/th&gt;
&lt;th&gt;Model&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;Long coding across a whole project, sessions that run for hours&lt;/td&gt;
&lt;td&gt;Claude&lt;/td&gt;
&lt;td&gt;Sonnet leads Terra by 20 points on Terminal-Bench 4.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Small, repeated checks (drawings, formats, rules)&lt;/td&gt;
&lt;td&gt;Terra or Haiku, low effort&lt;/td&gt;
&lt;td&gt;Good enough, faster, cheaper. My drawing checks already go to Codex&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code review on every change&lt;/td&gt;
&lt;td&gt;Terra&lt;/td&gt;
&lt;td&gt;The Hacker News point: top models are too slow and expensive for every diff&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Computer use on a budget&lt;/td&gt;
&lt;td&gt;Terra Max or Sonnet High&lt;/td&gt;
&lt;td&gt;About the same score at about the same cost per task&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Legal and tax questions&lt;/td&gt;
&lt;td&gt;Not Terra&lt;/td&gt;
&lt;td&gt;Vals AI: it often won't reach a conclusion&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agent sessions that reread the same context&lt;/td&gt;
&lt;td&gt;Whatever you pick, use the cache&lt;/td&gt;
&lt;td&gt;Cached input is $0.05 instead of $1.00 on Terra&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&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%2Fgs5m2xdn0aheao56zt35.webp" 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%2Fgs5m2xdn0aheao56zt35.webp" alt="Many sessions running on my Mac" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The long, hard work stays on Claude: planning, writing code across a whole project, running for hours on my Mac.&lt;br&gt;
The small, repetitive checks go to the cheapest model that's good enough.&lt;br&gt;
Terra just made that side cheaper and faster.&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%2F7qfdhpdmu2e9clqr5cqx.webp" 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%2F7qfdhpdmu2e9clqr5cqx.webp" alt="One conveyor belt splitting into two lines" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And if you're on a budget and you live in Claude, check Haiku before you leave.&lt;br&gt;
It might already be the cheap model you're looking for.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it yourself in 1 hour
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Pick three jobs you do every week. Small ones.&lt;/li&gt;
&lt;li&gt;Give each one to two models: the one you use now, and the cheaper one.&lt;/li&gt;
&lt;li&gt;Run each at a low effort first. Time them, and check the answers yourself.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If the cheap one is good enough, move just that job.&lt;br&gt;
Not your whole setup. One job at a time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Don't pick a team
&lt;/h2&gt;

&lt;p&gt;Every few months, someone releases a model that's cheaper, faster, or smarter.&lt;br&gt;
If you pick a team, you'll be switching forever.&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%2Fr2pordt09bnfp4j8vg2f.webp" 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%2Fr2pordt09bnfp4j8vg2f.webp" alt="New models arriving one after another" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Don't pick a team. Pick the job. Then pick the model.&lt;/p&gt;

&lt;p&gt;Sources: OpenAI's GPT-6.1 Terra announcement (October 26, 2026; benchmark numbers from the data inside its charts) and model docs, Anthropic's pricing page, Artificial Analysis and Vals AI (read November 2, 2026), and the Hacker News launch thread. Benchmarks are OpenAI's own numbers unless marked otherwise. My test: GPT-6.1 Terra and GPT-6.1 Sol in Codex CLI 0.164.0 on November 2, 2026, one run each. Claude was not timed in my test.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>openai</category>
      <category>llm</category>
      <category>programming</category>
    </item>
    <item>
      <title>If the AI Bubble Bursts, What Happens to Your AI Tools? I Ran a Business Through 2 Crashes</title>
      <dc:creator>Hisashi Space</dc:creator>
      <pubDate>Mon, 02 Nov 2026 08:52:05 +0000</pubDate>
      <link>https://dev.to/hisashispace/if-the-ai-bubble-bursts-what-happens-to-your-ai-tools-i-ran-a-business-through-2-crashes-564o</link>
      <guid>https://dev.to/hisashispace/if-the-ai-bubble-bursts-what-happens-to-your-ai-tools-i-ran-a-business-through-2-crashes-564o</guid>
      <description>&lt;p&gt;If the AI bubble pops, what happens to the tools you use every day?&lt;/p&gt;

&lt;p&gt;I've run a business through two crashes.&lt;br&gt;
Here's what actually happened, and what I'm doing this time.&lt;/p&gt;

&lt;p&gt;I also made a video of this.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/uv0Awp2M9vs" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  This week: Anthropic files to go public
&lt;/h2&gt;

&lt;p&gt;On Monday, October 26, Anthropic, the company behind Claude, filed to go public.&lt;br&gt;
It's going to list on the Nasdaq under the ticker ANT.&lt;/p&gt;

&lt;p&gt;The filing shows more than $16 billion in revenue in just six months.&lt;br&gt;
That's fourteen times the year before.&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%2Fkev6v8a94z4242img3dr.webp" 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%2Fkev6v8a94z4242img3dr.webp" alt="Anthropic revenue, first half of the year: $16B+, 14x the year before" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It also shows an $80 billion loss.&lt;br&gt;
Most of that is a one-time accounting charge, about $72 billion.&lt;br&gt;
But even without it, this is a company burning money at a scale we've never seen.&lt;/p&gt;

&lt;p&gt;The risk section alone runs almost a hundred pages.&lt;br&gt;
And reports say it could be valued at $1.5 to $2 trillion.&lt;/p&gt;

&lt;p&gt;Then there's CoreWeave. They rent out the chips that run these AI models.&lt;br&gt;
On October 14, their stock dropped about 15% in a day, because the interest on their debt climbed to around 15%.&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%2F63kfp70v335att85163g.webp" 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%2F63kfp70v335att85163g.webp" alt="Server racks with a red warning" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So people are asking: is this the top? Is it about to pop?&lt;br&gt;
Some big banks say no, this is a boom, not a bubble. Others are less sure.&lt;/p&gt;

&lt;p&gt;I'm not going to predict the stock market. Nobody can.&lt;br&gt;
What I can tell you is what happened to people like me the last two times.&lt;/p&gt;

&lt;h2&gt;
  
  
  2000: the dot-com crash
&lt;/h2&gt;

&lt;p&gt;In March 2000, the Nasdaq hit about 5,000.&lt;br&gt;
Two and a half years later, it was at about 1,100. That's a 78% drop.&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%2Fnq0l0g7660h4ba4w1tew.webp" 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%2Fnq0l0g7660h4ba4w1tew.webp" alt="Nasdaq, March 2000 to October 2002: 5,048 to 1,114 (-78%)" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pets.com, which had a Super Bowl ad, shut down that same year.&lt;br&gt;
Hundreds of startups just vanished.&lt;/p&gt;

&lt;p&gt;Amazon's stock went from about $107 to about $6. More than 90% gone.&lt;br&gt;
People called it Amazon.bomb.&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%2Fczgvaiu3suwq5jof58ij.webp" 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%2Fczgvaiu3suwq5jof58ij.webp" alt="Amazon stock, December 1999 to September 2001: $107 to $6 (-94%)" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And here's what I want you to notice.&lt;br&gt;
Google was founded in 1998, and it launched its ad business in 2000, right in the middle of the crash.&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%2Fwx5kiw36j91u64ozkuq5.webp" 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%2Fwx5kiw36j91u64ozkuq5.webp" alt="A sprout growing in the ruins" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The internet didn't die. Email didn't die. Search didn't die.&lt;br&gt;
The companies crashed. The tools stayed.&lt;br&gt;
And the tools got cheaper.&lt;/p&gt;

&lt;h2&gt;
  
  
  2004: starting my business after the crash
&lt;/h2&gt;

&lt;p&gt;That's the world I walked into.&lt;br&gt;
I started my web business in Tokyo in 2004, right after the crash.&lt;br&gt;
Servers were cheap, and the people who were left knew what they were doing.&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%2F8yj0thyt81dtjlrk6v2x.webp" 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%2F8yj0thyt81dtjlrk6v2x.webp" alt="2004: starting out in a small office in Tokyo" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I didn't have investors. I didn't have a team.&lt;br&gt;
I just built small things that people actually paid for.&lt;/p&gt;

&lt;h2&gt;
  
  
  2008: Lehman Brothers
&lt;/h2&gt;

&lt;p&gt;Then came 2008.&lt;br&gt;
On September 15, Lehman Brothers collapsed. It was the biggest bankruptcy in American history.&lt;/p&gt;

&lt;p&gt;This crash was different. It wasn't about websites. It was about borrowed money.&lt;br&gt;
Overnight, it got hard to borrow anything.&lt;/p&gt;

&lt;p&gt;Companies that ran on debt went down first.&lt;br&gt;
Companies that ran on real customers paying real money mostly survived.&lt;br&gt;
Mine did.&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%2F1r3wtkgzzof6e02h3z8t.webp" 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%2F1r3wtkgzzof6e02h3z8t.webp" alt="Dominoes falling, and a small shop still standing" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Is today 2000 or 2008?
&lt;/h2&gt;

&lt;p&gt;Honestly, a bit of both.&lt;/p&gt;

&lt;p&gt;Like 2000, there's a ton of hype, and valuations that assume everything goes perfectly.&lt;/p&gt;

&lt;p&gt;Like 2008, a lot of it runs on borrowed money. Data centers, chips, power.&lt;br&gt;
When borrowing gets expensive, that part shakes first.&lt;br&gt;
That's what CoreWeave is showing us.&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%2Fe8h2kc8nubuse6v8zazq.webp" 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%2Fe8h2kc8nubuse6v8zazq.webp" alt="Server racks chained to a pile of gold coins" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But unlike 2000, the revenue is real.&lt;br&gt;
Millions of people pay for these tools every month. I'm one of them.&lt;/p&gt;

&lt;h2&gt;
  
  
  What happens to your AI tools
&lt;/h2&gt;

&lt;p&gt;So here's the part that matters for you.&lt;br&gt;
If money gets tight, your AI tools won't disappear. But they will change.&lt;/p&gt;

&lt;p&gt;Right now, these companies are fighting for you.&lt;br&gt;
Cheap plans, generous limits, new features every week.&lt;br&gt;
A lot of that is subsidized.&lt;/p&gt;

&lt;p&gt;If investors start asking for profit, that's the first thing to go.&lt;/p&gt;

&lt;p&gt;・Tighter limits&lt;br&gt;
・Higher prices&lt;br&gt;
・Some features quietly disappear&lt;br&gt;
・Some smaller tools shut down completely&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%2Fv4hg0gjssdw047pkti3b.webp" 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%2Fv4hg0gjssdw047pkti3b.webp" alt="A usage meter moving into the red" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's exactly what happened in 2001. The free stuff went away first.&lt;/p&gt;

&lt;h2&gt;
  
  
  4 warning signs I watch
&lt;/h2&gt;

&lt;p&gt;So how would you know it's starting? Here are the signals I watch.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Limits quietly get tighter. Same price, but you hit the cap sooner. That usually comes before a price increase.&lt;/li&gt;
&lt;li&gt;The cheap plan loses features, and they reappear in a more expensive plan.&lt;/li&gt;
&lt;li&gt;Free trials get shorter, or disappear.&lt;/li&gt;
&lt;li&gt;Smaller AI startups start getting acquired, or announce they're shutting down, with thirty days to export your data.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;None of these are happening in a big way yet.&lt;br&gt;
But that's the order I'd expect them in.&lt;/p&gt;

&lt;h2&gt;
  
  
  5 things I am doing
&lt;/h2&gt;

&lt;p&gt;I run my whole business on about forty AI sessions a day. So I've had to think about this.&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%2Fxcr8bm44wid6yy1dbnvc.webp" 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%2Fxcr8bm44wid6yy1dbnvc.webp" alt="About forty sessions running at once" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. My rules and my memory live in plain files on my own Mac.&lt;/strong&gt;&lt;br&gt;
Not inside one app. If a company changes its terms, I don't lose years of setup.&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%2Fyguyi00c5507z7arp0tv.webp" 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%2Fyguyi00c5507z7arp0tv.webp" alt="Files stored on my own Mac" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Every big decision also goes to three other AIs.&lt;/strong&gt;&lt;br&gt;
Not just Claude. So I already know how the others work.&lt;br&gt;
If I have to switch, it's an afternoon, not a month.&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%2Fwwrp5b1k7avlg1hf586k.webp" 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%2Fwwrp5b1k7avlg1hf586k.webp" alt="One Mac, three other AIs" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. I already split the work.&lt;/strong&gt;&lt;br&gt;
Cheap, repetitive checks go to the cheapest model that's good enough.&lt;br&gt;
The hard thinking stays on the best one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. I use this cheap era hard.&lt;/strong&gt;&lt;br&gt;
Right now you can build things for almost nothing.&lt;br&gt;
I'm building things that keep working even if the price doubles.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. The lesson from 2008: make money from real customers.&lt;/strong&gt;&lt;br&gt;
If people pay you because you solve their problem, a crash is weather, not the end.&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%2Fx09etckvn673ek2litvm.webp" 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%2Fx09etckvn673ek2litvm.webp" alt="A small shop with customers coming in" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Start today in 1 hour
&lt;/h2&gt;

&lt;p&gt;If you want to start today, here's a simple version. It takes about an hour.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Write down your prompts, rules and instructions in a plain text file. The things you keep retyping. Save it on your own computer.&lt;/li&gt;
&lt;li&gt;Export anything important from the tools you use. Chats, documents, projects. Most tools have an export button. Find it now, while it's easy.&lt;/li&gt;
&lt;li&gt;Take one real task you do every week, and try it in a second AI. Just once. So you know it works before you need it.&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/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu1b41u522fja9xr5itj7.webp" 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%2Fu1b41u522fja9xr5itj7.webp" alt="Pressing the export button" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's it. You're not switching. You're just making sure you can.&lt;/p&gt;

&lt;h2&gt;
  
  
  The tools stayed
&lt;/h2&gt;

&lt;p&gt;I've watched two bubbles pop.&lt;br&gt;
Both times, the people who got hurt were the ones who depended on one company, or on borrowed money.&lt;/p&gt;

&lt;p&gt;The tools stayed. They'll stay this time too.&lt;br&gt;
Bubbles pop on companies. They don't have to pop on you.&lt;/p&gt;

&lt;p&gt;Sources: Anthropic's IPO filing as reported by AP (October 26, 2026), CoreWeave market data (October 14, 2026), and historical records for the Nasdaq, Amazon, Pets.com, Google and Lehman Brothers. This is not financial advice.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>startup</category>
      <category>productivity</category>
      <category>career</category>
    </item>
    <item>
      <title>Claude 2.0 Full Guide: 12 Changes in the New Claude Desktop App, and the Ones Burning Your Usage Limit</title>
      <dc:creator>Hisashi Space</dc:creator>
      <pubDate>Sun, 01 Nov 2026 05:27:25 +0000</pubDate>
      <link>https://dev.to/hisashispace/claude-20-full-guide-12-changes-in-the-new-claude-desktop-app-and-the-ones-burning-your-usage-3nk4</link>
      <guid>https://dev.to/hisashispace/claude-20-full-guide-12-changes-in-the-new-claude-desktop-app-and-the-ones-burning-your-usage-3nk4</guid>
      <description>&lt;p&gt;Using Claude? Claude 2.0, the rebuilt Claude desktop app, changed 12 things. Some of them quietly burn your usage limit.&lt;/p&gt;

&lt;p&gt;I run about forty Claude sessions every day, so I went through the new app on my own Mac.&lt;br&gt;
This is what actually matters.&lt;/p&gt;

&lt;p&gt;I also made a video of the whole walkthrough.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/vL6ZC_j9RJQ" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Cowork is gone: just Chat and Code
&lt;/h2&gt;

&lt;p&gt;There are only two tabs now, Chat and Code. Every new feature ships in Code.&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%2Fynemrethsnifv1eekpuz.webp" 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%2Fynemrethsnifv1eekpuz.webp" alt="The two tabs at the top left: Chat and Code" width="575" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Don't let the word "code" scare you. You still type in plain English.&lt;br&gt;
Switch to that tab, because everything below lives there.&lt;/p&gt;

&lt;p&gt;Here is why it matters. When I open Claude now, I don't pick a mode first. I pick a folder.&lt;br&gt;
Claude works inside it, with my files, my rules and my tools.&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%2Fhhtsuvbtyqo5i9hctyqg.webp" 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%2Fhhtsuvbtyqo5i9hctyqg.webp" alt="Choose a folder to work in" width="800" height="267"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  2. The session rail, and what eats your limit
&lt;/h2&gt;

&lt;p&gt;The session rail is the panel on the right.&lt;br&gt;
The top card shows where this chat runs: your computer or the cloud.&lt;/p&gt;

&lt;p&gt;Below that is the context card. It shows what is eating your limit before you even type.&lt;br&gt;
Memory files, skills, connectors. They all load into every new chat.&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%2Fiig176olf5bufg9tjryq.webp" 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%2Fiig176olf5bufg9tjryq.webp" alt="The context card: Messages 6.6%, MCP tools 5.2%, System tools 4.2%, Memory files 3.7%, Skills 2.5%" width="558" height="940"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On mine, tools, memory and skills together took more room than all my actual messages.&lt;br&gt;
That is the first thing to clean up.&lt;/p&gt;

&lt;p&gt;Every one of those loads on your very first message.&lt;br&gt;
So a giant memory file costs you on every single chat, before you have said a word.&lt;/p&gt;

&lt;p&gt;Once a week, open this card and ask Claude to trim whatever it doesn't need.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Trim my memory files to what you actually use
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It takes two minutes, and your limit lasts longer.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Remote control
&lt;/h2&gt;

&lt;p&gt;Flip this switch, and the same chat keeps going on your phone.&lt;br&gt;
Start at your desk, check it on the train.&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%2Fkn9e85x5a273f28nsvaf.webp" 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%2Fkn9e85x5a273f28nsvaf.webp" alt="Remote Control on the session rail" width="588" height="305"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There is also a setting that connects every new session to remote control automatically, so you never have to remember the switch.&lt;/p&gt;

&lt;p&gt;And turn on "Keep computer awake while Claude works." Otherwise your Mac sleeps, and the job stops halfway.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Sections
&lt;/h2&gt;

&lt;p&gt;Right-click any chat and move it to a new section. You get folders in the sidebar, one per project or client.&lt;/p&gt;

&lt;p&gt;I have a section for each product and each channel.&lt;br&gt;
No more scrolling through fifty chats to find one.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Nested sessions
&lt;/h2&gt;

&lt;p&gt;A chat can now start its own chats.&lt;br&gt;
I asked one to write an App Store description, a launch post and keywords, all at once.&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%2F9ym2kb693hxot5ayas7a.webp" 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%2F9ym2kb693hxot5ayas7a.webp" alt="One request started three nested sessions" width="800" height="502"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It started three sessions. When each one finished, it reported back.&lt;br&gt;
And unlike sub-agents, I can click into any of them and keep talking.&lt;/p&gt;

&lt;p&gt;That is the difference.&lt;br&gt;
A sub-agent is a one-way order: you send a job and get a result.&lt;br&gt;
A nested session is a real chat you can steer.&lt;/p&gt;

&lt;p&gt;So if the launch post comes back too long, you don't start over.&lt;br&gt;
Open that one session and say "shorter." Done.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. The master session
&lt;/h2&gt;

&lt;p&gt;One chat can now see your other sessions. Pin one to the top and make it your master.&lt;/p&gt;

&lt;p&gt;Then ask it what is waiting on you.&lt;br&gt;
It read my five latest sessions and told me nothing needed a decision. That is a perfect morning check.&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%2Fxfa58hzf40x88ykwwch0.webp" 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%2Fxfa58hzf40x88ykwwch0.webp" alt="The master session read five sessions and reported none were waiting on me" width="799" height="309"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By default it looks at your twenty most recent sessions.&lt;br&gt;
You can ask it to look further back, or to sort your chats into sections for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Three settings that quietly burn your limit
&lt;/h2&gt;

&lt;p&gt;Open Settings, then Claude Code.&lt;/p&gt;

&lt;p&gt;Dynamic workflows runs agents in parallel. The app itself warns that workflows can use a lot of your usage limit quickly.&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%2Fhxlv6sxrt40rt1pvdsg2.webp" 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%2Fhxlv6sxrt40rt1pvdsg2.webp" alt="Dynamic workflows: &amp;quot;Workflows can use a lot of your usage limit quickly&amp;quot;" width="800" height="624"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Prompt suggestions and Classify session states both say they add to your usage too.&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%2Fss3s4r26zcli6epjrbh2.webp" 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%2Fss3s4r26zcli6epjrbh2.webp" alt="Classify session states: &amp;quot;counts towards your plan usage&amp;quot;" width="800" height="624"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Turn off what you don't use. Leave "Keep computer awake" on.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Side chats with /btw
&lt;/h2&gt;

&lt;p&gt;Type &lt;code&gt;/btw&lt;/code&gt; while Claude is working.&lt;br&gt;
A side chat opens, reads the main chat, and answers without stopping it.&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%2Fgap82nc3ecsn5nxw1s43.webp" 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%2Fgap82nc3ecsn5nxw1s43.webp" alt="A side chat opened next to the main chat" width="799" height="278"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/btw&lt;/code&gt; used to vanish. Now side chats stay, and you can open as many as you want.&lt;/p&gt;

&lt;p&gt;Why not just ask in the main chat?&lt;br&gt;
Because you interrupt the work, and every question there costs more, since the whole long chat gets read again.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Split view
&lt;/h2&gt;

&lt;p&gt;Hold Option and click a chat. It opens next to the one you are in.&lt;br&gt;
I fit eight on one screen.&lt;/p&gt;

&lt;p&gt;Start with two. Eight is a lot for your own brain.&lt;/p&gt;

&lt;p&gt;My setup is simple. The master session on the left, the jobs it started on the right, and a side chat when I need one.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. Docs, Slides and designs
&lt;/h2&gt;

&lt;p&gt;Claude now makes these as shared pages you can edit together and send as a link.&lt;br&gt;
Docs is a shared document you write together with Claude. Slides builds a deck you can present right there.&lt;/p&gt;

&lt;p&gt;Docs and Slides got all the headlines. But they are the least of what changed.&lt;/p&gt;

&lt;p&gt;If your brand has a design system, there is now a place for it right in Settings, so everything Claude makes looks like you.&lt;/p&gt;

&lt;h2&gt;
  
  
  11. New slash commands
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;/doctor&lt;/code&gt; checks your setup and offers fixes.&lt;br&gt;
&lt;code&gt;/rewind&lt;/code&gt; takes you back to an earlier point, like undo.&lt;/p&gt;

&lt;p&gt;Pressing Escape twice rewinds without typing anything.&lt;/p&gt;

&lt;h2&gt;
  
  
  12. Mods
&lt;/h2&gt;

&lt;p&gt;Describe a change, and Claude rewrites the app itself.&lt;br&gt;
I asked for my weekly limit above the chat box.&lt;/p&gt;

&lt;p&gt;It wrote it, asked once, and turned it on.&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%2Fdrp4d4ctca1fouznjub9.webp" 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%2Fdrp4d4ctca1fouznjub9.webp" alt="Turn on the mods Claude writes in this session?" width="799" height="545"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now I see how much is left before I start anything big.&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%2Fl21bu4nolnu2tv3geoht.webp" 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%2Fl21bu4nolnu2tv3geoht.webp" alt="A weekly limit meter above the chat box: 99% left" width="798" height="179"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You don't need to code this. I typed one sentence.&lt;br&gt;
The mod is just a few files Claude writes, and you can turn it off anytime.&lt;/p&gt;

&lt;h2&gt;
  
  
  A simple daily routine
&lt;/h2&gt;

&lt;p&gt;Here is how it all fits together.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the morning, ask the master session what is waiting on you. You get a short list.&lt;/li&gt;
&lt;li&gt;Start the big jobs as nested sessions, one per task.&lt;/li&gt;
&lt;li&gt;Put the master on the left in split view so you can watch them.&lt;/li&gt;
&lt;li&gt;When you are curious about a job, don't interrupt it. Open a side chat.&lt;/li&gt;
&lt;li&gt;Let the green meter tell you when to slow down.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is how one person can keep forty sessions moving without losing track.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three mistakes to avoid
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Letting your memory file grow huge. Every chat pays for it.&lt;/li&gt;
&lt;li&gt;Opening eight panes on day one. You won't follow any of them. Two panes first.&lt;/li&gt;
&lt;li&gt;Asking questions in the main chat while it is working. It slows everything down. That is what side chats are for.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Do these three today
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Check your context card&lt;/li&gt;
&lt;li&gt;Set up a master session&lt;/li&gt;
&lt;li&gt;Build a mod for your limit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everyone talked about Docs. The real upgrade is that one chat can now run all the others.&lt;/p&gt;

</description>
      <category>claude</category>
      <category>ai</category>
      <category>productivity</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to Remove Background Music and Keep Only the Voice. With Prompts for Claude Code, Codex, Grok and Antigravity</title>
      <dc:creator>Hisashi Space</dc:creator>
      <pubDate>Tue, 20 Oct 2026 13:01:18 +0000</pubDate>
      <link>https://dev.to/hisashispace/how-to-remove-background-music-and-keep-only-the-voice-with-prompts-for-claude-code-codex-grok-25kc</link>
      <guid>https://dev.to/hisashispace/how-to-remove-background-music-and-keep-only-the-voice-with-prompts-for-claude-code-codex-grok-25kc</guid>
      <description>&lt;p&gt;I wanted to reuse the narration from some old TikTok videos I made.&lt;/p&gt;

&lt;p&gt;The problem: the videos had background music, and I no longer had the original voice recordings.&lt;/p&gt;

&lt;p&gt;So I removed the music and kept only the voice.&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%2Fnx1fkidyzmjgwjy5k5xw.webp" 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%2Fnx1fkidyzmjgwjy5k5xw.webp" alt="Left: with background music. Right: the same scene, voice only" width="800" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I used Demucs, a free sound separation model released by Meta.&lt;br&gt;
It ran entirely on my Mac and took about 16 seconds for two videos.&lt;/p&gt;

&lt;p&gt;This post shows how I did it, how I asked Claude Code, and how to ask Codex, Grok and Antigravity to do the same.&lt;/p&gt;
&lt;h2&gt;
  
  
  What Demucs does
&lt;/h2&gt;

&lt;p&gt;Demucs splits audio into four parts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Vocals&lt;/li&gt;
&lt;li&gt;Drums&lt;/li&gt;
&lt;li&gt;Bass&lt;/li&gt;
&lt;li&gt;Other instruments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It was built to pull singing voices out of songs, but it works the same way for speech over background music.&lt;/p&gt;

&lt;p&gt;It is free and runs on your own computer. You do not need to upload your audio anywhere.&lt;/p&gt;
&lt;h2&gt;
  
  
  What you can use it for
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Reuse the voice from an old video in a new one&lt;/li&gt;
&lt;li&gt;Check what someone is saying when the music is too loud&lt;/li&gt;
&lt;li&gt;Prepare clean voice samples, for example for text to speech&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  How I asked Claude Code
&lt;/h2&gt;

&lt;p&gt;All I did was ask Claude Code in plain language (I asked in Japanese; translated here).&lt;/p&gt;

&lt;p&gt;First, I pasted the video URLs and asked for the audio:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Extract the audio from these TikTok videos for me
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, when I worried about the music:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Ah, the background music will probably hurt the quality
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally, to get the files:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Put them in Downloads too
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That was enough for it to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Save the videos&lt;/li&gt;
&lt;li&gt;Install Demucs&lt;/li&gt;
&lt;li&gt;Separate the voice from the music&lt;/li&gt;
&lt;li&gt;Write the voice only audio to my Downloads folder&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I did not have to look up Demucs or learn how to install it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Asking Codex, Grok or Antigravity
&lt;/h2&gt;

&lt;p&gt;Any AI agent that can run commands on your computer can do this. Here is how to start each one:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Codex (OpenAI): &lt;code&gt;codex&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Grok Build (xAI): &lt;code&gt;grok&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Antigravity (Google): &lt;code&gt;agy&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I have only tried this with Claude Code.&lt;br&gt;
So that other agents do not get lost, here is a prompt that spells out every step. Paste it after you start the agent.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Extract only the spoken voice from this video.
Video file: (paste the file path)

Steps
1. Create a working folder and a Python virtual environment inside it
2. Install demucs in that environment
3. Extract the audio from the video with ffmpeg
4. Use demucs with --two-stems=vocals to split voice from everything else
5. Save the voice only file (vocals.wav) to my Downloads folder

Rules
- Do not delete any files outside the working folder
- When you finish, tell me what was created and where
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Doing it yourself
&lt;/h2&gt;

&lt;p&gt;You can also run it without an AI agent. In the macOS Terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python3 -m venv demucs-env
source demucs-env/bin/activate
pip install demucs
demucs --two-stems=vocals your-audio.wav
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;--two-stems=vocals&lt;/code&gt; splits the audio into "vocals" and "everything else".&lt;br&gt;
The voice only file is saved as &lt;code&gt;vocals.wav&lt;/code&gt; inside a folder called &lt;code&gt;separated&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Things to keep in mind
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Only use it on videos you made, or videos you have permission to use&lt;/li&gt;
&lt;li&gt;Where the music and the voice are equally loud, a little music may remain&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;You can pull just the voice out of a video with background music&lt;/li&gt;
&lt;li&gt;I used Demucs, a free model from Meta&lt;/li&gt;
&lt;li&gt;It ran on my Mac in about 16 seconds for two videos&lt;/li&gt;
&lt;li&gt;With Claude Code, asking in plain language was enough&lt;/li&gt;
&lt;li&gt;For Codex, Grok and Antigravity, paste a prompt that lists every step&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>claudecode</category>
      <category>ai</category>
      <category>audio</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>I only registered a domain. Why did ChatGPT's bots show up within an hour?</title>
      <dc:creator>Hisashi Space</dc:creator>
      <pubDate>Mon, 19 Oct 2026 07:03:01 +0000</pubDate>
      <link>https://dev.to/hisashispace/i-only-registered-a-domain-why-did-chatgpts-bots-show-up-within-an-hour-1pgb</link>
      <guid>https://dev.to/hisashispace/i-only-registered-a-domain-why-did-chatgpts-bots-show-up-within-an-hour-1pgb</guid>
      <description>&lt;p&gt;In my last post, I wrote that when I launched sites on brand new domains, ChatGPT's bots showed up before Google's.&lt;br&gt;
&lt;a href="https://hisashi.space/blog/crawler-google-vs-chatgpt/" rel="noopener noreferrer"&gt;https://hisashi.space/blog/crawler-google-vs-chatgpt/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;About an hour after I registered the domain, before there was a single article or a single link, OpenAI's bots were already there.&lt;br&gt;
So how did OpenAI find out that a site had just been born?&lt;/p&gt;

&lt;p&gt;My guess was the SSL certificate.&lt;br&gt;
When you get a certificate, its hostname is written to a public log.&lt;br&gt;
I suspected OpenAI watches that log and comes to look.&lt;/p&gt;

&lt;p&gt;To test that, I went through the logs of test environments that are not linked from anywhere and have never been submitted to any search engine.&lt;br&gt;
Unlike a production site, a test environment is a place nobody should know about except the people who built it.&lt;/p&gt;
&lt;h2&gt;
  
  
  What I looked at
&lt;/h2&gt;

&lt;p&gt;One server runs 48 hosts for us. Ten of them are test hosts.&lt;br&gt;
They are test environments for our own products and for client projects we build, and none of them are linked from anywhere.&lt;br&gt;
I am keeping the product names and domains private and calling them Test env A to J.&lt;/p&gt;

&lt;p&gt;The data is the server's access log (nginx).&lt;br&gt;
The oldest records go back to the end of April 2026.&lt;br&gt;
All times are Japan time.&lt;/p&gt;

&lt;p&gt;You cannot identify a bot by the name it gives (its User-Agent).&lt;br&gt;
These logs alone had 3,305 requests from fakes borrowing the names of OpenAI or Google bots.&lt;br&gt;
So I matched every request against the IP ranges each company publishes, and counted only the ones that matched as real.&lt;/p&gt;

&lt;p&gt;・OpenAI: OAI-SearchBot, GPTBot, ChatGPT-User&lt;br&gt;
・Google: Googlebot&lt;br&gt;
・Microsoft: bingbot&lt;/p&gt;
&lt;h2&gt;
  
  
  Which bots came to the test environments
&lt;/h2&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%2Fi3lvtgtw7u5tjmc5aik4.webp" 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%2Fi3lvtgtw7u5tjmc5aik4.webp" alt="Bots that visited test environments we never published" width="800" height="933"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Real OpenAI bots visited 8 of the 10 test environments.&lt;br&gt;
2,403 requests in total.&lt;/p&gt;

&lt;p&gt;Real Googlebot did not visit any of the 10. Not once.&lt;br&gt;
Real bingbot: zero as well.&lt;/p&gt;

&lt;p&gt;・Test env A: OpenAI 633, Google 0 (logs from May 10)&lt;br&gt;
・Test env B: OpenAI 519, Google 0 (logs from May 10)&lt;br&gt;
・Test env C: OpenAI 413, Google 0 (created July 6)&lt;br&gt;
・Test env D: OpenAI 396, Google 0 (logs from May 10)&lt;br&gt;
・Test env E: OpenAI 238, Google 0 (created August 20)&lt;br&gt;
・Test env F: OpenAI 175, Google 0 (logs from May 10)&lt;br&gt;
・Test env G: OpenAI 28, Google 0 (created April 30)&lt;br&gt;
・Test env H: OpenAI 1, Google 0 (created October 14)&lt;br&gt;
・Test env I: OpenAI 0, Google 0 (logs from October 5)&lt;br&gt;
・Test env J: OpenAI 0, Google 0 (created April 30)&lt;/p&gt;

&lt;p&gt;Googlebot visits our production sites every day.&lt;br&gt;
The test environments under the same domains, on the same server, have not seen it once in more than five months.&lt;/p&gt;
&lt;h2&gt;
  
  
  What happened on the day they were created
&lt;/h2&gt;

&lt;p&gt;For Test env C, E and H, the logs go all the way back to the day they were created.&lt;br&gt;
In all three, the bots arrived in the same order.&lt;/p&gt;

&lt;p&gt;Here is Test env E.&lt;/p&gt;

&lt;p&gt;・17:54:00: the first request in the log. Within a few seconds, one scanner bot after another hits the top page&lt;br&gt;
・18:32:44 (38 minutes later): OpenAI's OAI-SearchBot reads robots.txt&lt;br&gt;
・18:32:45: OpenAI's GPTBot reads the top page, then follows its links and starts reading the pages inside&lt;/p&gt;

&lt;p&gt;Test env H was the same: OAI-SearchBot arrived 38 minutes after the first request.&lt;br&gt;
For Test env C, it was 2 hours and 12 minutes.&lt;/p&gt;

&lt;p&gt;On Test env C and H, one of the bots in those first few seconds called itself CT-WP-Scanner.&lt;br&gt;
CT stands for Certificate Transparency, the public log of SSL certificates.&lt;br&gt;
When a certificate is issued, its hostname goes into this log, and anyone can read it.&lt;br&gt;
The hostnames of all three test environments were in that log.&lt;/p&gt;

&lt;p&gt;At that point, the only places anyone could learn those hostnames were the certificate log and the DNS records.&lt;br&gt;
No links, no sitemap, no search engine submission.&lt;/p&gt;
&lt;h2&gt;
  
  
  Google and OpenAI behave differently
&lt;/h2&gt;

&lt;p&gt;Google explains how Search works starting from discovering pages through links and sitemaps.&lt;br&gt;
&lt;a href="https://developers.google.com/search/docs/fundamentals/how-search-works" rel="noopener noreferrer"&gt;https://developers.google.com/search/docs/fundamentals/how-search-works&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The test environments have no links pointing to them and no sitemap submitted anywhere.&lt;br&gt;
And in the logs, Googlebot never came.&lt;/p&gt;

&lt;p&gt;OpenAI's bots came to places we had told nobody about, within an hour of creating them.&lt;br&gt;
On Test env C and E, GPTBot started reading the pages one second after OAI-SearchBot read robots.txt.&lt;/p&gt;
&lt;h2&gt;
  
  
  My take
&lt;/h2&gt;

&lt;p&gt;From here on, this is my interpretation of the logs.&lt;/p&gt;

&lt;p&gt;OpenAI treats a new domain or a new host getting an SSL certificate as a signal, and comes to look.&lt;br&gt;
Googlebot behaves differently.&lt;/p&gt;

&lt;p&gt;In other words, I think OpenAI collects information more widely than Google does, and analyzes it on its own.&lt;/p&gt;

&lt;p&gt;OpenAI has not said how it finds new sites.&lt;br&gt;
What the logs show is this: once a hostname appeared in the certificate log and got its first request, OpenAI's bots arrived within 38 minutes to about 2 hours. And Google has not come to similar places in more than five months.&lt;/p&gt;
&lt;h2&gt;
  
  
  Limits of this data
&lt;/h2&gt;

&lt;p&gt;・I cannot fully rule out that one of these hostnames was written somewhere I do not know about&lt;br&gt;
・For the test environments whose logs start on May 10, I cannot see what came before that&lt;br&gt;
・Some places, like Test env J, did not get OpenAI either&lt;br&gt;
・There is one more test environment whose only surviving logs are from April 2025. Googlebot came 54 times and bingbot 20 times. Since the period is different from the others, I left it out of the ten&lt;/p&gt;
&lt;h2&gt;
  
  
  How to check your own site
&lt;/h2&gt;

&lt;p&gt;You can count them in your server's access log like this.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;grep "OAI-SearchBot" access.log | wc -l
grep "GPTBot" access.log | wc -l
grep "Googlebot" access.log | wc -l
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Any program can use any name.&lt;br&gt;
To know whether a bot is real, match it against the IP ranges each company publishes.&lt;/p&gt;

&lt;p&gt;・OpenAI: &lt;a href="https://openai.com/searchbot.json" rel="noopener noreferrer"&gt;https://openai.com/searchbot.json&lt;/a&gt; , &lt;a href="https://openai.com/gptbot.json" rel="noopener noreferrer"&gt;https://openai.com/gptbot.json&lt;/a&gt;&lt;br&gt;
・Google: &lt;a href="https://developers.google.com/static/search/apis/ipranges/googlebot.json" rel="noopener noreferrer"&gt;https://developers.google.com/static/search/apis/ipranges/googlebot.json&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is how you can see whether OpenAI's bots are visiting your test or staging environments.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;Out of 10 test environments that are not linked from anywhere, OpenAI's bots visited 8.&lt;br&gt;
Googlebot visited none.&lt;/p&gt;

&lt;p&gt;On the days they were created, OpenAI's bots arrived between 38 minutes and about 2 hours after the first request.&lt;/p&gt;

&lt;p&gt;Even an environment you think is private gets found by OpenAI the moment you get a certificate for it.&lt;/p&gt;

</description>
      <category>chatgpt</category>
      <category>openai</category>
      <category>seo</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Thanks to AI? Links to my site started arriving from an unexpected route</title>
      <dc:creator>Hisashi Space</dc:creator>
      <pubDate>Thu, 15 Oct 2026 23:58:45 +0000</pubDate>
      <link>https://dev.to/hisashispace/thanks-to-ai-links-to-my-site-started-arriving-from-an-unexpected-route-9o4</link>
      <guid>https://dev.to/hisashispace/thanks-to-ai-links-to-my-site-started-arriving-from-an-unexpected-route-9o4</guid>
      <description>&lt;p&gt;I opened the Links report in Search Console for a site I run.&lt;br&gt;
It showed 799 external links in total.&lt;/p&gt;

&lt;p&gt;Most of them pointed to the home page, and they were old ones from Hatena and Yahoo! Japan.&lt;br&gt;
But when I looked only at the links pointing to blog posts, a different pattern showed up.&lt;br&gt;
My posts were listed in the "References" section at the end of articles written by people I had never heard of.&lt;/p&gt;

&lt;p&gt;I traced every linking page to see what kind of articles were linking to me, and how.&lt;/p&gt;
&lt;h2&gt;
  
  
  How I traced them
&lt;/h2&gt;

&lt;p&gt;In Search Console's Links report, I went in this order:&lt;/p&gt;

&lt;p&gt;・Listed every page under "Top linked pages" that has external links (98 pages)&lt;br&gt;
・For the blog posts among them (68 posts), listed the linking sites one by one&lt;br&gt;
・For links coming from note (a large Japanese blogging platform), went one level deeper and listed the URL of each linking article&lt;/p&gt;

&lt;p&gt;Search Console shows only 25 rows per page.&lt;br&gt;
I paged through all of them using the pager at the bottom of the table.&lt;/p&gt;

&lt;p&gt;For the note articles, I pulled the publish date and body text through note's public API, and read the text around each link to my site.&lt;/p&gt;
&lt;h2&gt;
  
  
  Where the links to blog posts come from
&lt;/h2&gt;

&lt;p&gt;68 blog posts had external links, 125 links in total.&lt;br&gt;
They came from 36 sites.&lt;/p&gt;

&lt;p&gt;・note: 19 posts&lt;br&gt;
・Hatena Blog: 5 posts&lt;br&gt;
・Yahoo! Japan: 3 posts&lt;br&gt;
・33 other sites: 1 to 6 posts each&lt;/p&gt;

&lt;p&gt;Each number is how many of my blog posts that site linked to.&lt;/p&gt;

&lt;p&gt;Links to the home page were mostly from Hatena and Yahoo! Japan.&lt;br&gt;
Links to blog posts were mostly from note and personal blogs.&lt;/p&gt;
&lt;h2&gt;
  
  
  The note links came from 31 articles
&lt;/h2&gt;

&lt;p&gt;Tracing the note links further, they came from 31 articles.&lt;br&gt;
By publish date:&lt;/p&gt;

&lt;p&gt;・2020 and 2022: 2 articles&lt;br&gt;
・2026: 29 articles&lt;/p&gt;

&lt;p&gt;The 2 older ones mentioned my site as part of the writer's own experience.&lt;br&gt;
The 29 from 2026 looked completely different.&lt;/p&gt;
&lt;h2&gt;
  
  
  20 of the 29 had a "sources" section
&lt;/h2&gt;

&lt;p&gt;20 of the 29 articles from 2026 had a section after the main text titled "References", "Sources", "Information sources" or "Cited from", and my posts were in it.&lt;/p&gt;

&lt;p&gt;Here is the kind of format I found (titles hidden):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;References
[1] (My site). "2026 edition | (post title)"
[2] Cabinet Office. (2023). Annual Report on the Ageing Society 2023 (full version).
[3] (My site). (March 26, 2026). (post title)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Information sources]
・(post title) (https://(URL of my post))
・(post title) (https://...)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Numbering each entry and listing site name, date and title in that order is how academic papers cite references.&lt;br&gt;
Some of them also had markers like "[1, 2]" in the main text.&lt;/p&gt;

&lt;p&gt;You rarely see a personal note article list its sources this carefully.&lt;br&gt;
On the other hand, when you ask an AI to research something, it often returns text with exactly this kind of source list.&lt;br&gt;
Whether these articles were written with AI can't be confirmed from the outside.&lt;br&gt;
But the format looks very similar.&lt;/p&gt;

&lt;p&gt;Sometimes the same writer cited my site in several articles.&lt;br&gt;
One writer linked to me from 8 different articles.&lt;/p&gt;

&lt;h2&gt;
  
  
  By month, it is growing
&lt;/h2&gt;

&lt;p&gt;I counted the 29 articles from 2026 by the month they were published.&lt;/p&gt;

&lt;p&gt;・March: 2&lt;br&gt;
・April: 1&lt;br&gt;
・May: 1&lt;br&gt;
・June: 2&lt;br&gt;
・July: 9&lt;br&gt;
・August: 5&lt;br&gt;
・September: 9&lt;/p&gt;

&lt;p&gt;It jumped in July.&lt;/p&gt;

&lt;h2&gt;
  
  
  A company site was inserting references automatically
&lt;/h2&gt;

&lt;p&gt;Outside note, a company's owned media site in the IT space had 11 links to 6 of my posts.&lt;br&gt;
On this site, I could see a bit more of how it worked.&lt;/p&gt;

&lt;p&gt;At the end of each article there was a row of "References" cards, and my posts were among them.&lt;br&gt;
In the page data, these cards were tagged &lt;code&gt;"source":"injected"&lt;/code&gt;.&lt;br&gt;
It looks like the system that builds the articles picks related external articles automatically and inserts them afterwards.&lt;/p&gt;

&lt;p&gt;The site had 65,176 reference cards in total.&lt;br&gt;
My site wasn't singled out.&lt;br&gt;
Other sites covering similar topics were listed the same way.&lt;/p&gt;

&lt;h2&gt;
  
  
  What these links actually are
&lt;/h2&gt;

&lt;p&gt;A note on counting:&lt;/p&gt;

&lt;p&gt;・Links inside note articles carry &lt;code&gt;rel="nofollow"&lt;/code&gt;&lt;br&gt;
・All 11 reference-card links on the company site were also &lt;code&gt;nofollow&lt;/code&gt;&lt;br&gt;
・Search Console still counts &lt;code&gt;nofollow&lt;/code&gt; links as external links&lt;/p&gt;

&lt;p&gt;For the company site, I also checked Google Analytics.&lt;br&gt;
Over a little more than six months, zero visitors came from it.&lt;br&gt;
Having a link and getting visitors through it are two different things.&lt;/p&gt;

&lt;h2&gt;
  
  
  Is there any effect on search?
&lt;/h2&gt;

&lt;p&gt;Did these links change how the posts perform in search?&lt;br&gt;
For the 19 blog posts cited from note articles, I compared Search Console numbers for the 21 days before and after each post was first cited.&lt;/p&gt;

&lt;p&gt;To filter out site-wide swings, I compared each post against the growth in impressions for the whole blog.&lt;/p&gt;

&lt;p&gt;・Posts whose impressions grew faster than the blog overall: 2 (both had fewer than 60 impressions in 21 days)&lt;br&gt;
・Posts that grew slower: 17&lt;br&gt;
・Average position: some went up, some went down, with no clear direction&lt;/p&gt;

&lt;p&gt;No post visibly rose in search after being cited.&lt;br&gt;
For now, I see no effect on search.&lt;br&gt;
That fits with the links being &lt;code&gt;nofollow&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;One more thing stood out when I lined up the numbers.&lt;br&gt;
All 19 posts already had an average position between 4 and 8 in the 21 days before they were cited.&lt;br&gt;
In other words, posts that were already on the first page of search results got cited later.&lt;br&gt;
They didn't rise because they were cited.&lt;br&gt;
They were cited because they were already ranking.&lt;/p&gt;

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

&lt;p&gt;・Links to my blog posts came mainly from note and personal blogs&lt;br&gt;
・29 of the 31 linking note articles were from 2026, and 20 of those linked to me from a sources section at the end&lt;br&gt;
・The sources sections were numbered and listed site name, date and title, like an academic paper&lt;br&gt;
・Articles like this have been increasing since July 2026&lt;br&gt;
・A company site was inserting references automatically with its article-building system&lt;br&gt;
・The cited posts did not gain in search, so there is no visible search effect so far&lt;br&gt;
・The posts that got cited were already on the first page of search results&lt;/p&gt;

&lt;p&gt;So far, there has been no visible result.&lt;br&gt;
Still, the fact that AI seems to pick up my site as a source when it researches something makes me see possibilities ahead.&lt;/p&gt;

&lt;p&gt;Is your site listed in the sources section of someone else's article?&lt;br&gt;
Try tracing it once in the Links report in Search Console.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>searchconsole</category>
      <category>blogging</category>
      <category>ai</category>
    </item>
    <item>
      <title>Cloudflare split "Block AI Bots" into Search, Training and Agent. I checked all 26 of my sites through the API</title>
      <dc:creator>Hisashi Space</dc:creator>
      <pubDate>Tue, 13 Oct 2026 13:55:02 +0000</pubDate>
      <link>https://dev.to/hisashispace/cloudflare-split-block-ai-bots-into-search-training-and-agent-i-checked-all-26-of-my-sites-238h</link>
      <guid>https://dev.to/hisashispace/cloudflare-split-block-ai-bots-into-search-training-and-agent-i-checked-all-26-of-my-sites-238h</guid>
      <description>&lt;p&gt;On September 16, 2026, I got an email from Cloudflare titled "Updates to managing AI crawlers on your account."&lt;br&gt;
It said the setting for blocking AI crawlers was changing from a single switch into three categories: Search, Training and Agent.&lt;/p&gt;

&lt;p&gt;I manage 26 domains on Cloudflare.&lt;br&gt;
Instead of opening the dashboard 26 times, I pulled the settings for every domain at once through the API.&lt;br&gt;
This post covers what changed, how I checked, and how I think a site that wants to be cited in AI answers should be set up.&lt;/p&gt;
&lt;h2&gt;
  
  
  What changed
&lt;/h2&gt;

&lt;p&gt;The email listed three changes.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The recommended setting for training crawlers changed from "Block" to "Disallow AI Training"&lt;/li&gt;
&lt;li&gt;Sites that had turned on "Block AI Bots" or "Managed Robots.txt" are moved to the new three-category setting automatically&lt;/li&gt;
&lt;li&gt;Sites that never touched the setting stay on "Allow," and nothing changes for them&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;According to Cloudflare, "Disallow AI Training" lets search crawlers such as Applebot, Googlebot and Bingbot keep crawling for search results, while telling them not to use the content for training.&lt;/p&gt;

&lt;p&gt;Sites that are moved automatically end up with these values.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Search: Allow&lt;/li&gt;
&lt;li&gt;Training: Disallow AI Training&lt;/li&gt;
&lt;li&gt;Agent: Block only on pages with ads&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;According to the email, the "Block AI Bots" switch disappears from the dashboard once the migration is done.&lt;/p&gt;
&lt;h2&gt;
  
  
  Reading the settings through the API
&lt;/h2&gt;

&lt;p&gt;Each zone's settings can be read with &lt;code&gt;GET /zones/{zone_id}/bot_management&lt;/code&gt;.&lt;br&gt;
I listed all zones, read the settings one by one, and printed only the AI-related fields.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;
&lt;span class="c"&gt;# CF_API_TOKEN needs the "Bot Management Read" permission&lt;/span&gt;
&lt;span class="nv"&gt;AUTH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$CF_API_TOKEN&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$AUTH&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"https://api.cloudflare.com/client/v4/zones?per_page=100"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  | jq &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s1"&gt;'.result[] | "\(.id) \(.name)"'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  | &lt;span class="k"&gt;while &lt;/span&gt;&lt;span class="nb"&gt;read&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="nb"&gt;id &lt;/span&gt;name&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do
      &lt;/span&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$AUTH&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"https://api.cloudflare.com/client/v4/zones/&lt;/span&gt;&lt;span class="nv"&gt;$id&lt;/span&gt;&lt;span class="s2"&gt;/bot_management"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
        | jq &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="nt"&gt;--arg&lt;/span&gt; name &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$name&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s1"&gt;'{name: $name} + (.result | {
            ai_bots_protection, ai_search, ai_training, ai_user,
            is_robots_txt_managed, cf_robots_variant, crawler_protection
          })'&lt;/span&gt;
    &lt;span class="k"&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;My first try used the API token I use for DNS.&lt;br&gt;
It came back with &lt;code&gt;Authentication error&lt;/code&gt; (code 10000).&lt;br&gt;
The API reference says reading this setting needs either "Bot Management Read" or "Bot Management Write."&lt;br&gt;
If you reuse a DNS token, you will hit the same wall.&lt;/p&gt;
&lt;h3&gt;
  
  
  What the fields mean
&lt;/h3&gt;

&lt;p&gt;Summarizing the API reference:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Values&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ai_bots_protection&lt;/td&gt;
&lt;td&gt;block / disabled / only_on_ad_pages&lt;/td&gt;
&lt;td&gt;Rule that blocks AI crawlers (the old "Block AI Bots")&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ai_search&lt;/td&gt;
&lt;td&gt;disabled / block / only_on_ad_pages&lt;/td&gt;
&lt;td&gt;robots.txt policy for AI search bots&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ai_training&lt;/td&gt;
&lt;td&gt;disabled / disallow / block / only_on_ad_pages&lt;/td&gt;
&lt;td&gt;robots.txt policy for training bots&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ai_user&lt;/td&gt;
&lt;td&gt;disabled / block / only_on_ad_pages&lt;/td&gt;
&lt;td&gt;robots.txt policy for AI assistant and agent bots&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;is_robots_txt_managed&lt;/td&gt;
&lt;td&gt;true / false&lt;/td&gt;
&lt;td&gt;Whether Cloudflare writes robots.txt for you&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;crawler_protection&lt;/td&gt;
&lt;td&gt;enabled / disabled&lt;/td&gt;
&lt;td&gt;Rule that traps AI crawlers in a maze of links&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;In the reference, the three new categories (ai_search, ai_training, ai_user) are described as "robots.txt policies."&lt;br&gt;
Only ai_training has a &lt;code&gt;disallow&lt;/code&gt; value.&lt;/p&gt;

&lt;p&gt;The point to keep in mind is that robots.txt is only a request.&lt;br&gt;
Cloudflare's own documentation says whether to follow robots.txt is up to each crawler, and that it is not a technical block.&lt;br&gt;
If you really want to stop a crawler, you use a rule such as AI Crawl Control.&lt;/p&gt;
&lt;h2&gt;
  
  
  Results for 26 sites
&lt;/h2&gt;

&lt;p&gt;All 26 sites came back the same.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ai_bots_protection: disabled&lt;/li&gt;
&lt;li&gt;ai_search, ai_training, ai_user: all disabled&lt;/li&gt;
&lt;li&gt;is_robots_txt_managed: false&lt;/li&gt;
&lt;li&gt;crawler_protection: disabled&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In other words, none of my sites were blocking AI crawlers.&lt;br&gt;
That matches "sites that never touched the setting stay the same" in the email.&lt;br&gt;
They are not part of the automatic migration, so this change has no effect on them.&lt;/p&gt;

&lt;p&gt;One field did differ between sites.&lt;br&gt;
&lt;code&gt;cf_robots_variant&lt;/code&gt; was &lt;code&gt;policy_only&lt;/code&gt; on 10 of the 26 sites and &lt;code&gt;off&lt;/code&gt; on the other 16.&lt;br&gt;
The reference only calls it "the type of Robots Access Control License," and I do not remember ever setting it.&lt;/p&gt;

&lt;p&gt;I fetched robots.txt from one of the &lt;code&gt;policy_only&lt;/code&gt; sites, and Cloudflare had not added any lines.&lt;br&gt;
Since is_robots_txt_managed is false, my reading is that Cloudflare is not touching robots.txt.&lt;br&gt;
I have not yet confirmed what this value actually means.&lt;/p&gt;
&lt;h2&gt;
  
  
  I allow AI crawlers explicitly in my own robots.txt
&lt;/h2&gt;

&lt;p&gt;I do not leave robots.txt to Cloudflare. I write it myself.&lt;br&gt;
AI crawlers are allowed by name (excerpt):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User-Agent: *
Allow: /

# AI crawlers: fully allowed
User-Agent: GPTBot
User-Agent: ChatGPT-User
User-Agent: OAI-SearchBot
User-Agent: ClaudeBot
User-Agent: Claude-SearchBot
User-Agent: Claude-User
User-Agent: Google-Extended
User-Agent: PerplexityBot
User-Agent: Applebot-Extended
Allow: /
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The reason is simple: the smaller the site, the more it gains from being named in an AI answer.&lt;br&gt;
To be a candidate when someone asks "what do you recommend?", the site first has to be readable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Settings for a site that wants to be cited in AI answers
&lt;/h2&gt;

&lt;p&gt;Putting this together, here is how I think a site that wants to be cited in AI answers (ChatGPT search, Perplexity and so on) should approach it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do not block Search or Agent
&lt;/h3&gt;

&lt;p&gt;Blocking AI search bots means losing the chance to appear in AI search results at all.&lt;br&gt;
Agents that read a page because a user asked them to (ChatGPT-User and similar) cannot use your content in their answer if you block them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Decide Training as a policy
&lt;/h3&gt;

&lt;p&gt;Being used for training and being cited in a search answer are two different things.&lt;br&gt;
If you do not want your content used for training, you can set only Training to Disallow AI Training and keep Search and Agent allowed.&lt;br&gt;
This change is exactly what makes that split selectable in the dashboard.&lt;/p&gt;

&lt;h3&gt;
  
  
  If your site was migrated, check the Agent setting
&lt;/h3&gt;

&lt;p&gt;Sites that had Block AI Bots turned on are moved to "Agent: Block only on pages with ads."&lt;br&gt;
If you want AI agents to read pages that show ads, check the setting once after the migration.&lt;/p&gt;

&lt;h3&gt;
  
  
  Check that nothing else is blocking them
&lt;/h3&gt;

&lt;p&gt;Even if every Cloudflare setting is disabled, a WAF custom rule or a rate limit may still be turning AI crawlers away.&lt;br&gt;
Allowing them in robots.txt does nothing if they are stopped before they get there.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Cloudflare's AI crawler setting is now split into Search, Training and Agent&lt;/li&gt;
&lt;li&gt;Only sites that were blocking before are migrated automatically. Sites that never touched it see no change&lt;/li&gt;
&lt;li&gt;The settings can be read through the &lt;code&gt;bot_management&lt;/code&gt; API, so you can check every zone at once. The token needs Bot Management Read&lt;/li&gt;
&lt;li&gt;The three new categories are robots.txt policies and are not enforced&lt;/li&gt;
&lt;li&gt;If you want to be cited in AI answers, leave Search and Agent open and decide Training as a policy&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>cloudflare</category>
      <category>seo</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
    <item>
      <title>I run DeepSeek R1 70B from my Tokyo office. Here's the network setup.</title>
      <dc:creator>Hisashi Space</dc:creator>
      <pubDate>Sun, 11 Oct 2026 13:00:00 +0000</pubDate>
      <link>https://dev.to/hisashispace/i-run-deepseek-r1-70b-from-my-tokyo-office-heres-the-network-setup-d6n</link>
      <guid>https://dev.to/hisashispace/i-run-deepseek-r1-70b-from-my-tokyo-office-heres-the-network-setup-d6n</guid>
      <description>&lt;p&gt;I'm Hisashi. I've run my own company for 22 years, and from 2011 to 2023 I ran it while moving between countries. I still travel, and I want my tools to work the same wherever I am.&lt;/p&gt;

&lt;p&gt;This post is about how I turned a Mac in my Tokyo office into a 70B-class AI inference server I can hit from anywhere.&lt;/p&gt;




&lt;p&gt;I keep an M1 MacBook Pro stationed at my Tokyo office, running DeepSeek R1 70B and Qwen2.5 14B via Ollama. From my laptop, a café in Tokyo or a hotel room abroad, I get the same latency, the same response, the same experience.&lt;/p&gt;

&lt;p&gt;Getting it to that point taught me something. &lt;strong&gt;Installing Ollama isn't enough.&lt;/strong&gt; The moment you step outside the office, your "personal AI server" is dead unless you've fixed the network underneath it.&lt;/p&gt;

&lt;p&gt;I've optimized home networks for remote work for 15+ years, and even I was surprised by how rigorous the requirements got once "70B model accessible globally" became the bar. Four things have to be right:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fast WiFi&lt;/strong&gt;: A WiFi 7 router (GL.iNet GL-BE9300, aka "Flint 3"), with 6GHz / 5GHz / 2.4GHz bands explicitly assigned to different device generations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dual-NAT elimination&lt;/strong&gt;: My ISP (au Hikari 10G, a Japanese 10-gigabit fiber service) forces a home gateway in the path. I use DMZ-host mode to make it effectively transparent.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A stable VPN&lt;/strong&gt;: Tailscale, which I measured at 1.6 to 2.5× faster than Cloudflare Tunnel for this use case.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Baseline security&lt;/strong&gt;: SSH key-only auth, config tracked in git, firmware current.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here is the overview.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Why the network is the foundation, not the model
&lt;/h2&gt;

&lt;p&gt;Getting an LLM running on Apple Silicon is trivial. &lt;code&gt;brew install ollama &amp;amp;&amp;amp; ollama run deepseek-r1:70b&lt;/code&gt; and you have a 70B model on your Mac in 10 minutes.&lt;/p&gt;

&lt;p&gt;The moment you try to use that model as "an AI server I can hit from anywhere," reality hits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can't reach it from outside. 80% of my actual use cases happen when I'm &lt;em&gt;not&lt;/em&gt; sitting at the office Mac.&lt;/li&gt;
&lt;li&gt;Connections drop. Even with Cloudflare Tunnel or similar overlays, long sessions don't stay stable.&lt;/li&gt;
&lt;li&gt;Latency is mediocre. Big responses stall and hitch.&lt;/li&gt;
&lt;li&gt;Office bandwidth suffers. AI inference traffic crowds out everything else on the same network.&lt;/li&gt;
&lt;li&gt;You become a target. Naively open SSH to the internet, and bot brute-force attempts start within hours.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these are problems with Ollama. They're problems with the network underneath Ollama.&lt;/p&gt;

&lt;p&gt;If you actually want to operate an AI server seriously, you start with the network, not the model.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Layer 1: Fast WiFi (WiFi 7 router)
&lt;/h2&gt;

&lt;p&gt;More devices on the network means WiFi becomes a real bottleneck. My count: phone, tablet, main work Mac, AI-server Mac, printer, scanner, smart-home stuff. Easily 10 to 20 devices.&lt;/p&gt;

&lt;p&gt;The AI-server Mac in particular downloads multi-tens-of-gigabyte model files occasionally, and during those windows every other device's WiFi degrades. It's absurd to build a "global-access AI server" while making your office WiFi unusable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why the Flint 3 (GL-BE9300)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;WiFi 7 (802.11be) tri-band&lt;/li&gt;
&lt;li&gt;Independent 2.4 / 5 / 6 GHz radios, each band as its own SSID&lt;/li&gt;
&lt;li&gt;OpenWrt under the hood, so every setting is configurable via SSH + &lt;code&gt;uci&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;GL.iNet's web UI ships with Tailscale, AdGuard Home, WireGuard, and more as first-class features&lt;/li&gt;
&lt;li&gt;~$300. Pricey for a consumer router, but a fraction of an enterprise alternative.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  My three-band assignment
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;6GHz&lt;/strong&gt;: latest devices (iPhone 15/16, latest iPad, latest Macs). WPA3-only.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;5GHz&lt;/strong&gt;: main work devices, AI-server Mac, Apple TV. WPA2/WPA3 mixed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;2.4GHz&lt;/strong&gt;: legacy IoT (scanner, printer, smart-home). WPA2.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;2.4 GHz has the longest range but the lowest throughput. By dedicating it to "legacy stuff that doesn't need speed," you push your main devices to 5/6 GHz where they get full bandwidth. Cleaner separation, less interference.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Layer 2: Defeating dual-NAT with a DMZ host
&lt;/h2&gt;

&lt;p&gt;Most Japanese fiber contracts, au Hikari 10G included, require keeping the ISP-provided HGW (home gateway router) in the path. You can't replace it; the ISP bakes authentication credentials into the device itself.&lt;/p&gt;

&lt;p&gt;That leaves you with two layers: the HGW (&lt;code&gt;192.168.0.0/24&lt;/code&gt;) and the Flint 3 (&lt;code&gt;192.168.1.0/24&lt;/code&gt;). Classic dual-NAT.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why dual-NAT is a problem
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You have to open ports twice (once per device)&lt;/li&gt;
&lt;li&gt;UPnP doesn't traverse the boundary (game console NAT-type pain)&lt;/li&gt;
&lt;li&gt;Standing up your own WireGuard / OpenVPN server inside is awkward&lt;/li&gt;
&lt;li&gt;mDNS / Bonjour gets segmented (AirPlay degrades)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The fix: DMZ host on the HGW
&lt;/h3&gt;

&lt;p&gt;In the HGW admin UI, enable "DMZ host" mode and point it at the Flint 3's WAN-side IP. Done. External packets now pass through the HGW and land on the Flint 3. The HGW becomes effectively transparent, equivalent to bridge mode in practice.&lt;/p&gt;

&lt;p&gt;You're safe because the Flint 3's OpenWrt firewall drops or rejects everything on the WAN zone by default. Even with all packets arriving, unsolicited packets get blocked. The HGW is transparent at the routing level, but firewalling happens on the Flint, where you have full control.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Layer 3: Tailscale for fast, stable, global access
&lt;/h2&gt;

&lt;p&gt;Three main ways to reach your office AI server from anywhere:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Port-forwarding + DDNS&lt;/strong&gt;: direct exposure. Fast, but a huge attack surface.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloudflare Tunnel&lt;/strong&gt;: HTTPS reverse proxy via Cloudflare's edge. Medium speed, drops long sessions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tailscale&lt;/strong&gt;: WireGuard-based P2P overlay. Fast, very stable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I originally ran my server behind a Cloudflare Tunnel with a subdomain like &lt;code&gt;llm.example.com&lt;/code&gt;. It worked, but long sessions kept dropping, HTTP/2 and QUIC stalled, latency jittered.&lt;/p&gt;

&lt;p&gt;Switched to Tailscale. Measurements:&lt;/p&gt;

&lt;h3&gt;
  
  
  LAN-internal test
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;HTTP &lt;code&gt;/api/tags&lt;/code&gt; round-trip: &lt;strong&gt;Tailscale 25 ms, Cloudflare Tunnel 64 ms&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tailscale is 2.5× faster&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Tethered (simulating off-site access)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;HTTP &lt;code&gt;/api/tags&lt;/code&gt; round-trip: &lt;strong&gt;Tailscale 124 ms, Cloudflare Tunnel 196 ms&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tailscale is 1.6× faster&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Tailscale connection mode: P2P direct (no relay)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tailscale wins both on LAN and off-site, and because it establishes P2P direct connections it doesn't even route through Tailscale's relay servers. Structurally lower overhead.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Layer 4: Baseline security
&lt;/h2&gt;

&lt;p&gt;If your AI server is reachable from anywhere in the world, it's also visible to attackers from anywhere in the world. With Tailscale, you're protected by the tailnet auth boundary. With Cloudflare Tunnel, you're basically internet-facing.&lt;/p&gt;

&lt;p&gt;Three defenses are non-negotiable:&lt;/p&gt;

&lt;h3&gt;
  
  
  5-1. SSH key-only auth (password auth disabled)
&lt;/h3&gt;

&lt;p&gt;Modern macOS defaults &lt;code&gt;PasswordAuthentication&lt;/code&gt; to &lt;code&gt;no&lt;/code&gt;. On OpenWrt (the Flint 3 side), I set dropbear's &lt;code&gt;PasswordAuth&lt;/code&gt; to &lt;code&gt;off&lt;/code&gt; as well. Password brute force becomes physically impossible.&lt;/p&gt;

&lt;h3&gt;
  
  
  5-2. Git-managed configuration
&lt;/h3&gt;

&lt;p&gt;I track the Flint 3's &lt;code&gt;/etc/config/*&lt;/code&gt; files in a private GitHub repo, after sanitizing secrets (WiFi PSK, rpcd password) with &lt;code&gt;&amp;lt;REDACTED&amp;gt;&lt;/code&gt; markers. Config diffs are visible in PR form; rollback is one &lt;code&gt;git checkout&lt;/code&gt; away.&lt;/p&gt;

&lt;h3&gt;
  
  
  5-3. Firmware updates
&lt;/h3&gt;

&lt;p&gt;Both router and server firmware/OS stay current. The Flint 3 (GL.iNet) supports "Keep Settings" on firmware upgrades, so major configuration is preserved.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Before vs after
&lt;/h2&gt;

&lt;p&gt;The network rebuild changed daily experience like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Global connection stability: &lt;strong&gt;before&lt;/strong&gt; "breaks every 1 to 2 hours," &lt;strong&gt;after&lt;/strong&gt; "doesn't break" (Tailscale UDP session is persistent)&lt;/li&gt;
&lt;li&gt;Ollama API latency: &lt;strong&gt;before&lt;/strong&gt; ~200ms avg, &lt;strong&gt;after&lt;/strong&gt; ~124ms avg (~40% reduction)&lt;/li&gt;
&lt;li&gt;Large file transfers: &lt;strong&gt;before&lt;/strong&gt; "stalls," &lt;strong&gt;after&lt;/strong&gt; "smooth"&lt;/li&gt;
&lt;li&gt;Dual-NAT pain: &lt;strong&gt;before&lt;/strong&gt; UPnP/mDNS broken, &lt;strong&gt;after&lt;/strong&gt; effectively gone&lt;/li&gt;
&lt;li&gt;Security: &lt;strong&gt;before&lt;/strong&gt; "weak password, SSH wide open," &lt;strong&gt;after&lt;/strong&gt; "key-only, minimal exposure"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;"Getting it running" takes 10 minutes. "Operating it well" takes a few days. But once you've done it, you can hit a 70B model from anywhere in the world with the same latency you'd get sitting in front of the office Mac.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing thoughts
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Running an AI server from a home office isn't exotic anymore.&lt;/li&gt;
&lt;li&gt;But "Ollama installed" doesn't equal "operational."&lt;/li&gt;
&lt;li&gt;Get all four layers right, WiFi, dual-NAT, VPN, security, and you have a globally-accessible inference server that actually works.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Running 70B-class models locally isn't special anymore. What separates the people who actually &lt;em&gt;use&lt;/em&gt; their local model from those who just have one installed is having it "always there, from anywhere, reliably."&lt;/p&gt;

&lt;p&gt;The M1 MacBook Pro in my Tokyo office, with this setup, has become an always-on AI inference layer for me. Same experience from a café in Tokyo or a hotel abroad.&lt;/p&gt;

</description>
      <category>ollama</category>
      <category>tailscale</category>
      <category>networking</category>
      <category>homelab</category>
    </item>
    <item>
      <title>Google vs ChatGPT: which one brings people to a brand-new site first? A month of crawler logs from nine sites</title>
      <dc:creator>Hisashi Space</dc:creator>
      <pubDate>Sun, 11 Oct 2026 05:35:36 +0000</pubDate>
      <link>https://dev.to/hisashispace/google-vs-chatgpt-which-one-brings-people-to-a-brand-new-site-first-a-month-of-crawler-logs-from-a69</link>
      <guid>https://dev.to/hisashispace/google-vs-chatgpt-which-one-brings-people-to-a-brand-new-site-first-a-month-of-crawler-logs-from-a69</guid>
      <description>&lt;p&gt;When you launch a site on a brand-new domain, Google takes its time.&lt;br&gt;
It's normal to wait weeks before you show up in search results at all, and months before you rank anywhere useful.&lt;/p&gt;

&lt;p&gt;So what about ChatGPT?&lt;/p&gt;

&lt;p&gt;In the summer of 2026 we launched nine product sites, each on a fresh domain.&lt;br&gt;
When I lined up the logs, I found that while I was still waiting on Google, ChatGPT had already sent people who went on to sign up.&lt;br&gt;
And when Google traffic to some of those sites dropped to almost nothing, ChatGPT kept sending people anyway.&lt;/p&gt;

&lt;p&gt;This post lays out those logs in time order, and ends with what I'd do on a new site if I wanted ChatGPT to send people to it.&lt;/p&gt;
&lt;h2&gt;
  
  
  What I looked at
&lt;/h2&gt;

&lt;p&gt;Each of the nine sites is a product page plus a blog (how-to and comparison articles).&lt;br&gt;
The products are all over the place: a B2B cloud service, Mac apps, tools for group messaging and bookings.&lt;br&gt;
Some sites have both Japanese and English pages, some are Japanese only.&lt;br&gt;
I'm leaving the product names out and calling them Site A to Site I.&lt;/p&gt;

&lt;p&gt;Three sources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Raw server access logs (for four of the sites, going back to the day the domain was registered)&lt;/li&gt;
&lt;li&gt;Cloudflare analytics (for the other five; nothing before September 11 is available)&lt;/li&gt;
&lt;li&gt;Google Analytics (all nine; how many people came and where from)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All times are Japan time.&lt;br&gt;
Bots were identified by their user agent and then checked against the IP ranges each company publishes, so only the real ones are counted.&lt;/p&gt;
&lt;h2&gt;
  
  
  The bots in this story
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Googlebot: collects pages for Google Search&lt;/li&gt;
&lt;li&gt;OAI-SearchBot: collects pages for ChatGPT's search feature&lt;/li&gt;
&lt;li&gt;ChatGPT-User: fetches a page on the spot when someone asks ChatGPT something&lt;/li&gt;
&lt;li&gt;GPTBot: collects pages for training OpenAI's models&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;OpenAI describes each of these here:&lt;br&gt;
&lt;a href="https://developers.openai.com/api/docs/bots" rel="noopener noreferrer"&gt;OpenAI's crawlers&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The one that matters most here is ChatGPT-User.&lt;br&gt;
It doesn't crawl the web on its own schedule. It comes when a person asks ChatGPT a question.&lt;br&gt;
So a ChatGPT-User hit in your logs means that, at that moment, somebody was asking ChatGPT about something.&lt;/p&gt;
&lt;h2&gt;
  
  
  Who showed up first
&lt;/h2&gt;

&lt;p&gt;Here's Site A, from the day the domain was registered, in time order.&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%2Fzmacaqpeaznxl5pc31n8.webp" 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%2Fzmacaqpeaznxl5pc31n8.webp" alt="Timeline of the first bots and visitors on Site A" width="800" height="867"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Walking through it:&lt;/p&gt;

&lt;p&gt;The domain was registered in the early hours of August 29, and the SSL certificate was issued at 03:09.&lt;br&gt;
Certificate issuance goes into Certificate Transparency, a public log anyone can read.&lt;/p&gt;

&lt;p&gt;An hour later, at 04:08, four bots hit the home page within two seconds of each other.&lt;br&gt;
One of them is literally named CertSignalBot, a bot that watches those certificate logs.&lt;br&gt;
In other words, there are systems out there that pick up new domains and new certificates and start crawling them automatically.&lt;br&gt;
If you've ever looked at your backlinks in Ahrefs and found a pile of links from random overseas sites, many of those are the same kind of thing: sites that scrape new domains and list them.&lt;/p&gt;

&lt;p&gt;OAI-SearchBot, ChatGPT's search crawler, showed up 20 minutes later, at 04:27.&lt;br&gt;
Googlebot first came two days later on August 31, and Bingbot five days later on September 3.&lt;br&gt;
At that point there were no articles, no press release and no backlinks.&lt;/p&gt;

&lt;p&gt;On Site B, where I also have server logs from the start, OAI-SearchBot came about two hours after the domain was registered.&lt;br&gt;
On Site D, Googlebot came first.&lt;br&gt;
Which one comes first depends on the site, but both arrived within a few days of the domain going live.&lt;/p&gt;
&lt;h2&gt;
  
  
  Does ChatGPT find sites through Google or Bing?
&lt;/h2&gt;

&lt;p&gt;You've probably heard that ChatGPT search runs on Bing.&lt;/p&gt;

&lt;p&gt;On Sites A and B, OAI-SearchBot arrived before both Googlebot and Bingbot.&lt;br&gt;
At least at the discovery stage, ChatGPT isn't waiting for Google or Bing to index a site. It sends its own bot.&lt;/p&gt;

&lt;p&gt;What it saw to learn about the site, I can't tell you; OpenAI doesn't say.&lt;br&gt;
All the logs show is that OAI-SearchBot came 20 minutes after a certificate-watching bot did.&lt;/p&gt;

&lt;p&gt;Where ChatGPT looks for pages when it's answering a question is a separate matter, and these logs can't settle it.&lt;br&gt;
On both Site A and Site B, ChatGPT-User's first visit came after Bingbot's first visit.&lt;/p&gt;
&lt;h2&gt;
  
  
  At first it just checks the door
&lt;/h2&gt;

&lt;p&gt;One thing to watch out for.&lt;br&gt;
From August 29 to September 3, OAI-SearchBot came by one to six times a day, but all it fetched was robots.txt.&lt;br&gt;
robots.txt is the file that tells bots which parts of a site they're allowed into.&lt;br&gt;
So it was checking whether it could come in, and leaving without reading anything.&lt;/p&gt;

&lt;p&gt;Articles started going up on September 2, and at 00:44 on September 4 it read an article for the first time.&lt;br&gt;
It came 56 times that day.&lt;/p&gt;

&lt;p&gt;Site I shows the difference even more clearly.&lt;br&gt;
Site I's domain had existed since May, and OAI-SearchBot had been coming since May.&lt;br&gt;
But ChatGPT-User didn't show up until September 8, six days after the first articles went up.&lt;br&gt;
As long as there was nothing to read, ChatGPT never used the site in an answer.&lt;/p&gt;

&lt;p&gt;ChatGPT doesn't write a site off after one visit. It keeps coming to the door every day and starts reading once there's something there.&lt;/p&gt;
&lt;h2&gt;
  
  
  With ChatGPT, people arrive right after it reads
&lt;/h2&gt;

&lt;p&gt;The first person to come to Site A from ChatGPT arrived at 12:18 on September 4.&lt;br&gt;
That's six days after the domain was registered and two days after the first articles went up.&lt;/p&gt;

&lt;p&gt;The log shows ChatGPT-User fetching the home page, and four seconds later, a visitor arriving from chatgpt.com.&lt;/p&gt;

&lt;p&gt;The sign-ups looked the same.&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%2F9roizasjdqb8bayf98px.webp" 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%2F9roizasjdqb8bayf98px.webp" alt="From ChatGPT reading the page to a visitor signing up" width="800" height="633"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;September 14:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;14:22:06 ChatGPT-User fetches the home page&lt;/li&gt;
&lt;li&gt;14:23:37 (91 seconds later) a visitor arrives from chatgpt.com&lt;/li&gt;
&lt;li&gt;14:23:43 they open the sign-up page&lt;/li&gt;
&lt;li&gt;14:24:15 (2 min 09 s after the fetch) sign-up complete&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;September 25:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;05:05:22 ChatGPT-User fetches the home page&lt;/li&gt;
&lt;li&gt;05:06:37 (75 seconds later) a visitor arrives from chatgpt.com&lt;/li&gt;
&lt;li&gt;05:06:42 they open the sign-up page&lt;/li&gt;
&lt;li&gt;05:07:32 (2 min 10 s after the fetch) sign-up complete&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I can't prove from the logs that the fetch and the visit came from the same person's question.&lt;br&gt;
What I can say is that this sequence really happened: ChatGPT read the page, about a minute later someone came from ChatGPT, and they signed up on the spot.&lt;/p&gt;

&lt;p&gt;As of October 9, Site A had zero sign-ups from people who came through Google Search.&lt;br&gt;
It had three from people who came through ChatGPT, including these two.&lt;/p&gt;
&lt;h2&gt;
  
  
  With Google, there are stages between reading and visiting
&lt;/h2&gt;

&lt;p&gt;Google isn't slow because its bot is slow.&lt;br&gt;
Googlebot came to Site A two days after the domain was registered, and from then on read pages dozens to hundreds of times a day.&lt;/p&gt;

&lt;p&gt;Google describes Search in three stages: crawling (collecting pages), indexing (understanding and storing them), and serving (showing them in results).&lt;br&gt;
&lt;a href="https://developers.google.com/search/docs/fundamentals/how-search-works" rel="noopener noreferrer"&gt;How Google Search works&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;People only arrive once you're in the results and someone clicks.&lt;br&gt;
For a new site, getting from "crawled" to "near the top of the results" takes time.&lt;/p&gt;

&lt;p&gt;With ChatGPT, reading the page and recommending it happen inside one question.&lt;br&gt;
Someone asks, ChatGPT reads the page right then, and puts a link in the answer.&lt;br&gt;
That's why people show up seconds to minutes after the fetch.&lt;/p&gt;
&lt;h2&gt;
  
  
  When three sites vanished from Google, ChatGPT kept sending people
&lt;/h2&gt;

&lt;p&gt;I compared visits to all nine sites over two eight-day windows: September 25 to October 2, and October 3 to October 10.&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%2Fwbnc4k0phmjyapxzr0mq.webp" 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%2Fwbnc4k0phmjyapxzr0mq.webp" alt="Visits from Google Search and from AI to the nine sites" width="800" height="867"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On October 3, Sites A, B and C pretty much stopped getting visitors from Google Search.&lt;br&gt;
That lines up with Google's September 2026 spam update. I wrote that part up separately:&lt;br&gt;
&lt;a href="https://dev.to/hisashispace/what-happened-to-my-one-month-old-site-during-googles-september-2026-spam-update-2347"&gt;What happened to my one-month-old site during Google's September 2026 spam update&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On those same three sites, visits from ChatGPT and other AI kept coming: 15 to 7, 14 to 13, and 11 to 7.&lt;br&gt;
Whatever Google decided about those sites, ChatGPT was reading them and recommending them on its own terms.&lt;/p&gt;

&lt;p&gt;Across all nine sites, visits from AI went from 85 to 135.&lt;br&gt;
Most of that increase was Site D, though.&lt;br&gt;
In raw numbers, Google Search still sends far more people, four to eight times as many as AI across the nine sites.&lt;br&gt;
I'm not saying ChatGPT replaces Google.&lt;br&gt;
What I am saying is that during the launch period, when Google isn't sending anyone yet, ChatGPT can.&lt;/p&gt;
&lt;h2&gt;
  
  
  Where ChatGPT visitors landed
&lt;/h2&gt;

&lt;p&gt;I counted the first page that people coming from ChatGPT opened on the nine sites (September 1 to October 10, 257 visits):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Blog articles: 189 (74%)&lt;/li&gt;
&lt;li&gt;Home page: 48 (19%)&lt;/li&gt;
&lt;li&gt;Pricing and other pages: 20 (8%)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Three out of four landed on an article.&lt;br&gt;
On Site D, a single how-to article for a group messaging app (how to message just one person in a group) brought 24 visits on its own.&lt;br&gt;
ChatGPT is picking articles as the answer to someone's question and sending them there.&lt;/p&gt;
&lt;h2&gt;
  
  
  How to get ChatGPT to send people to a new site
&lt;/h2&gt;

&lt;p&gt;Based on these logs, here's what I'd do on a new site. Call it ChatGPT SEO (some people call it LLM SEO), though it's mostly about not getting in the way and having something worth reading.&lt;/p&gt;
&lt;h3&gt;
  
  
  1. Don't block ChatGPT's bots from day one
&lt;/h3&gt;

&lt;p&gt;OAI-SearchBot checked robots.txt on the same day the domain went live.&lt;br&gt;
If you turn it away at that point, it has no reason to come back and read once you've built something.&lt;/p&gt;

&lt;p&gt;Open &lt;code&gt;https://yourdomain/robots.txt&lt;/code&gt; and check that there's no &lt;code&gt;Disallow: /&lt;/code&gt; for &lt;code&gt;OAI-SearchBot&lt;/code&gt;, for &lt;code&gt;ChatGPT-User&lt;/code&gt;, or under &lt;code&gt;User-agent: *&lt;/code&gt;.&lt;br&gt;
According to OpenAI, sites that block OAI-SearchBot won't show up in ChatGPT's search answers.&lt;br&gt;
GPTBot (training) and OAI-SearchBot (search) are configured separately, so you can opt out of training and still let search in.&lt;/p&gt;

&lt;p&gt;Besides robots.txt, check that your CDN or server-side bot protection isn't blocking AI bots.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Launch once there's something to read
&lt;/h3&gt;

&lt;p&gt;On Site A, OAI-SearchBot started reading articles two days after they went up, and a person came the same day.&lt;br&gt;
On Site I, the domain existed from May, but as long as there were no articles, ChatGPT never used it in an answer.&lt;/p&gt;

&lt;p&gt;If you put a domain up with nothing but a "coming soon" page, ChatGPT just checks the door and leaves.&lt;br&gt;
Launch with your product pages plus a few dozen articles that answer your readers' questions, and you have a shot at being recommended in the first week.&lt;/p&gt;
&lt;h3&gt;
  
  
  3. Answer the questions people ask ChatGPT, one page per question
&lt;/h3&gt;

&lt;p&gt;Three out of four ChatGPT visitors landed on an article.&lt;br&gt;
And not product pitches: articles like "how to message just one person in a group chat" or "how to stop accepting responses on a Google Form", the kind of thing people ask when they're stuck.&lt;/p&gt;

&lt;p&gt;ChatGPT goes looking for a page that answers each question as it's asked.&lt;br&gt;
Turn each problem your product solves into an article phrased as the question, and each one becomes a way in.&lt;/p&gt;
&lt;h3&gt;
  
  
  4. Check it in your logs
&lt;/h3&gt;

&lt;p&gt;There are two places to see whether ChatGPT is sending people.&lt;/p&gt;

&lt;p&gt;The first is Google Analytics.&lt;br&gt;
Visitors who click a link in a ChatGPT answer usually show chatgpt.com as the referrer, and the landing URL often ends in &lt;code&gt;utm_source=chatgpt.com&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The second is your server access log.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;grep "OAI-SearchBot" access.log | wc -l
grep "ChatGPT-User" access.log | wc -l
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If ChatGPT-User is in your log, someone asked ChatGPT a question and ChatGPT came to read your site.&lt;br&gt;
If there's a hit with &lt;code&gt;utm_source=chatgpt.com&lt;/code&gt; right after it, that question sent you a person.&lt;/p&gt;

&lt;p&gt;Anyone can fake a user agent, so to know it's really OpenAI, check the IP against the ranges OpenAI publishes.&lt;br&gt;
The links to those lists are on the OpenAI crawler page above.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;A new site takes a while to get noticed by Google and start getting search traffic.&lt;br&gt;
In the meantime, ChatGPT didn't wait for Google or Bing. It sent its own bot, started reading once there was something to read, and brought over the person who'd asked, right then.&lt;/p&gt;

&lt;p&gt;If you've just registered a domain, first check that robots.txt isn't blocking ChatGPT's bots.&lt;br&gt;
Then launch with pages that answer your readers' questions.&lt;br&gt;
While you wait on Google, ChatGPT can already be sending people.&lt;/p&gt;

</description>
      <category>chatgpt</category>
      <category>seo</category>
      <category>webdev</category>
      <category>ai</category>
    </item>
    <item>
      <title>What happened to my one-month-old site during Google's September 2026 spam update</title>
      <dc:creator>Hisashi Space</dc:creator>
      <pubDate>Sun, 11 Oct 2026 01:37:40 +0000</pubDate>
      <link>https://dev.to/hisashispace/what-happened-to-my-one-month-old-site-during-googles-september-2026-spam-update-2347</link>
      <guid>https://dev.to/hisashispace/what-happened-to-my-one-month-old-site-during-googles-september-2026-spam-update-2347</guid>
      <description>&lt;p&gt;I run a bit over ten websites. During Google's September 2026 spam update, which started on September 24, one of them basically disappeared from search. Search impressions went from a few hundred a day to almost nothing on October 3.&lt;/p&gt;

&lt;p&gt;I'm writing this up with the Search Console screens and the numbers I have, partly to keep a record and partly because I would really like to hear from anyone who's been through something similar or has a guess about what's going on. I am leaving the site's name out.&lt;/p&gt;

&lt;h2&gt;
  
  
  What happened
&lt;/h2&gt;

&lt;p&gt;It is the marketing site for a B2B SaaS product. Here's the Performance report for the last three months, daily:&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%2Fli9yzcb40lhse8g1dblr.png" 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%2Fli9yzcb40lhse8g1dblr.png" alt="Search Console performance report. Impressions start around Sept 7 and fall to almost zero on Oct 3" width="800" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Daily impressions on the article pages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sept 7 to Sept 10: a big spike right after the first posts went live. Peak was 740 impressions on Sept 9, across 159 articles&lt;/li&gt;
&lt;li&gt;Sept 11 to Sept 12: dropped about 80%, then came back within roughly ten days&lt;/li&gt;
&lt;li&gt;Sept 23 to Oct 2: back up to around 480 a day, with up to 171 articles getting impressions&lt;/li&gt;
&lt;li&gt;From Oct 3: about 10 a day&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the whole site (home, pricing, comparison pages and articles), it went from 364 impressions a day (Sept 20 to Oct 2) to 12 a day (Oct 4 to Oct 7). Every page type dropped on the same day, not just the blog.&lt;/p&gt;

&lt;p&gt;Google's status dashboard lists the September 2026 spam update as starting Sept 24 and taking 13 days and 16 hours to roll out, so Oct 3 falls inside that window.&lt;/p&gt;

&lt;h2&gt;
  
  
  The site
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Domain registered: Aug 28, 2026&lt;/li&gt;
&lt;li&gt;First articles: Sept 2 (Japanese), Sept 16 (English)&lt;/li&gt;
&lt;li&gt;Articles: 471 in Japanese, 249 in English, 720 in total, about 20 a day&lt;/li&gt;
&lt;li&gt;How topics were picked: up to Sept 21 I did not check search volume for the target keyword or look at what was already ranking. After that, every article had to pass a volume check (Google Ads Keyword Planner) and a look at the current top results before going out&lt;/li&gt;
&lt;li&gt;Other pages: home, features, pricing, comparisons with competitors&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Indexing
&lt;/h2&gt;

&lt;p&gt;As of Oct 4, 701 pages were indexed and 442 weren't.&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%2F3sp7gfyfr73vnoo2e45t.png" 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%2F3sp7gfyfr73vnoo2e45t.png" alt="Page indexing report. 701 indexed, 442 not indexed" width="800" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's why the 442 are not indexed:&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%2Fbgdcb7tz6s2yb2qj3tyt.png" 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%2Fbgdcb7tz6s2yb2qj3tyt.png" alt="Reasons pages aren't indexed. Discovered - currently not indexed is the largest at 147" width="800" height="518"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The biggest bucket is "Discovered - currently not indexed" at 147. I ran URL Inspection on them and none had ever been crawled.&lt;/p&gt;

&lt;p&gt;What's interesting is that the paginated blog index pages (page 2, 3, 5, 10, 20, 30) were all crawled and indexed. So Google is seeing the links to those articles, it is just not bothering to fetch them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Things I checked that look fine
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Manual actions: none&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%2F1cazmy8jjvycyulq7nra.png" 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%2F1cazmy8jjvycyulq7nra.png" alt="Manual actions: No issues detected" width="799" height="157"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Security issues: none&lt;/li&gt;
&lt;li&gt;robots.txt, canonicals, noindex, redirects: unchanged and doing what they should&lt;/li&gt;
&lt;li&gt;No code changes on the site around the drop&lt;/li&gt;
&lt;li&gt;Searching for the product name still brings the site up. What dropped is everything else&lt;/li&gt;
&lt;li&gt;Organic visits in Google Analytics fell to 0 to 3 a day on the same day, so it's not a reporting glitch&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Backlinks
&lt;/h2&gt;

&lt;p&gt;The site had 52 referring domains. 40 of them came from the syndication of a single English press release (mostly US local news sites).&lt;/p&gt;

&lt;h2&gt;
  
  
  What I've done so far
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Oct 9: noindexed 132 articles whose target keyword had zero monthly searches (checked one by one in Keyword Planner)&lt;/li&gt;
&lt;li&gt;Oct 9: added category index pages and changed related posts to the neighbors in the same category. Max clicks from the home page to any article went from 7 to 6&lt;/li&gt;
&lt;li&gt;Since Oct 9: stopped publishing new articles&lt;/li&gt;
&lt;li&gt;No mass rewrites. The plan is to wait and watch until around Oct 23&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Comparing with an older site's first months
&lt;/h2&gt;

&lt;p&gt;I also run a site that's been around for many years, and I added a blog to it in March 2026. Its first months looked like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First four weeks or so: impressions grew steadily, about 5 to 6 a day per article&lt;/li&gt;
&lt;li&gt;Next four weeks or so: more articles were getting impressions, but total impressions flatlined. Per article it dropped to around 4&lt;/li&gt;
&lt;li&gt;Then per-article impressions recovered and it started growing. The clear upturn in Google came about two and a half months in&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;From Sept 23, this site was in that same "more articles showing, fewer impressions each" phase (4.7 per article down to 2.9). The difference is the older site got through it in about six weeks, while this one sank after about ten days. The older site sits on a domain with a long history. This one is a month old.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd love to hear
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The paginated blog index pages get crawled, but the articles they link to have never been fetched. How should I read that?&lt;/li&gt;
&lt;li&gt;On Sept 11 the site also dropped about 80% and came back in around ten days. This time the drop is deeper (around 97%) and it lines up with the spam update window. Is it likely to come back the same way? If you've had a whole site sink in a spam update and recover, how long did it take?&lt;/li&gt;
&lt;li&gt;Besides noindexing the zero-volume articles, is there anything I should be doing now? Anything I should definitely not do?&lt;/li&gt;
&lt;li&gt;Could a batch of links from one press release's syndication have played a part?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If there's a number or a screen that would help, let me know and I'll add what I can.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>google</category>
      <category>webdev</category>
      <category>searchconsole</category>
    </item>
    <item>
      <title>My office AI server hit 88 degrees C, so I made the room cool itself.</title>
      <dc:creator>Hisashi Space</dc:creator>
      <pubDate>Sat, 10 Oct 2026 13:00:00 +0000</pubDate>
      <link>https://dev.to/hisashispace/my-office-ai-server-hit-88degc-so-i-made-the-room-cool-itself-4ap</link>
      <guid>https://dev.to/hisashispace/my-office-ai-server-hit-88degc-so-i-made-the-room-cool-itself-4ap</guid>
      <description>&lt;p&gt;I'm Hisashi. I've run my own company for 22 years, and from 2011 to 2023 I ran it while moving between countries. I keep a Mac in my Tokyo office running as an always-on AI server.&lt;/p&gt;

&lt;p&gt;This summer in Tokyo, my office Mac started running a multi-day job at 100% GPU, and the more interesting problem became heat. This post is about something every always-on home AI server eventually faces: it gets hot, and you're not there to watch 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%2Fgbm8iv19h6h68re3omnj.jpeg" 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%2Fgbm8iv19h6h68re3omnj.jpeg" width="800" height="534"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That is fine in an air-conditioned room in spring. It is not fine in a Tokyo summer when I'm in another country and the office aircon is off. Two things can go wrong: the chip thermally throttles and my job quietly slows down, or it just runs hotter than I'd like for weeks on end. I had no way to see either, because I was never in the room.&lt;/p&gt;

&lt;p&gt;So I built two things: a dashboard that lets me watch the machine's temperature from anywhere, and an automation that turns the room's air conditioner on when the GPU gets too hot. Total cost: zero, plus a SwitchBot hub I already owned.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Reading the sensors without sudo
&lt;/h2&gt;

&lt;p&gt;The first obstacle on Apple Silicon is that the obvious tools need root. &lt;code&gt;powermetrics&lt;/code&gt; wants sudo, and I didn't want an automation that hangs forever on a password prompt while I'm on the other side of the planet. So I found a sudo-free source for each metric.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CPU usage&lt;/strong&gt;: &lt;code&gt;top -l 1 -n 0&lt;/code&gt;, then 100 minus the idle percentage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GPU usage&lt;/strong&gt;: &lt;code&gt;ioreg -r -d 1 -c IOAccelerator&lt;/code&gt;. It exposes a "Device Utilization %" field with no privileges required. This is how I confirmed the GPU really was pinned at 97 to 98%.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Temperatures&lt;/strong&gt;: &lt;code&gt;smctemp&lt;/code&gt;, a tiny open-source SMC reader you compile with the clang already on your Mac (no Homebrew needed). &lt;code&gt;-c&lt;/code&gt; gives CPU temperature, &lt;code&gt;-g&lt;/code&gt; gives GPU.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fan RPM&lt;/strong&gt;: the same SMC interface. There's no dedicated flag, but dumping all keys and reading &lt;code&gt;F0Ac&lt;/code&gt; and &lt;code&gt;F1Ac&lt;/code&gt; (fan 0 and fan 1, actual RPM) works. Mine read about 5,400 and 5,760, against a ceiling near 5,350. In other words, both fans were already flat out.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A 15-line shell script samples all of that once a minute and appends one JSON line to a file. CPU, GPU, both temperatures, both fan speeds, plus the current job's progress. Nothing heavy: the whole sample takes a fraction of a second of CPU and never touches the GPU, so it can't interfere with the work it's measuring.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. An MRTG-style dashboard I can open from anywhere
&lt;/h2&gt;

&lt;p&gt;Old-school sysadmins will remember MRTG: a web page of rolling time-series graphs you glance at to know your machine is healthy. That's exactly what I wanted, minus the RRDtool setup.&lt;/p&gt;

&lt;p&gt;The page is one static HTML file with Chart.js bundled locally (no CDN dependency, so it works even if the office internet hiccups). It fetches the JSON log, draws three graphs (usage, temperature, fan RPM), shows the latest values as cards, and refreshes every 60 seconds. Room temperature and the air-conditioner state sit in the corner.&lt;/p&gt;

&lt;p&gt;Serving it is one line: &lt;code&gt;python3 -m http.server&lt;/code&gt;. I run both the collector and the server as launchd jobs so they survive reboots and restart themselves if they die.&lt;/p&gt;

&lt;p&gt;The part that makes it genuinely useful from a Bangkok hotel is how I reach it. The machine is on my Tailscale network, so from any of my devices I just open:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;http://m1&lt;/code&gt; from anywhere in the world, over the Tailscale tailnet.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;http://m1.local&lt;/code&gt; when I'm on the office LAN.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both are plain hostnames, no port number, no IP to remember. Tailscale's MagicDNS gives me the global name; mDNS gives me the local one. I bound the server to port 80 so neither needs a &lt;code&gt;:8765&lt;/code&gt; suffix.&lt;/p&gt;

&lt;p&gt;What I see when I open it: a row of live cards (CPU and GPU usage, CPU and GPU temperature, both fan RPMs, room temperature, and the current training step), sitting above three rolling graphs (usage, temperature, fan speed). The temperature cards turn amber as they climb, so a glance from my phone tells me whether the machine is comfortable or cooking. Everything updates every 60 seconds.&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%2Fl1g47d3kxyraqq6fhn8j.jpeg" 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%2Fl1g47d3kxyraqq6fhn8j.jpeg" width="800" height="746"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Watching the graphs for an evening settled a question I'd assumed I'd have to guess at: was the machine throttling?&lt;/p&gt;

&lt;p&gt;It wasn't, yet. Job step time stayed flat while the GPU held 86 to 88°C, which means the chip was holding its clocks. Good. But the fans told the real story: they were already maxed. The cooling system had no headroom left. The only lever I had not pulled was the temperature of the air going into the machine.&lt;/p&gt;

&lt;p&gt;That reframed the whole problem. I couldn't make the Mac cool itself harder. I could only make the room cooler. And the room has an air conditioner.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Giving the room a thermostat
&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%2Fombgsmrp0xksqct20kji.jpeg" 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%2Fombgsmrp0xksqct20kji.jpeg" width="800" height="534"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The details are where you avoid an automation that drives you crazy:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hysteresis.&lt;/strong&gt; Cooling turns on when the GPU stays at or above 92°C for three straight minutes, and off only when it drops to 84°C or below. The 8-degree gap stops it flapping on and off around a single threshold.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A rate limit.&lt;/strong&gt; No more than one action every ten minutes, so it can't machine-gun the compressor.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It only undoes its own actions.&lt;/strong&gt; The controller turns the aircon off only if it was the one that turned it on. If I switched it on myself for comfort, it leaves it alone. Infrared is fire-and-forget with no state feedback, so the controller tracks what it last commanded rather than pretending to know the real state.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A floor.&lt;/strong&gt; It reads room temperature from a SwitchBot sensor and refuses to start cooling if the room is already below 24°C, so it never overcools an empty office.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It runs as one more launchd job on the same one-minute cadence, reading the same temperature log the dashboard uses. Default-off until I explicitly enabled it, so there was never a chance of it firing by surprise during testing.&lt;/p&gt;

&lt;p&gt;Right now, with the room at 26°C and the GPU at 88°C, it correctly sits idle. It's waiting for the day the Tokyo heat pushes the chip past 92, at which point the office will cool itself while I'm somewhere else entirely.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. One mistake worth copying down
&lt;/h2&gt;

&lt;p&gt;When I first stood the dashboard up, I served the whole working directory. That directory also held the file with my SwitchBot API credentials. For about fifteen minutes, anyone on my private network could have fetched &lt;code&gt;http://m1/.env&lt;/code&gt; and read my tokens.&lt;/p&gt;

&lt;p&gt;It was tailnet-only, so the blast radius was just my own devices, but the lesson generalizes: a static file server serves &lt;em&gt;everything&lt;/em&gt; in the folder you point it at. Put only the public files (the HTML, the graph data) in the served directory, and keep secrets and scripts one level up where the server can't reach them. I moved them, confirmed the credentials now return 404, and rotated nothing because the exposure never left my own machines, but it was a clean reminder.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing thoughts
&lt;/h2&gt;

&lt;p&gt;An always-on AI server is a small piece of infrastructure, and infrastructure you can't see is infrastructure you'll eventually lose. Two cheap moves fix that: a one-minute sampler feeding a dashboard you can open by name from anywhere, and a temperature-driven rule that lets the room take care of the machine when you're not there.&lt;/p&gt;

&lt;p&gt;The Mac in my Tokyo office now watches its own temperature, tells me about it over my tailnet, and cools its own room when the summer gets serious. I don't have to be in the office to keep it safe.&lt;/p&gt;

</description>
      <category>macos</category>
      <category>applesilicon</category>
      <category>monitoring</category>
      <category>homelab</category>
    </item>
    <item>
      <title>SshResident at 180% CPU: why my ScanSnap iX2500 took 14 seconds to start, and the fix that wasn't code</title>
      <dc:creator>Hisashi Space</dc:creator>
      <pubDate>Fri, 09 Oct 2026 13:00:00 +0000</pubDate>
      <link>https://dev.to/hisashispace/sshresident-at-180-cpu-why-my-scansnap-ix2500-took-14-seconds-to-start-and-the-fix-that-wasnt-2nf4</link>
      <guid>https://dev.to/hisashispace/sshresident-at-180-cpu-why-my-scansnap-ix2500-took-14-seconds-to-start-and-the-fix-that-wasnt-2nf4</guid>
      <description>&lt;p&gt;I'm Hisashi. I've run my own company for 22 years, and from 2011 to 2023 I ran it while moving between countries. Running a paperless company means I scan a lot of documents, and my main scanner had developed an annoying tic: I would press Scan, and nothing would happen. The scan button just blinked, ten to fourteen times, before the rollers finally started pulling paper.&lt;/p&gt;

&lt;p&gt;The scanner is a ScanSnap iX2500, rated at 45 pages per minute. The reading speed was never the problem. The problem was the several-second stall before a single sheet moved, and my first instinct was the usual suspect: the connection. So I switched it from WiFi to USB. Exactly the same delay. Then I switched the save destination from the pop-up menu style to a fixed folder profile. Same delay. When two things you assumed were the cause turn out to change nothing, you are looking in the wrong layer.&lt;/p&gt;

&lt;p&gt;The delay wasn't in the scanner, and it wasn't on the wire. It was the Mac, doing something absurd, on every single scan.&lt;/p&gt;

&lt;h2&gt;
  
  
  The symptom
&lt;/h2&gt;

&lt;p&gt;Press Scan, watch the button blink, wait. Worse, when I scanned twice in a row, the second scan was slower than the first. That detail matters. A slow-but-constant delay smells like a fixed handshake. A delay that grows when you repeat the operation smells like contention, something piling up and not clearing.&lt;/p&gt;

&lt;p&gt;USB versus WiFi made no difference. Quick-menu versus folder profile made no difference. So the bottleneck was not data transfer and not the scanner firmware. It was something the Mac ran between "button pressed" and "paper moving," and whatever it was, it got heavier the more I used it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rule one: name the process
&lt;/h2&gt;

&lt;p&gt;Same reflex as always. Before touching anything, find the process. I streamed the unified log filtered to the ScanSnap helper processes and sampled CPU while I triggered a scan.&lt;/p&gt;

&lt;p&gt;One process lit up the instant I pressed the button:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PID    %CPU  COMMAND
3798   186.6 SshResident
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;SshResident&lt;/code&gt; is the resident background app that ScanSnap Home keeps running to watch the scanner. It should sit near idle. During the blink, it was pinned above 100%, peaking near 186%, meaning it had more than one full core to itself for the entire stall. When the CPU dropped back to idle, the paper started moving. The blink and the CPU spike were the same event.&lt;/p&gt;

&lt;h2&gt;
  
  
  The cause: enumerating every app, hundreds of times
&lt;/h2&gt;

&lt;p&gt;CPU percentage tells you a process is busy. It doesn't tell you what it's doing. For that, macOS ships &lt;code&gt;sample&lt;/code&gt;, which snapshots a running process's call stacks. I sampled &lt;code&gt;SshResident&lt;/code&gt; three times during the stall. All three came back with nearly all of the CPU time in the same call chain:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight objective_c"&gt;&lt;code&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;SSUIController&lt;/span&gt; &lt;span class="nf"&gt;doScanClick&lt;/span&gt;&lt;span class="p"&gt;:]&lt;/span&gt;
  &lt;span class="n"&gt;isAppLaunchedByBundleID&lt;/span&gt;
    &lt;span class="n"&gt;getLaunchAppProcessIDBySignature&lt;/span&gt;
      &lt;span class="n"&gt;GetProcessInformation&lt;/span&gt;          &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;HIServices&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;old&lt;/span&gt; &lt;span class="n"&gt;Carbon&lt;/span&gt; &lt;span class="n"&gt;Process&lt;/span&gt; &lt;span class="n"&gt;Manager&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;_LSCopyApplicationInformation&lt;/span&gt;  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;LaunchServices&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here is what that stack means. When you press Scan, &lt;code&gt;SshResident&lt;/code&gt; needs to launch a helper app to handle the scan, and before it proceeds it polls to check whether that helper has finished launching. The way it checks is &lt;code&gt;GetProcessInformation&lt;/code&gt;, an ancient Process Manager call that does not ask about one specific app. It walks the entire list of running applications that LaunchServices is tracking and builds an information record for each one, just to find the single process it cares about. Then it does that again on the next poll. And again, hundreds of times, until the helper is up.&lt;/p&gt;

&lt;p&gt;The cost of one sweep is proportional to how many apps LaunchServices is tracking. On a normal Mac that is maybe thirty, and nobody ever notices this code. My Mac is a working machine for eleven businesses: browsers with dozens of tabs, editors, local dev servers, MCP servers, recording tools. At the moment I measured, LaunchServices was tracking about 380 applications, and the whole machine was running roughly 1,800 processes. So every poll walked 380 apps, and the launch wait fired hundreds of polls, and that product is a full core pinned for ten to fourteen seconds. The second scan was slower because it landed while the first scan's helper teardown was still churning the same list.&lt;/p&gt;

&lt;p&gt;The delay was never the scanner's limit. It was an O(number of apps) loop in the vendor's software, running head-on into a machine that runs an unusual number of apps.&lt;/p&gt;

&lt;h2&gt;
  
  
  The clever fix that backfired
&lt;/h2&gt;

&lt;p&gt;Once you know it's &lt;code&gt;GetProcessInformation&lt;/code&gt; being called in a hot poll loop, the engineer's temptation is obvious: cache it. Intercept that one function, remember each process's answer for a second or so, and let the hundreds of repeated polls hit the cache instead of rebuilding a 380-app list every time.&lt;/p&gt;

&lt;p&gt;You can inject code into another process on macOS with &lt;code&gt;DYLD_INSERT_LIBRARIES&lt;/code&gt;, and normally a hardened, notarized, signed system binary would refuse it outright. This one couldn't refuse. Its own code signature carried two entitlements, &lt;code&gt;allow-dyld-environment-variables&lt;/code&gt; and &lt;code&gt;disable-library-validation&lt;/code&gt;, precisely the two that let an unsigned or ad-hoc dylib load into it. The vendor had left the door open, presumably for its own plug-in machinery. I wrote a small interposing library that cached &lt;code&gt;GetProcessInformation&lt;/code&gt; per process with a short expiry, ad-hoc signed it, added the injection to the helper's &lt;code&gt;Info.plist&lt;/code&gt;, and re-signed the bundle while preserving its entitlements.&lt;/p&gt;

&lt;p&gt;The first version crashed the daemon on launch. The root cause is a nice trap. I had hand-declared the old &lt;code&gt;ProcessInfoRec&lt;/code&gt; struct from memory. The real 64-bit layout is not what you'd guess: it is packed to two-byte alignment, it is 72 bytes, its first pointer sits at offset 4 rather than 8, and the &lt;code&gt;processAppSpec&lt;/code&gt; field that exists in every online reference was dropped entirely in the 64-bit version because it was built on the 32-bit-only &lt;code&gt;FSSpec&lt;/code&gt; type. My natural-alignment struct put every field at the wrong offset, and my copy of a 264-byte buffer into what the caller had sized as a 70-byte one smashed its stack. I rebuilt the interposer against the SDK's real types, verified it in a standalone harness that mimicked the daemon's exact call pattern, confirmed it was safe and cut real calls by 80%, and redeployed.&lt;/p&gt;

&lt;p&gt;And scanning stopped working entirely.&lt;/p&gt;

&lt;p&gt;This is the part worth sitting with. The library was now provably correct in isolation and provably fast. But by caching the answer to "has the helper launched yet," I had blinded the daemon to the one state change it was actually polling for. It waited forever for a launch it could no longer observe. My harness reproduced the call pattern perfectly and the state transition not at all, which is exactly the class of bug a harness cannot catch. Every failed attempt left the scanner dead until I restored the original from backup, and power-cycling a scanner mid-workflow to recover from your own patch is a strong signal you are solving the wrong problem. I reverted the whole thing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The fix that wasn't code
&lt;/h2&gt;

&lt;p&gt;Step back far enough and the real question changes. I had been trying to make the slow path fast. The better move was to delete the slow path.&lt;/p&gt;

&lt;p&gt;The delay lives entirely in the Mac-side software that orchestrates the scan. So don't let the Mac orchestrate the scan. The iX2500 has a touchscreen and, as of a 2025 firmware feature, it can save directly to a network folder over SMB with no PC involved at scan time. The scanner writes the file itself. &lt;code&gt;SshResident&lt;/code&gt; is never in the loop, because ScanSnap Home is never in the loop.&lt;/p&gt;

&lt;p&gt;The setup is boring, which is the point:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Turn on File Sharing on the Mac and export the destination folder as an SMB share.&lt;/li&gt;
&lt;li&gt;Give the Mac a fixed IP so the scanner's saved destination never breaks. I put the wired connection (a CalDigit TS4 dock) on a static &lt;code&gt;192.168.1.10&lt;/code&gt;, low in the range to stay clear of the DHCP pool.&lt;/li&gt;
&lt;li&gt;On the scanner's touchscreen, register a network-folder profile pointing at &lt;code&gt;\\192.168.1.10\ScanData&lt;/code&gt; with the Mac account's credentials.&lt;/li&gt;
&lt;li&gt;Point the scanner's clock at an NTP server, because SMB authentication and file timestamps both care about time. The home router (a GL.iNet Flint 3 at &lt;code&gt;192.168.1.1&lt;/code&gt;) already answers NTP on the LAN, so that one line needs no internet at all.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then you pick the profile on the touchscreen and scan.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Time from pressing scan to paper moving: a couple of seconds, consistently&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;SshResident&lt;/code&gt; in the scan path: gone, along with the 380-app enumeration&lt;/li&gt;
&lt;li&gt;Files land straight in a local folder on the Mac, named by timestamp, ready for whatever processing I run next&lt;/li&gt;
&lt;li&gt;Mac-side scanning software touched during a scan: none&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;When the fix you assumed doesn't change the symptom, stop testing that layer. USB versus WiFi changing nothing is what told me the scanner and the wire were both innocent.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;sample&lt;/code&gt; is the tool that turns "this process is busy" into "this process is calling this exact function in a loop." CPU percentage is a smoke alarm; the call stack is the fire.&lt;/li&gt;
&lt;li&gt;A delay that gets worse when you repeat the operation is contention, not a fixed cost. Chase the thing that accumulates.&lt;/li&gt;
&lt;li&gt;Injecting into a signed system binary is sometimes possible, and rarely wise. When a vendor daemon carries &lt;code&gt;allow-dyld-environment-variables&lt;/code&gt; and &lt;code&gt;disable-library-validation&lt;/code&gt;, the OS will let you in, but you are now maintaining a patch against software that fights back on every update, and a harness that reproduces the calls will still miss the state machine.&lt;/li&gt;
&lt;li&gt;The strongest fix is often the one that removes your code from the path instead of adding more. The scanner could already do the whole job by itself. I just had to stop insisting the Mac be in the middle.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The meta-lesson is the same one that I keep coming back to. Depend on a machine and you owe it root-cause fixes, not rituals. Sometimes the root cause is that you were using the wrong tool for the job, and the cure is to use less software, not more.&lt;/p&gt;

</description>
      <category>macos</category>
      <category>debugging</category>
      <category>performance</category>
      <category>hardware</category>
    </item>
  </channel>
</rss>
