Skip to content

Releases: epsalmond/codex

local-features snapshot 0.154.0

Pre-release

Choose a tag to compare

@github-actions github-actions released this 17 Sep 03:58
0f23268

Install as codex-shake beside your official codex (pick one):

Homebrew (macOS Apple Silicon, or Linux x86_64):

brew install epsalmond/codex-shake/codex-shake

Debian/Ubuntu (x86_64), download and install the .deb from this release:

curl -fsSL -o codex-shake_0.154.0+r20260917020207.00000000000028b70f23268b5dc8_amd64.deb \
  https://github.com/epsalmond/codex/releases/download/local-features-v0.154.0-main-r20260917020207.00000000000028b70f23268b5dc8/codex-shake_0.154.0+r20260917020207.00000000000028b70f23268b5dc8_amd64.deb
sudo dpkg -i codex-shake_0.154.0+r20260917020207.00000000000028b70f23268b5dc8_amd64.deb

curl | sh (any supported platform, installs to ~/.local):

curl -fsSL https://raw.githubusercontent.com/epsalmond/codex/eric/local-features/install.sh | sh

Run codex-shake. To update: codex-shake-update (curl|sh installs),
brew upgrade epsalmond/codex-shake/codex-shake (Homebrew), or reinstall the
.deb for the latest release (Debian/Ubuntu).

Binaries are stripped; debug symbols are attached as
codex-symbols-<target>.tar.gz (.debug files for Linux, .dSYM
bundles for macOS) if you need to symbolicate a crash.

Estimate sessions active in the past 7 days (offline; Python 3): codex-shake-estimate --since 168.

Release provenance

  • Source: validated branch merge (fork snapshot)
  • Workspace version: 0.154.0
  • Fork release commit: 0f23268b5dc880d380c3b7cafc18663150476473
  • Integrated upstream main commit: 5b1d6560181680f95cde95c14ed042acc02248ed
  • Exact stable lineage: rust-v0.154.0

Codex Shake keeps long coding sessions smaller by removing older tool output
from active context. In our replay benchmark, shaken runs used 2.3–2.7× fewer
Codex credits.

Surviving conversation content stays byte-identical, and removed content remains
available in local artifact files. Auto-shake runs by default; /shake lets you
preview and trigger it yourself.

The published replay reduced active history from 536k to 176k tokens. Its
measured results were:

arm active history standard Codex credits end state
full history, cold cache 536k 840 12/12
shaken, cold cache 176k 312 11/12
full history, warm cache 536k 809 12/12
shaken, warm cache 176k 358 12/12

This was n=1 per cell, with builds stubbed; the one cold shaken run missed one
structural check. An earlier replay projected 4.8x lower API cost using the API
rate card ($59.46/$12.37); it used 2.42× fewer Codex credits.

No artifact recovery reads were observed in the nine runs covered by the
recovery report. Cache behavior and savings vary by workload; see the
benchmark methodology.

The weekly projection estimated 2.04B fewer input tokens out of 12.37B across
182 historical threads. It is a projection from rollouts, not a plan-quota
measurement.

Based on upstream rust-v0.154.0 (exact stable lineage; the included
upstream-main SHA is recorded separately above). Apple Silicon and x86_64
Linux (glibc >= 2.35), unsigned, unstripped.

Changes since rust-v0.154.0:

Compare the first-parent source history

