Measurements · · 2,237 words · 10 min read
How often Claude Code, Codex and Gemini CLI update, measured
Q3 2026 release counts from npm timestamps for Claude Code, Codex and Gemini CLI, two release promises checked against them, and the settings that pin a version.
release cadence versions claude code codex gemini cli
Claude Code published 79 versions to npm between 1 July and 30 September 2026, a release on 64 of the quarter's 92 days. Codex CLI published 38 and Gemini CLI 15. Those counts come from the registry's own publish timestamps, and they are why every article about these tools, this site's included, carries a version number and a date. This piece gives the full count with the script and dataset behind it, checks two published release promises against the record (Claude Code's stable channel and Gemini CLI's weekly schedule), and collects the settings each tool documents for slowing updates down or pinning a version.
What ran: one standard-library Python script (Python 3.13.12, Windows) on 5 October 2026, against registry, repository and GitHub responses fetched between 11:09 and 11:20 UTC that day and saved. The measurements did not install or run any of the three tools, none of the update settings below was tried, and no changelog was read, so the numbers say how often each tool changed, not what changed.
The count
A release here is a plain x.y.z version on npm, the kind npm install -g resolves through the latest tag. Pre-release builds are counted separately. Codex publishes each native binary as a version of the same package (0.160.0-linux-x64 and five siblings for every build); those are packaging, and they are left out of everything.
| Q3 2026, UTC | Claude Code | Codex CLI | Gemini CLI |
|---|---|---|---|
| Releases | 79 | 38 | 15 |
| Days with a release, of 92 | 64 | 30 | 15 |
| Median gap between releases | 0.96 days | 1.64 days | 6.09 days |
| Longest gap | 9.96 days | 11.86 days | 8.14 days |
| First and last release | 2.1.198, 2.1.286 | 0.142.5, 0.159.3 | 0.50.0, 0.62.0 |
| Pre-release builds | none on npm | 247 alpha | 18 preview, 81 nightly |
The three numbering schemes say different things. Claude Code stayed on 2.1 all quarter and used the third number as a counter: the 89 numbers from 2.1.198 to 2.1.286 produced 79 releases, and the other 10 never appeared in the registry at all. Codex moved its middle number 17 times and shipped 21 patch releases on top, often in bursts: 0.144.0 to 0.144.6 in nine days in July, 0.153.0 to 0.153.4 inside two days in September. Gemini CLI's 15 are 12 weekly x.y.0 releases plus three patches, which is the pattern its release document describes.
No tool paused for as long as 12 days. Claude Code went quiet between 2.1.220 on 24 July and 2.1.221 on 3 August, Codex between 0.147.0 on 7 August and 0.148.0 on 18 August, and Gemini CLI's longest gap was a week that ran a day long, 0.60.0 on 15 September to 0.61.0 on 24 September.
Checking the count against other records
The npm registry is not the only record of a release, so we compared it with the others before relying on it. For Codex and Gemini CLI, every one of the quarter's releases has a GitHub release; the GitHub copy appeared a median of 4.3 minutes before the npm publish for Codex and 0.6 minutes after it for Gemini CLI. Claude Code's GitHub release pages followed npm by a median of 118.5 minutes, and three versions, 2.1.213, 2.1.242 and 2.1.243, have none.
Anthropic also runs apt and RPM repositories for each channel, and its setup page says the latest one "serves every release as soon as it ships". 77 of the 79 npm versions are in the latest-channel RPM repository; the two that are not, 2.1.213 and 2.1.242, are two of the three without a GitHub release. So Claude Code's quarter was 76, 77 or 79 releases depending on which record defines a release. None of those choices changes the picture, and the rest of this piece uses npm's 79.
Claude Code's stable channel, measured
The setup page offers two release channels through the autoUpdatesChannel setting: "latest", the default, to "receive new features as soon as they're released", and "stable", to "use a version that is typically about one week old, skipping releases with major regressions". It also says of the apt, dnf and apk repositories: "Each repository offers two channels: stable serves a version that is typically about one week old, skipping releases with major regressions, and latest serves every release as soon as it ships." That makes the stable RPM repository a record of the channel. Its index lists every version it holds, each with a recorded file time, and we used that file time as the moment a version was promoted.
What the record shows for the quarter:
- 28 versions reached stable. A stable-channel install had 28 versions to move through, against 79 published to npm.
- The median age at promotion was 8.09 days, and 20 of the 28 versions were between 6 and 10 days old when promoted.
- Of the 79 releases published in the quarter, 23 had reached stable by the index's revision on 30 September.
- The youngest promotion was 2.1.285: published 29 September at 17:32 UTC, in the stable repository at 19:10 UTC the next day, 1.07 days later.
- The oldest were 2.1.231 at 13.65 days and 2.1.236 at 13.16 days, both in late August.
"Typically about one week old" holds as a description: a typical promotion took a little over eight days, and promotions came about twice a week. "Skipping releases" holds too, but the record cannot show the reason for any skip. With a release almost every day and a promotion every three or four, most versions are skipped by arithmetic, and a version missing from stable is not evidence that it had a regression.
Homebrew gives an independent check, because the setup page says the claude-code cask "tracks the stable release channel". Its commit history moved through exactly the same 28 versions, and 25 of those moves came between 0 and 6 hours after the RPM file time. The exceptions are 2.1.228, where the cask moved six minutes before the file time, and 2.1.231 and 2.1.236, where it moved about five days earlier: 21 August against 27 August, and 28 August against 1 September. The two records disagree on those dates and we have no third record to settle it, so both are given. By the cask's dates those two versions were 8.55 and 8.37 days old at promotion, which leaves the median at 8.09 days and puts 22 of 28 between 6 and 10 days. The disagreement does move the longest wait without a promotion, which followed 2.1.236: 13.90 days by the RPM record, during which 13 releases went to npm, or 18.70 days by the cask's, with 17.
Gemini CLI's weekly train, measured
Gemini CLI's release document at v0.62.0 says "Each Tuesday ~20:00 UTC new Stable and Preview releases will be cut", that "Our weekly releases will be minor version increments", and that "After 1 week the most recent preview channel is promoted to stable channel". The README adds that nightly builds "will be published each day at UTC 00:00".
The registry agrees on the shape and differs on the clock:
- Weekly. 13 minor versions, 0.50 through 0.62, first reached stable in a quarter of 13 weeks and a day.
- Tuesday. 7 of the 13 landed on a Tuesday, all between 18:36 and 21:45 UTC. Three came on a Wednesday and three on a Thursday, two of those within two hours after midnight UTC. From 25 August on, five of six were Tuesdays; 0.61.0 slipped to 00:04 UTC on Thursday 24 September.
- A week on preview. For 10 of the 11 minor versions with a
-preview.0build, stable followed 5.90 to 8.17 days later; 0.50.0 took 13.88 days. 0.55 and 0.56 have no-preview.0in the registry, and 0.55 reached stable as 0.55.1: the numbers 0.54.1 to 0.54.3 and 0.55.0 never appeared in the registry. - Nightly. 81 nightly builds on 81 of the 92 days, 76 of them stamped between 01:00 and 01:59 UTC rather than at midnight.
For anyone planning around it, the schedule is a reliable week and a less reliable day.
Codex: no schedule in the pages we read
The Codex README at rust-v0.160.0, its install page at the same tag, and the configuration and developer-command references we read state no release schedule, so there is nothing to test. The record shows 38 releases across 18 minor versions, 17 of them x.y.0 and 21 patches, with 247 alpha builds published alongside.
What a version stamp is worth
The monorepo post of 17 September was read against Claude Code v2.1.274, Codex rust-v0.154.0 and Gemini CLI v0.60.0. By 5 October those were 14, 12 and 2 releases old, with 2.1.289, 0.160.0 and 0.62.0 the newest. The count says nothing about which of that post's claims changed; that takes the changelogs, which this piece did not read. It does say how fast the question arrives. At Claude Code's median gap, a version stamp is one release old within a day.
Slowing down or pinning each tool
The settings below are quoted from each tool's documentation as read on 5 October 2026. The two example files and the install line combine those documented settings, and none of them was run for this piece.
Claude Code documents the most controls, all on the setup page:
- Channel.
"autoUpdatesChannel": "stable"in settings.json, or/config, then Auto-update channel. - Floor. With
minimumVersion, "Background auto-updates andclaude updaterefuse to install any version below this value", so moving to stable does not downgrade an install that is already ahead. - Off.
DISABLE_AUTOUPDATERset to"1"in the settingsenvblock "only stops the background check;claude updateandclaude installstill work".DISABLE_UPDATESblocks every update path. - Range. The managed settings
requiredMinimumVersionandrequiredMaximumVersionmake Claude Code "refuse to start outside a version range". - Exact version. The native installer takes a version number; the page's own example is
curl -fsSL https://claude.ai/install.sh | bash -s 2.1.89. Homebrew picks the channel by cask name,claude-codefor stable andclaude-code@latestfor latest, and "Homebrew, WinGet, apt, dnf, and apk installations do not auto-update by default".
A settings file that stops background updates and sends any manual claude update to the stable channel, never below the version promoted on 30 September:
{
"autoUpdatesChannel": "stable",
"minimumVersion": "2.1.285",
"env": { "DISABLE_AUTOUPDATER": "1" }
}
The npm registry also carries a stable dist-tag for Claude Code, and on 5 October it pointed at 2.1.285, the same version as the stable repository. The setup page's npm instructions name only @latest.
Codex documents one setting, one command and a pinning route for repositories. In config.toml, check_for_update_on_startup = false; the reference says "set to false only when updates are centrally managed", and an administrator's requirements.toml can "Enforce whether Codex checks for updates when it starts". The codex update command will "Check for and apply a Codex CLI update when the installed release supports self-update". For a repository, the install page points to DotSlash: each GitHub release includes a DotSlash file named codex, and "Using a DotSlash file makes it possible to make a lightweight commit to source control to ensure all contributors use the same version of an executable, regardless of what platform they use for development."
Gemini CLI picks its channel by npm tag, latest, preview or nightly, and documents two settings under general, both defaulting to true: enableAutoUpdate ("Enable automatic updates") and enableAutoUpdateNotification ("Enable update notification prompts"). The reference says settings go "within their corresponding top-level category object", so:
{
"general": {
"enableAutoUpdate": false,
"enableAutoUpdateNotification": false
}
}
In CI, the plainest pin is an exact version in the install line. This is the command we would use, with Claude Code's stable-tagged version and the other two tools' latest versions as of 5 October; it was not run:
npm install -g @anthropic-ai/claude-code@2.1.285 @openai/codex@0.160.0 @google/gemini-cli@0.62.0
The headless CI post covers the flags for those jobs. A pinned agent has the same property as the pinned MCP server in the security post: what runs on Monday is what ran on Friday, and moving it is a reviewed change.
Run it yourself
The listing in the Code and data box at the end is standard-library Python. Without --cache it fetches live data; with it, it reads saved responses from that folder and saves any it has to fetch. This is the run behind every number above, verbatim:
$ python coding-agent-release-cadence.py --cache saved --after claude-code=2.1.274 --after codex=0.154.0 --after gemini-cli=0.60.0 --crosscheck --csv coding-agent-release-cadence.csv
Window 2026-07-01 to 2026-09-30 UTC (92 days); a release is a plain x.y.z version on npm
tool releases days median gap longest gap first -> last
claude-code 79 64 0.96 d 9.96 d 2.1.198 -> 2.1.286
codex 38 30 1.64 d 11.86 d 0.142.5 -> 0.159.3
gemini-cli 15 15 6.09 d 8.14 d 0.50.0 -> 0.62.0
claude-code: longest gap 2.1.220 -> 2.1.221; other builds in window: none; dist-tags today: latest 2.1.289, stable 2.1.285
codex: longest gap 0.147.0 -> 0.148.0; other builds in window: alpha 247, platform build 1710; dist-tags today: latest 0.160.0, alpha 0.162.0-alpha.14
gemini-cli: longest gap 0.60.0 -> 0.61.0; other builds in window: nightly 81, preview 18; dist-tags today: latest 0.62.0, preview 0.63.0-preview.0, nightly 0.64.0-nightly.20261005.gfb972b2f8
Claude Code stable channel (stable RPM index dated 2026-09-30 19:10 UTC)
promotions in window: 28; age at promotion: median 8.09 d, min 1.07 d, max 13.65 d, 20 of 28 between 6 and 10 d
window releases that reached stable: 23 of 79; longest wait between promotions 13.90 d (2.1.236 -> 2.1.267)
2.1.195 released 26 Jun 18:16, promoted 06 Jul 22:51, 10.19 d
2.1.201 released 03 Jul 20:52, promoted 14 Jul 01:11, 10.18 d
2.1.206 released 09 Jul 17:54, promoted 20 Jul 22:14, 11.18 d
2.1.220 released 24 Jul 23:11, promoted 04 Aug 00:14, 10.04 d
2.1.231 released 13 Aug 08:27, promoted 27 Aug 00:09, 13.65 d
2.1.236 released 19 Aug 18:45, promoted 01 Sep 22:41, 13.16 d
2.1.277 released 18 Sep 16:22, promoted 28 Sep 18:03, 10.07 d
2.1.285 released 29 Sep 17:32, promoted 30 Sep 19:10, 1.07 d
Gemini CLI: 13 minor lines first reached stable in window, 7 of them on a Tuesday (UTC)
0.50.0 Wed 08 Jul 18:31 13.88 d after 0.50.0-preview.0
0.51.0 Thu 16 Jul 17:14 7.98 d after 0.51.0-preview.0
0.52.0 Wed 22 Jul 20:50 6.16 d after 0.52.0-preview.0
0.53.0 Tue 28 Jul 21:45 6.07 d after 0.53.0-preview.0
0.54.0 Thu 06 Aug 01:35 8.17 d after 0.54.0-preview.0
0.55.1 Tue 11 Aug 21:14 no -preview.0 published
0.56.0 Wed 19 Aug 19:29 no -preview.0 published
0.57.0 Tue 25 Aug 18:36 5.97 d after 0.57.0-preview.0
0.58.0 Tue 01 Sep 20:50 7.10 d after 0.58.0-preview.0
0.59.0 Tue 08 Sep 21:19 7.04 d after 0.59.0-preview.0
0.60.0 Tue 15 Sep 20:36 6.98 d after 0.60.0-preview.0
0.61.0 Thu 24 Sep 00:04 8.15 d after 0.61.0-preview.0
0.62.0 Tue 29 Sep 21:25 5.90 d after 0.62.0-preview.0
nightly builds: 81 on 81 of 92 days; publish hour UTC: 00h 2, 01h 76, 02h 2, 03h 1
claude-code after 2.1.274 (published 2026-09-16): 14 releases, newest 2.1.289
codex after 0.154.0 (published 2026-09-09): 12 releases, newest 0.160.0
gemini-cli after 0.60.0 (published 2026-09-15): 2 releases, newest 0.62.0
Cross-checks
claude-code: 77 of 79 releases are in the latest-channel RPM repository (absent: 2.1.213, 2.1.242)
claude-code: 76 of 79 releases have a GitHub release (absent: 2.1.213, 2.1.242, 2.1.243); GitHub minus npm, median 118.5 min
codex: 38 of 38 releases have a GitHub release (absent: none); GitHub minus npm, median -4.3 min
gemini-cli: 15 of 15 releases have a GitHub release (absent: none); GitHub minus npm, median 0.6 min
Homebrew claude-code cask: moved through 28 of the 28 promoted versions (same set: True); 25 moves came 0 to 6 h after the RPM file time
2.1.228 cask 19 Aug 21:48, RPM file 19 Aug 21:54 (-0.1 h); age by the cask 8.17 d
2.1.231 cask 21 Aug 21:45, RPM file 27 Aug 00:09 (-122.4 h); age by the cask 8.55 d
2.1.236 cask 28 Aug 03:42, RPM file 01 Sep 22:41 (-115.0 h); age by the cask 8.37 d
wrote coding-agent-release-cadence.csv
Change --start and --end to count another window. A live run will show newer dist-tags and later releases than the ones above, and the quarter's counts stay put only as long as nobody unpublishes a version or prunes the repositories. The dataset is the record as read on 5 October:
_README coding-agent-release-cadence.csv (515 rows)
tool claude-code | codex | gemini-cli
version the version string as published on npm
kind release | alpha | preview | nightly (Codex platform builds omitted)
npm_published_utc publish time from the registry's time map
github_release_utc GitHub release publish time; blank where there is none
stable_repo_utc Claude Code only: file time in the stable RPM index; blank if never promoted
homebrew_stable_cask_utc Claude Code only: first commit moving Homebrew's claude-code cask to it
The rows cover every non-platform version published from 1 July to the morning of 5 October, plus five Claude Code versions published in June and promoted in July, so the 28 promotions can be recounted from the file alone.
Limits
One quarter of three fast-moving projects is a snapshot, not a trend. A version count treats a one-line fix and a feature release alike. The stable-channel times are repository file times, which disagree with Homebrew's by about five days for two of the 28 promotions. And the npm timestamp is when a version reached npm; other channels add their own delay. The two we measured: Homebrew's stable cask moved 0 to 6 hours after the RPM file time for 25 of 28 versions, and Claude Code's GitHub releases followed npm by a median of about two hours.
The numbers argue for choosing the lane on purpose. A latest-channel Claude Code install had 79 versions to move through last quarter, a stable-channel install 28, and a pinned install moved only when someone decided it should.
Code and data
- coding-agent-release-cadence.py — the complete listing used in this article.
- coding-agent-release-cadence.csv — the data behind the numbers here.
Sources
- npm registry, "@anthropic-ai/claude-code" package metadata with per-version publish times (read 2026-10-05)
- npm registry, "@openai/codex" package metadata (read 2026-10-05)
- npm registry, "@google/gemini-cli" package metadata (read 2026-10-05)
- Anthropic, Claude Code stable-channel RPM repository index (revision of 2026-09-30, read 2026-10-05)
- Anthropic, Claude Code latest-channel RPM repository index (revision of 2026-10-03, read 2026-10-05)
- Anthropic, "Advanced setup" (Claude Code docs, read 2026-10-05)
- google-gemini/gemini-cli, release process document at tag v0.62.0 (read 2026-10-05)
- google-gemini/gemini-cli, README "Release Channels" at tag v0.62.0 (read 2026-10-05)
- google-gemini/gemini-cli, installation page at tag v0.62.0 (read 2026-10-05)
- google-gemini/gemini-cli, configuration reference at tag v0.62.0 (read 2026-10-05)
- OpenAI, Codex "Configuration Reference" (read 2026-10-05)
- OpenAI, Codex "Developer commands" (read 2026-10-05)
- openai/codex, "Installing & building" at tag rust-v0.160.0 (read 2026-10-05)
- Homebrew, commit history of the claude-code cask (read 2026-10-05)
- anthropics/claude-code, GitHub releases (read 2026-10-05)
- openai/codex, GitHub releases (read 2026-10-05)
- google-gemini/gemini-cli, GitHub releases (read 2026-10-05)