Releases: epsalmond/codex
Release list
local-features snapshot 0.154.0
Install as codex-shake beside your official codex (pick one):
Homebrew (macOS Apple Silicon, or Linux x86_64):
brew install epsalmond/codex-shake/codex-shakeDebian/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.debcurl | sh (any supported platform, installs to ~/.local):
curl -fsSL https://raw.githubusercontent.com/epsalmond/codex/eric/local-features/install.sh | shRun 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.
- Headline numbers: RESULTS.md
- Docs and config: shake.md
- Benchmark scripts and full reports: shake-bench
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 updatecheck-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
Install as codex-shake beside your official codex (pick one):
Homebrew (macOS Apple Silicon, or Linux x86_64):
brew install epsalmond/codex-shake/codex-shakeDebian/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.debcurl | sh (any supported platform, installs to ~/.local):
curl -fsSL https://raw.githubusercontent.com/epsalmond/codex/eric/local-features/install.sh | shRun 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.
- Headline numbers: RESULTS.md
- Docs and config: shake.md
- Benchmark scripts and full reports: shake-bench
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 updatecheck-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)
Install and update as codex-shake beside your official codex:
curl -fsSL https://raw.githubusercontent.com/epsalmond/codex/eric/local-features/install.sh | shRun 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.
- Headline numbers: RESULTS.md
- Docs and config: shake.md
- Benchmark scripts and full reports: shake-bench
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 updatecheck-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
Install and update as codex-shake beside your official codex:
curl -fsSL https://raw.githubusercontent.com/epsalmond/codex/eric/local-features/install.sh | shRun 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.
- Headline numbers: RESULTS.md
- Docs and config: shake.md
- Benchmark scripts and full reports: shake-bench
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 updatecheck-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)
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.
- Headline numbers: RESULTS.md
- Docs and config: shake.md
- Benchmark scripts and full reports: shake-bench
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 | shCommits 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 updatecheck-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)
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.0The 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
/shakein 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./statuslineand add the newweekly-resetandlast-response-clock
items. They are off until you select them.- App-server users:
thread/shake/previewandthread/shake/startare
documented incodex-rs/app-server/README.mdon 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)
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.
- Headline numbers: RESULTS.md
- Docs and config: shake.md
- Benchmark scripts and full reports: shake-bench
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 | shCommits 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)
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.0The 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
/shakein 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./statuslineand add the newweekly-resetandlast-response-clock
items. They are off until you select them.- App-server users:
thread/shake/previewandthread/shake/startare
documented incodex-rs/app-server/README.mdon 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)
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.0The 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
/shakein 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./statuslineand add the newweekly-resetandlast-response-clock
items. They are off until you select them.- App-server users:
thread/shake/previewandthread/shake/startare
documented incodex-rs/app-server/README.mdon 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)
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.0The 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
/shakein 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./statuslineand add the newweekly-resetandlast-response-clock
items. They are off until you select them.- App-server users:
thread/shake/previewandthread/shake/startare
documented incodex-rs/app-server/README.mdon 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