First-parent commits since rust-v0.154.0:

  • 13b0865 feat(tui): add statusline reset and response clock
  • 6d3736d feat(codex): port surgical context-reduction shake from oh-my-pi
  • d081a21 fix: restore shake protocol fixture generation
  • 329fca7 feat: add per-thread artifact storage and lifecycle
  • 2591b66 feat: expose bounded artifact reads to persistent threads
  • 17fee79 feat: make shake elision recoverable
  • f878dac feat: preview shake context reduction before confirmation
  • 9212350 feat: show estimated cost in shake preview
  • ac8fbf5 Add install.sh for local-features test builds
  • 16950ff Fix shake compaction metadata initialization
  • b27a53a Fix shake preview billing provider compatibility
  • 95b4be8 feat(shake): automatic shake at the pre-sampling point
  • 06cd8bb feat(shake): auto_shake.threshold as off | percent | inherit, Astra on at 40%
  • 220b5e2 feat(tui): /shake help lists the modes
  • 07cc65c fix(shake): protect a larger tail for auto-shake, add absolute min-savings floor
  • cbd951a test(shake): assert token usage drops by the shake's freed estimate
  • b93443c fix(shake): protect skill and recovery tool outputs from elision (management-plane#986)
  • dd8cbb9 fix(shake): bound artifact recovery reads to context headroom (management-plane#990)
  • d0cf306 fix(shake): carry the artifact's absolute file path in recovery placeholders
  • 59fe145 feat(shake): escalate to an aggressive pass before falling back to compaction
  • ee79c53 refactor(shake): drop read_artifact; placeholders name the artifact file
  • 2856022 feat(shake): absolute token thresholds; gpt-5.6 defaults to 160k
  • f1bd7d0 feat(shake): cold-resume trigger with a per-provider prompt-cache TTL
  • 6f10f00 chore: drop unrelated Cargo.lock version-stamp churn
  • 10e9522 feat(shake): seed cold-resume clock from resumed-thread last activity
  • 9561fb4 docs(shake-bench): add scrubbed shake retention benchmark for public release
  • cc40edf docs(shake-bench): add RESULTS.md headline page
  • b72eb7c docs: add RELEASE_NOTES.md as the human-written top of each release
  • 96a8f93 docs: write the release note
  • d0ea1fa install: name the binary codex-shake
  • f2a1ec1 Add CI workflow to build and cut fork releases on tag push
  • ec4c244 Add scheduled workflow to poll upstream and dispatch on a new tag
  • 782ed89 fork(tui): embed the fork release tag and check its own release feed
  • 5b4f662 fork(install-context,tui): detect codex-shake installs and update prompt
  • ad6c0d9 cli: make codex update check-then-confirm, add --yes
  • 6d7b3b8 fork-upstream-poll: signal via GitHub Deployment, not repository_dispatch
  • 1d7e5d8 fork-release: set up Python 3.12 before setup-rusty-v8
  • bc8f7d7 fork-upstream-poll: fix gh api call for deployment creation
  • a824108 Merge pull request #1 from epsalmond/agent/shake-launcher-updates
  • 6402010 Merge pull request #2 from epsalmond/agent/shake-release-polish
  • 0b44891 Merge pull request #4 from epsalmond/agent/shake-main-sync-20260914
  • 63d86f3 Merge pull request #5 from epsalmond/agent/shake-update-order-20260914
  • 14c91a9 Merge pull request #6 from epsalmond/agent/shake-release-automation-20260914
  • ec76d3d Merge pull request #7 from epsalmond/agent/shake-release-tools-20260914
  • 6debb3d Merge pull request #9 from epsalmond/agent/shake-brew-deb-packaging
  • 71b4eaa Merge pull request #10 from epsalmond/agent/shake-release-v8-cache
  • 00e06bc Merge pull request #11 from epsalmond/agent/shake-cli-update-option
  • aefe388 Merge pull request #12 from epsalmond/agent/shake-deb-output-parse
  • 0f23268 Merge pull request #13 from epsalmond/agent/shake-strip-symbols

local-features snapshot 0.154.0

Pre-release

Choose a tag to compare

@github-actions github-actions released this 17 Sep 00:18
aefe388

Install as codex-shake beside your official codex (pick one):

Homebrew (macOS Apple Silicon, or Linux x86_64):

brew install epsalmond/codex-shake/codex-shake

Debian/Ubuntu (x86_64), download and install the .deb from this release:

curl -fsSL -o codex-shake_0.154.0+r20260916222533.00000000000028b6aefe388e35fe_amd64.deb \
  https://github.com/epsalmond/codex/releases/download/local-features-v0.154.0-main-r20260916222533.00000000000028b6aefe388e35fe/codex-shake_0.154.0+r20260916222533.00000000000028b6aefe388e35fe_amd64.deb
sudo dpkg -i codex-shake_0.154.0+r20260916222533.00000000000028b6aefe388e35fe_amd64.deb

curl | sh (any supported platform, installs to ~/.local):

curl -fsSL https://raw.githubusercontent.com/epsalmond/codex/eric/local-features/install.sh | sh

Run codex-shake. To update: codex-shake-update (curl|sh installs),
brew upgrade epsalmond/codex-shake/codex-shake (Homebrew), or reinstall the
.deb for the latest release (Debian/Ubuntu).
Estimate sessions active in the past 7 days (offline; Python 3): codex-shake-estimate --since 168.

Release provenance

  • Source: validated branch merge (fork snapshot)
  • Workspace version: 0.154.0
  • Fork release commit: aefe388e35fec9b34a903f1f52a53772d19bfcf3
  • Integrated upstream main commit: 5b1d6560181680f95cde95c14ed042acc02248ed
  • Exact stable lineage: rust-v0.154.0

Codex Shake keeps long coding sessions smaller by removing older tool output
from active context. In our replay benchmark, shaken runs used 2.3–2.7× fewer
Codex credits.

Surviving conversation content stays byte-identical, and removed content remains
available in local artifact files. Auto-shake runs by default; /shake lets you
preview and trigger it yourself.

The published replay reduced active history from 536k to 176k tokens. Its
measured results were:

arm active history standard Codex credits end state
full history, cold cache 536k 840 12/12
shaken, cold cache 176k 312 11/12
full history, warm cache 536k 809 12/12
shaken, warm cache 176k 358 12/12

This was n=1 per cell, with builds stubbed; the one cold shaken run missed one
structural check. An earlier replay projected 4.8x lower API cost using the API
rate card ($59.46/$12.37); it used 2.42× fewer Codex credits.

No artifact recovery reads were observed in the nine runs covered by the
recovery report. Cache behavior and savings vary by workload; see the
benchmark methodology.

The weekly projection estimated 2.04B fewer input tokens out of 12.37B across
182 historical threads. It is a projection from rollouts, not a plan-quota
measurement.

Based on upstream rust-v0.154.0 (exact stable lineage; the included
upstream-main SHA is recorded separately above). Apple Silicon and x86_64
Linux (glibc >= 2.35), unsigned, unstripped.

Changes since rust-v0.154.0:

Compare the first-parent source history

First-parent commits since rust-v0.154.0:

  • 13b0865 feat(tui): add statusline reset and response clock
  • 6d3736d feat(codex): port surgical context-reduction shake from oh-my-pi
  • d081a21 fix: restore shake protocol fixture generation
  • 329fca7 feat: add per-thread artifact storage and lifecycle
  • 2591b66 feat: expose bounded artifact reads to persistent threads
  • 17fee79 feat: make shake elision recoverable
  • f878dac feat: preview shake context reduction before confirmation
  • 9212350 feat: show estimated cost in shake preview
  • ac8fbf5 Add install.sh for local-features test builds
  • 16950ff Fix shake compaction metadata initialization
  • b27a53a Fix shake preview billing provider compatibility
  • 95b4be8 feat(shake): automatic shake at the pre-sampling point
  • 06cd8bb feat(shake): auto_shake.threshold as off | percent | inherit, Astra on at 40%
  • 220b5e2 feat(tui): /shake help lists the modes
  • 07cc65c fix(shake): protect a larger tail for auto-shake, add absolute min-savings floor
  • cbd951a test(shake): assert token usage drops by the shake's freed estimate
  • b93443c fix(shake): protect skill and recovery tool outputs from elision (management-plane#986)
  • dd8cbb9 fix(shake): bound artifact recovery reads to context headroom (management-plane#990)
  • d0cf306 fix(shake): carry the artifact's absolute file path in recovery placeholders
  • 59fe145 feat(shake): escalate to an aggressive pass before falling back to compaction
  • ee79c53 refactor(shake): drop read_artifact; placeholders name the artifact file
  • 2856022 feat(shake): absolute token thresholds; gpt-5.6 defaults to 160k
  • f1bd7d0 feat(shake): cold-resume trigger with a per-provider prompt-cache TTL
  • 6f10f00 chore: drop unrelated Cargo.lock version-stamp churn
  • 10e9522 feat(shake): seed cold-resume clock from resumed-thread last activity
  • 9561fb4 docs(shake-bench): add scrubbed shake retention benchmark for public release
  • cc40edf docs(shake-bench): add RESULTS.md headline page
  • b72eb7c docs: add RELEASE_NOTES.md as the human-written top of each release
  • 96a8f93 docs: write the release note
  • d0ea1fa install: name the binary codex-shake
  • f2a1ec1 Add CI workflow to build and cut fork releases on tag push
  • ec4c244 Add scheduled workflow to poll upstream and dispatch on a new tag
  • 782ed89 fork(tui): embed the fork release tag and check its own release feed
  • 5b4f662 fork(install-context,tui): detect codex-shake installs and update prompt
  • ad6c0d9 cli: make codex update check-then-confirm, add --yes
  • 6d7b3b8 fork-upstream-poll: signal via GitHub Deployment, not repository_dispatch
  • 1d7e5d8 fork-release: set up Python 3.12 before setup-rusty-v8
  • bc8f7d7 fork-upstream-poll: fix gh api call for deployment creation
  • a824108 Merge pull request #1 from epsalmond/agent/shake-launcher-updates
  • 6402010 Merge pull request #2 from epsalmond/agent/shake-release-polish
  • 0b44891 Merge pull request #4 from epsalmond/agent/shake-main-sync-20260914
  • 63d86f3 Merge pull request #5 from epsalmond/agent/shake-update-order-20260914
  • 14c91a9 Merge pull request #6 from epsalmond/agent/shake-release-automation-20260914
  • ec76d3d Merge pull request #7 from epsalmond/agent/shake-release-tools-20260914
  • 6debb3d Merge pull request #9 from epsalmond/agent/shake-brew-deb-packaging
  • 71b4eaa Merge pull request #10 from epsalmond/agent/shake-release-v8-cache
  • 00e06bc Merge pull request #11 from epsalmond/agent/shake-cli-update-option
  • aefe388 Merge pull request #12 from epsalmond/agent/shake-deb-output-parse

local-features test build 0.154.0 (64020105d539)

Choose a tag to compare

@github-actions github-actions released this 14 Sep 09:47
6402010

Install and update as codex-shake beside your official codex:

curl -fsSL https://raw.githubusercontent.com/epsalmond/codex/eric/local-features/install.sh | sh

Run codex-shake. Rerun the installer or use codex-shake-update to update.
Estimate sessions active in the past 7 days (offline; Python 3): codex-shake-estimate --since 168.

Codex Shake keeps long coding sessions smaller by removing older tool output
from active context. In our replay benchmark, shaken runs used 2.3–2.7× fewer
Codex credits.

Surviving conversation content stays byte-identical, and removed content remains
available in local artifact files. Auto-shake runs by default; /shake lets you
preview and trigger it yourself.

The published replay reduced active history from 536k to 176k tokens. Its
measured results were:

arm active history standard Codex credits end state
full history, cold cache 536k 840 12/12
shaken, cold cache 176k 312 11/12
full history, warm cache 536k 809 12/12
shaken, warm cache 176k 358 12/12

This was n=1 per cell, with builds stubbed; the one cold shaken run missed one
structural check. An earlier replay projected 4.8x lower API cost using the API
rate card ($59.46/$12.37); it used 2.42× fewer Codex credits.

No artifact recovery reads were observed in the nine runs covered by the
recovery report. Cache behavior and savings vary by workload; see the
benchmark methodology.

The weekly projection estimated 2.04B fewer input tokens out of 12.37B across
182 historical threads. It is a projection from rollouts, not a plan-quota
measurement.

Based on upstream rust-v0.154.0 (64020105d539). Apple Silicon and x86_64 Linux
(glibc >= 2.35), unsigned, unstripped.

Commits over rust-v0.154.0:

  • 13b0865 feat(tui): add statusline reset and response clock
  • 6d3736d feat(codex): port surgical context-reduction shake from oh-my-pi
  • d081a21 fix: restore shake protocol fixture generation
  • 329fca7 feat: add per-thread artifact storage and lifecycle
  • 2591b66 feat: expose bounded artifact reads to persistent threads
  • 17fee79 feat: make shake elision recoverable
  • f878dac feat: preview shake context reduction before confirmation
  • 9212350 feat: show estimated cost in shake preview
  • ac8fbf5 Add install.sh for local-features test builds
  • 16950ff Fix shake compaction metadata initialization
  • b27a53a Fix shake preview billing provider compatibility
  • 95b4be8 feat(shake): automatic shake at the pre-sampling point
  • 06cd8bb feat(shake): auto_shake.threshold as off | percent | inherit, Astra on at 40%
  • 220b5e2 feat(tui): /shake help lists the modes
  • 07cc65c fix(shake): protect a larger tail for auto-shake, add absolute min-savings floor
  • cbd951a test(shake): assert token usage drops by the shake's freed estimate
  • b93443c fix(shake): protect skill and recovery tool outputs from elision (management-plane#986)
  • dd8cbb9 fix(shake): bound artifact recovery reads to context headroom (management-plane#990)
  • d0cf306 fix(shake): carry the artifact's absolute file path in recovery placeholders
  • 59fe145 feat(shake): escalate to an aggressive pass before falling back to compaction
  • ee79c53 refactor(shake): drop read_artifact; placeholders name the artifact file
  • 2856022 feat(shake): absolute token thresholds; gpt-5.6 defaults to 160k
  • f1bd7d0 feat(shake): cold-resume trigger with a per-provider prompt-cache TTL
  • 6f10f00 chore: drop unrelated Cargo.lock version-stamp churn
  • 10e9522 feat(shake): seed cold-resume clock from resumed-thread last activity
  • 9561fb4 docs(shake-bench): add scrubbed shake retention benchmark for public release
  • cc40edf docs(shake-bench): add RESULTS.md headline page
  • b72eb7c docs: add RELEASE_NOTES.md as the human-written top of each release
  • 96a8f93 docs: write the release note
  • d0ea1fa install: name the binary codex-shake
  • f2a1ec1 Add CI workflow to build and cut fork releases on tag push
  • ec4c244 Add scheduled workflow to poll upstream and dispatch on a new tag
  • 782ed89 fork(tui): embed the fork release tag and check its own release feed
  • 5b4f662 fork(install-context,tui): detect codex-shake installs and update prompt
  • ad6c0d9 cli: make codex update check-then-confirm, add --yes
  • 6d7b3b8 fork-upstream-poll: signal via GitHub Deployment, not repository_dispatch
  • 1d7e5d8 fork-release: set up Python 3.12 before setup-rusty-v8
  • bc8f7d7 fork-upstream-poll: fix gh api call for deployment creation
  • 57fa1fd feat: add Shake launchers and a nonblocking update notice
  • 557cd70 feat: ship offline Shake savings estimates and clearer release notes
  • a824108 Merge pull request #1 from epsalmond/agent/shake-launcher-updates
  • 6402010 Merge pull request #2 from epsalmond/agent/shake-release-polish

local-features snapshot 0.154.0

Pre-release

Choose a tag to compare

@github-actions github-actions released this 14 Sep 13:25
ec76d3d

Install and update as codex-shake beside your official codex:

curl -fsSL https://raw.githubusercontent.com/epsalmond/codex/eric/local-features/install.sh | sh

Run codex-shake. Rerun the installer or use codex-shake-update to update.
Estimate sessions active in the past 7 days (offline; Python 3): codex-shake-estimate --since 168.

Release provenance

  • Source: validated branch merge (fork snapshot)
  • Workspace version: 0.154.0
  • Fork release commit: ec76d3de4ab8417aebf5160c89e1b9ab304e9314
  • Integrated upstream main commit: 5b1d6560181680f95cde95c14ed042acc02248ed
  • Exact stable lineage: rust-v0.154.0

Codex Shake keeps long coding sessions smaller by removing older tool output
from active context. In our replay benchmark, shaken runs used 2.3–2.7× fewer
Codex credits.

Surviving conversation content stays byte-identical, and removed content remains
available in local artifact files. Auto-shake runs by default; /shake lets you
preview and trigger it yourself.

The published replay reduced active history from 536k to 176k tokens. Its
measured results were:

arm active history standard Codex credits end state
full history, cold cache 536k 840 12/12
shaken, cold cache 176k 312 11/12
full history, warm cache 536k 809 12/12
shaken, warm cache 176k 358 12/12

This was n=1 per cell, with builds stubbed; the one cold shaken run missed one
structural check. An earlier replay projected 4.8x lower API cost using the API
rate card ($59.46/$12.37); it used 2.42× fewer Codex credits.

No artifact recovery reads were observed in the nine runs covered by the
recovery report. Cache behavior and savings vary by workload; see the
benchmark methodology.

The weekly projection estimated 2.04B fewer input tokens out of 12.37B across
182 historical threads. It is a projection from rollouts, not a plan-quota
measurement.

Based on upstream rust-v0.154.0 (exact stable lineage; the included
upstream-main SHA is recorded separately above). Apple Silicon and x86_64
Linux (glibc >= 2.35), unsigned, unstripped.

Changes since rust-v0.154.0:

Compare the first-parent source history

First-parent commits since rust-v0.154.0:

  • 13b0865 feat(tui): add statusline reset and response clock
  • 6d3736d feat(codex): port surgical context-reduction shake from oh-my-pi
  • d081a21 fix: restore shake protocol fixture generation
  • 329fca7 feat: add per-thread artifact storage and lifecycle
  • 2591b66 feat: expose bounded artifact reads to persistent threads
  • 17fee79 feat: make shake elision recoverable
  • f878dac feat: preview shake context reduction before confirmation
  • 9212350 feat: show estimated cost in shake preview
  • ac8fbf5 Add install.sh for local-features test builds
  • 16950ff Fix shake compaction metadata initialization
  • b27a53a Fix shake preview billing provider compatibility
  • 95b4be8 feat(shake): automatic shake at the pre-sampling point
  • 06cd8bb feat(shake): auto_shake.threshold as off | percent | inherit, Astra on at 40%
  • 220b5e2 feat(tui): /shake help lists the modes
  • 07cc65c fix(shake): protect a larger tail for auto-shake, add absolute min-savings floor
  • cbd951a test(shake): assert token usage drops by the shake's freed estimate
  • b93443c fix(shake): protect skill and recovery tool outputs from elision (management-plane#986)
  • dd8cbb9 fix(shake): bound artifact recovery reads to context headroom (management-plane#990)
  • d0cf306 fix(shake): carry the artifact's absolute file path in recovery placeholders
  • 59fe145 feat(shake): escalate to an aggressive pass before falling back to compaction
  • ee79c53 refactor(shake): drop read_artifact; placeholders name the artifact file
  • 2856022 feat(shake): absolute token thresholds; gpt-5.6 defaults to 160k
  • f1bd7d0 feat(shake): cold-resume trigger with a per-provider prompt-cache TTL
  • 6f10f00 chore: drop unrelated Cargo.lock version-stamp churn
  • 10e9522 feat(shake): seed cold-resume clock from resumed-thread last activity
  • 9561fb4 docs(shake-bench): add scrubbed shake retention benchmark for public release
  • cc40edf docs(shake-bench): add RESULTS.md headline page
  • b72eb7c docs: add RELEASE_NOTES.md as the human-written top of each release
  • 96a8f93 docs: write the release note
  • d0ea1fa install: name the binary codex-shake
  • f2a1ec1 Add CI workflow to build and cut fork releases on tag push
  • ec4c244 Add scheduled workflow to poll upstream and dispatch on a new tag
  • 782ed89 fork(tui): embed the fork release tag and check its own release feed
  • 5b4f662 fork(install-context,tui): detect codex-shake installs and update prompt
  • ad6c0d9 cli: make codex update check-then-confirm, add --yes
  • 6d7b3b8 fork-upstream-poll: signal via GitHub Deployment, not repository_dispatch
  • 1d7e5d8 fork-release: set up Python 3.12 before setup-rusty-v8
  • bc8f7d7 fork-upstream-poll: fix gh api call for deployment creation
  • a824108 Merge pull request #1 from epsalmond/agent/shake-launcher-updates
  • 6402010 Merge pull request #2 from epsalmond/agent/shake-release-polish
  • 0b44891 Merge pull request #4 from epsalmond/agent/shake-main-sync-20260914
  • 63d86f3 Merge pull request #5 from epsalmond/agent/shake-update-order-20260914
  • 14c91a9 Merge pull request #6 from epsalmond/agent/shake-release-automation-20260914
  • ec76d3d Merge pull request #7 from epsalmond/agent/shake-release-tools-20260914

local-features test build 0.154.0 (1d7e5d832c16)

Choose a tag to compare

Test builds of Codex with shake, a context reducer that cuts instead of summarizing.

What it does. Compaction replaces the history with a model-written summary. Shake removes the parts of the history that are almost never needed again: old tool output, images, thinking. Each removed item is written to a file under $CODEX_HOME/artifacts/ and the placeholder names the path. The rest of the thread is untouched.

Why it helps. Every request re-sends the whole history, and gpt-5.6 charges a long-context premium above 272k input tokens. A thread that shakes at 160k stays below that line, and every request after the shake is a fraction of the size.

What it costs. One uncached request of the surviving history. The thread is fully cached again on the next request.

What was measured, replaying a real 536k-token session from a frozen checkpoint:

  • Shaken threads reach the same end state at 2.3x to 2.7x fewer credits.
  • Nothing elided is ever read back: zero reads in nine benchmark runs and zero across 346 oh-my-pi sessions. So there is no read tool, only the path.
  • Plan quota meters total input tokens, not uncached tokens. Warming the cache does not save quota. Shrinking the prompt does.
  • Over one busy week of real rollouts, auto-shake would have cut 2.0B of 12.4B input tokens.

Auto-shake is on by default in this build: at 160k tokens on gpt-5.6, at 40% of the window on Astra, and on any resume after the prompt cache has expired. /shake in the TUI does it by hand, with a preview.

Based on upstream rust-v0.154.0 (1d7e5d832c16). Apple Silicon and x86_64 Linux
(glibc >= 2.35), unsigned, unstripped.

Install as codex-shake beside your official codex (rerun to update):

curl -fsSL https://raw.githubusercontent.com/epsalmond/codex/eric/local-features/install.sh | sh

Commits over rust-v0.154.0:

  • 13b0865 feat(tui): add statusline reset and response clock
  • 6d3736d feat(codex): port surgical context-reduction shake from oh-my-pi
  • d081a21 fix: restore shake protocol fixture generation
  • 329fca7 feat: add per-thread artifact storage and lifecycle
  • 2591b66 feat: expose bounded artifact reads to persistent threads
  • 17fee79 feat: make shake elision recoverable
  • f878dac feat: preview shake context reduction before confirmation
  • 9212350 feat: show estimated cost in shake preview
  • ac8fbf5 Add install.sh for local-features test builds
  • 16950ff Fix shake compaction metadata initialization
  • b27a53a Fix shake preview billing provider compatibility
  • 95b4be8 feat(shake): automatic shake at the pre-sampling point
  • 06cd8bb feat(shake): auto_shake.threshold as off | percent | inherit, Astra on at 40%
  • 220b5e2 feat(tui): /shake help lists the modes
  • 07cc65c fix(shake): protect a larger tail for auto-shake, add absolute min-savings floor
  • cbd951a test(shake): assert token usage drops by the shake's freed estimate
  • b93443c fix(shake): protect skill and recovery tool outputs from elision (management-plane#986)
  • dd8cbb9 fix(shake): bound artifact recovery reads to context headroom (management-plane#990)
  • d0cf306 fix(shake): carry the artifact's absolute file path in recovery placeholders
  • 59fe145 feat(shake): escalate to an aggressive pass before falling back to compaction
  • ee79c53 refactor(shake): drop read_artifact; placeholders name the artifact file
  • 2856022 feat(shake): absolute token thresholds; gpt-5.6 defaults to 160k
  • f1bd7d0 feat(shake): cold-resume trigger with a per-provider prompt-cache TTL
  • 6f10f00 chore: drop unrelated Cargo.lock version-stamp churn
  • 10e9522 feat(shake): seed cold-resume clock from resumed-thread last activity
  • 9561fb4 docs(shake-bench): add scrubbed shake retention benchmark for public release
  • cc40edf docs(shake-bench): add RESULTS.md headline page
  • b72eb7c docs: add RELEASE_NOTES.md as the human-written top of each release
  • 96a8f93 docs: write the release note
  • d0ea1fa install: name the binary codex-shake
  • f2a1ec1 Add CI workflow to build and cut fork releases on tag push
  • ec4c244 Add scheduled workflow to poll upstream and dispatch on a new tag
  • 782ed89 fork(tui): embed the fork release tag and check its own release feed
  • 5b4f662 fork(install-context,tui): detect codex-shake installs and update prompt
  • ad6c0d9 cli: make codex update check-then-confirm, add --yes
  • 6d7b3b8 fork-upstream-poll: signal via GitHub Deployment, not repository_dispatch
  • 1d7e5d8 fork-release: set up Python 3.12 before setup-rusty-v8

local-features test build 0.154.0 (ee79c53c4201)

Choose a tag to compare

Prebuilt test binaries for the eric/local-features branch: statusline reset + response
clock, surgical context-reduction shake with preview and cost estimate, and
per-thread recoverable artifacts. Based on upstream rust-v0.154.0 at
ee79c53c4201.

Install as codex-next beside your official codex (rerun to update):

curl -fsSL https://raw.githubusercontent.com/epsalmond/codex/eric/local-features/install.sh | sh
codex-next --version   # expect: codex-cli 0.154.0

The installer picks your platform, verifies SHA256SUMS, and clears the macOS
quarantine flag (these builds are unsigned). Manual install: untar, keep
codex-code-mode-host next to codex. The Linux build is glibc-linked
(needs glibc >= 2.39), not musl like upstream releases. Binaries are
unstripped, hence the size.

What to try

  • /shake in the TUI, then pick a mode: elide tool outputs, drop images, or
    drop thinking. Elide saves recovery artifacts the model can read back later;
    no config flag needed. Preview shows the estimated token savings first.
  • /statusline and add the new weekly-reset and last-response-clock
    items. They are off until you select them.
  • App-server users: thread/shake/preview and thread/shake/start are
    documented in codex-rs/app-server/README.md on this branch.

Feedback: open an issue on this fork or ping Eric directly. Only Apple Silicon
and x86_64 Linux builds are published; ask if you need Intel Mac.

Commits over rust-v0.154.0:

  • 13b0865 feat(tui): add statusline reset and response clock
  • 6d3736d feat(codex): port surgical context-reduction shake from oh-my-pi
  • d081a21 fix: restore shake protocol fixture generation
  • 329fca7 feat: add per-thread artifact storage and lifecycle
  • 2591b66 feat: expose bounded artifact reads to persistent threads
  • 17fee79 feat: make shake elision recoverable
  • f878dac feat: preview shake context reduction before confirmation
  • 9212350 feat: show estimated cost in shake preview
  • ac8fbf5 Add install.sh for local-features test builds
  • 16950ff Fix shake compaction metadata initialization
  • b27a53a Fix shake preview billing provider compatibility
  • 95b4be8 feat(shake): automatic shake at the pre-sampling point
  • 06cd8bb feat(shake): auto_shake.threshold as off | percent | inherit, Astra on at 40%
  • 220b5e2 feat(tui): /shake help lists the modes
  • 07cc65c fix(shake): protect a larger tail for auto-shake, add absolute min-savings floor
  • cbd951a test(shake): assert token usage drops by the shake's freed estimate
  • b93443c fix(shake): protect skill and recovery tool outputs from elision (management-plane#986)
  • dd8cbb9 fix(shake): bound artifact recovery reads to context headroom (management-plane#990)
  • d0cf306 fix(shake): carry the artifact's absolute file path in recovery placeholders
  • 59fe145 feat(shake): escalate to an aggressive pass before falling back to compaction
  • ee79c53 refactor(shake): drop read_artifact; placeholders name the artifact file

local-features test build 0.154.0 (96a8f937aff3)

Choose a tag to compare

Test builds of Codex with shake, a context reducer that cuts instead of summarizing.

What it does. Compaction replaces the history with a model-written summary. Shake removes the parts of the history that are almost never needed again: old tool output, images, thinking. Each removed item is written to a file under $CODEX_HOME/artifacts/ and the placeholder names the path. The rest of the thread is untouched.

Why it helps. Every request re-sends the whole history, and gpt-5.6 charges a long-context premium above 272k input tokens. A thread that shakes at 160k stays below that line, and every request after the shake is a fraction of the size.

What it costs. One uncached request of the surviving history. The thread is fully cached again on the next request.

What was measured, replaying a real 536k-token session from a frozen checkpoint:

  • Shaken threads reach the same end state at 2.3x to 2.7x fewer credits.
  • Nothing elided is ever read back: zero reads in nine benchmark runs and zero across 346 oh-my-pi sessions. So there is no read tool, only the path.
  • Plan quota meters total input tokens, not uncached tokens. Warming the cache does not save quota. Shrinking the prompt does.
  • Over one busy week of real rollouts, auto-shake would have cut 2.0B of 12.4B input tokens.

Auto-shake is on by default in this build: at 160k tokens on gpt-5.6, at 40% of the window on Astra, and on any resume after the prompt cache has expired. /shake in the TUI does it by hand, with a preview.

Based on upstream rust-v0.154.0 (96a8f937aff3). Apple Silicon and x86_64 Linux
(glibc >= 2.39), unsigned, unstripped.

Install as codex-next beside your official codex (rerun to update):

curl -fsSL https://raw.githubusercontent.com/epsalmond/codex/eric/local-features/install.sh | sh

Commits over rust-v0.154.0:

  • 13b0865 feat(tui): add statusline reset and response clock
  • 6d3736d feat(codex): port surgical context-reduction shake from oh-my-pi
  • d081a21 fix: restore shake protocol fixture generation
  • 329fca7 feat: add per-thread artifact storage and lifecycle
  • 2591b66 feat: expose bounded artifact reads to persistent threads
  • 17fee79 feat: make shake elision recoverable
  • f878dac feat: preview shake context reduction before confirmation
  • 9212350 feat: show estimated cost in shake preview
  • ac8fbf5 Add install.sh for local-features test builds
  • 16950ff Fix shake compaction metadata initialization
  • b27a53a Fix shake preview billing provider compatibility
  • 95b4be8 feat(shake): automatic shake at the pre-sampling point
  • 06cd8bb feat(shake): auto_shake.threshold as off | percent | inherit, Astra on at 40%
  • 220b5e2 feat(tui): /shake help lists the modes
  • 07cc65c fix(shake): protect a larger tail for auto-shake, add absolute min-savings floor
  • cbd951a test(shake): assert token usage drops by the shake's freed estimate
  • b93443c fix(shake): protect skill and recovery tool outputs from elision (management-plane#986)
  • dd8cbb9 fix(shake): bound artifact recovery reads to context headroom (management-plane#990)
  • d0cf306 fix(shake): carry the artifact's absolute file path in recovery placeholders
  • 59fe145 feat(shake): escalate to an aggressive pass before falling back to compaction
  • ee79c53 refactor(shake): drop read_artifact; placeholders name the artifact file
  • 2856022 feat(shake): absolute token thresholds; gpt-5.6 defaults to 160k
  • f1bd7d0 feat(shake): cold-resume trigger with a per-provider prompt-cache TTL
  • 6f10f00 chore: drop unrelated Cargo.lock version-stamp churn
  • 10e9522 feat(shake): seed cold-resume clock from resumed-thread last activity
  • 9561fb4 docs(shake-bench): add scrubbed shake retention benchmark for public release
  • cc40edf docs(shake-bench): add RESULTS.md headline page
  • b72eb7c docs: add RELEASE_NOTES.md as the human-written top of each release
  • 96a8f93 docs: write the release note

local-features test build 0.154.0 (2856022ecc2b)

Choose a tag to compare

Prebuilt test binaries for the eric/local-features branch: statusline reset + response
clock, surgical context-reduction shake with preview and cost estimate, and
per-thread recoverable artifacts. Based on upstream rust-v0.154.0 at
2856022ecc2b.

Install as codex-next beside your official codex (rerun to update):

curl -fsSL https://raw.githubusercontent.com/epsalmond/codex/eric/local-features/install.sh | sh
codex-next --version   # expect: codex-cli 0.154.0

The installer picks your platform, verifies SHA256SUMS, and clears the macOS
quarantine flag (these builds are unsigned). Manual install: untar, keep
codex-code-mode-host next to codex. The Linux build is glibc-linked
(needs glibc >= 2.39), not musl like upstream releases. Binaries are
unstripped, hence the size.

What to try

  • /shake in the TUI, then pick a mode: elide tool outputs, drop images, or
    drop thinking. Elide saves recovery artifacts the model can read back later;
    no config flag needed. Preview shows the estimated token savings first.
  • /statusline and add the new weekly-reset and last-response-clock
    items. They are off until you select them.
  • App-server users: thread/shake/preview and thread/shake/start are
    documented in codex-rs/app-server/README.md on this branch.

Feedback: open an issue on this fork or ping Eric directly. Only Apple Silicon
and x86_64 Linux builds are published; ask if you need Intel Mac.

Commits over rust-v0.154.0:

  • 13b0865 feat(tui): add statusline reset and response clock
  • 6d3736d feat(codex): port surgical context-reduction shake from oh-my-pi
  • d081a21 fix: restore shake protocol fixture generation
  • 329fca7 feat: add per-thread artifact storage and lifecycle
  • 2591b66 feat: expose bounded artifact reads to persistent threads
  • 17fee79 feat: make shake elision recoverable
  • f878dac feat: preview shake context reduction before confirmation
  • 9212350 feat: show estimated cost in shake preview
  • ac8fbf5 Add install.sh for local-features test builds
  • 16950ff Fix shake compaction metadata initialization
  • b27a53a Fix shake preview billing provider compatibility
  • 95b4be8 feat(shake): automatic shake at the pre-sampling point
  • 06cd8bb feat(shake): auto_shake.threshold as off | percent | inherit, Astra on at 40%
  • 220b5e2 feat(tui): /shake help lists the modes
  • 07cc65c fix(shake): protect a larger tail for auto-shake, add absolute min-savings floor
  • cbd951a test(shake): assert token usage drops by the shake's freed estimate
  • b93443c fix(shake): protect skill and recovery tool outputs from elision (management-plane#986)
  • dd8cbb9 fix(shake): bound artifact recovery reads to context headroom (management-plane#990)
  • d0cf306 fix(shake): carry the artifact's absolute file path in recovery placeholders
  • 59fe145 feat(shake): escalate to an aggressive pass before falling back to compaction
  • ee79c53 refactor(shake): drop read_artifact; placeholders name the artifact file
  • 2856022 feat(shake): absolute token thresholds; gpt-5.6 defaults to 160k

local-features test build 0.154.0 (dc0314008b83)

Choose a tag to compare

Prebuilt test binaries for the eric/statusline-clock branch: statusline reset + response
clock, surgical context-reduction shake with preview and cost estimate, and
per-thread recoverable artifacts. Based on upstream rust-v0.154.0 at
dc0314008b83.

Install as codex-next beside your official codex (rerun to update):

curl -fsSL https://raw.githubusercontent.com/epsalmond/codex/eric/statusline-clock/install.sh | sh
codex-next --version   # expect: codex-cli 0.154.0

The installer picks your platform, verifies SHA256SUMS, and clears the macOS
quarantine flag (these builds are unsigned). Manual install: untar, keep
codex-code-mode-host next to codex. The Linux build is glibc-linked
(needs glibc >= 2.39), not musl like upstream releases. Binaries are
unstripped, hence the size.

What to try

  • /shake in the TUI, then pick a mode: elide tool outputs, drop images, or
    drop thinking. Elide saves recovery artifacts the model can read back later;
    no config flag needed. Preview shows the estimated token savings first.
  • /statusline and add the new weekly-reset and last-response-clock
    items. They are off until you select them.
  • App-server users: thread/shake/preview and thread/shake/start are
    documented in codex-rs/app-server/README.md on this branch.

Feedback: open an issue on this fork or ping Eric directly. Only Apple Silicon
and x86_64 Linux builds are published; ask if you need Intel Mac.

Commits over rust-v0.154.0:

  • dc03140 feat(tui): add statusline reset and response clock

local-features test build 0.154.0 (b27a53a7e01f)

Choose a tag to compare

Prebuilt test binaries for the eric/local-features branch: statusline reset + response
clock, surgical context-reduction shake with preview and cost estimate, and
per-thread recoverable artifacts. Based on upstream rust-v0.154.0 at
b27a53a7e01f.

Install as codex-next beside your official codex (rerun to update):

curl -fsSL https://raw.githubusercontent.com/epsalmond/codex/eric/local-features/install.sh | sh
codex-next --version   # expect: codex-cli 0.154.0

The installer picks your platform, verifies SHA256SUMS, and clears the macOS
quarantine flag (these builds are unsigned). Manual install: untar, keep
codex-code-mode-host next to codex. The Linux build is glibc-linked
(needs glibc >= 2.39), not musl like upstream releases. Binaries are
unstripped, hence the size.

What to try

  • /shake in the TUI, then pick a mode: elide tool outputs, drop images, or
    drop thinking. Elide saves recovery artifacts the model can read back later;
    no config flag needed. Preview shows the estimated token savings first.
  • /statusline and add the new weekly-reset and last-response-clock
    items. They are off until you select them.
  • App-server users: thread/shake/preview and thread/shake/start are
    documented in codex-rs/app-server/README.md on this branch.

Feedback: open an issue on this fork or ping Eric directly. Only Apple Silicon
and x86_64 Linux builds are published; ask if you need Intel Mac.

Commits over rust-v0.154.0:

  • 13b0865 feat(tui): add statusline reset and response clock
  • 6d3736d feat(codex): port surgical context-reduction shake from oh-my-pi
  • d081a21 fix: restore shake protocol fixture generation
  • 329fca7 feat: add per-thread artifact storage and lifecycle
  • 2591b66 feat: expose bounded artifact reads to persistent threads
  • 17fee79 feat: make shake elision recoverable
  • f878dac feat: preview shake context reduction before confirmation
  • 9212350 feat: show estimated cost in shake preview
  • ac8fbf5 Add install.sh for local-features test builds
  • 16950ff Fix shake compaction metadata initialization
  • b27a53a Fix shake preview billing provider compatibility