Codex Was Torching Your SSD and Nobody Noticed for Months
Your Codex log file looked fine. Your SSD counters did not.
The file was small.
That was the trick.
If you opened <code>~/.codex/</code>, you could see a SQLite database called <code>logs_2.sqlite</code>. It was not huge. It was not swallowing the disk. Finder, Explorer, <code>du</code>, and every normal storage check had nothing dramatic to say.
Meanwhile, one developer's SSD recorded roughly 37 TB of writes in 21 days.
That works out to about 1.7 TB a day. If you stretch one heavy, continuous-use report across a full year, it becomes roughly 640 TB.
The number is not a prediction for every Codex user. It came from one machine running for a long time. But it exposed a problem that is easy to miss with local developer tools:
> a file can stay small while the storage device underneath it gets written to constantly.
This is the story of a noisy TRACE logging sink, a SQLite database doing exactly what it was told, and the SSD wear that nobody could see from file size alone.
The quick version
- A user reported unusually high local disk writes and traced them to Codex CLI's <code>logs_2.sqlite</code> database and its WAL companion file.
- The reported machine accumulated about 37 TB of writes over 21 days of uptime.
- The file stayed bounded because new logs were inserted while older logs were deleted.
- The reported cause was an overly verbose TRACE logging path that did not fully respect the expected <code>RUST_LOG</code> override.
- The supplied investigation says version 0.142.0 reduced the noisy writes substantially, with early testing reporting around 85% fewer log writes.
- If you used an older build heavily, update first, then inspect real write activity and your SSD's lifetime-write counters.
The number that made people look twice
37 TB in 21 days is not a normal “developer tool wrote some logs” story.
| Measurement | Value |
| --- | --- |
| Reported writes | ~37 TB |
| Reporting window | 21 days |
| Approximate daily rate | ~1.7 TB/day |
| Annualized at that rate | ~640 TB/year |
The annualized number needs context. It assumes the same workload every day for a year, which is rarely how people work. Someone running short sessions will produce far less. Someone leaving the tool open, working with long sessions, or using it in automation could produce much more than they expect.
The useful point is not “every SSD will die in a year.”
The useful point is that this level of write activity belongs in the category of things you should notice and control.
<!-- Visual placement: use a clean SMART dashboard screenshot here, with all serial numbers and personally identifiable drive details blurred. -->
Why the file size told you almost nothing
Most of us check disk problems like this:
du -sh ~/.codex
ls -lh ~/.codex/logs_2.sqlite*
Those commands answer one question:
> How much data is stored right now?
They do not answer this:
> How much data has been written over time?
The Codex log database was designed to retain a bounded amount of diagnostic information. New rows were written, old rows were removed, and the database could remain roughly the same size.
So the folder looked calm while the disk was doing constant work.
Imagine a café with four tables. Looking through the window at noon, you see four people sitting down. Come back at 6 PM, still four people. The table count tells you nothing about whether eight customers visited or eight hundred.
The SQLite file was the same. Stable size, enormous turnover.
!Diagram showing how a small SQLite log file can lead to high SSD write activity
What was generating all those writes?
The reported issue points to a logging path that defaulted to TRACE, the most detailed level in Rust's tracing ecosystem.
TRACE logging is useful when you are trying to understand a very specific failure. It can include low-level events that are normally too noisy for everyday use:
- file-open events
- raw network or WebSocket activity
- transport details
- telemetry plumbing
- dependency-library messages that get bridged into the application's tracing system
The supplied breakdown estimates that TRACE-level entries made up 70.7% of the retained log-body size. The highest-volume targets included WebSocket handling, OpenTelemetry-related logs, a generic dependency log bridge, and client transport code.
That is diagnostic exhaust. A little of it is fine. A default stream of it, persisted locally in SQLite, is a different kind of workload.
The three parts that stacked together
No single part of this design has to be bad on its own.
1. TRACE was active where it should have been opt-in
TRACE is not a normal default for a tool used for hours at a time. It is the level you turn on when you are actively debugging.
The reported behavior was that Codex initialized a feedback logging sink at TRACE. That turns every routine interaction into a lot of diagnostic detail.
2. RUST_LOG=warn did not fully quiet it
Rust developers often reach for this first:
RUST_LOG=warn codex
That is supposed to turn down the volume. According to the issue analysis, it did not fully apply to the relevant sink. If a target did not have an explicit override, Codex's internal default still allowed noisy logging.
That is worse than an obvious missing setting. A user can think they reduced logging while the disk keeps receiving the same workload.
3. SQLite turned event noise into storage churn
SQLite is excellent. It is also not magic.
For small structured local data, a SQLite database is a good choice. For a constant stream of fine-grained TRACE events, inserts, deletes, indexes, and checkpoints, it can create a lot of writes even when the database never becomes large.
The problem was not “SQLite is bad.” The problem was using a write-heavy retention loop as a sink for a log level that should not have been permanently enabled.
The part the operating system does not show you
There are two kinds of amplification in this story.
SQLite write amplification
SQLite often uses WAL mode, short for write-ahead logging.
In simplified form:
1. A log event is appended to the WAL file.
2. SQLite later checkpoints that change into the main database.
3. Older rows are deleted to keep retained data bounded.
4. Indexes and database pages are updated along the way.
One logical log event can therefore create more than one write at the filesystem level.
The WAL is not wrong. Checkpoints are not wrong. The problem appears when that loop is fed relentlessly with small, noisy events.
SSD write amplification
An SSD has its own internal life.
It writes data in small pages but erases much larger blocks. When a small part of a block changes, the SSD controller often writes the new data to a fresh location, marks old data stale, later moves still-valid pages, and erases the old block.
That movement is called garbage collection. Wear leveling moves writes around so one physical area does not wear out first.
Both are useful. Both mean the flash may receive more physical writes than the operating system asked for.
The ratio is called the write amplification factor. The exact number varies by drive, spare capacity, free space, workload, and controller. The supplied analysis does not measure the multiplier for the affected drive, so do not treat any guessed physical-wear number as a precise fact.
The direction is enough:
> High-churn, small random writes are one of the workloads SSDs work hardest to manage.
Is 640 TB actually dangerous?
It can be.
SSDs have an endurance rating usually expressed as TBW, or terabytes written. A typical 1 TB consumer SSD may be rated for a few hundred TBW. Enterprise drives may be rated much higher. The exact number depends on the model, capacity, NAND type, and warranty.
That does not mean a drive fails the moment it reaches its rated TBW. Ratings are warranty and endurance guidance, not a timer that hits zero at midnight. Plenty of drives outlive them.
But a background development tool potentially consuming hundreds of terabytes of writes is still worth taking seriously. It can eat through a meaningful part of the drive's expected write budget without filling the disk or showing a visible failure.
How to check your own machine
The order matters.
Update first. Then look at real I/O. Then check what the drive itself says.
Step 1: update Codex
The investigation supplied with this article identifies 0.142.0 as the version containing the logging reduction. Check the current release notes and your installed build, then update before you start measuring.
Also remember that Codex CLI, the desktop app, and editor integrations can ship or bundle components on different schedules. Updating one does not automatically prove every local Codex-related process is updated.
Step 2: find the log files
On macOS and Linux:
ls -la ~/.codex/logs_2.sqlite*
On Windows PowerShell:
Get-Item "$env:USERPROFILE\.codex\logs_2.sqlite*"
You might see the database, a <code>-wal</code> file, and a <code>-shm</code> file.
Do not stop after checking their size. A small database is the whole reason this incident was easy to miss.
Step 3: watch actual writes
On Linux, <code>pidstat</code> can show which process is writing:
pidstat -d 5
To see whether a process has the database open:
sudo lsof ~/.codex/logs_2.sqlite
On macOS, open Activity Monitor, select the Disk tab, and watch bytes written for Codex-related processes while you work.
On Windows, use Resource Monitor or Task Manager's disk column. Look at sustained per-process writes, not just a brief spike during startup.
Step 4: check the drive's own lifetime write counter
This is the closest thing to the truth you have.
On Linux or macOS with smartmontools installed, an NVMe drive can often be checked with:
sudo smartctl -a /dev/nvme0
Look for:
- Data Units Written
- Percentage Used
- warnings or critical health indicators
On Windows, CrystalDiskInfo exposes Total Host Writes and health information. PowerShell can also show some device health data:
Get-PhysicalDisk | Get-StorageReliabilityCounter |
Select-Object DeviceId, Wear, Temperature
Compare lifetime writes with the TBW rating for your exact drive model. Do not compare against a random SSD number from a search result.
<!-- Visual placement: add a small annotated image of a SMART page here. Highlight only Data Units Written or Total Host Writes, Percentage Used, and health status. -->
What if I used an older version for months?
First, do not panic and do not guess from file size.
Check the drive counters. If the drive has low percentage used and reasonable total writes for its age and workload, update and move on. If the drive has unusually high wear, warnings, or a large write count compared with its TBW rating, back up your important data and plan for a replacement before failure forces the schedule.
This is a good backup reminder even if your drive looks healthy. SSDs usually fail without much theatre.
Workarounds if you cannot update immediately
Updating is the right fix. These are temporary ways to reduce persistent write pressure while you arrange that update.
Put throwaway logs on ephemeral storage
For CI jobs and containers, the cleanest option is usually to run with a temporary home directory or mount the relevant config directory on ephemeral storage.
Example for a disposable CI environment:
export HOME="$(mktemp -d)"
For a container workload, mount a tmpfs at the appropriate Codex state directory if the environment can tolerate losing local diagnostics when the job exits.
This is especially useful for build runners that create and destroy their environment anyway.
Be careful with /tmp
Moving a log file to <code>/tmp</code> is only useful if <code>/tmp</code> is actually memory-backed in your environment. On many Linux systems it may be tmpfs. On macOS, <code>/tmp</code> is not automatically a RAM disk by default.
Check the mount before assuming the write load vanished:
mount | grep ' /tmp '
Then verify with a real I/O monitor. Never trust a workaround because it sounded plausible in a comment thread.
Avoid unsupported database surgery unless you really need it
Some community workarounds modify the SQLite log database so inserts are ignored. That can be useful in an emergency, but it is an unsupported change to an internal application file.
Future versions may change the schema or assume the database behaves normally. If you choose that route, stop Codex first, make a copy of the database, document what you changed, and remove the workaround once you are on a fixed release.
The bigger lesson for tool builders
This bug is bigger than one CLI.
Measure bytes written, not just disk space used
Every local persistence feature should have an I/O budget under realistic usage. Test bytes written per hour, per session, and per day. File size is not a sufficient metric for databases, caches, indexes, or log rotation systems.
TRACE must be an intentional decision
Verbose logging needs an explicit opt-in and a clear way back out. Shipping it by default turns every user into a debugging environment.
Standard controls have to work end to end
If your ecosystem has a standard logging override, honour it for every sink. A partial override is dangerous because it gives experienced users false confidence.
Structured logs have storage costs
SQLite, RocksDB, local search indexes, and caches are all good tools. High-frequency writes have a cost. The design needs backpressure, batching, rate limits, retention rules, and test coverage for pathological verbosity.
Privacy and wear are connected
The more raw operational detail a tool records, the more it writes and the more sensitive local data it can retain. Logging file paths, raw transport frames, and low-level event payloads should be a deliberate debugging choice, not background noise.
The bigger lesson for users
There is a simple habit worth keeping:
> When you install a new long-running developer tool, look at its write rate once.
Two minutes in Activity Monitor, Resource Monitor, or <code>pidstat</code> can catch a surprising amount.
Check lifetime SSD writes occasionally. Keep your tools updated. Treat a stable file size as a storage number, not an I/O number.
The log file was small. The work it made the SSD do was not.
What is confirmed and what is still uncertain
The supplied investigation is clear about its limits, and those limits matter:
- The 37 TB measurement came from one heavy user's machine. It is a data point, not a universal rate.
- Reports disagree about when the highest logging verbosity began. The exact start date is uncertain.
- The annualized 640 TB figure is arithmetic based on the reported 21-day sample, not a forecast.
- SSD write amplification is real, but the exact physical NAND multiplier was not measured for this incident.
- The reported 85% reduction after version 0.142.0 is an early observed result, not a guarantee for every platform or workload.
That uncertainty does not weaken the main finding. The correct response is still simple: update, measure the process, and inspect the drive counter.
Sources and further reading
- GitHub issue #28224 in openai/codex
- Official OpenAI Codex documentation
- The public reporting and technical analysis supplied for this article, including Notebookcheck, Windows Report, Lilting.ch, yage.ai, and Daniel Vaughan's write-up
11 reactions · 9 comments
I used Bossanova + Codex CLI to read Paddle Live MRR: HTTP 200, API key absent from the MCP inputs/result. Windows/WSL; publisher-run check. Free: 10 fields, account required. Try the read: codex#58492 TINYGEM publishes Bossanova.
1 like
Codex Was Judging Files It Never Finished Reading
I run a small team of LLM agents that coordinate through markdown files. Several roles run on Codex CLI 0.165.0, which runs their tool calls in code mode. They read task items, review findings, plans, and design documents, and then decide what to do next.
On October 24 I checked whether those reads were complete. Of 33 Codex sessions working on one goal that day, 31 had at least one tool output cut short, 129 cuts in all. Among the cut outputs were a reviewer's findings and the work plan the agent was executing. The agents went on to make decisions from what was left.
I had seen this once in another project, so I knew what to look for. Seeing it across almost every session of a team that had been running for weeks still shocked me.
What the cut looks like
When an output is too long, the call doesn't fail. The output starts with a line like Warning: truncated output (original token count: 15382), keeps the start and the end, drops the middle, and leaves a marker:
...stage 4 the same), the stage's units, slots, and candidates…4107 tokens truncated…tained set the policy keeps, ...
The model gets all of that back as the result of cat. If it reads past the warning and the marker, the file looks complete, minus the middle of the document, which is usually where the detail is.
The first fix
Codex has a config value, tool_output_token_limit, that limits tool output. It was at its default of 10,000 tokens, and my largest document is about 39,000. I raised it to 40,000, the point where almost everything still cut was process dumps and test JSON.
There is also a per-call budget, max_output_tokens, which the model sets itself. My other project, codex-workflows, handles that with a strict rule: measure files with wc -c before reading them. For a team that reads all day I didn't want an extra step on every read. So I explained how the budgets work and asked the model to set ones that fit what each call returns. How to read was left to the model.
Six days later
Outputs were still being cut: 11% of tool outputs, against 13% the week before.
I replayed one of the cut reads: a director opening a discussion and pulling in its references. Every cut output stopped at about 10,000 tokens, even when the model had asked for 18,000 or 26,000.
The cause turned out to be a third limit. In code mode, the model's commands run inside a JavaScript exec cell, and the cell has its own budget for everything it returns, set by a first line like // @exec: {"max_output_tokens": 40000}. Without that line it is 10,000, however much the commands inside asked for. Across 9,538 calls from five days of logs, the model wrote that line 137 times. The ceiling I had raised was never the limit. It is a known issue, openai/codex#33402, open since July.
My instruction already mentioned the pragma. I rewrote it twice to explain the two budgets more plainly, the second time saying outright that the smaller one applies. Over four replays, 19 of 24 calls were cut, and the model wrote the pragma zero times.
What worked
I stopped asking the model to choose. The instruction now gives one fixed value for every call, and the reason for it:
Start every `exec` call with the first line `// @exec: {"max_output_tokens": 40000}` and give every `exec_command` `max_output_tokens: 40000`. Output past the smaller of the two budgets loses its middle, marked `…N tokens truncated…`, and you miss whatever detail that middle held; without the first line that budget is 10000. Base a judgment only on text you received, reading again any cut part it depends on.
In three replays every one of the 16 calls carried both budgets. Three were still cut, each a batch of eight or more files that added up past 40,000, and each time the model went back and read the missing part of the document in ranges.
I had left the budget to the model's judgment because the right value depends on the call. In practice it kept leaving the one budget that mattered at its default, no matter how I explained it.
If you run Codex in a loop, count the markers in your session logs. They live under ~/.codex/sessions/, and older ones are compressed as .jsonl.zst, so this reads both:
find ~/.codex/sessions -name '*.jsonl*' -exec zstd -dcqf {} + \
| grep -oE '…[0-9]+ tokens truncated…' | wc -l
2 reactions · 8 comments
10 coding agents, one Qwen 3.8 27B, same llama-server: tokens and cache reuse differ more than pass rates
Part 2 of my agent test (part 1 was a 4B model)
Hardware I used: MacBook Pro M5 Max, 64 GB. Qwen 3.8 27B Q4 on llama.cpp, thinking off.
Setup
- same model and server for everyone
- 5 small coding tasks, each with a little trap
- each agent locked in a sandbox: it can only touch its own folder and only talk to the model
- auto-approve on, telemetry off, 5 min limit
Results
|#|Agent|Passed|Median time|Median tokens|Cache reuse|Tried to go online|
|:-|:-|:-|:-|:-|:-|:-|
|1|Pi|5/5|38 s|9.2k|72%|no|
|2|DeepSeek Harness|5/5|60 s|35.3k|83%|no|
|3|Codex CLI|5/5|94 s|36.3k|79%|every run|
|4|OpenClaw|5/5|106 s|39.0k|72%|unclear|
|5|Cline|5/5|152 s|29.6k|79%|every run|
|6|OpenCode|4/5|50 s|32.4k|75%|every run|
|7|Hermes|4/5|80 s|64.9k|93%|no|
|8|Atomic Agent|5/5|56 s|30.4k|86%|no|
|9|goose|4/5|98 s|20.3k|76%|every run|
|10|Qwen Code|4/5|183 s|107.9k|74%|unclear|
Tokens and cache
Pi is crazy lean: about 9k tokens per task, the lowest on every single task. Qwen Code was the hungriest at about 108k per task.
Atomic Agent is the odd one out in how it works. It was the only one talking to llama.cpp's native endpoint with a grammar that forces the tool calls into shape. The other nine all went through the OpenAI-style API. It's also built to keep its prompt the same from step to step, which is why it reused 86% of the cache (2rd of 10). It stayed offline the whole time and passed 5/5.
DeepSeek Harness was the surprise. It’s still an alpha, but it went 5/5, never tried to go online, and had the best cache reuse after Atomic Agent (83%).
The trap and the network
The log task got three agents. They grepped "ERROR" and got 244 instead of 64, because some normal lines just mention errors. OpenCode, goose and Atomic Agent fell for it.
Codex, Cline, goose and OpenCode tried to reach the internet in every run, even with telemetry off. The sandbox blocked it, so I don't know what they were calling. OpenClaw and Qwen Code are "unclear" because they run as plain node and I couldn't tell them apart.
llama.cpp notes
- Codex needs llama-server's /v1/responses now
- Hermes needs at least 64K context
- Cline and Qwen Code have usage stats on by default, DeepSeek Harness uploads session logs (per their docs). I turned it all off
Which column matters most to you when you pick an agent for a local model like Qwen 3.8 27B: passing, speed, tokens, or staying offline?
36 points · 36 comments
oai codex#58115
1. Seatbelt unreadable globs only append (/.*)?$ for /**/<literal> so scoped dir globs (/repo/**/secrets, /repo/*/.aws) block the dir vnode but leave files inside readable
2. OAuth callback_bind_host checks "::1" instead of "[::1]" on Url::host_str(), binding 0.0.0.0
7 likes
assertion: argon is currently at the frontier, pacing internal-only anthropic/openai models
evidence:
- sandbox-runtime#790
- codex#58115
macOS Seatbelt bypasses in both labs' own agent sandboxes, found in a quick vuln-hunting pass
27 likes
AIに自分の宿題を採点させない——反証役に通すと主要指摘の半数に条件が付いた
はじめに
Claude Code が作ったものを、同じ会話の Claude に「見直して」と頼むのはやめました。代わりに、作った会話の外にいる「別の目」——反証だけを任せた別エージェント、別会社のモデル(Codex)、報告前の点検役——に検査させたところ、主要指摘16件の半数に条件か一部否定が付き、「設計前提の否定」という強い結論が1件取り下げになりました。異種のレビュアー同士の指摘は2回とも重複しませんでした。英語圏では「Don't let Claude grade its own homework」という主張が出ていますが、Zenn で近い記事を探すとデザイン工程や PR ボットの導入記など周辺の話題が中心だったので、本記事では主張ではなく「別の目が何を拾い、何を拾えなかったか」の実測を、検査役に渡す指示文つきで書きます。
!
個人環境(Windows 11 + Claude Code Desktop/CLI + Codex CLI)での記録です。検査の対象は、個人開発の知見収集パイプライン(Python・SQLite・ローカル LLM による記事評価)と ~/.claude 配下のルール・フックです。数字は2026年7月〜10月の作業記録から取っています。件数はどれも数件〜十数件と小さいので、効果の大きさは参考値として読んでください。報告前の点検フックの効果判定は2026-11-12の予定で、本記事の数字は途中経過です。
この記事で扱うのは次の4つです。
同じ会話の見直しでは足りない理由(外部の研究1本と自分の記録)
4種類の「別の目」と、それぞれが実際に拾ったもの
検査役に渡すもの・渡さないもの
別の目を入れても防げなかったこと
前提・環境
Claude Code(Desktop アプリ+CLI)、Windows 11
作る役: メインの会話(Claude)
検査役: 観点別のレビュー役と反証役(どちらも新しく起動したサブエージェント)、Codex CLI(OpenAI のモデル)、advisor(Claude Code の点検用ツール)
機械チェック: ruff / pytest / coverage / bandit / pip-audit
対象: 知見収集パイプラインと、~/.claude 配下のルール・フック
本記事で「別の目」と言うときは、作った会話の履歴を持たない検査役を指します(advisor だけは例外で、後で理由を書きます)。
サブエージェントの完了報告を信じず、git とテストの出力で確かめる話は前の記事に書きました。ここではそれを前提とし、その先の「誰に、何を渡して検査させるか」に絞ります。
同じ会話の見直しでは足りない理由
最初に外部の根拠です。Huang ほか(ICLR 2024)は、正解を知る外部の判定(oracle)なしにモデルへ「見直して」と促す実験をしました。算数の文章題のベンチマーク GSM8K で、正答率は 95.5 → 91.5 → 89.0(%)と、見直すほど下がりました。外から新しい情報が入らない見直しは、正解を増やす保証がないということです。
自分の運用記録を見ても、同じ会話の見直しで直らない誤りには型がありました。
誤りの型
例
同じ会話の見直し
別の目
知識の中の誤り
計算ミス・事実の思い違い
直ることがある
直る
文脈の欠落
読んでいないファイル・知らない運用の経緯
見つからない
実測や別の資料で見つかる
確証バイアス
自分の仮説を支える証拠だけを集める
残りやすい
推論を渡さなければ弱まる
1行目と2行目の区別は、私の環境のルールファイルにも書いています。要旨は「自己批判が効くのはモデルの知識が原因の誤りだけ。外部の文脈が欠けている誤りは、自己レビューでは検出できない」です。
3行目は、後で出す3波レビューで観点別のレビュー役に実際に起きていたことです。レビュー役は、自分が立てた「ここが問題だ」という仮説を支える証拠を集めがちでした。
そこで、見直しを「もう一度考えさせる」ことに使うのをやめました。代わりに、新しい情報(テスト・実測・別のモデルの視点)が入る形に変えました。それが次の4つの「別の目」です。
4つの「別の目」と独立度
層
受け取るもの
独立度
拾いやすいもの
① 機械チェック
コードそのもの
最も高い(判断しない)
構文・既知の脆弱性・テストの失敗
② 反証役(別の会話の Claude)
結論と根拠の file:line だけ
高い
定義の取り違え・交絡・単位の読み違え
③ 異種モデル(Codex)
差分
高い(作り手とモデルが違う)
仕様と実装の間の経路の欠け
④ 点検役(advisor)
会話の全文
低い(作り手の推論も読む)
報告の言い過ぎ・確かめていない断定
流れにすると次のとおりです。
メインの会話が作る
│
├─ ① 機械チェック(ruff / pytest / coverage / bandit / pip-audit)
├─ ② 観点別のレビュー役(並列)→ 主要な指摘だけ反証役へ
├─ ③ Codex に差分を渡してレビュー(②と並行)
│
└─ 報告を書く → ④ 点検役を呼ばずに出すと Stop フックが差し戻す
独立度は「作った側の考えをどれだけ知っているか」の逆です。①は何も知らないので偏りませんが、意味は分かりません。④は全部知っているので深く読めますが、作り手と同じ前提に乗りやすくなります。
以下、②③④の順に、実際に何を拾ったかを出します。①の限界は②の節の中で出てきます。
実測1: 反証役に通すと主要指摘の半数に条件が付いた
2026-09-02 に、知見収集パイプライン全体を12観点でレビューしました。コードは一切変えない、読み取り専用のレビューです。
波
中身
体数・モデル
第1波
機械チェック
—
第2波
12観点を分担して並列レビュー
8体(opus×5・sonnet×3)
第3波
主要な指摘を「間違いを探せ」の姿勢で再検証
3体(opus)
最終的な指摘は、P0(今週中)3件・P1(今月中)9件・P2(次スプリント以降)11件でした。
機械チェックは全部合格していた
第1波の結果は pytest 758 passed / 10 skipped / 0 failed でした。行カバレッジ 75.3%・分岐カバレッジ 65.2% と目標には届いていませんが、落ちたテストは0件です。
ところが、レビュー報告書にはこう書くことになりました。「テスト758件合格」が、P0/P1 の指摘を1件も捕まえていない。
P0 の1つは「収集コマンドが内部で失敗しても終了コード0を返す」でした。報告書では「テストの穴が上記の不具合と一致する」とまとめています。機械チェックが言えるのは「テストを書いた範囲で壊れていない」ことだけです。
第3波で条件が付いた8件
第2波の主要指摘を、第3波の反証役3体に渡しました(報告書の要約には15件とありますが、付録の反証レポートを数えると16件です)。判定は3種類です。
CONFIRMED : 反証を試みたが崩せなかった
PARTIAL : 一部は正しい。成り立つ条件を書く
REFUTED : 誤り
16件の上位判定は、CONFIRMED 8件・PARTIAL 7件・混在1件(4つの小項目のうち3つが CONFIRMED、1つが PARTIAL)でした。指摘を丸ごと REFUTED にしたものはありません。ただし半数の8件に、条件か一部否定が付きました。中身の例です。
第2波の結論
反証で分かったこと
誤りの型
S ランクの人間採用率は A より低い(設計前提の否定)
採否の定義で向きが反転。「採用(approved)」だけで数えると S 18.1% > A 8.8%。A 側の採否の一部は3〜4月だけの運用で、比較に交絡が入っていた
定義依存・交絡
S ランクは全件、スコア補正処理(score_clamp)による昇格
この部分は REFUTED。昇格は別の関数で行われ、ある分野では LLM が直接 S を出していた(679件中672件が0.85超)
因果の取り違え
日次収集が止まっても検知する手段がない
ロック競合で無通知のまま終わる点は正しい。ただし「検知手段ゼロ」は REFUTED。別の診断コマンドに48時間の間接検知があった
範囲の言い過ぎ
埋め込み処理が全件エラーでも、警告は発火しえない
終了コード0になる点は正しい。「発火しえない」は言い過ぎ
範囲の言い過ぎ
評価の並列度を設定で上げれば短縮できる
1件18.3秒は一致。ただし「設定を変えるだけで」は未実証で、コードの中に反する根拠があった
未実証の断定
最も危なかったのは1行目です。報告書には「設計前提の否定」という強い結論として上がっていました。反証役は、採否の数え方を変えると向きが逆になることを示しました。正しい結論は「S と A に同じ採否基準が適用された証拠がない」に書き換わり、この指摘は取り下げになりました。
同じレビューの中では、反証役とは別の段でも2つの訂正がありました。1つは静的解析 bandit の「High が6件」です。第1波(機械チェック)の中間報告で、確信度(Confidence)の内訳を深刻度(Severity)と読み違えていました。正しくは Severity High 0 / Medium 12 / Low 10 です。機械の出力でも、読むのが AI なら読み違えます。もう1つは「git リポジトリが肥大化している」という事前の予想で、第2波の担当が自分で測って否定しました(pack 37MiB)。
反証役に渡す指示文
反証役が見つけたのは、定義依存・交絡・範囲の言い過ぎ・未実証の断定でした。どれも、作り手の推論を知らない目のほうが気づきやすい誤りです。私が使っている指示の骨子はこうです。
あなたの仕事は、以下の指摘が「間違っている理由」を探すことです。
承認する理由ではなく、拒否する理由を探してください。
各指摘に CONFIRMED / PARTIAL / REFUTED のどれかを付けます。
迷ったら PARTIAL にして、成り立つ条件を書いてください。
根拠は file:line と、実際に実行したコマンドの出力で示してください。
[指摘1] 結論: <一文> 根拠: <path>:<line>
[指摘2] 結論: <一文> 根拠: <path>:<line>
渡さないものも決めています。観点別のレビュー役の推論、経緯、「ここが怪しいと思った理由」は渡しません。反証役に回すのは P0/P1 だけです。
この日のうちに、P0 3件・P1 8件・P2 6件を修正しました。
実測2: Codex と内部レビュー役は指摘が重複しなかった
本体(master)に反映する前に、同じ実装を2つのレビュー役へ並行で渡しています。Codex CLI と、Claude のレビュー用サブエージェント(code-reviewer)です。
1回目は、パイプラインに分野別の設定を入れた実装でした。指摘は9件で、両者の指摘は被らず、きれいに分かれました。
2回目は 2026-07-07、25ファイル・+2,816行の実装です。こちらも重複はゼロでした。内訳は次のとおりです。
レビュー役
HIGH
MED
LOW
Codex
2
4
1
code-reviewer
—
3
5
HIGH の2件はどちらも Codex 側でした。どちらか片方だけなら、HIGH か MED の半数を見逃していたことになります。
代表的な指摘を並べると、見ている場所の違いがはっきりします。
指摘者
代表的な指摘
種類
Codex
反映先が設定を無視してハードコードされている(設定を変えると一部だけ分裂する)
設計の整合
Codex
上限を超えて保留にした分を、後で処理する経路が存在しない(「将来処理」が実装上は偽)
経路の欠け
Codex
上限が「試行」を数えていて、スキップした分まで枠を消費する
意味の取り違え
code-reviewer
設定ファイル生成のエスケープ不備で、ヒントが黙って無効になる
堅牢性
code-reviewer
100件区切りの境界を直接確かめるテストがない
テスト品質
code-reviewer
画面表示の集計が誤読されやすい(内数の注記がない)
読みやすさ
傾向をまとめると次のとおりです。
Codex: 仕様と実装の間の経路の欠け、設定と実装の分裂、ゲートの順序、入力の検証、セキュリティの境界
code-reviewer: 実装の内側の堅牢性、テストの質、既存コードの慣習との食い違い、表示
この分担に合わせて、依頼文を書き分けています。
Codex への依頼(仕様と実装の間を見てもらう)
この差分について、設定・仕様と実装の食い違い、
「後で処理する」と書いてあるのに経路が無い箇所、
入力の検証漏れを探してください。結論と file:line だけ返してください。
code-reviewer への依頼(実装の内側を見てもらう)
この差分について、エラー時の挙動、境界値のテスト不足、
既存コードの慣習との食い違い、表示が誤読される箇所を探してください。
「重複が多そうだから片方でいい」という直感は、2回とも外れました。並行で起動するので、待ち時間は1視点ぶんと変わりません。
実測3: 1つの機能に4回の別の目を入れた
2026-10-26 に、Claude Code の公式の不具合報告から、自分の環境で起きうるものを週次で台帳にする機能を作りました。
レビューは Codex 3回と、別の会話の Claude(Opus)1回です。塞いだ穴は次のとおりです。
塞いだ穴
種類
一時的な障害のときに、台帳の項目を消してしまう経路
データの消失
違う候補に判定結果を当ててしまう
誤った適用
壊れた台帳を受け入れて、そのまま保存してしまう
検証の漏れ
判定役に書き込み・操作の権限が残っていた
権限
git add の失敗を見逃す
失敗の見逃し
PowerShell のログ関数の戻り値が、処理結果に混ざる
言語の罠
機械チェックは pytest 1300 passed / 1 skipped、ruff 合格でした。上の穴はどれも、テストが通っている状態で別の目が見つけたものです。
判定役にも書き込み権限を渡さない
この機能では、判定役そのものも「検査する側」です。外部の不具合報告を読んで「この環境で起きるか」を判定させます。
判定役(claude -p)は読み取り専用にしました。使えるツールを読み取り系に限り、MCP も遮断しています。判定結果は返答として受け取り、スクリプト側で検証してから保存します。理由は、判定役が読む候補の本文が外部の未検証データだからです。上の表の「判定役に書き込み・操作の権限が残っていた」は、この設計の抜けをレビューが見つけたものです。
どこで止めるか
別の目を何周も回すと、終わりがなくなります。止める基準はルールにしています。
条件
判断
同じ指摘が2回続けて返る
振動。作る側では直せないので、やり方を変えるか人に上げる
3周に達した
上限。最善の成果物に注記をつけて返すか、人に判断を委ねる
この機能では、Codex の3回目で残った軽微な指摘を未対応のまま記録に残しました。「判定中のファイル監視が、こちらから読めない場所を『なし』と扱う」という指摘です。判定役も書けない場所なので、実害は小さいと判断しました。
実測4: 報告そのものを点検役に通すフック
ここまでの3つは、コードを検査する目でした。4つ目は、報告の言葉を検査する目です。
2026-10-15 から、報告前の点検フック(pushback-preempt-guard)を入れています。ある程度の作業をしたターンで、点検役(advisor)を呼ばずに報告を出して会話を終えようとすると、Stop フックが差し戻します。
advisor は Claude Code の機能で、上位のモデルが会話の全文を読んで助言を返します。点検役に見てもらう問いは次の4つです。
これは最高の案か(根本から変える案や、外部の事例と比べて勝っているか)
ユーザーに戻している作業のうち、自分でできるものはないか
「完了」とした部分を、使う人の操作で確かめたか
依頼の奥にある目的に届いているか
2026-10-12〜10-17(約4.9日)の記録です。
項目
値
フックが判定したターン
84
差し戻し
6(通過 78)
通過のうち、自分から点検役を呼んでいた
36
差し戻し後に点検役を呼んだ
6件中6件(各1回)
誤りが直った
2件
明確に不要だった差し戻し
0件
点検にかかった時間
報告1本あたり1〜2分
フック自体の処理時間
中央値0.2秒
誤りが直った2件を、差し戻しの前後で並べます(原文のまま)。
① 差し戻し前:
「遊びが良くなる速さは、あなたの試遊の回数で決まります。今は約1週間に1回です。」
差し戻し後:
「前の報告で「試遊は週1回」と書いたのは誤りです。記録では18日間で7回遊んでもらっていて、回数は足りています。」
② 差し戻し前:
「…すでに片付け済みの可能性があります。」
差し戻し後:
「点検で出た指摘2点を確認し直しました。」
(削除済みの根拠コミットを確認し、memory も修正)
どちらも「確かめていない断定」です。①は、記録を見れば分かる数字を推測で書いていました。②は「可能性があります」と、確認を読み手に預けていました。作業の中身ではなく、報告の言葉に出る誤りです。
副作用もありました。途中経過の報告(「やることはありません(続行中)。」で終わるもの)を差し戻した例では、その後に約21分・55回のツール呼び出しが続きました。止まらずに作業を続けさせる効果としても働いた、と見ています。ただしこれは推測です。
検査役に渡すもの・渡さないもの
4つの実測から、検査役への渡し方を表にまとめます。
渡さない(偏りを持ち込む)
渡す(独立に評価させる)
「このコードを書いた。理由は…」という推論
成果物・テスト・期待する出力
計画書(評価のときに再添付しない)
最終の差分(git diff)
作り手の思考過程の抜粋
提案・実装の表面の情報
「ここを工夫した」という自己評価
客観的な差分の事実
ほかに決めていることは次のとおりです。
姿勢を指定する: 「承認する理由」ではなく「拒否する理由を探せ」と書く
迷ったときの逃げ道を用意する: 「迷ったら PARTIAL にして条件を書け」。白黒を無理に付けさせない
根拠の形式を決める: 指摘には file:line を必須にする。受け取った側が実物と照合できる
書き込み権限を渡さない: 検査役・判定役は読み取り専用にする
異種モデルには観点を書き分ける: Codex には仕様と実装の間、内部のレビュー役には実装の内側
回す対象を絞る: 反証役に回すのは P0/P1 だけ
1つ目〜3つ目は、指示文の数行で済みます。4つ目は、ツールの許可設定で強制します。
ハマったところ・限界
機械チェックの出力も読み違える。 bandit の「High 6件」は、確信度の列を深刻度と読んだ誤りでした。機械は判断しませんが、出力を読むのが AI なら、そこに誤りが入ります。
点検役(advisor)は独立していない。 公式ドキュメントのとおり、advisor は会話の全文を受け取ります。作り手の推論も読むので、「検査役には成果物だけ渡す」という原則とは独立度が違います。私は advisor を「上位モデルによる二度見」と位置づけ、反証役の代わりには使っていません。
効果の因果は確定していない。 点検フックで直った2件は、フックがなくてもモデルが自分で気づいた可能性を排除できません。効果の判定は 2026-11-12 の予定です。
待ち時間がかかる。 点検は報告1本あたり1〜2分です。約4.9日間で advisor は141回呼ばれ(メインの会話36回・サブエージェント105回)、1回の所要の中央値はメイン86秒・サブエージェント120秒、待ちの合計はメイン58分・サブエージェント223分でした。トークン量は本記事では未計測です。
記録の数字にずれがある。 2026-07-07 の並行レビューは、記録上「計14件」とあります。一方、内訳(Codex 2+4+1、code-reviewer 3+5)を足すと15件です。どちらが正しいかは未確認なので、本文では内訳だけを載せました。3波レビューも、報告書の要約は「主要指摘15件」、付録の反証レポートは16件です。本文は付録の件数で書きました。また、私の作業メモには「反証で4件の結論が覆った」と書いていましたが、付録と突き合わせると、そのうち2件(bandit・git 肥大化)は反証役ではなく別の段での訂正でした。記録をまとめる段階でも、誰が何を見つけたかは混ざります。
分類は自分の判断。 「条件が付いた8件」(小項目に1つでも PARTIAL があれば数える)や「明確に不要な差し戻し0件」は、私が記録を読んで分けたものです。ほかの環境で同じ割合になるかは未計測です。
前の記事の数字は環境で変わった。 前の記事では、サブエージェントの完了報告が途中で切れる問題を書きました。現行の環境で直近14日・83本を数え直すと、途中切れは0件でした。頻度は環境で変わります。ただし「報告ではなく出力で確かめる」習慣は変えていません。
まとめ
同じ会話の「見直して」は、新しい情報を足しません。外部の研究でも、見直すほど正答率が下がりました(95.5 → 91.5 → 89.0)
別の目は、独立度の違う4種類を重ねています。機械チェック・反証役・異種モデル・点検役です
機械チェックの合格は「テストを書いた範囲で壊れていない」だけでした。758件合格でも、P0/P1 は1件も捕まえていませんでした
反証役には結論と file:line だけを渡し、「拒否する理由を探せ」「迷ったら PARTIAL+条件」と頼みます。主要指摘16件の半数(8件)に条件か一部否定が付き、「設計前提の否定」は取り下げになりました
Codex と内部のレビュー役は、2回とも指摘が重複しませんでした。観点を書き分けて並行で頼みます
報告の言葉も検査の対象です。点検フックで6件を差し戻し、2件の誤りが直りました(因果は判定待ち)
この記事が、AI の成果物を「誰に・何を渡して」検査させるかを決める材料になれば幸いです。
あなたの環境では、AI が作ったものを誰(何)に検査させていますか。同じ会話の見直しで困った例や、別の目で結論が覆った例があれば、コメントで教えてください。件数が集まったら、どの層がどの誤りに効くかの表を更新します。
参考リンク
Don't let Claude grade its own homework(Alex Tong, dev.to)
I Built an AI Agent With Claude Code, Then Had Claude Review Its Own Work(dev.to)
Every Commit in My Repo Gets Reviewed by a Second AI. Here's What Actually Changed.(dev.to)
I let a Claude Code agent handle my PR review comments. Only 1 of 6 bot comments was a real bug.(dev.to)
How to review AI-generated code (8 real PRs checked)(dev.to)
Large Language Models Cannot Self-Correct Reasoning Yet(Huang et al., ICLR 2024)
Escalate hard decisions with the advisor tool(Claude Code 公式ドキュメント)
Subagents(Claude Code 公式ドキュメント)
openai/codex(Codex CLI)
75体の並列エージェントで5.25Mトークンを溶かした——マルチエージェント運用の失敗5類型
Claude Codeのhook、守ってくれない10のケース——15個を実運用して踏んだ制限集
Codex CLI v0.165.0で、会話途中にeffortを変更してもプロンプトキャッシュの無効化を抑えられるreasoning_effort_overrideがデフォルトで有効になったようです。対応モデルは6 Astra、6.1 Sol、6.1 Terraです。19日目の改善がようやく入りましたね!
github.com/openai/codex/releases/tag/rust-v0.165.0
24 likes · 2,132 views
Codex Day 19徹底解説:CLI 0.164.0・推論切替のキャッシュ維持・Dots高速化
2026年10月24日(日本時間)、OpenAIの「28日間アップデート」Day 19が発表されました。 今回はフルリセットではなく、Dotsの通話接続高速化・CodexとChatGPT Workの推論レベル変更時のキャッシュ維持・Codex CLIの更新がテーマです。
Codex CLIは0.164.0が正式リリースされ、定型プロンプトの再利用、モデル・権限の操作、企業向けMCP認証、長いセッションの復元、Windowsプロキシ認証、macOSの安全性強化など、発表の短い説明よりも多くの変更が確認できます。
本記事では、公式発表の事実と利用上の考察を区別し、Macでの更新コマンドや開発現場での使い方まで解説します。
調査基準日:2026年10月24日(日本時間)。 Tibo Sottiaux氏の公式X投稿、OpenAI公式GitHubのCLI 0.164.0リリースノート、OpenAI Help Centerを照合しています。筆者が実機に0.164.0をインストールして計測した報告ではありません。Dotsの短縮秒数、キャッシュ削減率、CLIの全環境での挙動は断定しません。
Day 19:Tibo Sottiaux氏の公式X投稿
CLI改善の追加説明:Tibo氏の公式X投稿
一次情報:OpenAI Codex CLI 0.164.0リリースノート
1. Day 19の3つの改善
米国太平洋時間2026年10月23日のDay 19で発表された内容は次のとおりです。
Dotsの通話がより速く接続される
Codex / Workで会話途中に推論レベルを変更しても、キャッシュが無効にならない
Codex CLIの機能追加・不具合修正
分野
確認できる内容
未公表・注意点
Dots
音声通話の接続高速化を発表
何秒短縮したか、対象端末の全条件
Codex / Work
推論レベル切替によるキャッシュ無効化を解消
すべての入力で100%ヒットする保証ではない
Codex CLI
安定版0.164.0をリリース
個々の環境での実機テストは別途必要
利用枠
Day 19の新たなフルリセット発表なし
Day 17・18の個別反映状況とは別
Tibo氏は追加投稿で、CLIの利用規模がDevDay以降およそ2倍になったとも報告しています。ただし、「usageが2倍」は、処理速度や使用可能量が2倍という意味ではありません。
発表日とリリース日には時差がある
Day 19の告知は日本時間10月24日08:12頃。一方、0.164.0のGitHub安定版リリースは10月23日04:48 UTC(日本時間13:48)です。CLIの配布開始がDay 19の告知より前だった点に注意してください。
2. 推論レベル変更でもキャッシュを維持
用語:推論レベルとキャッシュ
推論レベル(reasoning effort)は、AIが回答前にどの程度考えるかを調整する設定です。単純な調査は低め、複雑な設計や原因調査は高め、といった使い分けができます。高く設定しても正解が保証されるわけではなく、処理時間や利用量に影響することがあります。
プロンプトキャッシュは、過去に処理した共通の入力(指示、コード、会話履歴など)を再利用して、同じ部分の再計算を減らす仕組みです。
Javaのバックエンド開発なら、API仕様、サービス層のコード、テスト結果、AGENTS.md、過去の調査などが繰り返し参照されます。
Before / After
従来
コードと仕様を読み込む
↓
共通の内容をキャッシュ
↓
推論レベルを変更
↓
キャッシュが無効になるケースがあった
Day 19改善後
コードと仕様を読み込む
↓
共通の内容をキャッシュ
↓
推論レベルを変更
↓
変更したことだけを理由にキャッシュを無効化しない
使いどころ: まず軽めの設定でエラーログを分類し、原因が複雑だと判明したら同じ会話内で推論レベルを上げて解析する、という流れです。
ただし、以下は保証されていません。
モデル自体を切り替えても、必ず同じキャッシュが引き継がれる
共通入力が変わっても常にキャッシュヒットする
利用量や費用が何%下がると約束されている
APIの全モデルにもまったく同じ条件が適用される
コンテキストウィンドウ(モデルが一度に参照できる情報量)が無制限になる
Day 16の改善との違い
比較
Day 16
Day 19
主題
時間が空いて過去の会話に戻る
会話途中で推論レベルを変える
目的
古いスレッドのキャッシュ再利用
設定切替によるキャッシュ失効の回避
API
APIの12時間キャッシュも別途発表
今回はCodex / Workについての発表
注意点
キャッシュ保持と無限コンテキストは別
推論切替以外の失効要因が消えるわけではない
参考:Day 16の12時間キャッシュ解説
3. Codex CLI 0.164.0の全体像
CLI(Command Line Interface)とはターミナルにコマンドを入力してソフトウェアを操作する方式です。Codex CLIはファイルの調査、修正、テスト、レビューなどに使えます。
OpenAI公式GitHubの安定版リリースノートで確認できる変更を整理します。
分類
主な変更
実務での意味
新機能
/presetsの10スロット
繰り返す作業指示を保存
新機能
/model・/permissionsの引数対応
設定を素早く切り替える
新機能
Kitty / Sixel対応端末で画像プレビュー
画像やスクリーンショットを履歴上で確認
新機能
企業向けMCP認証
許可された社内ツールへの接続を改善
セキュリティ
リモート実行時の資格情報マスキング
機密値の意図しない露出を抑える
初期設定
Amazon Bedrockウィザードが標準有効
AWS利用時の導入手順を簡素化
不具合修正
履歴圧縮失敗時の回復
セッションが壊れにくい
不具合修正
圧縮済み履歴の検索・設定復元
長いセッションを再開しやすい
不具合修正
Windowsプロキシ認証
企業ネットワーク内の接続を改善
不具合修正
macOSサンドボックス保護
パスの別名やリンクを悪用した操作を防ぎやすい
運用改善
ログや古いインストールの整理
ディスク使用量を抑える
OpenAI公式:Codex CLI 0.164.0
前の安定版0.163.0では/configによる設定画面、応答中の追加指示や/keymapなどが中心でした。0.164.0は反復操作、長時間利用、企業認証、安全性が中心となっています。
0.163.0公式リリースノート
4. /presets:定型指示を10件保存
プリセット(preset)とは、よく使う入力を登録し、呼び出せるようにする仕組みです。
0.164.0では、プロンプトやスラッシュコマンドを10個の番号付きスロットに保存でき、キーボードのメニューから呼び出せます。
スラッシュコマンドとは、Codex CLIの対話画面内で/から始める操作命令です。Macの通常のシェルで実行するコマンドとは違います。
何を登録すると便利?
用途
登録する文章例
バグ調査
「再現条件、原因、影響範囲、テスト方針を切り分けてから修正して」
APIレビュー
「認可漏れ、入力検証、例外処理、後方互換性を優先して確認して」
Javaテスト
「JUnitで正常系、境界値、異常系、並行処理を検討して」
PRレビュー
「指摘を重大度順に並べ、未検証箇所を明記して」
セキュリティ
「秘密値を表示せず、必要最小限の権限で操作して」
これらは登録内容の提案例であり、自動登録されるテンプレートではありません。
利用する際はCodex CLIの対話画面で次を入力し、メニューに従ってスロットを選びます。
/presets
AGENTS.mdとの違い: AGENTS.mdはリポジトリ全体で守るべきルール、/presetsは必要な場面で呼び出す反復作業の指示です。ルールは前者、タスクごとのチェックポイントは後者、と分けると整理しやすくなります。
注意: プリセットは定型入力の保存であり、自動実行スケジュールではありません。APIキーやパスワードを登録しないでください。
5. /modelと/permissionsの操作改善
/model: モデル、推論レベル、速度などの設定
/permissions: ファイル・コマンド実行などの権限プロファイルの設定
0.164.0では、それぞれのコマンドに直接引数を渡せるようになり、画面内の設定操作を簡素化できます。
まずはCodexの対話画面内で次を1つずつ入力すると、利用可能な設定を確認できます。
/model
/permissions
権限プロファイルとは、Codexがどの範囲まで操作できるかをまとめた設定です。レビューだけなら読み取り中心、実装では必要な書き込みだけ許可し、デプロイなど重要な操作は別途承認する、といった使い分けが考えられます。
強い権限を選べば便利になる一方で、操作可能範囲も広がり得ます。インラインで切り替えられることは、承認やアクセス制御を省略してよいという意味ではありません。
6. 画像プレビューは対応端末に限られる
0.164.0では、Codexが読み込んだ画像・生成した画像を、フルスクリーンの会話履歴(transcript)内でプレビューできるようになりました。
ただし端末がKitty graphics protocolまたはSixelに対応している必要があります。どちらもターミナル画面に画像データを描画する方式です。
たとえば、画面のスクリーンショットを参照しながらUIの不具合を調べる用途に便利です。
macOS標準のターミナルを含め、すべてのターミナルで必ず画像が表示されるわけではありません。画像プレビューが必要な場合は、端末の対応プロトコルと設定を確認しましょう。
7. 企業向けMCP認証が強化
MCP(Model Context Protocol)は、AIが外部のツールやデータへ接続するための共通プロトコルです。社内API、チケット管理、ドキュメント検索などの連携に使われます。
今回のCLIでは、次の認証方法が正式サポートの対象として案内されています。
利用資格のあるCodexアカウントの既存の認可(grant)を用いる方法
MCP接続先に対する専用のサインイン
クライアントシークレットが必要なOAuthクライアント
OAuthは、ユーザーのパスワード自体をアプリへ直接渡す代わりに、許可された範囲のアクセス権を委譲する仕組みです。
Codex CLI
│
├── Codexアカウントの利用可能な認可
│ または
└── MCPサーバー専用サインイン
│
▼
認証と権限確認
│
▼
許可されたMCPサーバー
│
▼
社内ツール・データ
MCPへ接続できるようになっただけで社内のすべての情報を閲覧できるわけではありません。 認可スコープ、サーバー側権限、組織の管理ポリシーが必要です。
公式0.164.0リリース:MCP Authentication
8. セキュリティ強化:資格情報とmacOSのパス
資格情報のマスキング
マスキングとは、画面やログへ表示する機密値を*のように伏せることです。
0.164.0では、リモートBashコマンド、Zshセッションスナップショット、カスタム資格情報プロバイダーに関する、公式が対象として挙げた経路で資格情報のマスキングが強化されました。
表示のイメージ(実際の認証情報ではない)
API_TOKEN=*
これによって漏えいのリスクを下げられますが、すべてのツール出力、任意のログ、外部API送信まで自動的に安全になるという保証ではありません。秘密値をソースコードやプロンプトに直書きしない原則は引き続き重要です。
macOSのサンドボックス強化
サンドボックスは、プログラムがアクセスできるファイルや操作範囲を制限する仕組みです。
公式リリースによると、macOSで大文字・小文字の違うメタデータパスを使った書き込みの保護チェックや、実行ファイルを探す際の置き換え可能なシンボリックリンク(symlink)へのチェックが強化されました。
symlinkは別のファイルやフォルダーを参照するリンクです。検査時と利用時にリンク先が入れ替わるような状況は安全性に関わるため、適切な保護が必要です。
リリースノートにないCVE番号や、特定の攻撃が必ず成功していたという説明は付けません。
9. 長い会話の復元・圧縮の不具合が修正
compaction(コンパクション)は、長い会話履歴を圧縮・要約して、限られたコンテキストで作業を続けるための処理です。
0.164.0では、長いスレッドに関して次が修正されています。
修正対象
修正前に起き得たこと
新しい挙動
履歴の圧縮失敗
不完全な要約が履歴に残る
部分的な要約を残さない
バックグラウンド圧縮失敗
異常停止(panic)する
代替処理にフォールバック
圧縮済みセッション
再開候補を見つけられない
圧縮済み履歴も検索
スレッド設定復元
保存済みの設定が全体設定に置き換わる
スレッドに保存された設定を復元
また、複数階層のサブコマンドでの-c・--config指定の保持、権限選択が終わるまでのキュー処理の待機、使用しなくなったインストールやログの削除・サイズ制限もリリースに含まれます。
-c / --configは、CLIの設定をコマンドラインから上書きするオプションです。今回、複数のサブコマンド階層で上書きを指定しても失われないよう改善されました。
ここでの復元とは「モデルが無制限に過去のすべてを完全記憶すること」ではありません。 コンテキスト長の制約や履歴要約の限界は残ります。
10. Windows企業プロキシ認証とAmazon Bedrock
Windows:Negotiate / NTLM
企業のWindows環境では、外部通信をプロキシ(通信の中継サーバー)経由にすることがあります。
今回、HTTPSとWebSocket通信でプロキシから認証要求を受けた際に、サインインしているWindowsユーザーのNegotiate / NTLM資格情報を使えるよう改善されました。
HTTPS: 暗号化されたWeb通信
WebSocket: 接続を維持して双方向に情報を送受信する技術
NTLM / Negotiate: Windows環境で使われる認証方式
ただし、証明書の追加設定や企業独自のプロキシ方針は別の問題です。すべての社内ネットワークで接続が保証されるわけではありません。
Amazon Bedrock
Amazon BedrockはAWS上で基盤モデルを利用するためのマネージドサービスです。
0.164.0ではセットアップウィザードが標準で有効になり、AWSの認証情報が検出された場合、APIキー入力がほかのAWSログイン方法とまとめて表示されるようになりました。
初期設定の改善であって、AWSの利用権限が自動付与されるわけではありません。
11. Macで0.164.0を導入する手順
ここからのコマンドはMacのターミナルで実行します。後半のスラッシュコマンドはCodexの対話画面へ入力する点に注意してください。
手順1:現在のバージョンを確認
codex --version
codex:CLIの実行ファイル
--version:バージョン情報だけを表示する指定
まだ導入していない場合は、command not foundなどのエラーになることがあります。
手順2:npmから安定版0.164.0を導入
npm install -g @openai/codex@0.164.0
部分
意味
npm
Node.jsのパッケージ管理ツール
install
ソフトウェアのインストール・更新
-g
グローバル(CLIをコマンドとして使える領域)への導入
@openai/codex
OpenAIのCodex CLIパッケージ
@0.164.0
インストールするバージョンを固定する指定
Node.jsとnpmが必要です。Homebrewなど別の方法で既に導入している場合、重複インストールにより違う場所のcodexを呼び出す可能性があるため、導入方法の統一が安全です。
手順3:更新後の確認と起動
codex --version
codex
1行目は更新されたバージョンを確認します。2行目は対話モードでCodexを起動します。
起動したCodexの対話画面内では次を試せます。
/presets
/model
/permissions
対話コマンド
動作
/presets
保存した定型入力やスラッシュコマンドを管理
/model
利用可能なモデル・推論レベル・速度を設定
/permissions
権限プロファイルを確認・選択
これら3行を通常のMacターミナルに直接入力しても使えません。 Codexを起動してから入力します。
更新後のチェック
長い開発スレッドを使っている場合、次の点を確認するとよいでしょう。
過去のセッションが再開できるか
保存したモデル・権限設定が意図通りか
MCP接続先への認証が変わっていないか
画像プレビューが必要ならターミナルがKitty / Sixel対応か
本番データに触れる前に、権限が必要最小限になっているか
12. Dotsの通話接続はどう変わった?
Dotsは、継続的なタスクや利用者の仕事を支援するAIエージェントです。今回のDay 19ではDotsへの通話接続が以前より速くなったと発表されました。
ここで改善されたのは通話が接続されるまでの体験です。たとえば、通話を開始したあと接続するまでの待ち時間が短くなることが期待されます。
ただし公式の短い投稿には、接続時間が何秒になったか、遅延が何%減ったか、通話音質や回答精度が向上したかは書かれていません。また、Dotsの利用可否はサービスの提供対象やアカウント条件によります。
「通話接続が高速化」と「AIの推論速度が高速化」は異なるものとして扱うのが正確です。
13. Tibo氏の「CLI利用量が2倍」を正しく読む
Tibo氏はDay 19の追加投稿で、Codex CLIの利用量がDevDay以降約2倍に増えたと報告しています。
しかし、このusageの集計について、公開された短い投稿だけでは、ユーザー数・呼び出し回数・トークン数などのどれを測ったかを確定できません。
次のように解釈してはいけません。
Codex CLIの処理速度が2倍
コーディングの正確性が2倍
利用枠が2倍
すべてのユーザーの作業時間が半分
ここはあくまでTibo氏による利用規模に関する報告値です。
14. よくある質問
Q. Day 19にもリセットはあった?
Day 19に新しいフルリセットの発表はありません。 Day 17・18はリセットの告知がありましたが、今回は改善の告知です。
Q. /presetsで毎朝自動レビューが動く?
いいえ。 定型入力を呼び出す機能で、スケジュール実行の機能ではありません。
Q. 推論レベルを上げてもキャッシュが必ず効く?
必ずではありません。 推論レベルを変更したという理由だけでは無効にならないという改善で、入力やモデルが変わるケースまで全て保証していません。
Q. Macで画像プレビューが出ないのは不具合?
端末がKittyまたはSixelに対応していることが必要です。対応していない環境ではプレビューが表示されない場合があります。
Q. MCPサインインで社内のDBに自由に接続できる?
できません。 正しいアカウント・権限・接続先設定が別途必要です。
Q. macOSの修正は重大な脆弱性への対応?
リリースノートにサンドボックスの保護強化は明記されていますが、Day 19の情報だけから特定のCVEや緊急性を断定できません。 具体的な公開情報がない部分は推測しないことが大切です。
まとめ
Day 19は「繰り返す操作を減らし、長い作業を続けやすくする」改善の日でした。
Dots:通話接続の高速化。ただし短縮量の数値は未発表
Codex / Work:会話中の推論レベル変更によってキャッシュが無効にならないよう改善
Codex CLI 0.164.0:/presets、モデル・権限の設定、画像プレビュー、企業向けMCPサインインを追加
セキュリティ:資格情報マスキング、macOSサンドボックスの保護強化
安定性:長いセッションの履歴圧縮・再開、Windowsプロキシ認証の修正
Day 19の追加リセット:発表なし
Codexを日常的なバグ調査、JavaのAPI設計、レビューに利用しているなら、プリセットの反復利用・長い会話の再開・推論レベルの切り替えは特に確認したい変更です。ただし、機能がリリースされたことと、自分の環境で期待どおり動いたことは区別してください。
参考資料・一次情報
Tibo Sottiaux氏:Day 19公式X投稿
Tibo Sottiaux氏:Codex CLI改善の追加説明
OpenAI / GitHub:Codex CLI 0.164.0
OpenAI / GitHub:Codex CLI 0.163.0
OpenAI:Codex CLI Changelog
OpenAI Help Center:ChatGPT WorkとCodex
OpenAI Help Center:Work / Codexの使用量リセット
28日間のアップデートを毎日、公式投稿と一次情報に基づいて解説しています。今後も続報を見逃したくない方はぜひフォローしてください。
Codex Day 14徹底解説:デスクトップで過去のメッセージを編集可能に!Steer・Queue・Forkとの違い
OpenAI・Codexの28日間アップデートを毎日調べて発信しています。次の新機能やリセットも追いたい方は、ぜひフォローしてください。
2026年10月18日(米国時間)、OpenAIの「28 days of shipping」で Day 14 のアップデートが発表されました。
今回の発表は、Codexのデスクトップアプリで、同じスレッド内にある以前のメッセージを後から編集できるようになったというものです。
公式の28日間トラッカーでは、次のように記載されています。
Users can now edit previous messages within a thread in the desktop app.
出典:OpenAI Developer Community:28 days of Shipping at OpenAI
短い発表ですが、長期間のコーディング作業では重要な操作性改善です。誤字や条件の指定ミス、前提の修正などを、過去の発言に戻って扱えるようになります。
一方、編集後にAIがどの範囲を再実行するのか、履歴が分岐するのか、既存のファイル変更をどう扱うのかは、公式のDay 14告知だけでは明らかになっていません。
この記事では、公式に確認されたことと未公表事項を厳密に分けたうえで、Steer・Queue・Forkとの違い、使いどころ、安全な確認方法、開発作業での注意点、リセットの有無を解説します。
確認日:2026年10月19日(日本時間)。 この記事は公式の28日間トラッカーとCodex Changelogを参照しています。実機でボタン位置や編集後の履歴分岐を検証した記事ではありません。アプリのバージョンや配信状況によって表示が異なる可能性があります。
Day 14で何が変わった?
項目
公式に確認できる内容
Day
14
米国での発表日
2026年10月18日
対象
デスクトップアプリのCodexスレッド
新しい操作
過去に送信したメッセージの編集
編集後の履歴分岐
詳細未公表
編集後の自動再実行
詳細未公表
既存のコード変更の巻き戻し
保証の記載なし
CLI・モバイルの同等機能
Day 14告知では未確認
Day 14の追加フルリセット
公式トラッカーでは確認なし
重要なのは、「送信前の下書きを直せる」ではなく「すでに送信した過去のメッセージを編集できる」という点です。
Codexに長い作業を任せた後、最初の依頼が曖昧だったと気づくことがあります。その場合、以前の依頼を修正できるのは便利ですが、修正の効果が過去の実行結果にどこまで及ぶかは別の問題です。
1. 具体的にどんなとき便利?
仕様の指定漏れに気づいたとき
最初の依頼が次のようなものだったとします。
認証処理を修正して、テストも追加して。
後になって、次の条件を明記する必要があると分かりました。
認証処理を修正して、テストも追加して。
ただし公開APIのレスポンス形式と既存DBスキーマは変えないこと。
Day 14で過去メッセージの編集が可能になったため、以前送った依頼の内容を修正する操作ができるようになります。
ただし、この操作だけで、過去に行った編集やテストが再実行されると確認されたわけではありません。編集後の画面に何が表示されるかを必ず確認してください。
間違ったファイル名・Issue番号を直したいとき
例えば、最初の依頼で Issue #124 と書いたつもりが Issue #142 と送信していた場合です。
過去の文面を修正できることと、誤ったIssueへ実際に加えたコメント・変更が取り消されることは同義ではありません。
GitHubへ書き込む操作がすでに行われた場合、差分やIssue履歴を別途確認しましょう。
長時間のプロンプトを組み直したいとき
大規模リポジトリのレビューでは、
対象ディレクトリ
既存仕様を壊さない制約
テストの実行条件
PR作成とマージの権限
作業対象のブランチ
など、長い依頼になる場合があります。編集できると、送った依頼を参照しながら条件を見直しやすくなります。
ただし、保存・確定操作の具体的なUIや、編集による再生成の範囲は公式の短い告知では確認できません。
2. Steer・Queue・Forkとは何が違う?
Codexには、過去のメッセージ編集以外にも、会話の進行をコントロールする方法があります。
操作
役割
例
Edit(Day 14)
過去に送ったメッセージの内容を修正する
「対象のIssue番号を直す」
Steer
現在実行中の作業に追加の指示を渡す
「DBスキーマは変えないで」
Queue
現在の作業が終わった後の指示として積む
「完了したらREADMEを更新して」
Fork
会話のある地点から別の作業の流れを作る
「別案を新しい分岐で試す」
これらは似ていますが、目的が違います。
Steer:今進んでいる作業へ方向修正
作業Aが進行中
├─ Steer:「認証部分の変更を優先して」
└─ その時点の作業へ追加条件を届ける
Day 4の改善では、この途中指示への反応を速くする変更が発表されました。
Steerは、過去のメッセージそのものを書き換える操作とは別です。
Queue:今のタスクが終わった後の作業を予約
作業Aを実行中
↓
Queue:「終わったら差分をレビューして」
↓
作業Aが終了
↓
次の依頼が処理される
Queueは、「過去の発言を修正する」のではなく、次に何をするかを追加する操作です。
Fork:別の流れとして試す
Codex Changelogには、2026年3月18日の更新で、最後のターン以外の過去メッセージからも会話をForkできるようになったと記録されています。
Forkは通常、過去の地点から別の文脈・作業の流れを持つための操作です。
一方、Day 14の発表は既存スレッド内の過去メッセージの編集です。
「過去メッセージを編集すると自動的にForkが作成される」など、Day 14の詳細な履歴制御は公開されていません。 この2つを同一視しないようにしましょう。
公式:ChatGPT & Codex Changelog
3. 編集すると過去のコード変更は戻る?
公式発表には、その保証はありません。
これが開発者にとって最も注意したい点です。
Codexはチャットに回答するだけでなく、権限があればコードや外部サービスへ変更を加えます。
ユーザー:「Issue #142を修正」
↓
Codex:コードを編集
↓
Codex:テストを実行
↓
Codex:GitHubにPRを作成
↓
ユーザー:過去の依頼を「Issue #124」に編集
このとき、過去の文面を直しただけでPRやGitコミットが自動削除される、とは考えないでください。
Codexの操作対象には少なくとも次の種類があります。
対象
例
確認方法
会話履歴
以前の依頼文
スレッド表示
ローカルファイル
編集されたコード
Git差分
Gitの履歴
コミット・ブランチ
Gitログ
GitHubのデータ
PR・Issue・レビューコメント
GitHub画面
外部サービス
API投稿・デプロイなど
各サービスの実行履歴
メッセージを編集する操作と、それらの実行済みの副作用を取り消す操作は別です。
4. 編集後の安全な確認方法
Step 1:まず現在の作業が動いているか確認する
進行中の処理がある場合は、画面がSteerやQueueを受け付けている状態か、過去のメッセージの編集が可能な状態かを確認します。
Day 14公式告知では、実行中でもいつでも編集できるかまでは明記されていません。
Step 2:対象メッセージを確認して編集する
対応するCodexデスクトップアプリで、対象スレッドの以前のメッセージから編集操作を探します。
右クリック・メニューボタン・ショートカットなど、具体的な入口は公式発表だけでは確認できないため断定しません。 実際のアプリに表示される操作に従ってください。
Step 3:編集後の履歴・実行状態を確認する
編集確定後に、次の点を確認してください。
以前のメッセージがどう表示されるか
既存のCodexの回答が残っているか
再生成・再実行・分岐などのUIが現れるか
実行中のタスクが引き続き動いているか
作業ディレクトリの差分が変わったか
これは、今回の機能がどのように扱われるかを、安全に実機確認するための観点です。
Step 4:Gitの状態を読み取り専用で確認する
Gitリポジトリの作業ディレクトリで、次のコマンドを使えます。
git status --short
git diff --stat
git log -1 --oneline
それぞれの意味は次の通りです。
git status --short:変更済み・追加済み・未追跡ファイルの概要
git diff --stat:未ステージの差分量をファイル別に表示
git log -1 --oneline:直近のコミットを短く表示
これらは読み取り目的のコマンドで、過去の変更を取り消す処理ではありません。
注意:git reset --hardなどの破壊的なコマンドは、機能の挙動を確認するために安易に実行しないでください。
5. 安全な実機検証をするなら
既存の本番リポジトリで試す前に、外部APIへの書き込みがない簡単なテストで挙動を確かめると安全です。
テスト例
最初に以下のような依頼を送ります。
このスレッドではファイルを編集しないでください。
「赤色と青色の2つの候補を比較してください」と回答してください。
Codexの回答が出た後、以前送信したメッセージの編集操作を使えるか確認します。
編集できる場合、色の名前などを修正し、再実行されるのか、過去の回答が残るのか、履歴が分岐するのかを観察します。
このテストではファイル操作や外部書き込みを依頼しないため、本番コードやGitHubの状態へ影響するリスクを抑えられます。
ただし、この検証手順自体はOpenAIがDay 14で示した公式操作マニュアルではなく、利用者が安全に挙動を確認するための提案です。
6. 通常のChatGPTとCodexの違い
通常のChatGPTでも、過去のユーザーメッセージを編集できる機能が以前から存在します。
しかし、Codexはファイル変更、ツール実行、Git操作などの作業を伴うため、編集した文章と既存の作業結果がどう関係するかという問題が増えます。
観点
通常のChatGPT
Codex
主な成果物
回答文、資料など
コード・差分・テスト・PRなど
過去の文章の編集
既存のチャット操作として提供
Day 14でデスクトップに対応
外部副作用
ツールを使う場合は発生し得る
ファイル・Git・外部ツールへの操作が多い
編集後の変更確認
会話・成果物の再確認
会話に加えGit差分・PR・実行ログを確認
「通常のChatGPTと完全に同じ履歴分岐や再生成挙動になった」という発表ではありません。
また、Codex CLIやモバイルのすべてのクライアントにDay 14の機能が同時配信されたことも確認できません。
7. なぜ過去メッセージの編集が重要なのか
今回の変更が役立つ理由は、エージェントへの指示が長く・複雑になりやすいことです。
長文の条件指定を改善できる
バックエンド開発の例では、
既存APIとの互換性
Javaやフレームワークのバージョン
DBスキーマ変更の可否
テストの実行環境
セキュリティと権限
PR作成・マージまでの作業範囲
といった条件を明確にする必要があります。
後から誤りに気づいたとき、過去メッセージの編集が使えれば誤った文面を修正する導線ができます。
履歴の整合性は別途確認が必要
これまでの会話の文脈を変更できる操作だからこそ、編集後の古いAI回答が同じ文脈のものとして扱われるかが重要です。
公式はその仕様を公開していないため、編集だけに依存して「全ての後続処理が新しい条件に沿っている」と判断しないでください。
8. Day 14の追加リセットはあった?
2026年10月19日時点の公式28日間トラッカーでは、Day 14の追加フルリセットは確認できません。
今回の発表は過去メッセージ編集の機能追加であり、利用可能量の回復ではありません。
ここまでを比較すると、
Day
内容
Day 12
Codex / Workのキャッシュ効率向上
Day 13
利用枠のグローバルリセット
Day 14
Codexデスクトップで過去のメッセージを編集可能に
となります。
Day 13の自動リセットと、Day 14の編集機能は別の発表です。
9. Day 1〜14の振り返り
Day
主要な発表
Day 1
GPT-6 Astra / GPT-6.1 Solの標準速度改善
Day 2
Auto-review無料化、APIティア簡略化、Meetings、Decisions API、追加リセット
Day 3
GPT-6 / Intelligent UI、保存可能なリセットの配布
Day 4
GPT-6.1 Sol Ultrafast、途中指示への高速反応
Day 5
Dots強化とComposer predictions
Day 6
グローバルリセット
Day 7
GPT-6.1 Solの標準コンテキスト272K→500K
Day 8
グローバルリセット
Day 9
デスクトップの保存状態データを約60%削減見込み
Day 10
フルリセット
Day 11
モデル容量不足エラーの削減と自動継続改善
Day 12
コンテキスト再利用・キャッシュ効率改善
Day 13
グローバルリセット
Day 14
Codexデスクトップで過去のメッセージの編集に対応
よくある質問
Q. Day 14で何ができるようになった?
Codexのデスクトップアプリで、同じスレッド内の過去のメッセージを編集できます。 これはOpenAI公式トラッカーで確認できる変更です。
Q. メッセージを編集すると、その時点から再実行される?
公式のDay 14発表だけでは詳細が分かりません。 実際にどのような確認・再生成・履歴の分岐が発生するかは、対応アプリで確認してください。
Q. コードが自動で元に戻る?
その保証はありません。 ローカルファイルやPRがすでに変更されている場合、Git差分やGitHubの状態を個別に確認してください。
Q. CLIやiPhoneでも編集できる?
Day 14の公式説明はデスクトップアプリを対象としており、CLI・モバイルの対応は未確認です。
Q. 過去メッセージを直すとCodexの利用量を節約できる?
節約率や特別な無料枠は発表されていません。 再実行などで追加作業が発生すれば通常の利用量が関係する可能性があります。
Q. Day 14に新しい保存型リセットや一斉リセットはある?
公式トラッカーにその発表はありません。
まとめ
Day 14は、Codexデスクトップで過去に送ったメッセージを編集できるようにする操作性の改善でした。
押さえたいポイントは以下の通りです。
Codexデスクトップの同一スレッド内で過去メッセージの編集が可能
Steer(現在の実行への追加指示)、Queue(次の指示)、Fork(会話分岐)とは異なる
編集後の自動再実行・履歴分岐の詳細は未公表
既存のコード変更やGitHubの操作が自動的に巻き戻る保証はない
実際の操作は、外部書き込みのない小さなテストスレッドで確かめるのが安全
Day 14の追加フルリセットは公式情報で確認できない
長い開発タスクでは、最初に出した指示の条件を見直したくなることがあります。今回の改善は、そうした場面での使い勝手を高めるものです。
ただし編集できることと、既に完了した外部の作業を巻き戻すことは別です。Codexを安全に使うため、編集後の実行内容とGit差分を必ず確認するようにしましょう。
参考・一次情報
OpenAI Developer Community:28 days of Shipping at OpenAI(Day 14)
OpenAI公式:ChatGPT & Codex Changelog
OpenAI公式:Codex Help / Documentation
OpenAI公式:GitHub Codex
OpenAI・Codexの28日間アップデートは今後も毎日調査して発信します。Day 15以降の新機能やフルリセットも見逃したくない方は、ぜひフォローしてください。
Mentions
Codex Was Torching Your SSD and Nobody Noticed for Months Your Codex log file looked fine. Your SSD counters did not. The file was small. That was the trick. If you opened <code>~/.codex/</code>, you could see a SQLite database called <code>logs_2.sqlite</code>. It was not huge. It was not swallowing the disk. Finder, Explorer, <code>du</code>, and every normal storage check had nothing dramatic to say. Meanwhile, one developer's SSD recorded roughly 37 TB of writes in 21 days. That works out to about 1.7 TB a day. If you stretch one heavy, continuous-use report across a full year, it becomes roughly 640 TB. The number is not a prediction for every Codex user. It came from one machine running for a long time. But it exposed a problem that is easy to miss with local developer tools: > a file can stay small while the storage device underneath it gets written to constantly. This is the story of a noisy TRACE logging sink, a SQLite database doing exactly what it was told, and the SSD wear that nobody could see from file size alone. The quick version - A user reported unusually high local disk writes and traced them to Codex CLI's <code>logs_2.sqlite</code> database and its WAL companion file. - The reported machine accumulated about 37 TB of writes over 21 days of uptime. - The file stayed bounded because new logs were inserted while older logs were deleted. - The reported cause was an overly verbose TRACE logging path that did not fully respect the expected <code>RUST_LOG</code> override. - The supplied investigation says version 0.142.0 reduced the noisy writes substantially, with early testing reporting around 85% fewer log writes. - If you used an older build heavily, update first, then inspect real write activity and your SSD's lifetime-write counters. The number that made people look twice 37 TB in 21 days is not a normal “developer tool wrote some logs” story. | Measurement | Value | | --- | --- | | Reported writes | ~37 TB | | Reporting window | 21 days | | Approximate daily rate | ~1.7 TB/day | | Annualized at that rate | ~640 TB/year | The annualized number needs context. It assumes the same workload every day for a year, which is rarely how people work. Someone running short sessions will produce far less. Someone leaving the tool open, working with long sessions, or using it in automation could produce much more than they expect. The useful point is not “every SSD will die in a year.” The useful point is that this level of write activity belongs in the category of things you should notice and control. <!-- Visual placement: use a clean SMART dashboard screenshot here, with all serial numbers and personally identifiable drive details blurred. --> Why the file size told you almost nothing Most of us check disk problems like this: du -sh ~/.codex ls -lh ~/.codex/logs_2.sqlite* Those commands answer one question: > How much data is stored right now? They do not answer this: > How much data has been written over time? The Codex log database was designed to retain a bounded amount of diagnostic information. New rows were written, old rows were removed, and the database could remain roughly the same size. So the folder looked calm while the disk was doing constant work. Imagine a café with four tables. Looking through the window at noon, you see four people sitting down. Come back at 6 PM, still four people. The table count tells you nothing about whether eight customers visited or eight hundred. The SQLite file was the same. Stable size, enormous turnover. !Diagram showing how a small SQLite log file can lead to high SSD write activity What was generating all those writes? The reported issue points to a logging path that defaulted to TRACE, the most detailed level in Rust's tracing ecosystem. TRACE logging is useful when you are trying to understand a very specific failure. It can include low-level events that are normally too noisy for everyday use: - file-open events - raw network or WebSocket activity - transport details - telemetry plumbing - dependency-library messages that get bridged into the application's tracing system The supplied breakdown estimates that TRACE-level entries made up 70.7% of the retained log-body size. The highest-volume targets included WebSocket handling, OpenTelemetry-related logs, a generic dependency log bridge, and client transport code. That is diagnostic exhaust. A little of it is fine. A default stream of it, persisted locally in SQLite, is a different kind of workload. The three parts that stacked together No single part of this design has to be bad on its own. 1. TRACE was active where it should have been opt-in TRACE is not a normal default for a tool used for hours at a time. It is the level you turn on when you are actively debugging. The reported behavior was that Codex initialized a feedback logging sink at TRACE. That turns every routine interaction into a lot of diagnostic detail. 2. RUST_LOG=warn did not fully quiet it Rust developers often reach for this first: RUST_LOG=warn codex That is supposed to turn down the volume. According to the issue analysis, it did not fully apply to the relevant sink. If a target did not have an explicit override, Codex's internal default still allowed noisy logging. That is worse than an obvious missing setting. A user can think they reduced logging while the disk keeps receiving the same workload. 3. SQLite turned event noise into storage churn SQLite is excellent. It is also not magic. For small structured local data, a SQLite database is a good choice. For a constant stream of fine-grained TRACE events, inserts, deletes, indexes, and checkpoints, it can create a lot of writes even when the database never becomes large. The problem was not “SQLite is bad.” The problem was using a write-heavy retention loop as a sink for a log level that should not have been permanently enabled. The part the operating system does not show you There are two kinds of amplification in this story. SQLite write amplification SQLite often uses WAL mode, short for write-ahead logging. In simplified form: 1. A log event is appended to the WAL file. 2. SQLite later checkpoints that change into the main database. 3. Older rows are deleted to keep retained data bounded. 4. Indexes and database pages are updated along the way. One logical log event can therefore create more than one write at the filesystem level. The WAL is not wrong. Checkpoints are not wrong. The problem appears when that loop is fed relentlessly with small, noisy events. SSD write amplification An SSD has its own internal life. It writes data in small pages but erases much larger blocks. When a small part of a block changes, the SSD controller often writes the new data to a fresh location, marks old data stale, later moves still-valid pages, and erases the old block. That movement is called garbage collection. Wear leveling moves writes around so one physical area does not wear out first. Both are useful. Both mean the flash may receive more physical writes than the operating system asked for. The ratio is called the write amplification factor. The exact number varies by drive, spare capacity, free space, workload, and controller. The supplied analysis does not measure the multiplier for the affected drive, so do not treat any guessed physical-wear number as a precise fact. The direction is enough: > High-churn, small random writes are one of the workloads SSDs work hardest to manage. Is 640 TB actually dangerous? It can be. SSDs have an endurance rating usually expressed as TBW, or terabytes written. A typical 1 TB consumer SSD may be rated for a few hundred TBW. Enterprise drives may be rated much higher. The exact number depends on the model, capacity, NAND type, and warranty. That does not mean a drive fails the moment it reaches its rated TBW. Ratings are warranty and endurance guidance, not a timer that hits zero at midnight. Plenty of drives outlive them. But a background development tool potentially consuming hundreds of terabytes of writes is still worth taking seriously. It can eat through a meaningful part of the drive's expected write budget without filling the disk or showing a visible failure. How to check your own machine The order matters. Update first. Then look at real I/O. Then check what the drive itself says. Step 1: update Codex The investigation supplied with this article identifies 0.142.0 as the version containing the logging reduction. Check the current release notes and your installed build, then update before you start measuring. Also remember that Codex CLI, the desktop app, and editor integrations can ship or bundle components on different schedules. Updating one does not automatically prove every local Codex-related process is updated. Step 2: find the log files On macOS and Linux: ls -la ~/.codex/logs_2.sqlite* On Windows PowerShell: Get-Item "$env:USERPROFILE\.codex\logs_2.sqlite*" You might see the database, a <code>-wal</code> file, and a <code>-shm</code> file. Do not stop after checking their size. A small database is the whole reason this incident was easy to miss. Step 3: watch actual writes On Linux, <code>pidstat</code> can show which process is writing: pidstat -d 5 To see whether a process has the database open: sudo lsof ~/.codex/logs_2.sqlite On macOS, open Activity Monitor, select the Disk tab, and watch bytes written for Codex-related processes while you work. On Windows, use Resource Monitor or Task Manager's disk column. Look at sustained per-process writes, not just a brief spike during startup. Step 4: check the drive's own lifetime write counter This is the closest thing to the truth you have. On Linux or macOS with smartmontools installed, an NVMe drive can often be checked with: sudo smartctl -a /dev/nvme0 Look for: - Data Units Written - Percentage Used - warnings or critical health indicators On Windows, CrystalDiskInfo exposes Total Host Writes and health information. PowerShell can also show some device health data: Get-PhysicalDisk | Get-StorageReliabilityCounter | Select-Object DeviceId, Wear, Temperature Compare lifetime writes with the TBW rating for your exact drive model. Do not compare against a random SSD number from a search result. <!-- Visual placement: add a small annotated image of a SMART page here. Highlight only Data Units Written or Total Host Writes, Percentage Used, and health status. --> What if I used an older version for months? First, do not panic and do not guess from file size. Check the drive counters. If the drive has low percentage used and reasonable total writes for its age and workload, update and move on. If the drive has unusually high wear, warnings, or a large write count compared with its TBW rating, back up your important data and plan for a replacement before failure forces the schedule. This is a good backup reminder even if your drive looks healthy. SSDs usually fail without much theatre. Workarounds if you cannot update immediately Updating is the right fix. These are temporary ways to reduce persistent write pressure while you arrange that update. Put throwaway logs on ephemeral storage For CI jobs and containers, the cleanest option is usually to run with a temporary home directory or mount the relevant config directory on ephemeral storage. Example for a disposable CI environment: export HOME="$(mktemp -d)" For a container workload, mount a tmpfs at the appropriate Codex state directory if the environment can tolerate losing local diagnostics when the job exits. This is especially useful for build runners that create and destroy their environment anyway. Be careful with /tmp Moving a log file to <code>/tmp</code> is only useful if <code>/tmp</code> is actually memory-backed in your environment. On many Linux systems it may be tmpfs. On macOS, <code>/tmp</code> is not automatically a RAM disk by default. Check the mount before assuming the write load vanished: mount | grep ' /tmp ' Then verify with a real I/O monitor. Never trust a workaround because it sounded plausible in a comment thread. Avoid unsupported database surgery unless you really need it Some community workarounds modify the SQLite log database so inserts are ignored. That can be useful in an emergency, but it is an unsupported change to an internal application file. Future versions may change the schema or assume the database behaves normally. If you choose that route, stop Codex first, make a copy of the database, document what you changed, and remove the workaround once you are on a fixed release. The bigger lesson for tool builders This bug is bigger than one CLI. Measure bytes written, not just disk space used Every local persistence feature should have an I/O budget under realistic usage. Test bytes written per hour, per session, and per day. File size is not a sufficient metric for databases, caches, indexes, or log rotation systems. TRACE must be an intentional decision Verbose logging needs an explicit opt-in and a clear way back out. Shipping it by default turns every user into a debugging environment. Standard controls have to work end to end If your ecosystem has a standard logging override, honour it for every sink. A partial override is dangerous because it gives experienced users false confidence. Structured logs have storage costs SQLite, RocksDB, local search indexes, and caches are all good tools. High-frequency writes have a cost. The design needs backpressure, batching, rate limits, retention rules, and test coverage for pathological verbosity. Privacy and wear are connected The more raw operational detail a tool records, the more it writes and the more sensitive local data it can retain. Logging file paths, raw transport frames, and low-level event payloads should be a deliberate debugging choice, not background noise. The bigger lesson for users There is a simple habit worth keeping: > When you install a new long-running developer tool, look at its write rate once. Two minutes in Activity Monitor, Resource Monitor, or <code>pidstat</code> can catch a surprising amount. Check lifetime SSD writes occasionally. Keep your tools updated. Treat a stable file size as a storage number, not an I/O number. The log file was small. The work it made the SSD do was not. What is confirmed and what is still uncertain The supplied investigation is clear about its limits, and those limits matter: - The 37 TB measurement came from one heavy user's machine. It is a data point, not a universal rate. - Reports disagree about when the highest logging verbosity began. The exact start date is uncertain. - The annualized 640 TB figure is arithmetic based on the reported 21-day sample, not a forecast. - SSD write amplification is real, but the exact physical NAND multiplier was not measured for this incident. - The reported 85% reduction after version 0.142.0 is an early observed result, not a guarantee for every platform or workload. That uncertainty does not weaken the main finding. The correct response is still simple: update, measure the process, and inspect the drive counter. Sources and further reading - GitHub issue #28224 in openai/codex - Official OpenAI Codex documentation - The public reporting and technical analysis supplied for this article, including Notebookcheck, Windows Report, Lilting.ch, yage.ai, and Daniel Vaughan's write-up
I used Bossanova + Codex CLI to read Paddle Live MRR: HTTP 200, API key absent from the MCP inputs/result. Windows/WSL; publisher-run check. Free: 10 fields, account required. Try the read: codex#58492 TINYGEM publishes Bossanova.
Codex Was Judging Files It Never Finished Reading I run a small team of LLM agents that coordinate through markdown files. Several roles run on Codex CLI 0.165.0, which runs their tool calls in code mode. They read task items, review findings, plans, and design documents, and then decide what to do next. On October 24 I checked whether those reads were complete. Of 33 Codex sessions working on one goal that day, 31 had at least one tool output cut short, 129 cuts in all. Among the cut outputs were a reviewer's findings and the work plan the agent was executing. The agents went on to make decisions from what was left. I had seen this once in another project, so I knew what to look for. Seeing it across almost every session of a team that had been running for weeks still shocked me. What the cut looks like When an output is too long, the call doesn't fail. The output starts with a line like Warning: truncated output (original token count: 15382), keeps the start and the end, drops the middle, and leaves a marker: ...stage 4 the same), the stage's units, slots, and candidates…4107 tokens truncated…tained set the policy keeps, ... The model gets all of that back as the result of cat. If it reads past the warning and the marker, the file looks complete, minus the middle of the document, which is usually where the detail is. The first fix Codex has a config value, tool_output_token_limit, that limits tool output. It was at its default of 10,000 tokens, and my largest document is about 39,000. I raised it to 40,000, the point where almost everything still cut was process dumps and test JSON. There is also a per-call budget, max_output_tokens, which the model sets itself. My other project, codex-workflows, handles that with a strict rule: measure files with wc -c before reading them. For a team that reads all day I didn't want an extra step on every read. So I explained how the budgets work and asked the model to set ones that fit what each call returns. How to read was left to the model. Six days later Outputs were still being cut: 11% of tool outputs, against 13% the week before. I replayed one of the cut reads: a director opening a discussion and pulling in its references. Every cut output stopped at about 10,000 tokens, even when the model had asked for 18,000 or 26,000. The cause turned out to be a third limit. In code mode, the model's commands run inside a JavaScript exec cell, and the cell has its own budget for everything it returns, set by a first line like // @exec: {"max_output_tokens": 40000}. Without that line it is 10,000, however much the commands inside asked for. Across 9,538 calls from five days of logs, the model wrote that line 137 times. The ceiling I had raised was never the limit. It is a known issue, openai/codex#33402, open since July. My instruction already mentioned the pragma. I rewrote it twice to explain the two budgets more plainly, the second time saying outright that the smaller one applies. Over four replays, 19 of 24 calls were cut, and the model wrote the pragma zero times. What worked I stopped asking the model to choose. The instruction now gives one fixed value for every call, and the reason for it: Start every `exec` call with the first line `// @exec: {"max_output_tokens": 40000}` and give every `exec_command` `max_output_tokens: 40000`. Output past the smaller of the two budgets loses its middle, marked `…N tokens truncated…`, and you miss whatever detail that middle held; without the first line that budget is 10000. Base a judgment only on text you received, reading again any cut part it depends on. In three replays every one of the 16 calls carried both budgets. Three were still cut, each a batch of eight or more files that added up past 40,000, and each time the model went back and read the missing part of the document in ranges. I had left the budget to the model's judgment because the right value depends on the call. In practice it kept leaving the one budget that mattered at its default, no matter how I explained it. If you run Codex in a loop, count the markers in your session logs. They live under ~/.codex/sessions/, and older ones are compressed as .jsonl.zst, so this reads both: find ~/.codex/sessions -name '*.jsonl*' -exec zstd -dcqf {} + \ | grep -oE '…[0-9]+ tokens truncated…' | wc -l
10 coding agents, one Qwen 3.8 27B, same llama-server: tokens and cache reuse differ more than pass rates Part 2 of my agent test (part 1 was a 4B model) Hardware I used: MacBook Pro M5 Max, 64 GB. Qwen 3.8 27B Q4 on llama.cpp, thinking off. Setup - same model and server for everyone - 5 small coding tasks, each with a little trap - each agent locked in a sandbox: it can only touch its own folder and only talk to the model - auto-approve on, telemetry off, 5 min limit Results |#|Agent|Passed|Median time|Median tokens|Cache reuse|Tried to go online| |:-|:-|:-|:-|:-|:-|:-| |1|Pi|5/5|38 s|9.2k|72%|no| |2|DeepSeek Harness|5/5|60 s|35.3k|83%|no| |3|Codex CLI|5/5|94 s|36.3k|79%|every run| |4|OpenClaw|5/5|106 s|39.0k|72%|unclear| |5|Cline|5/5|152 s|29.6k|79%|every run| |6|OpenCode|4/5|50 s|32.4k|75%|every run| |7|Hermes|4/5|80 s|64.9k|93%|no| |8|Atomic Agent|5/5|56 s|30.4k|86%|no| |9|goose|4/5|98 s|20.3k|76%|every run| |10|Qwen Code|4/5|183 s|107.9k|74%|unclear| Tokens and cache Pi is crazy lean: about 9k tokens per task, the lowest on every single task. Qwen Code was the hungriest at about 108k per task. Atomic Agent is the odd one out in how it works. It was the only one talking to llama.cpp's native endpoint with a grammar that forces the tool calls into shape. The other nine all went through the OpenAI-style API. It's also built to keep its prompt the same from step to step, which is why it reused 86% of the cache (2rd of 10). It stayed offline the whole time and passed 5/5. DeepSeek Harness was the surprise. It’s still an alpha, but it went 5/5, never tried to go online, and had the best cache reuse after Atomic Agent (83%). The trap and the network The log task got three agents. They grepped "ERROR" and got 244 instead of 64, because some normal lines just mention errors. OpenCode, goose and Atomic Agent fell for it. Codex, Cline, goose and OpenCode tried to reach the internet in every run, even with telemetry off. The sandbox blocked it, so I don't know what they were calling. OpenClaw and Qwen Code are "unclear" because they run as plain node and I couldn't tell them apart. llama.cpp notes - Codex needs llama-server's /v1/responses now - Hermes needs at least 64K context - Cline and Qwen Code have usage stats on by default, DeepSeek Harness uploads session logs (per their docs). I turned it all off Which column matters most to you when you pick an agent for a local model like Qwen 3.8 27B: passing, speed, tokens, or staying offline?
oai codex#58115 1. Seatbelt unreadable globs only append (/.*)?$ for /**/<literal> so scoped dir globs (/repo/**/secrets, /repo/*/.aws) block the dir vnode but leave files inside readable 2. OAuth callback_bind_host checks "::1" instead of "[::1]" on Url::host_str(), binding 0.0.0.0
assertion: argon is currently at the frontier, pacing internal-only anthropic/openai models evidence: - sandbox-runtime#790 - codex#58115 macOS Seatbelt bypasses in both labs' own agent sandboxes, found in a quick vuln-hunting pass
AIに自分の宿題を採点させない——反証役に通すと主要指摘の半数に条件が付いた はじめに Claude Code が作ったものを、同じ会話の Claude に「見直して」と頼むのはやめました。代わりに、作った会話の外にいる「別の目」——反証だけを任せた別エージェント、別会社のモデル(Codex)、報告前の点検役——に検査させたところ、主要指摘16件の半数に条件か一部否定が付き、「設計前提の否定」という強い結論が1件取り下げになりました。異種のレビュアー同士の指摘は2回とも重複しませんでした。英語圏では「Don't let Claude grade its own homework」という主張が出ていますが、Zenn で近い記事を探すとデザイン工程や PR ボットの導入記など周辺の話題が中心だったので、本記事では主張ではなく「別の目が何を拾い、何を拾えなかったか」の実測を、検査役に渡す指示文つきで書きます。 ! 個人環境(Windows 11 + Claude Code Desktop/CLI + Codex CLI)での記録です。検査の対象は、個人開発の知見収集パイプライン(Python・SQLite・ローカル LLM による記事評価)と ~/.claude 配下のルール・フックです。数字は2026年7月〜10月の作業記録から取っています。件数はどれも数件〜十数件と小さいので、効果の大きさは参考値として読んでください。報告前の点検フックの効果判定は2026-11-12の予定で、本記事の数字は途中経過です。 この記事で扱うのは次の4つです。 同じ会話の見直しでは足りない理由(外部の研究1本と自分の記録) 4種類の「別の目」と、それぞれが実際に拾ったもの 検査役に渡すもの・渡さないもの 別の目を入れても防げなかったこと 前提・環境 Claude Code(Desktop アプリ+CLI)、Windows 11 作る役: メインの会話(Claude) 検査役: 観点別のレビュー役と反証役(どちらも新しく起動したサブエージェント)、Codex CLI(OpenAI のモデル)、advisor(Claude Code の点検用ツール) 機械チェック: ruff / pytest / coverage / bandit / pip-audit 対象: 知見収集パイプラインと、~/.claude 配下のルール・フック 本記事で「別の目」と言うときは、作った会話の履歴を持たない検査役を指します(advisor だけは例外で、後で理由を書きます)。 サブエージェントの完了報告を信じず、git とテストの出力で確かめる話は前の記事に書きました。ここではそれを前提とし、その先の「誰に、何を渡して検査させるか」に絞ります。 同じ会話の見直しでは足りない理由 最初に外部の根拠です。Huang ほか(ICLR 2024)は、正解を知る外部の判定(oracle)なしにモデルへ「見直して」と促す実験をしました。算数の文章題のベンチマーク GSM8K で、正答率は 95.5 → 91.5 → 89.0(%)と、見直すほど下がりました。外から新しい情報が入らない見直しは、正解を増やす保証がないということです。 自分の運用記録を見ても、同じ会話の見直しで直らない誤りには型がありました。 誤りの型 例 同じ会話の見直し 別の目 知識の中の誤り 計算ミス・事実の思い違い 直ることがある 直る 文脈の欠落 読んでいないファイル・知らない運用の経緯 見つからない 実測や別の資料で見つかる 確証バイアス 自分の仮説を支える証拠だけを集める 残りやすい 推論を渡さなければ弱まる 1行目と2行目の区別は、私の環境のルールファイルにも書いています。要旨は「自己批判が効くのはモデルの知識が原因の誤りだけ。外部の文脈が欠けている誤りは、自己レビューでは検出できない」です。 3行目は、後で出す3波レビューで観点別のレビュー役に実際に起きていたことです。レビュー役は、自分が立てた「ここが問題だ」という仮説を支える証拠を集めがちでした。 そこで、見直しを「もう一度考えさせる」ことに使うのをやめました。代わりに、新しい情報(テスト・実測・別のモデルの視点)が入る形に変えました。それが次の4つの「別の目」です。 4つの「別の目」と独立度 層 受け取るもの 独立度 拾いやすいもの ① 機械チェック コードそのもの 最も高い(判断しない) 構文・既知の脆弱性・テストの失敗 ② 反証役(別の会話の Claude) 結論と根拠の file:line だけ 高い 定義の取り違え・交絡・単位の読み違え ③ 異種モデル(Codex) 差分 高い(作り手とモデルが違う) 仕様と実装の間の経路の欠け ④ 点検役(advisor) 会話の全文 低い(作り手の推論も読む) 報告の言い過ぎ・確かめていない断定 流れにすると次のとおりです。 メインの会話が作る │ ├─ ① 機械チェック(ruff / pytest / coverage / bandit / pip-audit) ├─ ② 観点別のレビュー役(並列)→ 主要な指摘だけ反証役へ ├─ ③ Codex に差分を渡してレビュー(②と並行) │ └─ 報告を書く → ④ 点検役を呼ばずに出すと Stop フックが差し戻す 独立度は「作った側の考えをどれだけ知っているか」の逆です。①は何も知らないので偏りませんが、意味は分かりません。④は全部知っているので深く読めますが、作り手と同じ前提に乗りやすくなります。 以下、②③④の順に、実際に何を拾ったかを出します。①の限界は②の節の中で出てきます。 実測1: 反証役に通すと主要指摘の半数に条件が付いた 2026-09-02 に、知見収集パイプライン全体を12観点でレビューしました。コードは一切変えない、読み取り専用のレビューです。 波 中身 体数・モデル 第1波 機械チェック — 第2波 12観点を分担して並列レビュー 8体(opus×5・sonnet×3) 第3波 主要な指摘を「間違いを探せ」の姿勢で再検証 3体(opus) 最終的な指摘は、P0(今週中)3件・P1(今月中)9件・P2(次スプリント以降)11件でした。 機械チェックは全部合格していた 第1波の結果は pytest 758 passed / 10 skipped / 0 failed でした。行カバレッジ 75.3%・分岐カバレッジ 65.2% と目標には届いていませんが、落ちたテストは0件です。 ところが、レビュー報告書にはこう書くことになりました。「テスト758件合格」が、P0/P1 の指摘を1件も捕まえていない。 P0 の1つは「収集コマンドが内部で失敗しても終了コード0を返す」でした。報告書では「テストの穴が上記の不具合と一致する」とまとめています。機械チェックが言えるのは「テストを書いた範囲で壊れていない」ことだけです。 第3波で条件が付いた8件 第2波の主要指摘を、第3波の反証役3体に渡しました(報告書の要約には15件とありますが、付録の反証レポートを数えると16件です)。判定は3種類です。 CONFIRMED : 反証を試みたが崩せなかった PARTIAL : 一部は正しい。成り立つ条件を書く REFUTED : 誤り 16件の上位判定は、CONFIRMED 8件・PARTIAL 7件・混在1件(4つの小項目のうち3つが CONFIRMED、1つが PARTIAL)でした。指摘を丸ごと REFUTED にしたものはありません。ただし半数の8件に、条件か一部否定が付きました。中身の例です。 第2波の結論 反証で分かったこと 誤りの型 S ランクの人間採用率は A より低い(設計前提の否定) 採否の定義で向きが反転。「採用(approved)」だけで数えると S 18.1% > A 8.8%。A 側の採否の一部は3〜4月だけの運用で、比較に交絡が入っていた 定義依存・交絡 S ランクは全件、スコア補正処理(score_clamp)による昇格 この部分は REFUTED。昇格は別の関数で行われ、ある分野では LLM が直接 S を出していた(679件中672件が0.85超) 因果の取り違え 日次収集が止まっても検知する手段がない ロック競合で無通知のまま終わる点は正しい。ただし「検知手段ゼロ」は REFUTED。別の診断コマンドに48時間の間接検知があった 範囲の言い過ぎ 埋め込み処理が全件エラーでも、警告は発火しえない 終了コード0になる点は正しい。「発火しえない」は言い過ぎ 範囲の言い過ぎ 評価の並列度を設定で上げれば短縮できる 1件18.3秒は一致。ただし「設定を変えるだけで」は未実証で、コードの中に反する根拠があった 未実証の断定 最も危なかったのは1行目です。報告書には「設計前提の否定」という強い結論として上がっていました。反証役は、採否の数え方を変えると向きが逆になることを示しました。正しい結論は「S と A に同じ採否基準が適用された証拠がない」に書き換わり、この指摘は取り下げになりました。 同じレビューの中では、反証役とは別の段でも2つの訂正がありました。1つは静的解析 bandit の「High が6件」です。第1波(機械チェック)の中間報告で、確信度(Confidence)の内訳を深刻度(Severity)と読み違えていました。正しくは Severity High 0 / Medium 12 / Low 10 です。機械の出力でも、読むのが AI なら読み違えます。もう1つは「git リポジトリが肥大化している」という事前の予想で、第2波の担当が自分で測って否定しました(pack 37MiB)。 反証役に渡す指示文 反証役が見つけたのは、定義依存・交絡・範囲の言い過ぎ・未実証の断定でした。どれも、作り手の推論を知らない目のほうが気づきやすい誤りです。私が使っている指示の骨子はこうです。 あなたの仕事は、以下の指摘が「間違っている理由」を探すことです。 承認する理由ではなく、拒否する理由を探してください。 各指摘に CONFIRMED / PARTIAL / REFUTED のどれかを付けます。 迷ったら PARTIAL にして、成り立つ条件を書いてください。 根拠は file:line と、実際に実行したコマンドの出力で示してください。 [指摘1] 結論: <一文> 根拠: <path>:<line> [指摘2] 結論: <一文> 根拠: <path>:<line> 渡さないものも決めています。観点別のレビュー役の推論、経緯、「ここが怪しいと思った理由」は渡しません。反証役に回すのは P0/P1 だけです。 この日のうちに、P0 3件・P1 8件・P2 6件を修正しました。 実測2: Codex と内部レビュー役は指摘が重複しなかった 本体(master)に反映する前に、同じ実装を2つのレビュー役へ並行で渡しています。Codex CLI と、Claude のレビュー用サブエージェント(code-reviewer)です。 1回目は、パイプラインに分野別の設定を入れた実装でした。指摘は9件で、両者の指摘は被らず、きれいに分かれました。 2回目は 2026-07-07、25ファイル・+2,816行の実装です。こちらも重複はゼロでした。内訳は次のとおりです。 レビュー役 HIGH MED LOW Codex 2 4 1 code-reviewer — 3 5 HIGH の2件はどちらも Codex 側でした。どちらか片方だけなら、HIGH か MED の半数を見逃していたことになります。 代表的な指摘を並べると、見ている場所の違いがはっきりします。 指摘者 代表的な指摘 種類 Codex 反映先が設定を無視してハードコードされている(設定を変えると一部だけ分裂する) 設計の整合 Codex 上限を超えて保留にした分を、後で処理する経路が存在しない(「将来処理」が実装上は偽) 経路の欠け Codex 上限が「試行」を数えていて、スキップした分まで枠を消費する 意味の取り違え code-reviewer 設定ファイル生成のエスケープ不備で、ヒントが黙って無効になる 堅牢性 code-reviewer 100件区切りの境界を直接確かめるテストがない テスト品質 code-reviewer 画面表示の集計が誤読されやすい(内数の注記がない) 読みやすさ 傾向をまとめると次のとおりです。 Codex: 仕様と実装の間の経路の欠け、設定と実装の分裂、ゲートの順序、入力の検証、セキュリティの境界 code-reviewer: 実装の内側の堅牢性、テストの質、既存コードの慣習との食い違い、表示 この分担に合わせて、依頼文を書き分けています。 Codex への依頼(仕様と実装の間を見てもらう) この差分について、設定・仕様と実装の食い違い、 「後で処理する」と書いてあるのに経路が無い箇所、 入力の検証漏れを探してください。結論と file:line だけ返してください。 code-reviewer への依頼(実装の内側を見てもらう) この差分について、エラー時の挙動、境界値のテスト不足、 既存コードの慣習との食い違い、表示が誤読される箇所を探してください。 「重複が多そうだから片方でいい」という直感は、2回とも外れました。並行で起動するので、待ち時間は1視点ぶんと変わりません。 実測3: 1つの機能に4回の別の目を入れた 2026-10-26 に、Claude Code の公式の不具合報告から、自分の環境で起きうるものを週次で台帳にする機能を作りました。 レビューは Codex 3回と、別の会話の Claude(Opus)1回です。塞いだ穴は次のとおりです。 塞いだ穴 種類 一時的な障害のときに、台帳の項目を消してしまう経路 データの消失 違う候補に判定結果を当ててしまう 誤った適用 壊れた台帳を受け入れて、そのまま保存してしまう 検証の漏れ 判定役に書き込み・操作の権限が残っていた 権限 git add の失敗を見逃す 失敗の見逃し PowerShell のログ関数の戻り値が、処理結果に混ざる 言語の罠 機械チェックは pytest 1300 passed / 1 skipped、ruff 合格でした。上の穴はどれも、テストが通っている状態で別の目が見つけたものです。 判定役にも書き込み権限を渡さない この機能では、判定役そのものも「検査する側」です。外部の不具合報告を読んで「この環境で起きるか」を判定させます。 判定役(claude -p)は読み取り専用にしました。使えるツールを読み取り系に限り、MCP も遮断しています。判定結果は返答として受け取り、スクリプト側で検証してから保存します。理由は、判定役が読む候補の本文が外部の未検証データだからです。上の表の「判定役に書き込み・操作の権限が残っていた」は、この設計の抜けをレビューが見つけたものです。 どこで止めるか 別の目を何周も回すと、終わりがなくなります。止める基準はルールにしています。 条件 判断 同じ指摘が2回続けて返る 振動。作る側では直せないので、やり方を変えるか人に上げる 3周に達した 上限。最善の成果物に注記をつけて返すか、人に判断を委ねる この機能では、Codex の3回目で残った軽微な指摘を未対応のまま記録に残しました。「判定中のファイル監視が、こちらから読めない場所を『なし』と扱う」という指摘です。判定役も書けない場所なので、実害は小さいと判断しました。 実測4: 報告そのものを点検役に通すフック ここまでの3つは、コードを検査する目でした。4つ目は、報告の言葉を検査する目です。 2026-10-15 から、報告前の点検フック(pushback-preempt-guard)を入れています。ある程度の作業をしたターンで、点検役(advisor)を呼ばずに報告を出して会話を終えようとすると、Stop フックが差し戻します。 advisor は Claude Code の機能で、上位のモデルが会話の全文を読んで助言を返します。点検役に見てもらう問いは次の4つです。 これは最高の案か(根本から変える案や、外部の事例と比べて勝っているか) ユーザーに戻している作業のうち、自分でできるものはないか 「完了」とした部分を、使う人の操作で確かめたか 依頼の奥にある目的に届いているか 2026-10-12〜10-17(約4.9日)の記録です。 項目 値 フックが判定したターン 84 差し戻し 6(通過 78) 通過のうち、自分から点検役を呼んでいた 36 差し戻し後に点検役を呼んだ 6件中6件(各1回) 誤りが直った 2件 明確に不要だった差し戻し 0件 点検にかかった時間 報告1本あたり1〜2分 フック自体の処理時間 中央値0.2秒 誤りが直った2件を、差し戻しの前後で並べます(原文のまま)。 ① 差し戻し前: 「遊びが良くなる速さは、あなたの試遊の回数で決まります。今は約1週間に1回です。」 差し戻し後: 「前の報告で「試遊は週1回」と書いたのは誤りです。記録では18日間で7回遊んでもらっていて、回数は足りています。」 ② 差し戻し前: 「…すでに片付け済みの可能性があります。」 差し戻し後: 「点検で出た指摘2点を確認し直しました。」 (削除済みの根拠コミットを確認し、memory も修正) どちらも「確かめていない断定」です。①は、記録を見れば分かる数字を推測で書いていました。②は「可能性があります」と、確認を読み手に預けていました。作業の中身ではなく、報告の言葉に出る誤りです。 副作用もありました。途中経過の報告(「やることはありません(続行中)。」で終わるもの)を差し戻した例では、その後に約21分・55回のツール呼び出しが続きました。止まらずに作業を続けさせる効果としても働いた、と見ています。ただしこれは推測です。 検査役に渡すもの・渡さないもの 4つの実測から、検査役への渡し方を表にまとめます。 渡さない(偏りを持ち込む) 渡す(独立に評価させる) 「このコードを書いた。理由は…」という推論 成果物・テスト・期待する出力 計画書(評価のときに再添付しない) 最終の差分(git diff) 作り手の思考過程の抜粋 提案・実装の表面の情報 「ここを工夫した」という自己評価 客観的な差分の事実 ほかに決めていることは次のとおりです。 姿勢を指定する: 「承認する理由」ではなく「拒否する理由を探せ」と書く 迷ったときの逃げ道を用意する: 「迷ったら PARTIAL にして条件を書け」。白黒を無理に付けさせない 根拠の形式を決める: 指摘には file:line を必須にする。受け取った側が実物と照合できる 書き込み権限を渡さない: 検査役・判定役は読み取り専用にする 異種モデルには観点を書き分ける: Codex には仕様と実装の間、内部のレビュー役には実装の内側 回す対象を絞る: 反証役に回すのは P0/P1 だけ 1つ目〜3つ目は、指示文の数行で済みます。4つ目は、ツールの許可設定で強制します。 ハマったところ・限界 機械チェックの出力も読み違える。 bandit の「High 6件」は、確信度の列を深刻度と読んだ誤りでした。機械は判断しませんが、出力を読むのが AI なら、そこに誤りが入ります。 点検役(advisor)は独立していない。 公式ドキュメントのとおり、advisor は会話の全文を受け取ります。作り手の推論も読むので、「検査役には成果物だけ渡す」という原則とは独立度が違います。私は advisor を「上位モデルによる二度見」と位置づけ、反証役の代わりには使っていません。 効果の因果は確定していない。 点検フックで直った2件は、フックがなくてもモデルが自分で気づいた可能性を排除できません。効果の判定は 2026-11-12 の予定です。 待ち時間がかかる。 点検は報告1本あたり1〜2分です。約4.9日間で advisor は141回呼ばれ(メインの会話36回・サブエージェント105回)、1回の所要の中央値はメイン86秒・サブエージェント120秒、待ちの合計はメイン58分・サブエージェント223分でした。トークン量は本記事では未計測です。 記録の数字にずれがある。 2026-07-07 の並行レビューは、記録上「計14件」とあります。一方、内訳(Codex 2+4+1、code-reviewer 3+5)を足すと15件です。どちらが正しいかは未確認なので、本文では内訳だけを載せました。3波レビューも、報告書の要約は「主要指摘15件」、付録の反証レポートは16件です。本文は付録の件数で書きました。また、私の作業メモには「反証で4件の結論が覆った」と書いていましたが、付録と突き合わせると、そのうち2件(bandit・git 肥大化)は反証役ではなく別の段での訂正でした。記録をまとめる段階でも、誰が何を見つけたかは混ざります。 分類は自分の判断。 「条件が付いた8件」(小項目に1つでも PARTIAL があれば数える)や「明確に不要な差し戻し0件」は、私が記録を読んで分けたものです。ほかの環境で同じ割合になるかは未計測です。 前の記事の数字は環境で変わった。 前の記事では、サブエージェントの完了報告が途中で切れる問題を書きました。現行の環境で直近14日・83本を数え直すと、途中切れは0件でした。頻度は環境で変わります。ただし「報告ではなく出力で確かめる」習慣は変えていません。 まとめ 同じ会話の「見直して」は、新しい情報を足しません。外部の研究でも、見直すほど正答率が下がりました(95.5 → 91.5 → 89.0) 別の目は、独立度の違う4種類を重ねています。機械チェック・反証役・異種モデル・点検役です 機械チェックの合格は「テストを書いた範囲で壊れていない」だけでした。758件合格でも、P0/P1 は1件も捕まえていませんでした 反証役には結論と file:line だけを渡し、「拒否する理由を探せ」「迷ったら PARTIAL+条件」と頼みます。主要指摘16件の半数(8件)に条件か一部否定が付き、「設計前提の否定」は取り下げになりました Codex と内部のレビュー役は、2回とも指摘が重複しませんでした。観点を書き分けて並行で頼みます 報告の言葉も検査の対象です。点検フックで6件を差し戻し、2件の誤りが直りました(因果は判定待ち) この記事が、AI の成果物を「誰に・何を渡して」検査させるかを決める材料になれば幸いです。 あなたの環境では、AI が作ったものを誰(何)に検査させていますか。同じ会話の見直しで困った例や、別の目で結論が覆った例があれば、コメントで教えてください。件数が集まったら、どの層がどの誤りに効くかの表を更新します。 参考リンク Don't let Claude grade its own homework(Alex Tong, dev.to) I Built an AI Agent With Claude Code, Then Had Claude Review Its Own Work(dev.to) Every Commit in My Repo Gets Reviewed by a Second AI. Here's What Actually Changed.(dev.to) I let a Claude Code agent handle my PR review comments. Only 1 of 6 bot comments was a real bug.(dev.to) How to review AI-generated code (8 real PRs checked)(dev.to) Large Language Models Cannot Self-Correct Reasoning Yet(Huang et al., ICLR 2024) Escalate hard decisions with the advisor tool(Claude Code 公式ドキュメント) Subagents(Claude Code 公式ドキュメント) openai/codex(Codex CLI) 75体の並列エージェントで5.25Mトークンを溶かした——マルチエージェント運用の失敗5類型 Claude Codeのhook、守ってくれない10のケース——15個を実運用して踏んだ制限集
Codex CLI v0.165.0で、会話途中にeffortを変更してもプロンプトキャッシュの無効化を抑えられるreasoning_effort_overrideがデフォルトで有効になったようです。対応モデルは6 Astra、6.1 Sol、6.1 Terraです。19日目の改善がようやく入りましたね! github.com/openai/codex/releases/tag/rust-v0.165.0
Codex Day 19徹底解説:CLI 0.164.0・推論切替のキャッシュ維持・Dots高速化 2026年10月24日(日本時間)、OpenAIの「28日間アップデート」Day 19が発表されました。 今回はフルリセットではなく、Dotsの通話接続高速化・CodexとChatGPT Workの推論レベル変更時のキャッシュ維持・Codex CLIの更新がテーマです。 Codex CLIは0.164.0が正式リリースされ、定型プロンプトの再利用、モデル・権限の操作、企業向けMCP認証、長いセッションの復元、Windowsプロキシ認証、macOSの安全性強化など、発表の短い説明よりも多くの変更が確認できます。 本記事では、公式発表の事実と利用上の考察を区別し、Macでの更新コマンドや開発現場での使い方まで解説します。 調査基準日:2026年10月24日(日本時間)。 Tibo Sottiaux氏の公式X投稿、OpenAI公式GitHubのCLI 0.164.0リリースノート、OpenAI Help Centerを照合しています。筆者が実機に0.164.0をインストールして計測した報告ではありません。Dotsの短縮秒数、キャッシュ削減率、CLIの全環境での挙動は断定しません。 Day 19:Tibo Sottiaux氏の公式X投稿 CLI改善の追加説明:Tibo氏の公式X投稿 一次情報:OpenAI Codex CLI 0.164.0リリースノート 1. Day 19の3つの改善 米国太平洋時間2026年10月23日のDay 19で発表された内容は次のとおりです。 Dotsの通話がより速く接続される Codex / Workで会話途中に推論レベルを変更しても、キャッシュが無効にならない Codex CLIの機能追加・不具合修正 分野 確認できる内容 未公表・注意点 Dots 音声通話の接続高速化を発表 何秒短縮したか、対象端末の全条件 Codex / Work 推論レベル切替によるキャッシュ無効化を解消 すべての入力で100%ヒットする保証ではない Codex CLI 安定版0.164.0をリリース 個々の環境での実機テストは別途必要 利用枠 Day 19の新たなフルリセット発表なし Day 17・18の個別反映状況とは別 Tibo氏は追加投稿で、CLIの利用規模がDevDay以降およそ2倍になったとも報告しています。ただし、「usageが2倍」は、処理速度や使用可能量が2倍という意味ではありません。 発表日とリリース日には時差がある Day 19の告知は日本時間10月24日08:12頃。一方、0.164.0のGitHub安定版リリースは10月23日04:48 UTC(日本時間13:48)です。CLIの配布開始がDay 19の告知より前だった点に注意してください。 2. 推論レベル変更でもキャッシュを維持 用語:推論レベルとキャッシュ 推論レベル(reasoning effort)は、AIが回答前にどの程度考えるかを調整する設定です。単純な調査は低め、複雑な設計や原因調査は高め、といった使い分けができます。高く設定しても正解が保証されるわけではなく、処理時間や利用量に影響することがあります。 プロンプトキャッシュは、過去に処理した共通の入力(指示、コード、会話履歴など)を再利用して、同じ部分の再計算を減らす仕組みです。 Javaのバックエンド開発なら、API仕様、サービス層のコード、テスト結果、AGENTS.md、過去の調査などが繰り返し参照されます。 Before / After 従来 コードと仕様を読み込む ↓ 共通の内容をキャッシュ ↓ 推論レベルを変更 ↓ キャッシュが無効になるケースがあった Day 19改善後 コードと仕様を読み込む ↓ 共通の内容をキャッシュ ↓ 推論レベルを変更 ↓ 変更したことだけを理由にキャッシュを無効化しない 使いどころ: まず軽めの設定でエラーログを分類し、原因が複雑だと判明したら同じ会話内で推論レベルを上げて解析する、という流れです。 ただし、以下は保証されていません。 モデル自体を切り替えても、必ず同じキャッシュが引き継がれる 共通入力が変わっても常にキャッシュヒットする 利用量や費用が何%下がると約束されている APIの全モデルにもまったく同じ条件が適用される コンテキストウィンドウ(モデルが一度に参照できる情報量)が無制限になる Day 16の改善との違い 比較 Day 16 Day 19 主題 時間が空いて過去の会話に戻る 会話途中で推論レベルを変える 目的 古いスレッドのキャッシュ再利用 設定切替によるキャッシュ失効の回避 API APIの12時間キャッシュも別途発表 今回はCodex / Workについての発表 注意点 キャッシュ保持と無限コンテキストは別 推論切替以外の失効要因が消えるわけではない 参考:Day 16の12時間キャッシュ解説 3. Codex CLI 0.164.0の全体像 CLI(Command Line Interface)とはターミナルにコマンドを入力してソフトウェアを操作する方式です。Codex CLIはファイルの調査、修正、テスト、レビューなどに使えます。 OpenAI公式GitHubの安定版リリースノートで確認できる変更を整理します。 分類 主な変更 実務での意味 新機能 /presetsの10スロット 繰り返す作業指示を保存 新機能 /model・/permissionsの引数対応 設定を素早く切り替える 新機能 Kitty / Sixel対応端末で画像プレビュー 画像やスクリーンショットを履歴上で確認 新機能 企業向けMCP認証 許可された社内ツールへの接続を改善 セキュリティ リモート実行時の資格情報マスキング 機密値の意図しない露出を抑える 初期設定 Amazon Bedrockウィザードが標準有効 AWS利用時の導入手順を簡素化 不具合修正 履歴圧縮失敗時の回復 セッションが壊れにくい 不具合修正 圧縮済み履歴の検索・設定復元 長いセッションを再開しやすい 不具合修正 Windowsプロキシ認証 企業ネットワーク内の接続を改善 不具合修正 macOSサンドボックス保護 パスの別名やリンクを悪用した操作を防ぎやすい 運用改善 ログや古いインストールの整理 ディスク使用量を抑える OpenAI公式:Codex CLI 0.164.0 前の安定版0.163.0では/configによる設定画面、応答中の追加指示や/keymapなどが中心でした。0.164.0は反復操作、長時間利用、企業認証、安全性が中心となっています。 0.163.0公式リリースノート 4. /presets:定型指示を10件保存 プリセット(preset)とは、よく使う入力を登録し、呼び出せるようにする仕組みです。 0.164.0では、プロンプトやスラッシュコマンドを10個の番号付きスロットに保存でき、キーボードのメニューから呼び出せます。 スラッシュコマンドとは、Codex CLIの対話画面内で/から始める操作命令です。Macの通常のシェルで実行するコマンドとは違います。 何を登録すると便利? 用途 登録する文章例 バグ調査 「再現条件、原因、影響範囲、テスト方針を切り分けてから修正して」 APIレビュー 「認可漏れ、入力検証、例外処理、後方互換性を優先して確認して」 Javaテスト 「JUnitで正常系、境界値、異常系、並行処理を検討して」 PRレビュー 「指摘を重大度順に並べ、未検証箇所を明記して」 セキュリティ 「秘密値を表示せず、必要最小限の権限で操作して」 これらは登録内容の提案例であり、自動登録されるテンプレートではありません。 利用する際はCodex CLIの対話画面で次を入力し、メニューに従ってスロットを選びます。 /presets AGENTS.mdとの違い: AGENTS.mdはリポジトリ全体で守るべきルール、/presetsは必要な場面で呼び出す反復作業の指示です。ルールは前者、タスクごとのチェックポイントは後者、と分けると整理しやすくなります。 注意: プリセットは定型入力の保存であり、自動実行スケジュールではありません。APIキーやパスワードを登録しないでください。 5. /modelと/permissionsの操作改善 /model: モデル、推論レベル、速度などの設定 /permissions: ファイル・コマンド実行などの権限プロファイルの設定 0.164.0では、それぞれのコマンドに直接引数を渡せるようになり、画面内の設定操作を簡素化できます。 まずはCodexの対話画面内で次を1つずつ入力すると、利用可能な設定を確認できます。 /model /permissions 権限プロファイルとは、Codexがどの範囲まで操作できるかをまとめた設定です。レビューだけなら読み取り中心、実装では必要な書き込みだけ許可し、デプロイなど重要な操作は別途承認する、といった使い分けが考えられます。 強い権限を選べば便利になる一方で、操作可能範囲も広がり得ます。インラインで切り替えられることは、承認やアクセス制御を省略してよいという意味ではありません。 6. 画像プレビューは対応端末に限られる 0.164.0では、Codexが読み込んだ画像・生成した画像を、フルスクリーンの会話履歴(transcript)内でプレビューできるようになりました。 ただし端末がKitty graphics protocolまたはSixelに対応している必要があります。どちらもターミナル画面に画像データを描画する方式です。 たとえば、画面のスクリーンショットを参照しながらUIの不具合を調べる用途に便利です。 macOS標準のターミナルを含め、すべてのターミナルで必ず画像が表示されるわけではありません。画像プレビューが必要な場合は、端末の対応プロトコルと設定を確認しましょう。 7. 企業向けMCP認証が強化 MCP(Model Context Protocol)は、AIが外部のツールやデータへ接続するための共通プロトコルです。社内API、チケット管理、ドキュメント検索などの連携に使われます。 今回のCLIでは、次の認証方法が正式サポートの対象として案内されています。 利用資格のあるCodexアカウントの既存の認可(grant)を用いる方法 MCP接続先に対する専用のサインイン クライアントシークレットが必要なOAuthクライアント OAuthは、ユーザーのパスワード自体をアプリへ直接渡す代わりに、許可された範囲のアクセス権を委譲する仕組みです。 Codex CLI │ ├── Codexアカウントの利用可能な認可 │ または └── MCPサーバー専用サインイン │ ▼ 認証と権限確認 │ ▼ 許可されたMCPサーバー │ ▼ 社内ツール・データ MCPへ接続できるようになっただけで社内のすべての情報を閲覧できるわけではありません。 認可スコープ、サーバー側権限、組織の管理ポリシーが必要です。 公式0.164.0リリース:MCP Authentication 8. セキュリティ強化:資格情報とmacOSのパス 資格情報のマスキング マスキングとは、画面やログへ表示する機密値を*のように伏せることです。 0.164.0では、リモートBashコマンド、Zshセッションスナップショット、カスタム資格情報プロバイダーに関する、公式が対象として挙げた経路で資格情報のマスキングが強化されました。 表示のイメージ(実際の認証情報ではない) API_TOKEN=* これによって漏えいのリスクを下げられますが、すべてのツール出力、任意のログ、外部API送信まで自動的に安全になるという保証ではありません。秘密値をソースコードやプロンプトに直書きしない原則は引き続き重要です。 macOSのサンドボックス強化 サンドボックスは、プログラムがアクセスできるファイルや操作範囲を制限する仕組みです。 公式リリースによると、macOSで大文字・小文字の違うメタデータパスを使った書き込みの保護チェックや、実行ファイルを探す際の置き換え可能なシンボリックリンク(symlink)へのチェックが強化されました。 symlinkは別のファイルやフォルダーを参照するリンクです。検査時と利用時にリンク先が入れ替わるような状況は安全性に関わるため、適切な保護が必要です。 リリースノートにないCVE番号や、特定の攻撃が必ず成功していたという説明は付けません。 9. 長い会話の復元・圧縮の不具合が修正 compaction(コンパクション)は、長い会話履歴を圧縮・要約して、限られたコンテキストで作業を続けるための処理です。 0.164.0では、長いスレッドに関して次が修正されています。 修正対象 修正前に起き得たこと 新しい挙動 履歴の圧縮失敗 不完全な要約が履歴に残る 部分的な要約を残さない バックグラウンド圧縮失敗 異常停止(panic)する 代替処理にフォールバック 圧縮済みセッション 再開候補を見つけられない 圧縮済み履歴も検索 スレッド設定復元 保存済みの設定が全体設定に置き換わる スレッドに保存された設定を復元 また、複数階層のサブコマンドでの-c・--config指定の保持、権限選択が終わるまでのキュー処理の待機、使用しなくなったインストールやログの削除・サイズ制限もリリースに含まれます。 -c / --configは、CLIの設定をコマンドラインから上書きするオプションです。今回、複数のサブコマンド階層で上書きを指定しても失われないよう改善されました。 ここでの復元とは「モデルが無制限に過去のすべてを完全記憶すること」ではありません。 コンテキスト長の制約や履歴要約の限界は残ります。 10. Windows企業プロキシ認証とAmazon Bedrock Windows:Negotiate / NTLM 企業のWindows環境では、外部通信をプロキシ(通信の中継サーバー)経由にすることがあります。 今回、HTTPSとWebSocket通信でプロキシから認証要求を受けた際に、サインインしているWindowsユーザーのNegotiate / NTLM資格情報を使えるよう改善されました。 HTTPS: 暗号化されたWeb通信 WebSocket: 接続を維持して双方向に情報を送受信する技術 NTLM / Negotiate: Windows環境で使われる認証方式 ただし、証明書の追加設定や企業独自のプロキシ方針は別の問題です。すべての社内ネットワークで接続が保証されるわけではありません。 Amazon Bedrock Amazon BedrockはAWS上で基盤モデルを利用するためのマネージドサービスです。 0.164.0ではセットアップウィザードが標準で有効になり、AWSの認証情報が検出された場合、APIキー入力がほかのAWSログイン方法とまとめて表示されるようになりました。 初期設定の改善であって、AWSの利用権限が自動付与されるわけではありません。 11. Macで0.164.0を導入する手順 ここからのコマンドはMacのターミナルで実行します。後半のスラッシュコマンドはCodexの対話画面へ入力する点に注意してください。 手順1:現在のバージョンを確認 codex --version codex:CLIの実行ファイル --version:バージョン情報だけを表示する指定 まだ導入していない場合は、command not foundなどのエラーになることがあります。 手順2:npmから安定版0.164.0を導入 npm install -g @openai/codex@0.164.0 部分 意味 npm Node.jsのパッケージ管理ツール install ソフトウェアのインストール・更新 -g グローバル(CLIをコマンドとして使える領域)への導入 @openai/codex OpenAIのCodex CLIパッケージ @0.164.0 インストールするバージョンを固定する指定 Node.jsとnpmが必要です。Homebrewなど別の方法で既に導入している場合、重複インストールにより違う場所のcodexを呼び出す可能性があるため、導入方法の統一が安全です。 手順3:更新後の確認と起動 codex --version codex 1行目は更新されたバージョンを確認します。2行目は対話モードでCodexを起動します。 起動したCodexの対話画面内では次を試せます。 /presets /model /permissions 対話コマンド 動作 /presets 保存した定型入力やスラッシュコマンドを管理 /model 利用可能なモデル・推論レベル・速度を設定 /permissions 権限プロファイルを確認・選択 これら3行を通常のMacターミナルに直接入力しても使えません。 Codexを起動してから入力します。 更新後のチェック 長い開発スレッドを使っている場合、次の点を確認するとよいでしょう。 過去のセッションが再開できるか 保存したモデル・権限設定が意図通りか MCP接続先への認証が変わっていないか 画像プレビューが必要ならターミナルがKitty / Sixel対応か 本番データに触れる前に、権限が必要最小限になっているか 12. Dotsの通話接続はどう変わった? Dotsは、継続的なタスクや利用者の仕事を支援するAIエージェントです。今回のDay 19ではDotsへの通話接続が以前より速くなったと発表されました。 ここで改善されたのは通話が接続されるまでの体験です。たとえば、通話を開始したあと接続するまでの待ち時間が短くなることが期待されます。 ただし公式の短い投稿には、接続時間が何秒になったか、遅延が何%減ったか、通話音質や回答精度が向上したかは書かれていません。また、Dotsの利用可否はサービスの提供対象やアカウント条件によります。 「通話接続が高速化」と「AIの推論速度が高速化」は異なるものとして扱うのが正確です。 13. Tibo氏の「CLI利用量が2倍」を正しく読む Tibo氏はDay 19の追加投稿で、Codex CLIの利用量がDevDay以降約2倍に増えたと報告しています。 しかし、このusageの集計について、公開された短い投稿だけでは、ユーザー数・呼び出し回数・トークン数などのどれを測ったかを確定できません。 次のように解釈してはいけません。 Codex CLIの処理速度が2倍 コーディングの正確性が2倍 利用枠が2倍 すべてのユーザーの作業時間が半分 ここはあくまでTibo氏による利用規模に関する報告値です。 14. よくある質問 Q. Day 19にもリセットはあった? Day 19に新しいフルリセットの発表はありません。 Day 17・18はリセットの告知がありましたが、今回は改善の告知です。 Q. /presetsで毎朝自動レビューが動く? いいえ。 定型入力を呼び出す機能で、スケジュール実行の機能ではありません。 Q. 推論レベルを上げてもキャッシュが必ず効く? 必ずではありません。 推論レベルを変更したという理由だけでは無効にならないという改善で、入力やモデルが変わるケースまで全て保証していません。 Q. Macで画像プレビューが出ないのは不具合? 端末がKittyまたはSixelに対応していることが必要です。対応していない環境ではプレビューが表示されない場合があります。 Q. MCPサインインで社内のDBに自由に接続できる? できません。 正しいアカウント・権限・接続先設定が別途必要です。 Q. macOSの修正は重大な脆弱性への対応? リリースノートにサンドボックスの保護強化は明記されていますが、Day 19の情報だけから特定のCVEや緊急性を断定できません。 具体的な公開情報がない部分は推測しないことが大切です。 まとめ Day 19は「繰り返す操作を減らし、長い作業を続けやすくする」改善の日でした。 Dots:通話接続の高速化。ただし短縮量の数値は未発表 Codex / Work:会話中の推論レベル変更によってキャッシュが無効にならないよう改善 Codex CLI 0.164.0:/presets、モデル・権限の設定、画像プレビュー、企業向けMCPサインインを追加 セキュリティ:資格情報マスキング、macOSサンドボックスの保護強化 安定性:長いセッションの履歴圧縮・再開、Windowsプロキシ認証の修正 Day 19の追加リセット:発表なし Codexを日常的なバグ調査、JavaのAPI設計、レビューに利用しているなら、プリセットの反復利用・長い会話の再開・推論レベルの切り替えは特に確認したい変更です。ただし、機能がリリースされたことと、自分の環境で期待どおり動いたことは区別してください。 参考資料・一次情報 Tibo Sottiaux氏:Day 19公式X投稿 Tibo Sottiaux氏:Codex CLI改善の追加説明 OpenAI / GitHub:Codex CLI 0.164.0 OpenAI / GitHub:Codex CLI 0.163.0 OpenAI:Codex CLI Changelog OpenAI Help Center:ChatGPT WorkとCodex OpenAI Help Center:Work / Codexの使用量リセット 28日間のアップデートを毎日、公式投稿と一次情報に基づいて解説しています。今後も続報を見逃したくない方はぜひフォローしてください。
Codex Day 14徹底解説:デスクトップで過去のメッセージを編集可能に!Steer・Queue・Forkとの違い OpenAI・Codexの28日間アップデートを毎日調べて発信しています。次の新機能やリセットも追いたい方は、ぜひフォローしてください。 2026年10月18日(米国時間)、OpenAIの「28 days of shipping」で Day 14 のアップデートが発表されました。 今回の発表は、Codexのデスクトップアプリで、同じスレッド内にある以前のメッセージを後から編集できるようになったというものです。 公式の28日間トラッカーでは、次のように記載されています。 Users can now edit previous messages within a thread in the desktop app. 出典:OpenAI Developer Community:28 days of Shipping at OpenAI 短い発表ですが、長期間のコーディング作業では重要な操作性改善です。誤字や条件の指定ミス、前提の修正などを、過去の発言に戻って扱えるようになります。 一方、編集後にAIがどの範囲を再実行するのか、履歴が分岐するのか、既存のファイル変更をどう扱うのかは、公式のDay 14告知だけでは明らかになっていません。 この記事では、公式に確認されたことと未公表事項を厳密に分けたうえで、Steer・Queue・Forkとの違い、使いどころ、安全な確認方法、開発作業での注意点、リセットの有無を解説します。 確認日:2026年10月19日(日本時間)。 この記事は公式の28日間トラッカーとCodex Changelogを参照しています。実機でボタン位置や編集後の履歴分岐を検証した記事ではありません。アプリのバージョンや配信状況によって表示が異なる可能性があります。 Day 14で何が変わった? 項目 公式に確認できる内容 Day 14 米国での発表日 2026年10月18日 対象 デスクトップアプリのCodexスレッド 新しい操作 過去に送信したメッセージの編集 編集後の履歴分岐 詳細未公表 編集後の自動再実行 詳細未公表 既存のコード変更の巻き戻し 保証の記載なし CLI・モバイルの同等機能 Day 14告知では未確認 Day 14の追加フルリセット 公式トラッカーでは確認なし 重要なのは、「送信前の下書きを直せる」ではなく「すでに送信した過去のメッセージを編集できる」という点です。 Codexに長い作業を任せた後、最初の依頼が曖昧だったと気づくことがあります。その場合、以前の依頼を修正できるのは便利ですが、修正の効果が過去の実行結果にどこまで及ぶかは別の問題です。 1. 具体的にどんなとき便利? 仕様の指定漏れに気づいたとき 最初の依頼が次のようなものだったとします。 認証処理を修正して、テストも追加して。 後になって、次の条件を明記する必要があると分かりました。 認証処理を修正して、テストも追加して。 ただし公開APIのレスポンス形式と既存DBスキーマは変えないこと。 Day 14で過去メッセージの編集が可能になったため、以前送った依頼の内容を修正する操作ができるようになります。 ただし、この操作だけで、過去に行った編集やテストが再実行されると確認されたわけではありません。編集後の画面に何が表示されるかを必ず確認してください。 間違ったファイル名・Issue番号を直したいとき 例えば、最初の依頼で Issue #124 と書いたつもりが Issue #142 と送信していた場合です。 過去の文面を修正できることと、誤ったIssueへ実際に加えたコメント・変更が取り消されることは同義ではありません。 GitHubへ書き込む操作がすでに行われた場合、差分やIssue履歴を別途確認しましょう。 長時間のプロンプトを組み直したいとき 大規模リポジトリのレビューでは、 対象ディレクトリ 既存仕様を壊さない制約 テストの実行条件 PR作成とマージの権限 作業対象のブランチ など、長い依頼になる場合があります。編集できると、送った依頼を参照しながら条件を見直しやすくなります。 ただし、保存・確定操作の具体的なUIや、編集による再生成の範囲は公式の短い告知では確認できません。 2. Steer・Queue・Forkとは何が違う? Codexには、過去のメッセージ編集以外にも、会話の進行をコントロールする方法があります。 操作 役割 例 Edit(Day 14) 過去に送ったメッセージの内容を修正する 「対象のIssue番号を直す」 Steer 現在実行中の作業に追加の指示を渡す 「DBスキーマは変えないで」 Queue 現在の作業が終わった後の指示として積む 「完了したらREADMEを更新して」 Fork 会話のある地点から別の作業の流れを作る 「別案を新しい分岐で試す」 これらは似ていますが、目的が違います。 Steer:今進んでいる作業へ方向修正 作業Aが進行中 ├─ Steer:「認証部分の変更を優先して」 └─ その時点の作業へ追加条件を届ける Day 4の改善では、この途中指示への反応を速くする変更が発表されました。 Steerは、過去のメッセージそのものを書き換える操作とは別です。 Queue:今のタスクが終わった後の作業を予約 作業Aを実行中 ↓ Queue:「終わったら差分をレビューして」 ↓ 作業Aが終了 ↓ 次の依頼が処理される Queueは、「過去の発言を修正する」のではなく、次に何をするかを追加する操作です。 Fork:別の流れとして試す Codex Changelogには、2026年3月18日の更新で、最後のターン以外の過去メッセージからも会話をForkできるようになったと記録されています。 Forkは通常、過去の地点から別の文脈・作業の流れを持つための操作です。 一方、Day 14の発表は既存スレッド内の過去メッセージの編集です。 「過去メッセージを編集すると自動的にForkが作成される」など、Day 14の詳細な履歴制御は公開されていません。 この2つを同一視しないようにしましょう。 公式:ChatGPT & Codex Changelog 3. 編集すると過去のコード変更は戻る? 公式発表には、その保証はありません。 これが開発者にとって最も注意したい点です。 Codexはチャットに回答するだけでなく、権限があればコードや外部サービスへ変更を加えます。 ユーザー:「Issue #142を修正」 ↓ Codex:コードを編集 ↓ Codex:テストを実行 ↓ Codex:GitHubにPRを作成 ↓ ユーザー:過去の依頼を「Issue #124」に編集 このとき、過去の文面を直しただけでPRやGitコミットが自動削除される、とは考えないでください。 Codexの操作対象には少なくとも次の種類があります。 対象 例 確認方法 会話履歴 以前の依頼文 スレッド表示 ローカルファイル 編集されたコード Git差分 Gitの履歴 コミット・ブランチ Gitログ GitHubのデータ PR・Issue・レビューコメント GitHub画面 外部サービス API投稿・デプロイなど 各サービスの実行履歴 メッセージを編集する操作と、それらの実行済みの副作用を取り消す操作は別です。 4. 編集後の安全な確認方法 Step 1:まず現在の作業が動いているか確認する 進行中の処理がある場合は、画面がSteerやQueueを受け付けている状態か、過去のメッセージの編集が可能な状態かを確認します。 Day 14公式告知では、実行中でもいつでも編集できるかまでは明記されていません。 Step 2:対象メッセージを確認して編集する 対応するCodexデスクトップアプリで、対象スレッドの以前のメッセージから編集操作を探します。 右クリック・メニューボタン・ショートカットなど、具体的な入口は公式発表だけでは確認できないため断定しません。 実際のアプリに表示される操作に従ってください。 Step 3:編集後の履歴・実行状態を確認する 編集確定後に、次の点を確認してください。 以前のメッセージがどう表示されるか 既存のCodexの回答が残っているか 再生成・再実行・分岐などのUIが現れるか 実行中のタスクが引き続き動いているか 作業ディレクトリの差分が変わったか これは、今回の機能がどのように扱われるかを、安全に実機確認するための観点です。 Step 4:Gitの状態を読み取り専用で確認する Gitリポジトリの作業ディレクトリで、次のコマンドを使えます。 git status --short git diff --stat git log -1 --oneline それぞれの意味は次の通りです。 git status --short:変更済み・追加済み・未追跡ファイルの概要 git diff --stat:未ステージの差分量をファイル別に表示 git log -1 --oneline:直近のコミットを短く表示 これらは読み取り目的のコマンドで、過去の変更を取り消す処理ではありません。 注意:git reset --hardなどの破壊的なコマンドは、機能の挙動を確認するために安易に実行しないでください。 5. 安全な実機検証をするなら 既存の本番リポジトリで試す前に、外部APIへの書き込みがない簡単なテストで挙動を確かめると安全です。 テスト例 最初に以下のような依頼を送ります。 このスレッドではファイルを編集しないでください。 「赤色と青色の2つの候補を比較してください」と回答してください。 Codexの回答が出た後、以前送信したメッセージの編集操作を使えるか確認します。 編集できる場合、色の名前などを修正し、再実行されるのか、過去の回答が残るのか、履歴が分岐するのかを観察します。 このテストではファイル操作や外部書き込みを依頼しないため、本番コードやGitHubの状態へ影響するリスクを抑えられます。 ただし、この検証手順自体はOpenAIがDay 14で示した公式操作マニュアルではなく、利用者が安全に挙動を確認するための提案です。 6. 通常のChatGPTとCodexの違い 通常のChatGPTでも、過去のユーザーメッセージを編集できる機能が以前から存在します。 しかし、Codexはファイル変更、ツール実行、Git操作などの作業を伴うため、編集した文章と既存の作業結果がどう関係するかという問題が増えます。 観点 通常のChatGPT Codex 主な成果物 回答文、資料など コード・差分・テスト・PRなど 過去の文章の編集 既存のチャット操作として提供 Day 14でデスクトップに対応 外部副作用 ツールを使う場合は発生し得る ファイル・Git・外部ツールへの操作が多い 編集後の変更確認 会話・成果物の再確認 会話に加えGit差分・PR・実行ログを確認 「通常のChatGPTと完全に同じ履歴分岐や再生成挙動になった」という発表ではありません。 また、Codex CLIやモバイルのすべてのクライアントにDay 14の機能が同時配信されたことも確認できません。 7. なぜ過去メッセージの編集が重要なのか 今回の変更が役立つ理由は、エージェントへの指示が長く・複雑になりやすいことです。 長文の条件指定を改善できる バックエンド開発の例では、 既存APIとの互換性 Javaやフレームワークのバージョン DBスキーマ変更の可否 テストの実行環境 セキュリティと権限 PR作成・マージまでの作業範囲 といった条件を明確にする必要があります。 後から誤りに気づいたとき、過去メッセージの編集が使えれば誤った文面を修正する導線ができます。 履歴の整合性は別途確認が必要 これまでの会話の文脈を変更できる操作だからこそ、編集後の古いAI回答が同じ文脈のものとして扱われるかが重要です。 公式はその仕様を公開していないため、編集だけに依存して「全ての後続処理が新しい条件に沿っている」と判断しないでください。 8. Day 14の追加リセットはあった? 2026年10月19日時点の公式28日間トラッカーでは、Day 14の追加フルリセットは確認できません。 今回の発表は過去メッセージ編集の機能追加であり、利用可能量の回復ではありません。 ここまでを比較すると、 Day 内容 Day 12 Codex / Workのキャッシュ効率向上 Day 13 利用枠のグローバルリセット Day 14 Codexデスクトップで過去のメッセージを編集可能に となります。 Day 13の自動リセットと、Day 14の編集機能は別の発表です。 9. Day 1〜14の振り返り Day 主要な発表 Day 1 GPT-6 Astra / GPT-6.1 Solの標準速度改善 Day 2 Auto-review無料化、APIティア簡略化、Meetings、Decisions API、追加リセット Day 3 GPT-6 / Intelligent UI、保存可能なリセットの配布 Day 4 GPT-6.1 Sol Ultrafast、途中指示への高速反応 Day 5 Dots強化とComposer predictions Day 6 グローバルリセット Day 7 GPT-6.1 Solの標準コンテキスト272K→500K Day 8 グローバルリセット Day 9 デスクトップの保存状態データを約60%削減見込み Day 10 フルリセット Day 11 モデル容量不足エラーの削減と自動継続改善 Day 12 コンテキスト再利用・キャッシュ効率改善 Day 13 グローバルリセット Day 14 Codexデスクトップで過去のメッセージの編集に対応 よくある質問 Q. Day 14で何ができるようになった? Codexのデスクトップアプリで、同じスレッド内の過去のメッセージを編集できます。 これはOpenAI公式トラッカーで確認できる変更です。 Q. メッセージを編集すると、その時点から再実行される? 公式のDay 14発表だけでは詳細が分かりません。 実際にどのような確認・再生成・履歴の分岐が発生するかは、対応アプリで確認してください。 Q. コードが自動で元に戻る? その保証はありません。 ローカルファイルやPRがすでに変更されている場合、Git差分やGitHubの状態を個別に確認してください。 Q. CLIやiPhoneでも編集できる? Day 14の公式説明はデスクトップアプリを対象としており、CLI・モバイルの対応は未確認です。 Q. 過去メッセージを直すとCodexの利用量を節約できる? 節約率や特別な無料枠は発表されていません。 再実行などで追加作業が発生すれば通常の利用量が関係する可能性があります。 Q. Day 14に新しい保存型リセットや一斉リセットはある? 公式トラッカーにその発表はありません。 まとめ Day 14は、Codexデスクトップで過去に送ったメッセージを編集できるようにする操作性の改善でした。 押さえたいポイントは以下の通りです。 Codexデスクトップの同一スレッド内で過去メッセージの編集が可能 Steer(現在の実行への追加指示)、Queue(次の指示)、Fork(会話分岐)とは異なる 編集後の自動再実行・履歴分岐の詳細は未公表 既存のコード変更やGitHubの操作が自動的に巻き戻る保証はない 実際の操作は、外部書き込みのない小さなテストスレッドで確かめるのが安全 Day 14の追加フルリセットは公式情報で確認できない 長い開発タスクでは、最初に出した指示の条件を見直したくなることがあります。今回の改善は、そうした場面での使い勝手を高めるものです。 ただし編集できることと、既に完了した外部の作業を巻き戻すことは別です。Codexを安全に使うため、編集後の実行内容とGit差分を必ず確認するようにしましょう。 参考・一次情報 OpenAI Developer Community:28 days of Shipping at OpenAI(Day 14) OpenAI公式:ChatGPT & Codex Changelog OpenAI公式:Codex Help / Documentation OpenAI公式:GitHub Codex OpenAI・Codexの28日間アップデートは今後も毎日調査して発信します。Day 15以降の新機能やフルリセットも見逃したくない方は、ぜひフォローしてください。