Live-tested Codex 0.149 through the proxy and found four defects:
- proxy: custom_tool_call_output.output is an ARRAY of input_text parts on
Codex 0.149+. The Responses extractor accepted only the string form, so
every real Codex tool turn had an empty live zone and the subscription
route compressed nothing (75-116 KB requests, zero savings). The captured
real request now compresses; regression test pins the array shape.
- proxy: the /chatgpt route never recorded compression eligibility, so the
CLI told every Codex subscription user "your agent never reached the
compression layer" even when routing worked.
- cli: codexNativeConfig ran the legacy table strippers before removing its
own marker blocks; the stripper swallowed the tables end marker, so the
block enable had just written failed its own re-parse as "corrupted" on
the next wrap and doctor reported drift forever. Markers come off first.
- cli: nativeHooksDocument matched caveman hook entries by exact command
string, so a binary path change (upgrade, moved install) appended a new
hook set per event instead of replacing it. Match on managed identity.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W2f7Lf7G9erA7YNn5SXPEj
shrink-hook (PreToolUse), the memory recall hook (UserPromptSubmit) and
native-hook are invoked directly by hosts and read stdin to EOF. Under the
Windows pipe implementation the host's close can lag arbitrarily (#729/#833,
#949), so a hook with its work done sat until the host's timeout. Same fix
shape as native-hook-fast and the Go bridge: resolve on the first complete
JSON object, keep the 2 MiB cap, unref stdin so the process can exit.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W2f7Lf7G9erA7YNn5SXPEj
A proxy caveman just started binds its port before its run state is
readable, so the immediate probe could report a foreign owner on slower
runners. Poll briefly after start and restart. Test fixes for CI: pin
XDG_CONFIG_HOME for in-process Kilo assertions, import the profile scope
checker through a file URL so Windows can load it, and skip the sh-stub
gh reporter tests on Windows.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Review follow-ups to #945: a listener caveman did not start this run and
cannot prove it owns (foreign process, or a proxy binary too old to
answer) now launches direct, and the direct-launch strip removes the
agent-attributed /w/<agent> route as well as the bare gateway URL, so a
leaked outer route never reaches the child. Qwen's ACP and extension
listing guards accept yargs camelCase spellings. Proxy-aware fetch no
longer sets an IP literal as TLS servername (rejected on Node 26). The
conformance-pin test fixture follows the pinned-upstream-binary job.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
A foreign listener on 127.0.0.1:8787 used to get the banner but still
receive the routed launch, which would send the operator's provider
keys to a process caveman does not own (#945). Treat it like a gate
mismatch and fall back to a direct launch.
Also: Claude Code refuses Remote Control behind any non-first-party
ANTHROPIC_BASE_URL, so `caveman claude remote-control` launches direct
and the limitation is documented (#947); caveman-compress reads the
first text block instead of content[0] so a leading tool_use block no
longer crashes after a paid call (closes#932's report); hook checksum
manifest regenerated after #794.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Bare start never stamps global recovery; the banner now says which
sessions compress (those whose agent carries caveman_retrieve) and the
status mcp-missing row keys off any installed MCP marker.
Qwen: refuse extension, ACP, session-restore, control-command, and
enforced-auth surfaces that could reactivate a provider route outside
the locked session; replace modelProviders/providerProtocol wholesale
in the routed profile; keep web search and workflows off via env.
Kilo: daemon and console launch direct since they outlive the wrap.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>