openclaw - ✅(Solved) Fix [Bug]: openclaw doctor --fix rewrites openai-codex/* model refs to openai/* on 2026.5.4 → 2026.5.5 update, locking out ChatGPT-OAuth users [4 pull requests, 15 comments, 10 participants]
ON THIS PAGE
Recommended Tools
×6Utilities matched from this issue’s tags and category — try them while you read without losing context.
GitHub issue graph ai analysis
Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.
The report is written in English Markdown for sharing and archival.
Helpful · Quick feedback
After updating from openclaw 2026.5.4 to 2026.5.5, the launchd-handoff restart automatically runs openclaw doctor --non-interactive --fix. The doctor migration mutates openclaw.json and rewrites every openai-codex/* model reference to openai/* across agents.defaults.modelOverride, per-agent modelOverride blocks, per-channel modelOverride blocks, and agents.modelCatalog. Users authenticated only via OpenAI Codex OAuth (i.e., a ChatGPT account, no OPENAI_API_KEY) are then locked out — every agent run fails on boot with:
[boot] agent run failed: No API key found for provider "openai".openai-codex/gpt-5.4-pro is also lost entirely in the rewrite — there is no openai/gpt-5.4-pro in the catalog, so the model entry effectively disappears.
Error Message
2026-05-06T16:38:31.510+07:00 [diagnostic] lane task error: lane=main durationMs=1224 error="FailoverError: No API key found for provider "openai". Auth store: …/agents/main/agent/auth-profiles.json …" 2026-05-06T16:38:31.518+07:00 [model-fallback/decision] model fallback decision: decision=candidate_failed requested=openai/gpt-5.5 candidate=openai/gpt-5.5 reason=auth next=none detail=No API key found for provider "openai". … 2026-05-06T16:38:31.569+07:00 [boot] agent run failed: No API key found for provider "openai". …
Root Cause
After updating from openclaw 2026.5.4 to 2026.5.5, the launchd-handoff restart automatically runs openclaw doctor --non-interactive --fix. The doctor migration mutates openclaw.json and rewrites every openai-codex/* model reference to openai/* across agents.defaults.modelOverride, per-agent modelOverride blocks, per-channel modelOverride blocks, and agents.modelCatalog. Users authenticated only via OpenAI Codex OAuth (i.e., a ChatGPT account, no OPENAI_API_KEY) are then locked out — every agent run fails on boot with:
[boot] agent run failed: No API key found for provider "openai".openai-codex/gpt-5.4-pro is also lost entirely in the rewrite — there is no openai/gpt-5.4-pro in the catalog, so the model entry effectively disappears.
Fix Action
Workaround
cp ~/.openclaw/openclaw.json.bak.1 ~/.openclaw/openclaw.json(the pre-doctor backup), or- Manually re-prefix every
openai/gpt-5.X*back toopenai-codex/gpt-5.X*inmodelOverride.{primary,fallbacks}andmodelCatalog. - Avoid running
openclaw doctor --fixuntil this is patched.
Happy to attach the full pre/post openclaw.json diff or the redacted config-audit excerpt if useful.
PR fix notes
PR #77851: fix(memory): fall back to platform-specific sqlite-vec variant when meta package is missing
- Repository: openclaw/openclaw
- Author: corevibe555
- State: open | merged: False
- Link: https://github.com/openclaw/openclaw/pull/77851
Description (problem / solution / changelog)
Summary
AI-assisted PR (Claude Code). Bug fix for #77838.
- Problem: Global
npm install -g openclaw@latestlands the platform-specificsqlite-vec-*package as an optional dep but does not always install the metasqlite-vecpackage. Memory-search startup fails withCannot find package 'sqlite-vec'even thoughvec0.{so,dylib,dll}is on disk inside the variant package. - Why it matters: Memory search is unusable on a fresh global install until the user manually points
agents.defaults.memorySearch.store.vector.extensionPathat a loadable extension. This regressed whensqlite-vecmoved tooptionalDependencies. - What changed: Added a fallback in
loadSqliteVecExtensionthat, whenimport('sqlite-vec')fails with a missing-package error, resolves the platform variant package directly viarequire.resolve('${pkg}/${file}')(the variant's documentedexportssubpath forvec0.{so,dylib,dll}) and loads the extension from that path. Errors from the fallback preserve theextensionPathconfig hint. - What did NOT change (scope boundary): No changes to dependency declarations, install scripts, the meta
sqlite-vecpackage, the memory-search schema, agent config keys, or the public SDK. No behavior change when the metasqlite-vecpackage is present (the original code path still wins) or whenextensionPathis set explicitly.
Change Type (select all)
- Bug fix
- Feature
- Refactor required for the fix
- Docs
- Security hardening
- Chore/infra
Scope (select all touched areas)
- Gateway / orchestration
- Skills / tool execution
- Auth / tokens
- Memory / storage
- Integrations
- API / contracts
- UI / DX
- CI/CD / infra
Linked Issue/PR
- Closes #77838
- Related #
- This PR fixes a bug or regression
Real behavior proof
- Behavior or issue addressed: Issue #77838. After
npm install -g openclaw@latestthe metasqlite-vecpackage is missing while the platform variant package (e.g.sqlite-vec-linux-x64) is installed. Memory-search startup fails withCannot find package 'sqlite-vec'even thoughvec0.sois on disk. This PR makesloadSqliteVecExtensionfall back to loading the loadable extension straight from the platform variant package. - Real environment tested: Linux 6.8.0-106-generic, x86_64, Node v22.22.2,
node:sqlite(experimental). Branchfix/sqlite-vec-platform-variant-fallbackat HEADdf21fb3ecb. Repro directory/tmp/sqlite-vec-proofwith a freshnpm init -yandnpm install [email protected]only — metasqlite-vecdeliberately not installed, mirroring the broken global-install state. - Exact steps or command run after this patch:
mkdir -p /tmp/sqlite-vec-proof && cd /tmp/sqlite-vec-proof npm init -y npm install sqlite-vec-linux-x64 ls node_modules/sqlite-vec-linux-x64/ # vec0.so present ls node_modules/sqlite-vec # absent — confirms broken state node repro-before.mjs # original resolver against the real install node repro.mjs # patched resolver + node:sqlite loadExtension on real vec0.so pnpm test packages/memory-host-sdk/src/host/sqlite-vec.test.ts pnpm check:changedrepro.mjsandrepro-before.mjsinline the resolver frompackages/memory-host-sdk/src/host/sqlite-vec-platform-variant.ts(patched vs original) and callDatabaseSync(...).loadExtension(...)against the real installedvec0.so. - Evidence after fix (terminal capture, copied live output):
$ node repro-before.mjs === BEFORE FIX: original resolver against real installed variant === platform/arch: linux-x64 resolver caught: ERR_PACKAGE_PATH_NOT_EXPORTED - Package subpath './package.json' is not defined by "exports" in /tmp/sqlite-vec-proof/node_modules/sqlite-vec-linux-x64/package.json resolved: undefined Resolver returned undefined -> fallback never fires -> startup error surfaces to the user. $ node repro.mjs === Reproducing #77838 against a real install layout === platform/arch: linux-x64 node: v22.22.2 cwd: /tmp/sqlite-vec-proof --- step 1: confirm meta sqlite-vec is missing (the broken global-install state) --- import('sqlite-vec') failed as expected: code: ERR_MODULE_NOT_FOUND msg : Cannot find package 'sqlite-vec' imported from /tmp/sqlite-vec-proof/repro.mjs --- step 2: resolve the platform variant via the patched resolver --- resolved: { pkg: 'sqlite-vec-linux-x64', extensionPath: '/tmp/sqlite-vec-proof/node_modules/sqlite-vec-linux-x64/vec0.so' } --- step 3: load vec0.so into node:sqlite and run vec_* queries --- vec_version() -> [Object: null prototype] { v: 'v0.1.9' } vec_distance_L2([1,2,3],[4,6,8]) -> [Object: null prototype] { d: 7.071067810058594 } PASS: sqlite-vec loaded via platform-variant fallback without the meta package. $ pnpm test packages/memory-host-sdk/src/host/sqlite-vec.test.ts Test Files 1 passed (1) Tests 4 passed (4) - Observed result after fix: Live execution shows
vec_version() = 'v0.1.9'andvec_distance_L2([1,2,3],[4,6,8]) = 7.071067810058594—vec0.sowas loaded byDatabaseSync.loadExtensionvia the patched resolver, with no metasqlite-vecpackage installed. The before-run confirms the originally proposed resolver hitERR_PACKAGE_PATH_NOT_EXPORTEDbecausesqlite-vec-linux-x64'spackage.jsonexposes only./vec0.soinexports. Switching the resolver torequire.resolve('${pkg}/${file}')(the variant's documented export subpath) makes the fallback work end-to-end. Existing unit tests still pass after the change (Tests 4 passed (4)), andpnpm check:changedis green. - What was not tested: macOS (
darwin-x64,darwin-arm64) and Windows (win32-x64) variant packages were not installed on this Linux box, so theirloadExtensionpaths were not live-loaded; they share the sameexportsshape aslinux-x64(a single./vec0.{dylib,dll}subpath), so the same resolver path is expected to apply but is unverified on those platforms.linux-arm64was not exercised on arm64 hardware. The full openclaw memory-search startup wiring throughloadSqliteVecExtensionwas not driven via the CLI — only the inlined resolver +node:sqliteloadExtensioncall that the function delegates to. - Before evidence (optional but encouraged): The "BEFORE FIX" block above (
node repro-before.mjs) is the before-state evidence — original resolver against the same real install layout, returningundefinedand triggering the user-facing "sqlite-vec package is not installed" error path.
Root Cause (if applicable)
- Root cause: Two layers.
- The original
optionalDependenciesmove on the metasqlite-vecpackage means npm's global-install layout can drop the meta package while keeping the platform variant.loadSqliteVecExtensionhad no fallback for that layout, so memory search broke on freshnpm i -g openclaw@latest. - The first attempt at a fallback (commit
3b00b2cedb) calledrequire.resolve('${pkg}/package.json')against the variant package, but the published variant declares"exports": { "./vec0.so": ... }only —./package.jsonis not in the exports map, so under Node 22's strictexportsenforcement the resolve throwsERR_PACKAGE_PATH_NOT_EXPORTED. Thetry/catchswallowed it and the fallback never fired in real installs. The unit tests passed because theyvi.doMock'd the resolver itself.
- The original
- Missing detection / guardrail: No live-install proof on the original fallback PR — the unit tests stub the resolver, so
ERR_PACKAGE_PATH_NOT_EXPORTEDfrom the real published variant package was never exercised. - Contributing context (if known):
sqlite-vecmoving tooptionalDependencies(and the variant packages declaring tightexportsmaps) coincided. Either change in isolation would not have surfaced this combination.
Regression Test Plan (if applicable)
- Coverage level that should have caught this:
- Unit test
- Seam / integration test
- End-to-end test
- Existing coverage already sufficient
- Target test or file: A new integration smoke under
packages/memory-host-sdk/test/(or the existing co-locatedsqlite-vec.test.ts) that runsresolveSqliteVecPlatformVariant()against a real installed variant package (installed into a tmp dir during the test or via a shared fixture), with no metasqlite-vecpresent. - Scenario the test should lock in: With only
sqlite-vec-${platform}-${arch}installed (no metasqlite-vec),resolveSqliteVecPlatformVariant()returns a non-undefinedextensionPathand that path exists on disk and is the file declared in the variant'sexportsmap. - Why this is the smallest reliable guardrail: It exercises the real
require.resolveagainst a real publishedpackage.json/exportsmap, which is the exact surface thatpackage.json-vs-vec0.sosubpath choices depend on. Mocking the resolver hides this entirely. - Existing test that already covers this (if any): None. The four
sqlite-vec.test.tscases allvi.doMock./sqlite-vec-platform-variant.js. - If no new test is added, why not: This PR keeps the existing mocked unit tests (still passing) and demonstrates real-install correctness via the live repro in the proof section. A follow-up PR can add the live integration smoke; it is intentionally out of scope here to keep this fix minimal and avoid CI install-fixture churn.
User-visible / Behavior Changes
- Memory search now starts successfully on installs where only the
sqlite-vec-${platform}-${arch}variant is present (e.g. somenpm i -g openclaw@latestupgrades), instead of erroring with "sqlite-vec package is not installed". No new config keys, no changes to error messages on the "no variant available" path, and the explicitextensionPathconfig keeps highest priority.
Diagram (if applicable)
Before:
loadSqliteVecExtension(no extensionPath)
-> import('sqlite-vec') [throws ERR_MODULE_NOT_FOUND]
-> resolveSqliteVecPlatformVariant()
-> require.resolve('${pkg}/package.json') [throws ERR_PACKAGE_PATH_NOT_EXPORTED]
-> catch -> return undefined
-> { ok: false, error: "sqlite-vec package is not installed. ..." }
After:
loadSqliteVecExtension(no extensionPath)
-> import('sqlite-vec') [throws ERR_MODULE_NOT_FOUND]
-> resolveSqliteVecPlatformVariant()
-> require.resolve('${pkg}/${file}') [resolves via variant's exports map]
-> { pkg, extensionPath }
-> db.loadExtension(extensionPath) [vec0.so loaded into node:sqlite]
-> { ok: true, extensionPath }Security Impact (required)
- New permissions/capabilities?
No - Secrets/tokens handling changed?
No - New/changed network calls?
No - Command/tool execution surface changed?
No—db.loadExtensionis already used by the existing code path; this PR only changes which path that resolved-from-installed-package extension comes from. - Data access scope changed?
No - If any
Yes, explain risk + mitigation: N/A. Worth noting: the resolved path comes fromrequire.resolveagainst an npm-installed package the user already chose to install; no new filesystem search or arbitrary-path loading is introduced.
Repro + Verification
Environment
- OS: Linux 6.8.0-106-generic, x86_64
- Runtime/container: Node v22.22.2, plain shell (no Docker)
- Model/provider: N/A (no model interaction in this code path)
- Integration/channel (if any): N/A —
packages/memory-host-sdkhost code - Relevant config (redacted): none; the bug path triggers when no
agents.defaults.memorySearch.store.vector.extensionPath(and no per-agent override) is set, and the metasqlite-vecpackage is absent.
Steps
mkdir -p /tmp/sqlite-vec-proof && cd /tmp/sqlite-vec-proof && npm init -y && npm install sqlite-vec-linux-x64— install only the variant, not the meta package, to mirror the broken global-install state.- Run the inlined original resolver (
node repro-before.mjs) and confirm it returnsundefinedwithERR_PACKAGE_PATH_NOT_EXPORTED. - Run the inlined patched resolver (
node repro.mjs) and confirm it resolves the variant, loadsvec0.sointonode:sqliteviaDatabaseSync.loadExtension, and successfully evaluatesvec_version()andvec_distance_L2(...).
Expected
- Original resolver returns
undefinedagainst the real install (and the surrounding code path returns{ ok: false, error: "sqlite-vec package is not installed. ..." }). - Patched resolver returns
{ pkg: 'sqlite-vec-linux-x64', extensionPath: '.../vec0.so' }andloadExtensionsucceeds withvec_version() = 'v0.1.9'.
Actual
- Matches Expected. See "Evidence after fix" terminal capture above.
Evidence
Attach at least one:
- Failing test/log before + passing after (terminal capture under "Evidence after fix")
- Trace/log snippets (
ERR_PACKAGE_PATH_NOT_EXPORTED,ERR_MODULE_NOT_FOUND,vec_version,vec_distance_L2) - Screenshot/recording
- Perf numbers (if relevant)
Human Verification (required)
- Verified scenarios:
- Real install layout (only
sqlite-vec-linux-x64present, no metasqlite-vec) — patched resolver resolves the variant and loadsvec0.sointonode:sqlite, original resolver returnsundefinedwithERR_PACKAGE_PATH_NOT_EXPORTED. - Existing unit test suite for
loadSqliteVecExtension(4 cases) — still passes. pnpm check:changed— green.
- Real install layout (only
- Edge cases checked:
- Meta
sqlite-vecdeliberately absent from the test directory (ls node_modules/sqlite-vecreturns ENOENT) before running the repro. - Variant package's
exportsmap confirmed via directrequire.resolveprobe (./vec0.soexported,./package.jsonnot exported).
- Meta
- What you did not verify:
- macOS (
darwin-x64,darwin-arm64) and Windows (win32-x64) variants — not installed on this Linux box. linux-arm64on real arm64 hardware.- End-to-end openclaw CLI startup driving
loadSqliteVecExtensionfrom agent config — only the host-SDK code path was exercised.
- macOS (
Review Conversations
- I replied to or resolved every bot review conversation I addressed in this PR.
- I left unresolved only the conversations that still need reviewer or maintainer judgment.
Compatibility / Migration
- Backward compatible?
Yes— when metasqlite-vecis present orextensionPathis set explicitly, behavior is unchanged. - Config/env changes?
No - Migration needed?
No - If yes, exact upgrade steps: N/A.
Risks and Mitigations
- Risk: Variant package upstream (
asg017/sqlite-vec) drops./vec0.{so,dylib,dll}from itsexportsmap in a future release.- Mitigation: That would be a breaking change in the variant package and would surface as
ERR_PACKAGE_PATH_NOT_EXPORTEDfrom the new code path; thetry/catchinresolveSqliteVecPlatformVariantreturnsundefined, andloadSqliteVecExtensionfalls back to the existing "package not installed, setextensionPath" hint so the user is not worse off than today.
- Mitigation: That would be a breaking change in the variant package and would surface as
- Risk: A platform/arch we did not live-test (macOS, Windows, linux-arm64) ships a variant
package.jsonwhoseexportsmap differs fromlinux-x64.- Mitigation: All published variants observed today expose only the loadable file (
vec0.{so,dylib,dll}) viaexports, which is what the resolver targets. If a divergence appears, the sametry/catchreturnsundefinedand the user sees the existing hint. A follow-up live-install integration smoke (see Regression Test Plan) would catch this earlier.
- Mitigation: All published variants observed today expose only the loadable file (
AI-assisted (Claude Code). I personally ran the live repro above and confirmed behavior on this machine; AI-generated tests, mocks, and CI output are treated as supplemental.
Changed files
CHANGELOG.md(modified, +1/-0)packages/memory-host-sdk/src/host/sqlite-vec-platform-variant.ts(added, +27/-0)packages/memory-host-sdk/src/host/sqlite-vec.test.ts(modified, +56/-0)packages/memory-host-sdk/src/host/sqlite-vec.ts(modified, +33/-12)
PR #78047: config: stop automatic writes and guard Nix mutators
- Repository: openclaw/openclaw
- Author: joshp123
- State: closed | merged: True
- Link: https://github.com/openclaw/openclaw/pull/78047
Description (problem / solution / changelog)
Human written summary:
The intent of this change is, as written by a human:
It should just be no automatic stuff. The config set stuff should be explicitly disabled in Nix mode, in my opinion, because the whole point is it's immutable.
The policy boundary: yes, explicit tools can write config, but not in Nix mode.
The rest of this PR was written by GPT-5-Codex, running in the Codex desktop harness. Full environment + prompt history appear at the end.
Changes
- Stop automatic config mutation during normal runtime/startup paths: plugin auto-enable, generated gateway auth tokens, Control UI allowed-origin seeding, generated owner-display secrets, and read-time
plugins.installscompatibility migration are runtime-only. - Add a central Nix-mode config write guard for
replaceConfigFile,mutateConfigFile, and direct config writes. - Refuse mutating operator flows early in Nix mode before package/install side effects: plugin install/update/uninstall/enable/disable, chat plugin write commands, mutating
openclaw update, onboarding plugin installs, and doctor repair/token-generation. - Make Nix-mode refusal errors agent-first: they explain immutable config, name
OPENCLAW_NIX_MODE=1, point to first-partynix-openclaw, and note that other Nix packages may also manage config. - Update docs/changelog so documented mutable workflows remain valid for normal installs while Nix users are directed to edit their Nix source instead.
Tests
env -u OPENCLAW_GATEWAY_TOKEN -u OPENCLAW_NIX_MODE nix shell nixpkgs#nodejs_22 nixpkgs#pnpm --command pnpm test -- src/auto-reply/reply/commands-plugins.install.test.ts src/auto-reply/reply/commands-plugins.test.ts src/commands/onboarding-plugin-install.test.ts src/commands/channel-setup/plugin-install.test.ts src/cli/update-cli.test.ts src/cli/plugins-cli.install.test.ts src/cli/plugins-cli.update.test.ts src/cli/plugins-cli.uninstall.test.ts src/cli/plugins-cli.policy.test.ts src/commands/doctor.runs-legacy-state-migrations-yes-mode-without.e2e.test.ts src/gateway/startup-auth.test.ts src/gateway/startup-control-ui-origins.test.ts src/gateway/server-startup-config.recovery.test.ts src/config/mutate.test.ts src/config/io.write-config.test.ts src/config/io.owner-display-secret.test.tspassed: 6 Vitest shards, 349 tests.env -u OPENCLAW_GATEWAY_TOKEN -u OPENCLAW_NIX_MODE nix shell nixpkgs#nodejs_22 nixpkgs#pnpm --command pnpm checkpassed.env -u OPENCLAW_GATEWAY_TOKEN -u OPENCLAW_NIX_MODE nix shell nixpkgs#nodejs_22 nixpkgs#pnpm --command pnpm check:docspassed.env -u OPENCLAW_GATEWAY_TOKEN -u OPENCLAW_NIX_MODE nix shell nixpkgs#nodejs_22 nixpkgs#pnpm --command pnpm buildpassed.env -u OPENCLAW_GATEWAY_TOKEN -u OPENCLAW_NIX_MODE nix shell nixpkgs#nodejs_22 nixpkgs#pnpm --command pnpm format:checkfailed on 10 unchanged files; the same files fail on clean currentorigin/main, so this is unrelated to this PR.env -u OPENCLAW_GATEWAY_TOKEN -u OPENCLAW_NIX_MODE nix shell nixpkgs#nodejs_22 nixpkgs#pnpm --command pnpm config:docs:checkfailed with the existingdocs/.generated/config-baseline.sha256mismatch; the same failure reproduces on clean currentorigin/main, and this PR does not change the config schema baseline.
Risks
- CODEOWNERS/security review is required for touched auth/secret paths:
src/gateway/startup-auth.ts,src/gateway/startup-auth.test.ts,src/config/io.owner-display-secret.ts, andsrc/config/io.owner-display-secret.test.ts. - Normal installs no longer get startup-generated config persisted automatically. That is intentional: durable config changes now require explicit tools.
- Nix-mode plugin lifecycle/update/repair refusal may surprise users who previously ran those commands manually; docs now point agents/users to edit the Nix-managed source instead.
Follow-ups
- None for this PR. After merge,
nix-openclawcan drop any downstream workaround once it pins an OpenClaw release containing this behavior.
Root Cause
- Startup/read paths had grown implicit config writers: plugin auto-enable, generated gateway auth tokens, Control UI origin seeding, owner-display secret generation, and read-time shipped-plugin install migration.
- Core write helpers did not enforce
OPENCLAW_NIX_MODE=1, so even explicit mutators could rewrite a declarative config file. - Some plugin/update/onboarding flows could perform package-manager or install side effects before reaching the config writer, so central refusal alone was not enough for Nix mode.
Real behavior proof
- Behavior or issue addressed: OpenClaw could mutate
openclaw.jsonautomatically during startup/read paths, and could mutate declarative config even whenOPENCLAW_NIX_MODE=1said Nix owned config. - Real environment tested: local OpenClaw CLI and gateway code from this branch on macOS Darwin, using temp
OPENCLAW_CONFIG_PATHfiles,OPENCLAW_NIX_MODE=1, Node 22, and the repo's Nix-providedpnpmtoolchain. - Exact steps or command run after this patch: ran temp-config CLI/gateway smoke scripts against the built branch with
OPENCLAW_CONFIG_PATHset to disposable files; commands exercisedopenclaw config get,openclaw config set,openclaw plugins enable,openclaw update, and gateway startup auth generation. - Evidence after fix: copied terminal output from the live smoke run:
nix_config_get: status=0 changed=false
nix_config_set: status=1 changed=false contains_OPENCLAW_NIX_MODE=1 true contains_nix_docs=true
nix_plugins_enable: status=1 changed=false contains_nix_docs=true
nix_update: status=1 changed=false contains_nix_docs=true
normal_config_set: status=0 changed=true
gateway_missing_token_startup: generated_runtime_token=true changed=false log="Generated a runtime token for this startup without changing config"- Observed result after fix: read-only Nix commands still work; Nix mutators fail before changing the config hash; normal non-Nix config writes still work; gateway startup no longer persists generated auth into config.
- What was not tested: a full Home Manager rebuild on a Linux NixOS host was not rerun in this PR worktree. The repo-level behavior was tested through
OPENCLAW_NIX_MODE=1, andnix-openclawwas inspected to confirm first-party Nix sets that mode and owns rendered config. - Before evidence: on clean
origin/main, a temp-config repro withOPENCLAW_NIX_MODE=1andreplaceConfigFilechanged the config hash and wrote metadata; startup auth with{ "gateway": { "mode": "local", "auth": { "mode": "token" } } }persisted a generated token andmeta.lastTouched*when startup requested persistence.
Docs Boundary Review
- Existing docs for
openclaw config set, setup, plugin lifecycle commands, update, and doctor repair describe mutable workflows for normal installs. This PR keeps those workflows available outside Nix mode. - Nix docs now explicitly say first-party
nix-openclawand other Nix packages can setOPENCLAW_NIX_MODE=1, config is immutable, startup-derived defaults are runtime-only, and mutating commands are refused. - Config/plugin/setup/update/doctor docs now call out the Nix exception so documented non-Nix workflows are not silently broken.
- Startup/legacy migration docs now distinguish runtime compatibility from doctor-driven persisted repair; startup no longer rewrites config.
- Config include docs still describe explicit write-through behavior for normal installs; in Nix mode the new guard refuses writes before include write-through.
Compatibility
- Backward compatible for normal mutable installs: explicit config and doctor repair commands still write config outside Nix mode.
- Behavior change for automatic startup/read paths: they no longer persist generated or compatibility-derived config for anyone.
- Behavior change for Nix mode: mutating config tools now fail fast with agent-first documentation pointers.
Prompt History
Environment
Harness: Codex desktop app
Model: GPT-5 Codex
Thinking level: not exposed by harness
Terminal: zsh
System: macOS Darwin, local worktree at /tmp/openclaw-nix-mode-pr
Prompts
| ISO-8601 | Prompt |
|---|---|
| 2026-05-05T21:44:00+02:00 | Okay, I think your diagnosis on the patch is right, but we should indeed fix it in upstream OpenClaw if that's indeed the correct diagnosis. Basically, the name of the game here is: in Nix mode, we don't mutate config. It's that simple. In Nix mode, Nix owns config, so if OpenClaw is mutating config, then yeah, we shouldn't mutate it, but then the question is: is what they're doing really the right way of doing things, or can we have a better suggestion? I think it's fine to open a draft PR against OpenClaw, but don't merge it yourself, because there's a whole procedure and we need to follow the procedure. Opening a PR as draft is fine, and adding a comment saying, "Hey, this breaks on Nix packaging shit because we're mutating config, whereas with Nix mode on, config should be immutable." That's good. |
| 2026-05-06T08:xx:00+02:00 | Assess this pull request. This is something we found in our Nix OpenClaw work, which I guess I'll give you a link to the session below. ... The main goal is that config should not be mutated by open floor except using the doctor plugin, which is not supported in Nix mode anyway. We want to take our original fix and broaden it from just Nix mode to general for everybody. |
| 2026-05-06T08:xx:00+02:00 | I agree with your recommendation. It should just be no automatic stuff. The config set stuff should be explicitly disabled in Nix mode, in my opinion, because the whole point is it's immutable. Setup and onboarding, plugin installing, enabling. Again, in Nix mode, these are not desired paths because that's what you use Nix mode for. ... We should have: ... ensure that none of the OpenClaw behaviour mutates the config files automatically, except the operator commands. ... gating the operator commands behind: if the gateway is running in Nix mode, then just tell them to fuck off. |
| 2026-05-06T08:xx:00+02:00 | I think you're mostly correct. The error messages should explicitly point to the agent first documentation so that the agents will understand that either they're using nix-openclaw, which is the official distribution, or their users might have configured a different one. In this installation, the config should be immutable. ... red-green-red or red-green-green-red-green ... First test this or reproduce it and make sure it's fucked on master. Add tests. Show that the test breaks. Fix the tests. |
| 2026-05-06T08:xx:00+02:00 | /goal drive this feature to "PR is ready to merge" state, follow professional software development lifecycle the whole way. Ensure you do everything that we discussed in this chat ... checking for regressions ... ensuring that you've tested everything so it's bulletproof |
| 2026-05-06T08:xx:00+02:00 | What I meant is that if the documentation says you can edit stuff, we should be aware of that so we don't break existing documented workflows. |
| 2026-05-06T09:xx:00+02:00 | Make sure to undo any of the Discord-related stuff if you did anything based on my accidental messages. |
| 2026-05-06T10:xx:00+02:00 | Then, exactly as you mentioned before, let's go back to the pull request 78047 and continue against our full plan |
Prompt history note: this thread was compacted during implementation. The PR body preserves the earlier draft prompts already present and the visible prompts from the active compacted thread; no Discord/discrawl work was performed from the accidental messages.
Changed files
CHANGELOG.md(modified, +1/-0)docs/channels/discord.md(modified, +1/-1)docs/channels/slack.md(modified, +4/-3)docs/cli/config.md(modified, +4/-0)docs/cli/doctor.md(modified, +1/-0)docs/cli/plugins.md(modified, +5/-1)docs/cli/setup.md(modified, +4/-0)docs/cli/update.md(modified, +4/-0)docs/concepts/streaming.md(modified, +2/-2)docs/gateway/config-agents.md(modified, +1/-1)docs/gateway/config-channels.md(modified, +2/-2)docs/gateway/doctor.md(modified, +1/-1)docs/help/faq.md(modified, +1/-1)docs/install/gcp.md(modified, +5/-4)docs/install/hetzner.md(modified, +5/-4)docs/install/nix.md(modified, +4/-2)docs/plugins/manage-plugins.md(modified, +5/-0)docs/tools/browser.md(modified, +4/-1)docs/tools/plugin.md(modified, +5/-0)src/auto-reply/reply/commands-plugins.install.test.ts(modified, +29/-0)src/auto-reply/reply/commands-plugins.test.ts(modified, +22/-0)src/auto-reply/reply/commands-plugins.ts(modified, +27/-0)src/cli/plugins-cli-test-helpers.ts(modified, +12/-0)src/cli/plugins-cli.install.test.ts(modified, +19/-0)src/cli/plugins-cli.policy.test.ts(modified, +30/-1)src/cli/plugins-cli.ts(modified, +10/-1)src/cli/plugins-cli.uninstall.test.ts(modified, +30/-1)src/cli/plugins-cli.update.test.ts(modified, +31/-1)src/cli/plugins-install-command.ts(modified, +3/-1)src/cli/plugins-uninstall-command.ts(modified, +3/-1)src/cli/plugins-update-command.ts(modified, +8/-1)src/cli/update-cli.test.ts(modified, +22/-0)src/cli/update-cli/update-command.ts(modified, +4/-0)src/commands/doctor.runs-legacy-state-migrations-yes-mode-without.e2e.test.ts(modified, +38/-0)src/commands/onboarding-plugin-install.test.ts(modified, +35/-0)src/commands/onboarding-plugin-install.ts(modified, +2/-0)src/config/config.ts(modified, +4/-0)src/config/io.owner-display-secret.test.ts(modified, +8/-84)src/config/io.owner-display-secret.ts(modified, +4/-32)src/config/io.ts(modified, +68/-45)src/config/io.write-config.test.ts(modified, +136/-7)src/config/mutate.test.ts(modified, +51/-0)src/config/mutate.ts(modified, +3/-0)src/config/nix-mode-write-guard.ts(added, +37/-0)src/flows/doctor-health.ts(modified, +5/-0)src/gateway/server-startup-config.recovery.test.ts(modified, +89/-43)src/gateway/server-startup-config.ts(modified, +20/-26)src/gateway/server.impl.ts(modified, +18/-26)src/gateway/startup-auth.test.ts(modified, +5/-12)src/gateway/startup-auth.ts(modified, +5/-31)src/gateway/startup-control-ui-origins.test.ts(modified, +3/-12)src/gateway/startup-control-ui-origins.ts(modified, +5/-14)
PR #78512: test(doctor): reproduce #78407 openai-codex model-ref rewrite without auth
- Repository: openclaw/openclaw
- Author: 100yenadmin
- State: open | merged: False
- Link: https://github.com/openclaw/openclaw/pull/78512
Description (problem / solution / changelog)
Summary
Umbrella reproduction PR for openclaw/openclaw#78407 plus scaffolding for the transport-parity gate proposed in openclaw/openclaw#78457.
This is not a fix — it is a failing-by-design regression test that pins the bug down at the unit level so the eventual fix has a clear target, plus a generic invariant function that any future migration touching model refs can extend cheaply.
Background
After upgrading from 2026.5.4 to 2026.5.5, the launchd post-update handler runs openclaw doctor --non-interactive --fix. The doctor migration in src/commands/doctor/shared/codex-route-warnings.ts rewrites every openai-codex/* model ref in the user's config to openai/* and sets agentRuntime.id: \"pi\" when the codex CLI plugin isn't installed. The mainstream OAuth-only user (ChatGPT account, no OPENAI_API_KEY, no codex CLI plugin) lands on a PI runtime trying to use openai/* refs against an auth store with only openai-codex:* profiles. First boot fails:
[boot] agent run failed: No API key found for provider \"openai\".Full bug write-up with logs, config diffs, and timeline: openclaw/openclaw#78407.
Root cause (pinned during this PR)
resolveCodexRepairRuntime (src/commands/doctor/shared/codex-route-warnings.ts:602-618) requires both:
isCodexPluginInstalledAndEnabled— the codex CLI subprocess plugin (the wrapper around the Codex CLI binary) is installed and enabled, ANDhasUsableCodexOAuthProfile— there's a usable openai-codex OAuth profile.
If only #2 is true (which is the mainstream user shape — they auth via ChatGPT OAuth, but never installed the codex CLI plugin), the resolver falls back to \"pi\". The migration then uses the rewritten openai/* refs against a PI runtime that requires an openai:* auth profile the user doesn't have.
The decision tree is missing a third option: "openai-codex provider transport via PI runtime" — keep the openai-codex provider plugin in the loop even though the codex CLI plugin isn't there, since the embedded openai-codex provider has its own working transport.
What this PR adds
-
src/commands/doctor/shared/codex-route-warnings.78407-no-openai-auth.test.ts— failing-by-design reproduction:it.fails(\"preserves auth-resolvable model refs after the legacy openai-codex repair\", ...)— runsmaybeRepairCodexRoutesagainst a fixture mirroring the 5-location footprint observed in #78407 (defaults primary + fallbacks,agents.modelCatalog, per-agentmodelOverride, per-channelmodelOverride) with a mock auth store containing onlyopenai-codex:[email protected]and a mock plugin index with no codex CLI plugin. Today the post-repair config has everyopenai/*ref pointing at a provider with no auth profile; the test will start passing once the migration learns to skip or compensate for missing auth, at which point theit.failsmarker must be removed.findModelRefsWithoutAuth(cfg, authProviders)— generic invariant any model-ref migration should preserve. Walksprimary,fallbacks,modelCatalogkeys, and surfaces refs whose provider has no auth profile in the supplied set.- Two cheap pass/fail cases for the invariant function so future regressions of the same shape (e.g. a new renamed-provider migration that forgets to map auth) can extend the suite by adding one fixture.
-
extensions/qa-lab/transport-parity-gate.md— scaffolding doc for the transport-parity gate in #78457. Covers the matrix shape (fixtures × ( openai-api-http × openai-codex-ws ) × ( pi × codex )), per-cell assertions, qa-lab implementation hooks (extendingmock-openai/server.ts,mock-model-config.ts,qa-gateway-config.test.ts, plus newtransport-parity.tsandruntime-parity.ts), and CI wiring (extending.github/workflows/openclaw-release-checks.ymlpost-#74622). Out of scope for this PR — the matrix work is intended for follow-up PRs that maintainers can shape.
What this PR does not do
- Does not fix the migration. The fix decision (option A: skip rewrite when it would orphan auth; option B: alias openai-codex profile under openai during migration; option C: add a third "openai-codex transport via PI" runtime option to
resolveCodexRepairRuntime) is for the maintainers — happy to take guidance and follow up. - Does not implement the transport-parity matrix from #78457. The scaffolding doc lays out concrete extension points that can be picked up in subsequent PRs; happy to split per-axis if reviewers prefer.
- Does not touch CLI surface bugs (#77221) — different test family, out of scope for this gate.
Validation
git diff --check✅- Format + typecheck were not run locally: this worktree has no
node_modules, the pre-commitpnpm exec oxfmt --checkhook errored withCommand \"oxfmt\" not found, andpnpm installis too disk-heavy for a same-day reproduction PR. Same situation and same workaround as #78142. The test file follows the established pattern from the existingcodex-route-warnings.test.ts(same mock factory shape, same imports) so format drift should be minimal; CI will run the full suite. - Commit used
--no-verifyfor the missing-oxfmtreason above.
Cross-links
- Fixes (in test form): #78407
- Sibling proposal: #78457
- Existing parity gate (sibling): #74290, folded into release validation by #74622
- Related stale-final / WS lineage cluster (#78055 family): #78147, #78146, #78142
- Related runtime-divergence: #78060
cc the maintainers from #74290 / #74622 for visibility on the new parity-gate sibling proposal.
Changed files
extensions/qa-lab/transport-parity-gate.md(added, +77/-0)src/commands/doctor/shared/codex-route-warnings.78407-no-openai-auth.test.ts(added, +253/-0)
PR #78567: fix: preserve Codex OAuth doctor routes
- Repository: openclaw/openclaw
- Author: shakkernerd
- State: open | merged: False
- Link: https://github.com/openclaw/openclaw/pull/78567
Description (problem / solution / changelog)
Summary
- Preserve working
openai-codex/*Codex OAuth PI routes duringdoctor --fixinstead of rewriting them to directopenai/*API routes. - Recover the 2026.5.5-broken
openai/*GPT-5 PI state back to supportedopenai-codex/*refs when only Codex OAuth auth is available. - Warn and leave ambiguous mixed Codex OAuth plus direct OpenAI PI routes unchanged instead of guessing from config backups.
- Keep recovery limited to supported Codex OAuth PI models, avoiding suppressed old refs like
gpt-5.1,gpt-5.2, andgpt-5.3*. - Preserve explicit per-agent
piruntime overrides when recovering under non-PI defaults, and update doctor/Codex docs to match the safe behavior.
Fixes #78407.
Verification
pnpm test src/commands/doctor/shared/codex-route-warnings.test.ts src/commands/doctor/repair-sequencing.test.ts -- --runpnpm exec oxfmt --check --threads=1 src/commands/doctor/shared/codex-route-warnings.ts src/commands/doctor/shared/codex-route-warnings.test.ts docs/cli/doctor.md docs/gateway/doctor.md docs/plugins/codex-harness.md docs/providers/openai.md CHANGELOG.mdpnpm docs:listgit diff --check origin/main...HEADgit merge-tree --write-tree origin/main HEAD- OCM package-runtime repro on a cloned
MarCodexenv covered the release path: 2026.5.5doctor --fixrewrote toopenai/gpt-5.5+ PI, the fixed runtime recovered the OAuth-only PI route toopenai-codex/gpt-5.5, and a recovered agent turn succeeded with provideropenai-codex, modelgpt-5.5, harnesspi.
Changed files
CHANGELOG.md(modified, +1/-0)docs/cli/doctor.md(modified, +1/-1)docs/gateway/doctor.md(modified, +10/-8)docs/plugins/codex-harness.md(modified, +32/-26)docs/providers/openai.md(modified, +8/-0)src/commands/doctor/repair-sequencing.test.ts(modified, +30/-9)src/commands/doctor/shared/codex-route-warnings.test.ts(modified, +500/-10)src/commands/doctor/shared/codex-route-warnings.ts(modified, +826/-63)
Code Example
[boot] agent run failed: No API key found for provider "openai".
---
"lastGood": { "anthropic": "anthropic:default", "openai-codex": "openai-codex:<account>" }
---
"modelOverride": {
"primary": "openai-codex/gpt-5.5",
"fallbacks": ["openai-codex/gpt-5.4", "openai-codex/gpt-5.4-mini"]
}
---
"modelOverride": {
- "fallbacks": [ "openai-codex/gpt-5.4", "openai-codex/gpt-5.4-mini" ],
- "primary": "openai-codex/gpt-5.5"
+ "fallbacks": [ "openai/gpt-5.4", "openai/gpt-5.4-mini" ],
+ "primary": "openai/gpt-5.5"
},
"modelCatalog": {
- "openai-codex/gpt-5.4": {},
- "openai-codex/gpt-5.4-mini": {},
- "openai-codex/gpt-5.4-pro": {},
- "openai-codex/gpt-5.5": {},
- "openai-codex/gpt-5.5-pro": {}
+ "openai/gpt-5.4": {},
+ "openai/gpt-5.4-mini": {},
+ "openai/gpt-5.4-pro": {},
+ "openai/gpt-5.5": {},
+ "openai/gpt-5.5-pro": {}
}
---
{"ts":"2026-05-06T09:38:10.210Z","argv":["...openclaw","doctor","--non-interactive","--fix"],
"changedPathCount":57,"previousHash":"7c638e8a…","nextHash":"84d28f91…","result":"rename"}
---
2026-05-06T16:38:31.510+07:00 [diagnostic] lane task error: lane=main durationMs=1224 error="FailoverError: No API key found for provider \"openai\". Auth store: …/agents/main/agent/auth-profiles.json …"
2026-05-06T16:38:31.518+07:00 [model-fallback/decision] model fallback decision: decision=candidate_failed requested=openai/gpt-5.5 candidate=openai/gpt-5.5 reason=auth next=none detail=No API key found for provider "openai". …
2026-05-06T16:38:31.569+07:00 [boot] agent run failed: No API key found for provider "openai". …
---
[2026-05-06T09:38:22Z] openclaw restart attempt source=update target=ai.openclaw.gateway
[2026-05-06T09:38:22Z] openclaw restart done source=update
[2026-05-06T09:45:09Z] openclaw restart attempt source=update target=ai.openclaw.gateway
[2026-05-06T09:45:10Z] openclaw restart done source=update
---
const LEGACY_MODELS_ADD_CODEX_MODEL_IDS = new Set(["gpt-5.5", "gpt-5.5-pro"]);
function isLegacyModelsAddCodexMetadataModel(params) {
// returns true for openai-codex/gpt-5.5 with the canonical reasoning/image/cost shape
}RAW_BUFFERClick to expand / collapse
Summary
After updating from openclaw 2026.5.4 to 2026.5.5, the launchd-handoff restart automatically runs openclaw doctor --non-interactive --fix. The doctor migration mutates openclaw.json and rewrites every openai-codex/* model reference to openai/* across agents.defaults.modelOverride, per-agent modelOverride blocks, per-channel modelOverride blocks, and agents.modelCatalog. Users authenticated only via OpenAI Codex OAuth (i.e., a ChatGPT account, no OPENAI_API_KEY) are then locked out — every agent run fails on boot with:
[boot] agent run failed: No API key found for provider "openai".openai-codex/gpt-5.4-pro is also lost entirely in the rewrite — there is no openai/gpt-5.4-pro in the catalog, so the model entry effectively disappears.
Environment
- openclaw
2026.5.5(fresh install via npm global), upgraded from2026.5.4 - macOS 14 (Darwin 25.4.0)
- Auth profiles:
openai-codex:<chatgpt-account>+anthropic:default. Noopenai:*profile. - Last-good
auth-state.json:"lastGood": { "anthropic": "anthropic:default", "openai-codex": "openai-codex:<account>" }
Reproduction
- On
2026.5.4, configureagents.defaults.modelOverride:And"modelOverride": { "primary": "openai-codex/gpt-5.5", "fallbacks": ["openai-codex/gpt-5.4", "openai-codex/gpt-5.4-mini"] }agents.modelCatalogcontainingopenai-codex/gpt-5.4,openai-codex/gpt-5.4-mini,openai-codex/gpt-5.4-pro,openai-codex/gpt-5.5,openai-codex/gpt-5.5-pro. - Have only an
openai-codex:*profile in~/.openclaw/agents/<agent>/agent/auth-profiles.json— noopenai:*. - Update to
2026.5.5. The launchd post-update handler runsopenclaw doctor --non-interactive --fix. - Boot the gateway. Send any message in webchat to the affected agent.
Expected
Doctor migration leaves openai-codex/* refs alone (they are still valid model ids in 2026.5.5 — openclaw models list confirms openai-codex/gpt-5.5 is listed and configured with Auth: yes). At minimum, doctor should not rewrite a model ref to a provider for which the user has no auth profile.
Actual
Diff of openclaw.json immediately before/after the doctor --fix run (from ~/.openclaw/openclaw.json.bak.1 → ~/.openclaw/openclaw.json.bak):
"modelOverride": {
- "fallbacks": [ "openai-codex/gpt-5.4", "openai-codex/gpt-5.4-mini" ],
- "primary": "openai-codex/gpt-5.5"
+ "fallbacks": [ "openai/gpt-5.4", "openai/gpt-5.4-mini" ],
+ "primary": "openai/gpt-5.5"
},
"modelCatalog": {
- "openai-codex/gpt-5.4": {},
- "openai-codex/gpt-5.4-mini": {},
- "openai-codex/gpt-5.4-pro": {},
- "openai-codex/gpt-5.5": {},
- "openai-codex/gpt-5.5-pro": {}
+ "openai/gpt-5.4": {},
+ "openai/gpt-5.4-mini": {},
+ "openai/gpt-5.4-pro": {},
+ "openai/gpt-5.5": {},
+ "openai/gpt-5.5-pro": {}
}The same rewrite occurs in 5 separate locations in the config (default + 3 per-agent/per-channel modelOverride blocks + the catalog). openai-codex/gpt-5.4-pro is renamed to openai/gpt-5.4-pro, which does not exist in the model catalog.
Evidence from logs
~/.openclaw/logs/config-audit.jsonl:
{"ts":"2026-05-06T09:38:10.210Z","argv":["...openclaw","doctor","--non-interactive","--fix"],
"changedPathCount":57,"previousHash":"7c638e8a…","nextHash":"84d28f91…","result":"rename"}~/.openclaw/logs/gateway.err.log (within seconds of the doctor run):
2026-05-06T16:38:31.510+07:00 [diagnostic] lane task error: lane=main durationMs=1224 error="FailoverError: No API key found for provider \"openai\". Auth store: …/agents/main/agent/auth-profiles.json …"
2026-05-06T16:38:31.518+07:00 [model-fallback/decision] model fallback decision: decision=candidate_failed requested=openai/gpt-5.5 candidate=openai/gpt-5.5 reason=auth next=none detail=No API key found for provider "openai". …
2026-05-06T16:38:31.569+07:00 [boot] agent run failed: No API key found for provider "openai". …~/.openclaw/logs/gateway-restart.log:
[2026-05-06T09:38:22Z] openclaw restart attempt source=update target=ai.openclaw.gateway
[2026-05-06T09:38:22Z] openclaw restart done source=update
[2026-05-06T09:45:09Z] openclaw restart attempt source=update target=ai.openclaw.gateway
[2026-05-06T09:45:10Z] openclaw restart done source=updateThe error is recoverable in user-facing terms — openai-provider-BVG8OXtu.js:225 even prints the right hint:
No API key found for provider "openai". You are authenticated with OpenAI Codex OAuth. Use
openai-codex/gpt-5.5, or setOPENAI_API_KEYfor direct OpenAI API access.
…but doctor is the thing producing the bad refs in the first place, so simply re-editing the config and restarting works only until the next doctor run.
Suspected location
dist/doctor-config-flow-D_wwaDIB.js:141:
const LEGACY_MODELS_ADD_CODEX_MODEL_IDS = new Set(["gpt-5.5", "gpt-5.5-pro"]);
function isLegacyModelsAddCodexMetadataModel(params) {
// returns true for openai-codex/gpt-5.5 with the canonical reasoning/image/cost shape
}The _ADD_CODEX_ naming suggests this branch is meant to add the -codex prefix, but the observed effect is the opposite (strip it). Either the call-site that consumes this set is inverted, or there is a sibling _REMOVE_CODEX_ migration acting on these model ids. The exact mutator is not in doctor-config-flow-D_wwaDIB.js directly; it is invoked from the broader doctor flow during --fix.
Workaround
cp ~/.openclaw/openclaw.json.bak.1 ~/.openclaw/openclaw.json(the pre-doctor backup), or- Manually re-prefix every
openai/gpt-5.X*back toopenai-codex/gpt-5.X*inmodelOverride.{primary,fallbacks}andmodelCatalog. - Avoid running
openclaw doctor --fixuntil this is patched.
Happy to attach the full pre/post openclaw.json diff or the redacted config-audit excerpt if useful.
Vote matrix · Quick signals
Still need to ship something?
×6Another batch ranked right after the header list — different links, same matching logic.
TRENDING
- Feature Request: Configurable per-minute rate limiting (RPM) for models to prevent 429 errors
- Android: Hermes App + Termux install share ~/.hermes and cause silent permission loops
- hermes update emits unicode-animations ANSI demo in non-interactive logs
- hermes update downgrades aiohttp from 3.13.4 to 3.13.3
- npm install warns about deprecated @babel/plugin-proposal-private-methods
- DingTalk inbound media URLs are skipped as unreadable native image paths
- fix(dashboard): ChatPage clears header action buttons on ALL pages, not just Sessions
- [Bug]: check_web_api_key() hardcodes built-in backends — third-party web search plugins silently disabled
- Hermes Web UI 修复经验:GatewayManager 补丁、进程 D 状态、数据库升级问题
- Telegram gateway can silently drop turn after /stop with response=0 chars while internal work continues
- Bug Report: v0.14.0 上下文污染 — 历史回复碎片回注到新请求
- Bug: hermes skills search table truncates Identifier column — install fails with copied value
- [skills-index-watchdog] Skills index is stale or degraded (degraded)
- Discord approval embed not rendering on web/mobile — embed data present in API but invisible
- Idea: Discord voice-channel participation / opt-in auto-join mode
- [Feature]: Claude Code--ultrawork
- build-arm64 job deterministically fails on cold cache (Azure SAS token expires mid-build)
- [Enhancement] computer_use: action=type should fall back to key events for terminal emulators (Ghostty/Terminal.app/iTerm2)
- Feature Request: Session Recovery on Temporary Provider Outage
- [Bug]: Hermes dashboard not working on NixOS (container)
- [Feature]: Add option to ignore @all/@everyone mentions in Feishu group chats
- QQ Bot WebSocket 频繁断开:长时间工具执行阻塞 asyncio 事件循环导致心跳超时
- patch tool: new_string escape sequences (\t) get written literally
- Feature Request: i18n / 多语言支持(国际化)
- Bug: web_crawl schema lets models auto-guess "instructions" instead of asking the user via clarify
- feat: `!command` prefix for direct shell execution (like Claude Code)
- Expose currently-running cron jobs via /api/jobs (or new endpoint)
- [Bug]: Kanban parent-child handoff: scratch workspace GC destroys artifacts before child can read them
- [Bug, Windows] hermes gateway restart loses session context — planned_stop_marker not written before SIGTERM
- [Bug]: Codex→DeepSeek fallback sends assistant turns without reasoning_content → HTTP 400 (require-side cross-provider failover)
- [Bug]: Update got stuck half way, reboot it, then ModuleNotFoundError: No module named 'hermes_cli'
- Kanban dispatcher corrupt-board handling and multi-profile gateway ownership ambiguity
- Gateway can resend a short fallback message when the real final Telegram response was already delivered
- [BUG] Bedrock: Fix 'Invalid API Key format' for presigned URL tokens
- Secret redaction corrupts code syntax in tool output (write_file, execute_code, terminal)
- Unable to connect Ollama Cloud with Pro Subscription to Hermes
- feat: fuzzy substring matching for /skill autocomplete
- PRD: Autonomous market-impact prediction briefing system
- Kanban dashboard should support task/card deep links
- [Feature] Native Feishu CardKit Streaming: consolidate best-in-class implementations
- [Feature]: Inject mental model into context when using Hindsight
- Interactive CLI hides tool output despite display.tool_progress=all, and hermes chat -v does not restore it
- fix(api_server): _handle_responses drops text.format JSON schema — structured output constraints silently ignored
- state.db FTS corruption goes undetected — no integrity check, no repair path
- bug: fallback routing can select text-only models for image requests and hide the primary failure
- feat(kanban): persist worker session_id per run and pass --resume on respawn after unblock
- feat(kanban): support GitHub/OMO lifecycle bridge for Xiyou-style automation
- Expose update-safe TUI/composer hooks for voice transcript and composer events
- Hide or configure voice transcript status rows in editable dictation mode
- [Feature]: Per-Tool / Per-Toolset Approval Policies
- Context compression creates orphan sessions missing from state.db
- messaging platform
- feat: Add read-only / silent monitoring mode for WhatsApp adapter
- double-.hermes path mismatch, the HOME env var leak, and the fallback-notification UX problem
- Bug: Plattform-Bundle name `hermes-yuanbao` in `agent.disabled_toolsets` silently kills ALL tools in gateway path (Telegram + cron), CLI unaffected
- CLI /yolo (in-chat) does not bypass dangerous command approvals — env var freeze + missing enable_session_yolo call
- OpenAI Codex provider crashes with "'NoneType' object is not iterable" (HTTP None)
- DEEPSEEK_API_KEY blocked by env blocklist in gateway process — cron jobs fail with deepseek provider
- fix(feishu): Card action callback routing issues - invalid message_id and unrecognized /card command
- Discord plugin: profiles without explicit `discord:` block silently get `require_mention=true` + `auto_thread=true` (regression in cc8e5ec2a)
- [Bug]: DISCORD_ALLOWED_ROLES ignored by gateway _is_user_authorized — role-authorized users get 'Unauthorized user' rejection
- [Bug]: /new, /clear, and /reset commands freeze the terminal session
- openai-codex subscription backend returns HTTP 200 with response.output=None, causing Slack/cron failures
- RFC: Centralized Model/Provider Registry
- bug: openai-codex provider — TypeError: 'NoneType' object is not iterable on every request (gpt-5.5)
- [Feature]: Source-aware instruction gate — architectural mitigation for indirect prompt injection
- Named custom provider stale_timeout_seconds ignored because runtime provider is normalized to `custom`
- guard test (ignore)
- [Feature]: per-platform LLM request_overrides (extra_body / reasoning_effort / service_tier)
- One-shot smoke: add Flue-backed orchestration fixture
- Gateway should not treat stale Codex app-server progress as final response after post-tool silence
- `docker_run_as_host_user: true` breaks bundled skills: Hermes home is mounted into `/root/.hermes` but the container runs as a non-root user (`HOME=/home/pn`)
- [Bug]: gateway api_server streaming bypasses server-side tool-call loop when chat_template_kwargs.enable_thinking=false (model emits tool name as plain text)
- [Feature]: Pre-install python-telegram-bot in Umbrel Hermes Docker image
- YouTube Shorts filter not working in youtube-content skill
- v0.15.0 PyPI release breaks ALL platforms — plugin.yaml manifests missing from package
- RFC: On-demand tool/skill/MCP discovery — decouple schema registration from process lifecycle
- Pixshelf: local-first stock photo workflow command center
- [Bug]: baoyu infographic skill should not silently bypass image_generate
- Pixshelf v1.5: manual submission tracking for stock agencies
- `hermes config set` silently accepts unknown keys, writing them where the runtime never reads
- Honcho memory prefetch hang on fresh CLI subprocess in v0.15.0 (regression from #27190)
- [Bug] v0.15.0 Docker image: stage2-hook.sh, main-wrapper.sh missing; container_boot module removed
- Feature: Reduce cache-read token overhead for DeepSeek providers — configurable cache_ttl, skills snapshot trimming, memory compaction
- Windows: three bugs from daily use (plugin discovery, gateway exit code, Unicode decode
- holographic memory: HRR silently degrades to FTS5 when numpy is missing
- Make max_tokens configurable for aux vision calls
- Conversation compression desynchronizes session ID between agent context and gateway routing, causing silent message loss
- [Bug]: v0.15.0 Docker image:The TUI cannot be used in the dashboard.
- cron: skip_memory=True blocks fact_store/memory tools from all cron jobs
- TUI: Node.js OOM crash when agent uses browser tools repeatedly
- feat: model_profiles — per-model toolset and memory config
- Automatic background skill patching disrupts active sessions (severe impact on local models)
- ensure_hermes_home() creates root-owned dirs in profile subdirectories when kanban workers are dispatched
- Feature: opt-in webhook bypass for DISCORD_ALLOW_BOTS — allow operator-initiated probes without weakening bot-loop guard
- v0.15.0: Codex requests fail HTTP 400 when participant display_name contains non-ASCII (emoji breaks input[].name pattern)
- Architecture: State Persistence Precedence (Memory vs Skills vs Hooks)
- [Bug]: cronjob tool: create action always fails with "schedule is required for create" even when parameters are provided
- codex-oauth: 'NoneType' object is not iterable in _run_codex_stream (gpt-5.5) — every turn fails non-retryably
- Docs/Config: Plugin local scope enablement ambiguity
- [Bug]: CLI freezes after using /new command (WSL)
- Profile Codex auth can ignore global credential pool when local state is stale
- [workflow-engine] CRITICAL: variable substitution crashes on regex metachars in user input
- [workflow-engine] HIGH: loop and bash nodes leak subprocesses on timeout
- [workflow-engine] HIGH: README documents config env vars the engine never reads
- [workflow-engine] MEDIUM: workflow_run rate limit bypassable via concurrent calls (TOCTOU)
- [workflow-engine] chore: manifest gaps, side-effectful register(), dead code, unauth kanban dispatch
- [mcp_lazy] HIGH: synthetic mcp_server_<name> stub collides with a real MCP server named 'server'
- [mcp_lazy] HIGH: promote_server eager flag documented but never persisted
- [mcp_lazy] MEDIUM: _prev_mode dict leaks and goes stale; not cleared on session evict
- [mcp_lazy] MEDIUM: get_pool has unlocked check-then-set race on pool creation
- [mcp_lazy] MEDIUM: pre_tool_call gives no guidance for unpromoted server-stub calls
- [mcp_lazy] chore: undeclared pre_tool_call hook, nonexistent 'mcp_load_tools' name in docs, missing tests
- [a2a_fleet] CRITICAL: server never auto-starts — register() runs outside an event loop
- [a2a_fleet] CRITICAL: auth_required defaults to false on a cross-machine surface
- [a2a_fleet] HIGH: remove invented disable() hook — loader never calls it, port leaks on reload
- [a2a_fleet] HIGH: plugin.yaml missing kind / provides_tools / requires_env (token env undeclared)
- [a2a_fleet] MEDIUM: tighten wide-open CORS, anonymous /health peer leak, and peer-URL SSRF
- [a2a_fleet] MEDIUM: relocate tests to tests/plugins/ and cover sync-register + auth-default paths
- xai-oauth auxiliary client incorrectly uses Responses API (CodexAuxiliaryClient), causing 403 on compression/vision/web_extract
- [Bug]: Direct Copilot gpt-5.5 large resumes are killed by 12s Codex TTFB watchdog
- [Bug]: `hermes uninstall` does not work on Windows
- TUI: Thinking block leaks raw JSON and Σ character
- Hostinger VPS: migration Hermes Agent → Hermes WebUI impossible (tini + UID mismatch + sessions)
- /goal judge over-continues exploratory goals unless the assistant explicitly says the goal is complete
- /goal auto-continuation can be amplified by preflight compression/session split and resurrect stale task state
- Dashboard infinite reload loop in loopback mode — GET /api/auth/me returns 401 on every page load
- [Bug]: Provider/LLM switch leaves stale encrypted_content causing 400 errors on Telegram sessions
- [Bug]: Infinite reload loop / React state loop on Sessions tab (Firefox + Chrome) — repeated 401 on /api/auth/me (v0.15.0)
- show_reasoning should work independently of streaming in CLI mode
- Feature Request: Strip reasoning/<think> blocks from TTS preprocessing
- mcp add / mcp test raise NameError when mcp package not installed
- v0.14.0 dashboard breaks behind reverse proxies — two regressions
- Skills hub creates empty category directories when no skills installed
- [Bug]: Custom endpoint: ChatCompletions returns content, but Hermes treats response as empty (v0.14.0)
- fix: atomic_replace() fails with EXDEV when HERMES_HOME is a cross-filesystem symlink
- fix(gateway): Feishu session cancellation orphans session guard, permanently blocking messages
- Custom endpoint pricing can overestimate Crof qwen3.5-9b cost by 1,000,000x
- MCP OAuth callback: module-level port global causes port collisions and structural weaknesses vs upstream
- Bug: send_message tool bypasses validate_media_delivery_path security check
- Proposal: Add Mnemosyne to official memory provider documentation
- feat(swarm): support custom verifier/synthesizer body + skills
- Template conversion failed
- Error occurred in the operation of the agent node in the workflow.
- PubSub client overrides Sentinel client when REDIS_USE_SENTINEL is enabled
- Frontend description of the Retrieval node output does not match the actual output
- JSON type input var raise Intenal server error
- cannot extract elements from a scalar
- 负载均衡 为模型配置多组凭据,并自动调用,此功能无法选择
- add models is error
- panic: could not create filter
- Persist partially generated messages when /chat-messages/:task_id/stop is called
- MCP server connection fails with 403 — request never leaves Dify (SSRF proxy suspected)
- Support durable async execution backends for long-running workflow steps
- [Xiaomi MiMo] Credentials validation fails with 400 "Not supported model mimo-v2-flash" when using Token Plan endpoint (v0.0.7)
- After clicking preview on a parent-child segmented knowledge base, it shows 0 chunks
- Retrieval score differs between UI upload (.docx) and API upload (.txt) despite identical chunk content and embedding model
- gemini cli crash again
- Xbox gift card code damage
- Damage caused by the gemini cli crash
- ioctl(2) failed, EBADF (Bad File Descriptor)
- Feat: Support Bun as an alternative runtime/package manager for updates and extensions
- fatal error again!!!!
- ioctl error
- Critical Crash: ioctl(2) failed, EBADF in ShellExecutionService.resizePty
- ioctl(2) failed, EBADF
- v0.44.0 Regression: Critical crash with ioctl(2) failed, EBADF during PTY resize
- Crash on startup: ioctl(2) failed, EBADF in UnixTerminal.resize
- Crash: `ioctl(2) failed, EBADF` in `node-pty` during PTY resize on macOS
- Gemini CLI crashes with `ioctl(2) failed, EBADF` in `node-pty` during `resizePty`
- Remote Role
- ERROR ioctl(2) failed, EBADF /home/mich
- RangeError: Maximum call stack size exceeded
- EBADF Error during folder creationg broke session and terminal glitches
- MAIP / Gargoub Project - Mediterania - North Coast
- Gemini cli crash again in this morning
- ERROR ioctl(2) failed, EBADF
- Verified node install fails — Checksum verification failed (Cloud)
- The extended debugging key did not arrive during registration.
- CollaborationPane unmounts collaboration store on single-user instances, causing permanent "No network connection" state
- Workflow cannot be saved when the name contains "->" (Potentially malicious string)
- automation does not work and does not show an error
- Raj Ai Automation
- Default Data Loader: DOMMatrix is not defined error
- Feature: Per-node execution timestamp overlay on canvas during workflow run
- AI Agent + Vertex `gemini-3.5-flash`: 400 "missing thought_signature" on sequential multi-turn tool calls (post-#24982)
- PDF Loader in Pinecone Vector Store fails due to pdf-parse version conflict (v2 not supported)
- emailReadImap: add UID deduplication, batch size cap, and numeric uid enforcement
- Manual node execution fails with "Could not find a node" when autosave is disabled (N8N_WORKFLOWS_AUTOSAVE_DISABLED)
- Schedule Trigger stopped firing — workflow Published & active, manual executions succeed, no automated fires for 2+ hours
- [MCP SDK] create_workflow_from_code intermittently returns HTTP 500, often as a false negative (workflow persists anyway, causing duplicates on retry)
- Credential-load wedge: workflows using googleApi/jwtAuth credentials silently fail to execute after key rotation
- Google Sheets Trigger every minute is not working manual Execute is working sent email
- [BUG] Plugin marketplace MCP connector remains stuck "still connecting" when mcp-remote requires OAuth
- [redacted at user request]
- Opus 4.7 behavioral regression: loaded instruction-following discipline degraded in recent Claude Code/Cowork updates
- [BUG] Tailscale via Homebrew CLI + Mac App Store GUI, both Macs on macOS, Cowork blocked by VPN detector despite Tailscale being a mesh VPN with no traffic interception
- stopShellPty on tab switch kills active sessions (exit 143) — regression in May 27 build
- [BUG] Long URLs are broken into multiple lines and become unclickable in terminal output
- [BUG] claude rm/stop/reap SIGKILLs background session tree without SIGTERM grace, orphaning git index.lock and similar
- [BUG] Default git workflow in the system prompt was pushed without context or consent
- [MODEL] Inconsistent output quality / Ignoring instructions (overfitting and inappropriate repetition of Korean vocabulary)
- You've hit your weekly limit · resets May 31 at 5pm (Asia/Shanghai)
- Paid yearly subscription silently downgraded to Free with no user action
- [Regression v2.1.153] Plugin bash hooks fail with "echo: write error: Permission denied" on Windows (claude-mem, shell: "bash")
- [BUG] Connector toggles in conversation are not clickable — must click text label instead
- [remote-control] Input from mobile app/browser not reaching host session — output works fine
- Model fails to read/reference CLAUDE.md contents despite being loaded in context
- [BUG] Claude Desktop reinstall destroys Code chat history (transcripts + Recents) while regular Chat history, project files, and memory all survive
- Bypass mode clamps to Accept Edits even with the toggle ON (Claude Code Desktop 1.9255.2 / CC 2.1.149)
- [BUG] TUI input freezes randomly mid-typing — entire prompt becomes unresponsive for minutes
- [BUG] Cowork downloads Linux ELF binary instead of macOS binary on macOS Sonoma 14.8.7 — exit code 132 (SIGILL) on every session
- [Feature Request] Persistent project memory — sessions forget everything on close, forcing users to keep many sessions open
- [Bug] Thread context stale after sleep/resume, returns outdated date and calendar data
- [FEATURE] Add context window usage indicator and warning before auto-compaction
- [BUG] Dictation error: Invalid character in header content ["x-config-keyterms"] on Windows
- [Bug] Anthropic API Error: Server rate limiting despite normal usage
- Does delegating work to `claude -p` subprocesses reduce context accumulation in the parent session?
- [BUG] Claude Code hangs on M1 Mac when terminal says "opening browser to sign in" and browser opens
- [BUG] Claude_Preview MCP preview_start spawns dev server with main-repo cwd instead of session's worktree cwd
- [Bug] Anthropic API Error: Server rate limiting during request execution
- [Bug] Anthropic API Error: Server rate limiting on concurrent requests
- [Bug] Ultraplan ready notification fires before cloud agent completes execution
- [BUG] API 500 ERROR ALL THROUGHOUT THE DAY
- [BUG] Cowork: Live Artifacts folder path changed in 1.9255.2, no automatic migration from Documents\Claude\Artifacts
- [Bug] Auto-compact never triggers despite statusline reporting "100% context used" (v2.1.153, Max sub, 200K mode)
- [BUG] [Desktop / macOS] 'Open in → New Window' detached session: font renders smaller than main, no per-window controls, Cmd+/Cmd- keystrokes routed to main window instead
- Feature request: option to switch between classic and new minimal UI
- [Feature Request] Show timestamps for each message
- [BUG] Terminal corruption when permission prompt appears while navigating Agent Teams agent selection menu
- [FEATURE] Allow users to customize the background color of the Claude desktop app beyond the current light/dark theme presets.
- [BUG] Statusline not displaying on Windows [fixed]
- Background agent UI Stop button is a no-op for stuck agents — process keeps consuming tokens
- Background agents silently die on session pause/resume — no completion notification, no work recovery
- Add option to hide email address from welcome banner
- [BUG] SSH Remote: `projects` field in remote ~/.claude.json becomes null after desktop restart — jsonl files intact, UI shows 'No messages yet' for every session
- [Bug] Claude Code not applying fixes despite claiming to complete tasks
- billing is unfair and poorly documented
- [BUG] Claude Code on the web: declared plugins inactive on first session, require restart to fully load
- [BUG] Restore from archive deleted sessions instead of restoring them
- [BUG] M365 connector fails with AADSTS50011 in Cowork — localhost vs 127.0.0.1 redirect URI mismatch
- claude agents: workflow slash-commands missing from dispatch-input completion (regression-adjacent to #61424)
- Claude Desktop's Info.plist missing TCC usage strings, blocks all EventKit-based MCP servers
- False-positive safety blocks on self-administered governance amendments — request for owner-authority mode for verified professional users
- [BUG] Stop pushing "AUTO"-mode
- [DOCS] Plugin marketplace guide omits `skipLfs` option for git-based sources
- [DOCS] MCP docs omit combined startup notification for MCP server and connector authentication
- [DOCS] Agent view docs omit macOS Privacy & Security identity for background agents
- [DOCS] Npm update docs do not explain release-channel behavior for `claude update`
- [DOCS] Agent SDK docs omit `subagent_type: "claude"` worktree and output persistence behavior
- [DOCS] Background session docs omit `$CLAUDE_JOB_DIR` temp-file behavior
- [FR] mask env-var values in 'claude mcp get <server>' output
- [FR] subagent worktrees should not inherit stale local 'user.email' from prior dispatches
- [BUG] Windows: Grep tool leaks rg.exe + conhost.exe processes (~2000 zombies / 14 GB RAM in long sessions)
- [BUG] Stats dashboard "Peak hour" appears off by one hour
- [BUG] Diff highlight (teal SGR background) bleeds past changed text in 2.1.150–2.1.153
- [FEATURE] confirm before deleting session
- Plugin PostToolUse hooks still silently skip in Claude Desktop / Cowork (re-filing closed #51904)
- /code-review skill: silent fallback to main...HEAD reviews other people's commits, and JSON-only output is hard to read
- Monitor tool doesn't source the shell snapshot like Bash does; PATH-dependent tools (jq, sleep, etc.) fail in Monitor commands on macOS/Nix
- [Bug] Long input lines truncated with ellipsis while typing instead of wrapping in terminal UI
- [FEATURE] VS Code extension: Render submitted user messages as Markdown in chat
- OSC 52 copy from Claude TUI doesn't reach clipboard inside tmux (regression in 2.1.146–2.1.153)
- [BUG] RemoteTrigger create/update returns HTTP 400 with circular error: "event_type is required" / "unknown field event_type"
- [BUG] Option to hide or minimize the built-in "status footer" (multi-line debug/cost panel) [re-raise of #31475]
- [Bug] Feedback submissions being closed without review or action
- [FEATURE] Word-jump cursor navigation in Chat input (option+arrow / bindable actions)
- [FEATURE] ! shell mode: filesystem tab completion
- [BUG] API Error: Usage credits required for 1M context
- claude agents: OSC 52 clipboard emission broken in tmux (regression in 2.1.146–2.1.153)
- CLI crashes on macOS 15 M3 - exit code 1
- [FEATURE] Support Cmd+V image paste from clipboard
- [FEATURE] Enhance claude.ai M365 connector to support MS Planner
- [BUG] Slash command autocomplete hijacks pasted absolute file paths starting with /
- PreToolUse hook `if` filter false-positives on complex Bash commands
- [BUG] Diff panel hangs/whites out
- Feature Request: Support drag-and-drop for binary documents (.wps, .doc, .docx, .xlsx, .pdf) in VS Code extension
- [BUG] activation of 1M context in VSCode
- [FEATURE] Support i18n / language localization for built-in slash command outputs
- Ctrl+V para colar imagens deixou de funcionar no CLI (Windows, PowerShell)
- [FEATURE] Please add Norwegian (Bokmål/Nynorsk) language support to the Claude Code interface
- [BUG] OTel log events (claude_code.user_prompt, api_request_body, tool_decision, hook_execution_complete) emitted with empty trace_id/span_id while sibling spans correlate correctly
- [BUG] Cowork crashes on every message, no VM logs generated, missing AppData\Roaming\Claude
- [FEATURE] first-class session handoff + per-session token budgets for unattended runs
- [FEATURE] Smart paste: convert clipboard code to file reference chips (like Cursor)
- [Feature Request] Restore chat pin functionality to title chat submenu
- [BUG] SIGILL issues with version 2.1.153
- [BUG] Cowork plugin upload fails with generic "Plugin validation failed" when a `description` field in any SKILL.md frontmatter contains angle brackets (`<…>`)
- [BUG] Desktop App 2.1.144+: startup scanner deletes cliSessionId from claude-code-sessions local files on every launch — session not found on disk
- [Feature Request] Add keyboard shortcut to copy last message with proper formatting
- [MODEL] Opus 4.7 not 1M
- Allow naming/renaming background agents in `claude agents` view
- Stale worktrees in .claude/worktrees/ are never cleaned up, consuming massive disk space
- Agent worktrees are never cleaned up, silently consuming disk space
- Subagent worktrees not auto-cleaned when reviewer writes scratch files
- [Bug] Skill initialization hangs for extended duration in Plan Mode
- Claude Desktop writes malformed registry Run entry (nested escaped quotes) - crashes Windows Task Manager and other Run-key parsers
- IME candidate window shows at bottom-right corner instead of caret position (Windows CMD)
- [BUG] Pressing 'Escape' doesn't close the /BTW conversation when the main conversation is asking for approval
- [BUG] Opus 4.7 (1M) intermittently emits empty-string values for tool_use.input fields, killing the session
- FleetView agent UI shows "running" with incrementing elapsed time after agent has returned
- /doctor flags context-scoped cmd+c binding as macOS conflict (false positive)
- [BUG] Text Rendering in Elvish
- Desktop app: Bypass Permissions mode flips to Accept Edits on first prompt (M5 / macOS 26.5)
- [Workaround] Date-Weekday Verification Hook — Prevents Claude from writing wrong weekdays
- [BUG] Claude Code create c:/memfs directory without asking me.
- [BUG] Claude Code's Bash execution waits forever with no processes running
- [BUG] usage stays stuck waiting for 5 hr limit after upgrading to premium seat in team plan
- [Workflow tool] resume cache is unreachable for nontrivial workflows because LLM dispatchers can't transcribe args byte-exactly
- Code review (Preview): "Add a repository" shows no results for private GitHub org repos
- [BUG] /context commands blows up context
- [Feature Request] Add precache expiry hook to enable proactive compaction before token eviction
- [BUG] Context indicator shows 0% at session start despite ~20K+ tokens already loaded
- [Feature Request] Add semantic search for --resume session history
- [Feature Request] Add session search, tagging, and filtering capabilities
- [BUG] Cowork Dispatch reports "desktop not available" on Windows 11 while standard Cowork works normally
- [Bug] Claude Code provides incorrect suggestions with high confidence despite errors
- defaultMode: acceptEdits silently overrides per-path permissions.ask rules for Write/Edit
- [FEATUR configurable tip interval (e.g. tipIntervalSeconds: 30 in settings)E]
- Plugin marketplace fails to load: schema rejects 'displayName' key (v2.1.153)
- claude agents: in-session copy uses broken OSC 52 path while overview correctly uses tmux buffer
- [BUG] Plugin agent descriptions (and custom agents) load unconditionally into context — no parity with disable-model-invocation for skills
- Crashed ultrareview consumed a free credit despite producing zero findings
- [Bug] Character rendering issue - invisible or missing text display
- [BUG] Cowork: processo Claude Code encerra com código 3 — .claude.json não contém token de autenticação (Windows 11 25H2)
- [BUG] 2.1.153 silently discards tools/list response from rmcp 0.12.0 HTTP MCP server (works in 2.1.152, wire-identical handshake)
- VS Code extension: option to auto-resume last session when reopening a workspace folder
- [Bug] Conversation continuation failure
- [BUG] Cowork crashes every time I start a new chat or attempt to continue an existing one in any project. The error displayed is: "Claude Code è andato in crash
- [Bug] Unannounced quota changes
- Native update/install fails with 'socket connection was closed unexpectedly' behind proxy — undici TLS incompatibility
- [BUG] Session name reverting after manual change
- [BUG] 非正常思考,上下文过长时,一直显示思考,点击interrupt按钮失效
- Honor `tools:` frontmatter when an agent is invoked via `@mention` — strip `Task` only when the agent did not declare it
- macOS TCC popup still recurring on v2.1.153 — "2.1.153" would like to access data from other apps
- Claude Code leaks pty handles — exhausts pseudo-terminals on macOS after long session
- [Bug] Agent fails to execute or respond to user input
- [BUG] Persistent "Expecting value: line 1 column 1 (char 0)" JSON parse error after tool execution
- [Feature Request] Implement proactive unit test coverage recommendations for recurring bugs
- VS Code panel lacks status line + terminal lacks image paste in Codespaces, forcing a tradeoff
- `/powerup` only shows ~10 lessons — allow viewing the full catalog
- [Bug] Context contamination after auto-compact with unrelated email draft of Tejo/Sado Basin
- [Bug] VSCode terminal output displays corrupted text with garbled symbols
- [Feature Request] Add LaTeX/KaTeX math rendering to TUI
- [Bug] Sub-agent PR review results not validated by orchestrating agent
- Subagents on Pro 1M tier: trivial probes pass, real workloads fail at first tool call (probe-vs-workload divergence)
- Path-scoped rules and subdirectory CLAUDE.md not loaded when creating new files matching the pattern
- AskUserQuestion: cancelling during extended thinking poisons the whole session with 400 'thinking blocks cannot be modified' (2.1.153); concurrent prompts overwrite each other
- Ideas Missing from Claude Cowork Menu (Windows)
- [BUG_BOUNTY_SAFE_POC_2026] Prompt Injection RCE Test - Command Execution Proof
- [BUG] Cowork scheduled task: execution history row not showing after successful run
- Resuming an extended-thinking session fails permanently with 400 "thinking blocks cannot be modified" (transcript stores thinking text as empty but keeps signature)
- [Bug] Plugin-registered CwdChanged and FileChanged hooks don't fire (settings.json works) — v2.1.153
- Auto-archive on PR merge / branch delete — clarify autoArchiveSessions semantics or add dedicated opt-out
- `claude mcp add` echoes Authorization header value verbatim to stdout, leaks bearer tokens to terminal and session transcripts
- [BUG] Bug report — /insights skill, Claude Code The /insights skill outputs a malformed file path.
- Plugin slash commands render with '*'-inline format instead of two-column, despite matching official plugin shape
- [Bug] Unexpected long text generation without user input or goal
- [Bug] Thinking blocks causing task progression blocked without user modification
- [BUG] (Critical!) contamination by an unknown session simirlar to the report => [Bug] Context contamination after auto-compact with unrelated email draft of Tejo/Sado Basin #63137
- [Critical] Opus 4.7 Korean output degeneration — Korean grammar itself collapses in long contexts
- [BUG] Title: Autocompact buffer persists across /clear — wastes tokens for irrelevant old context
- [Bug] Auto-Compact loses user input before processing in conversation history
- Feature: per-invocation effort parameter + runtime session-config introspection for skills
- Auto-mode classifier mislabels Azure DevOps vote -5 as "Reject" when denying PR vote actions
- [BUG] Claude Desktop and Claude Code CLI never re-register MCP tools after OAuth 2.1 handshake on a remote HTTP server
- [BUG] Workspace file tags leak across sessions
- [BUG] Ink renderer crashes on Windows 11 build 26200 (Canary) duplicate banners, terminal mode leaks, mid-operation aborts
- [BUG] Claude Code Desktop issue
- PTY master fd leak in Claude desktop app exhausts macOS kern.tty.ptmx_max after ~2-3 days
- [BUG] Claude Code — Session Management after Unexpected Interruption
- [Windows] Cowork OpenTelemetry exporter does not initialize - zero events emitted to any destination, including loopback
- [Bug] Opus 4.7: 400 `thinking blocks ... cannot be modified` on long extended-thinking sessions, triggered by history-altering events (scheduled prompts / parallel tool-call cancellation)
- [BUG] API Error: Server is temporarily limiting requests (not your usage limit) · Rate limited
- Multi-plugin custom marketplace: only first plugin registered in installed_plugins.json, skills don't load
- [BUG] Git push through the SDK's git proxy fan-outs into ~500 GitHub REST API calls, exhausting the 5,000/hour budget after a handful of pushes
- [BUG] Claude took liberties it really shouldn't with my global config
- [BUG] Agent window focus lost after navigating with arrow keys, causing scroll deadlock
- [BUG] `--model` flag silently ignored in interactive sessions (works in `--print` only)
- [BUG] Dispatch permanently shows "desktop appears offline" on Windows 11 - never worked on first use
- feat: support per-command enableWeakerNetworkIsolation as safer alternative to dangerouslyDisableSandbox
- /code-review outputs a raw JSON array instead of readable findings
- [BUG] Cowork — Additional allowed domains ignored on Team plan; same domain works on Pro plan
- Haiku
- [Bug] False positive blocking beneficial outcomes in tool execution
- 3P Bedrock SSO: credentials silently expire without triggering re-auth on day 2+
- CLAUDE_AUTOCOMPACT_PCT_OVERRIDE in settings.json env block silently ignored by autocompact logic
- Auto-compaction deletes main session JSONL before verifying summary completion, causing data loss
- [Bug] Claude Code not executing stated actions or producing expected results
- [FEATURE] Deferred Messages — Queue Input for End of Turn
- [BUG] Up/Down arrows in input box navigate history instead of moving cursor — regression in 2.1.149+
- Cancelling a parallel tool-call batch corrupts thinking blocks -> 400 "thinking blocks cannot be modified" permanently wedges the session
- Claude Code caused data loss, then contradicted itself about recovery (two incidents, one session)
- [Bug] Unclear error messages from Claude Code CLI
- [Bug] Agent tool rejecting due to context size limit exceeded
- claude agents: daemon and bg-spare processes spin at ~100% CPU when idle
- [BUG] Compaction fails with "context window limit" error even when context usage is low (e.g., 20%) — regression in v2.1.153
- Remote Control entitlement lost after May 27-28 incident — `Error: Remote Control is not yet enabled for your account` on active Max subscription
- PreToolUse hook exit code 2 does not block Write tool
- [Bug] Thinking blocks in latest assistant message are immutable
- GUI: dispatch file:// and custom-scheme clicks to OS shell handler
- Show current model in statusLine by default
- [Bug] Agent console becomes unresponsive to keyboard input after multiple agents initialized
- [FEATURE] PreToolUse hooks should have a way of updating the environment
- [Bug] Unable to start or use Claude Code CLI
- [BUG] Repository not visible in Claude Code web repo picker
- Session permanently wedged on 400 "thinking blocks cannot be modified" after parallel tool_results
- [Bug] @ autocomplete loses sibling repos after a file edit in multi-repo workspace
- Unclear error message when creating sub-agent without authentication
- [Bug] Anthropic API errors causing frequent failures and high token usage
- [BUG] @ mention file picker only shows packages, not individual files (desktop app - Code tab)
- [Bug] TUI panel footer remains sticky and consumes excessive terminal space
- PR-status polling exhausts GitHub GraphQL rate limit on repos with many open PRs
- [BUG] Windows: welcome panel not shown in some project folders (2.1.153)
- [Bug] Anthropic API Error: thinking blocks corrupted during context compaction with extended thinking enabled
- API 400 "thinking blocks cannot be modified" permanently bricks session during agent activation (interleaved thinking + tool use)
- Right-click Copy copies the whole message instead of the selection; pasted text retains dark background
- Mid-session model switch corrupts conversation when extended thinking is enabled (API 400: 'thinking blocks cannot be modified')
- [BUG] Markdown file links in chat output do not open files when clicked (VS Code extension)
- Stuck retry loop: `400 thinking blocks cannot be modified` on large interleaved-thinking turns using AskUserQuestion
- [FEATURE] Prompt user for approval before auto-compaction proceeds
- Custom MCP connectors not attachable to scheduled routines — no UUID discovery path
- [BUG] Claude in Chrome — Navigation blocked for teams.cloud.microsoft and outlook.cloud.microsoft after Microsoft domain migration**
- [BUG] Claude Desktop — Personal plugins panel renders list but is entirely non-interactive (macOS, v1.9255.2)
- [Bug] error when using Workflows
- [BUG] Persistent "update available" notification despite being on latest version
- [BUG] Sweep Agent from /code-review never completes
- [Bug] Tool calls not executing or returning results
- [FEATURE] Cloud-synced memory and settings across machines
- [Bug] Terminal UI freezes when Ctrl+O view exits during interactive prompt in plan mode
- Continuous api errors when using claude code with Opus 4.7 with thinking on low
- [Feature Request] Add support for installing and using previous Claude Code versions
- [Bug] Extended Thinking: Summarized thinking blocks fail signature validation when resent to API
- [Bug] Anthropic API Error: 'thinking' blocks cannot be modified
- [Bug] Anthropic API Error: Thinking blocks cannot be modified with extended thinking mode
- Feature request: Lazy/on-demand MCP server connections
- [Bug] Tool Arguments Parsed as String Instead of Object
- [Bug] Anthropic API Error: Insufficient context provided
- [Bug] Claude Opus occasionally uses moskovian(russian) orthography instead of Ukrainian in system-prompted responses
- Opus 4.8: backgrounded task completions (subagents AND Bash) crash with 400 "thinking blocks cannot be modified"
- [Bug] Opus 4.7 fabricates stable preferences ("my default") to rationalize arbitrary choices when challenged
- [Bug] Unable to update Claude Code CLI
- [BUG] Desktop app: /remote-control mints link + connects bridge (main.log) but in-chat link/QR panel never renders
- Feature: sessionColor and sessionName in .claude/settings.json
- [BUG] Anthropic API error: thinking blocks
- [FEATURE] Support Remote MCPs in Cowork as in Claude Code
- [Bug] Anthropic API Error: 400 Bad Request with Redacted Thinking - 0 4.7 & 4.8
- [Bug] Anthropic API Error: Cannot modify thinking blocks from different model versions
- Interleaved thinking + multi-tool turn corrupts thinking block (text blanked, signature kept) → permanent 400 'blocks must remain as they were'
- [BUG] Mode/permission changes mid-tool-loop (effortLevel: xhigh) poisons entire session
- Session failure log: Opus 4.6 ignores its own rules for an entire session
- [BUG] "400 Guardrail was enabled" error when using Claude Opus 4.8 with AWS Bedrock
- [Feature Request] Add subagent approach selection option to avoid accidental feedback
- Persistent 400 'thinking blocks in the latest assistant message cannot be modified' — interleaved thinking persisted with empty text + signature bricks sessions
- [BUG] DesktopvsApp
- [BUG] Opus 4.7 cache hit rate collapse after May 27 incident — Messages 1.1k→88.9k in 9 minutes, $630/session
- [Bug] Anthropic API Error: Invalid thinking block format
- [BUG] FUCK CLAUDE
- Opus 4.8 extended thinking: Stop hook block re-entry corrupts thinking blocks → 400
- [Bug] 4.8 Fails when accessing previous model history
- [Bug] Unintended File Modifications During Execution
- [DOCS] Model configuration docs omit lean system prompt default scope and model exceptions
- Add "Always allow globally" option to permission prompts
- Server-side model upgrade (Opus 4.7→4.8) wedges in-flight sessions with `thinking blocks cannot be modified` 400
- [DOCS] AskUserQuestion docs missing multiple-choice prompt decision threshold
- [DOCS] Agent view docs omit shell-command background session launch syntax
- [DOCS] Agent view dispatch input docs incorrectly imply `/logout` dispatches as a prompt
- [DOCS] Claude in Chrome docs omit connected-browser selection behavior
- [DOCS] Plugin docs omit `defaultEnabled: false` for opt-in plugins
- Feature Request: Customizable chat text colors for user and assistant messages
- [DOCS] `/plugin` Discover tab docs omit directory-based suggested plugin pins
- VSCode Chrome integration silently fails: 3 distinct bugs
- [DOCS] MCP stdio docs omit session environment variables
- [Bug] Anthropic API error on second request within session with Claude Opus 4.8
- Cowork emits a blank session "index" handoff on focus when a CLI session is paused awaiting input
- [DOCS] MCP docs omit `claude mcp list/get` pending-approval output for unapproved project servers
- [BUG] /compact fails with 400 error when last assistant turn contains thinking blocks
- [DOCS] `/claude-api` docs omit Opus 4.8 migration guidance
- [DOCS] Fast mode docs still recommend deprecated Opus 4.6 override variable
- [DOCS] Bash tool docs omit `$TMPDIR` consistency across sandboxed and unsandboxed commands
- [Bug] Anthropic API Error: 400 Bad Request on Extended Thinking
- [DOCS] Background session docs omit worktree-isolation behavior for spawned subagents
- Built-in mechanistic self-verification of verifiable claims (symmetric to the auto permission gate)
- [DOCS] Worktree docs do not clarify `worktree.baseRef: "head"` inside linked worktrees
- [BUG] Excessive RAM usage with multiple parallel chats (~10 sessions → 30 GB memory pressure, macOS OOM)
- [DOCS] Managed MCP policy docs omit invalid `allowedMcpServers`/`deniedMcpServers` entry behavior
- [DOCS] Effort docs omit `CLAUDE_CODE_ALWAYS_ENABLE_EFFORT` unsupported-model behavior
- Regression (2.1.147–2.1.150?): resuming an extended-thinking session after a CC update/model-switch → unrecoverable 400, session bricked
- [DOCS] Windows updater docs omit `claude.exe` in-use recovery guidance
- [DOCS] VS Code auto mode docs still tie mode-picker visibility to bypass-permissions setting
- [DOCS] MCP docs omit `/mcp` tool list and detail rendering behavior
- [DOCS] Fine-grained tool streaming docs still describe provider opt-in behavior
- bypassPermissions: session startup reads flat pref, GUI toggle writes per-account pref — they never sync
- [BUG] Claude Desktop Code tab causes disk write limit violation — 8.5GB in 11 min, macOS kills app (M5, v1.9659.1)
- Ultrareview v2.1.96: docs describe /tasks command + claude ultrareview --json subcommand that don't exist; findings hard to read after completion
- I'd be happy to help create a GitHub issue title, but I don't see the error message in your message. Could you please share the specific error you're encountering? That way I can generate an accurate and descriptive issue title for you.
- [BUG] Claude in Chrome `file_upload` rejects all scheduled-task sessions with misleading error (real cause: INVALID_SESSION)
- Extended thinking: signed thinking block 'cannot be modified' (400) permanently wedges session
- RTL text support for Hebrew (and Arabic) in Claude Code
- [Bug] Random errors occurring across multiple operations