Skip to content

fix(gateway): surface headless LaunchAgent state#91614

Merged
obviyus merged 3 commits into
openclaw:mainfrom
fuller-stack-dev:codex/macos-gateway-headless-state
Jun 10, 2026
Merged

fix(gateway): surface headless LaunchAgent state#91614
obviyus merged 3 commits into
openclaw:mainfrom
fuller-stack-dev:codex/macos-gateway-headless-state

Conversation

@fuller-stack-dev

@fuller-stack-dev fuller-stack-dev commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

Summary

  • classify macOS gui/$UID LaunchAgent bootstrap/print failures as a distinct missing GUI-session state
  • stop gateway restart recovery from falling through to unmanaged-process restart when LaunchAgent bootstrap cannot access a logged-in GUI session
  • update gateway status and doctor hints so installed-but-headless LaunchAgents explain the GUI-session requirement instead of only saying "installed but not loaded"

Real behavior proof

Behavior addressed: macOS Gateway LaunchAgent installed-but-not-loaded/headless state handling for status, doctor, start/restart recovery, and bootstrap repair.

Real environment tested: local macOS Codex worktree on macOS with an active Aqua gui/501 session, plus delegated Blacksmith Testbox attempts.

Exact steps or command run after this patch:

  • pnpm docs:list
  • pnpm oxfmt src/daemon/service-runtime.ts src/daemon/launchd.ts src/daemon/launchd.test.ts src/cli/daemon-cli/launchd-recovery.ts src/cli/daemon-cli/launchd-recovery.test.ts src/cli/daemon-cli/shared.ts src/cli/daemon-cli/shared.test.ts src/cli/daemon-cli/status.print.ts src/cli/daemon-cli/status.print.test.ts src/cli/daemon-cli/lifecycle.test.ts src/commands/doctor-format.ts src/commands/doctor-format.test.ts
  • git diff --check
  • node scripts/run-vitest.mjs src/daemon/launchd.test.ts src/cli/daemon-cli/launchd-recovery.test.ts src/cli/daemon-cli/shared.test.ts src/cli/daemon-cli/status.print.test.ts src/cli/daemon-cli/lifecycle.test.ts src/commands/doctor-format.test.ts
  • launchctl print gui/$(id -u)
  • launchctl print gui/999999/com.openclaw.gateway
  • launchctl bootstrap gui/999999 /tmp/openclaw-codex-missing.plist
  • .agents/skills/autoreview/scripts/autoreview --mode local

Evidence after fix: terminal output from the local macOS setup shows this machine has a usable GUI domain, so the exact headless Bootstrap failed: 125: Domain does not support specified action path is not directly reproducible here. The same live launchctl probes show the domain/label error surface that the patch classifies, and focused regression coverage exercised the unavailable headless branch.

$ id -u
501

$ launchctl print gui/501 | sed -n '1,12p'
gui/501 = {
	type = login
	handle = 100017
	active count = 467
	service count = 466
	active service count = 157
	creator = loginwindow[598]
	creator euid = 0
	session = Aqua
	endpoint destination = com.apple.xpc.launchd.domain.user.501
	auxiliary bootstrapper = com.apple.xpc.otherbsd (complete)
	security context = {

$ launchctl print gui/999999/com.openclaw.gateway
Bad request.
Could not find domain for user gui: 999999

$ launchctl bootstrap gui/999999 /tmp/openclaw-codex-missing.plist
Could not find domain for user gui: 999999

Supplemental regression proof: focused Vitest wrapper passed 3 shards: 2 unit-fast files / 13 tests, 1 daemon file / 87 tests, 3 cli files / 45 tests. Autoreview initially found the doctor hint priority gap; after fixing src/commands/doctor-format.ts, rerun was clean: autoreview clean: no accepted/actionable findings reported.

Observed result after fix: LaunchAgent headless GUI bootstrap failures now produce a missingGuiSession runtime/recovery state, status and doctor prioritize GUI-session guidance over generic missing-supervision wording, and restart recovery does not fall through to unmanaged restart after that launchd failure.

What was not tested: a true headless macOS loginwindow-disabled host where launchctl bootstrap gui/$UID ... returns Bootstrap failed: 125: Domain does not support specified action; this local Mac has an active Aqua session for gui/501. Final post-doctor-fix remote pnpm check:changed could not complete because Blacksmith Testbox leases tbx_01ktnbgxkyn9s5bf0xj652azgx and tbx_01ktnbhsvaeykqj4qd9f5kbevt shut down before command execution; default Crabbox mapped to Azure but this host lacks Azure CLI/session; direct AWS Crabbox requires broker login. A prior Blacksmith Testbox changed gate before the doctor follow-up completed successfully on tbx_01ktnavppcknwpxsfnhn9g6cd0 with pnpm check:changed exit 0.

@openclaw-barnacle openclaw-barnacle Bot added gateway Gateway runtime cli CLI command changes commands Command implementations size: M triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. labels Jun 9, 2026
@clawsweeper

clawsweeper Bot commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge. Reviewed June 10, 2026, 1:14 AM ET / 05:14 UTC.

Summary
The PR adds a missingGuiSession LaunchAgent runtime state, routes it through gateway restart recovery, status, and doctor hints, and adds focused regression coverage.

PR surface: Source +128, Tests +205. Total +333 across 14 files.

Reproducibility: no. high-confidence exact host reproduction was established for a true headless macOS GUI-session failure. The source path is clear on current main, and the PR includes live launchctl error-shape proof plus regression tests for the unavailable branch.

Review metrics: 2 noteworthy metrics.

  • Restart fallback behavior: 1 fallback path stopped. The PR stops gateway restart from falling through to unmanaged restart after a LaunchAgent GUI-session bootstrap failure.
  • Runtime state surface: 1 optional state added. The new missingGuiSession flag can appear in runtime/status diagnostics, so consumers should tolerate the additive state.

Merge readiness
Overall: 🐚 platinum hermit
Proof: 🐚 platinum hermit
Patch quality: 🐚 platinum hermit
Result: ready for maintainer review.

Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch.

Rank-up moves:

  • [P2] Optional risk reducer: add a redacted openclaw gateway status or openclaw doctor transcript from a true headless macOS host if maintainers want OS-level proof before merge.

Risk before merge

  • [P2] The PR deliberately changes gateway restart recovery: after a LaunchAgent GUI-session bootstrap failure, the current unmanaged restart fallback is blocked, so headless or SSH operators with an existing listener will now receive a GUI-session failure instead of a SIGUSR1 restart attempt.
  • [P1] gateway status --json and doctor/runtime consumers can now see a new optional missingGuiSession runtime state; this is additive, but it is still a public diagnostic shape change.
  • [P1] The supplied proof on latest head includes live launchctl output and focused tests, but not a true loginwindow-disabled macOS host returning the exact headless Bootstrap failed: 125 path.

Maintainer options:

  1. Accept the fail-closed LaunchAgent recovery (recommended)
    Land if maintainers agree that GUI-session bootstrap failures should stop managed restart recovery instead of falling through to unmanaged listener restart.
  2. Preserve fallback compatibility explicitly
    If headless operators still need unmanaged restart as the default, revise the PR to preserve that fallback and add an explicit strict LaunchAgent path with tests.
  3. Wait for true headless macOS proof
    Pause merge until a loginwindow-disabled or SSH-only macOS host shows the gateway status and doctor output after this patch.

Next step before merge

  • [P2] Human review should decide whether the compatibility and availability tradeoff in restart fallback behavior is acceptable; I did not find a narrow automated repair to request.

Security
Cleared: No concrete security or supply-chain concern found; the diff is bounded to launchd state classification, CLI/doctor presentation, and tests with no dependency, workflow, secret, or permission expansion.

Review details

Best possible solution:

Keep the launchd-owned classification and CLI/doctor guidance, then land only after maintainers accept the fail-closed restart fallback behavior and current proof level.

Do we have a high-confidence way to reproduce the issue?

No high-confidence exact host reproduction was established for a true headless macOS GUI-session failure. The source path is clear on current main, and the PR includes live launchctl error-shape proof plus regression tests for the unavailable branch.

Is this the best way to solve the issue?

Yes, this is likely the best code direction: classify the launchd error at the launchd runtime boundary and let CLI status, restart recovery, and doctor render that typed state. The remaining question is not the layer, but whether maintainers accept the stricter restart fallback behavior before merge.

AGENTS.md: found and applied where relevant.

Codex review notes: model gpt-5.5, reasoning high; reviewed against e9671ed60327.

Label changes

Label changes:

  • add proof: sufficient: Contributor real behavior proof is sufficient. The PR body and latest proof workflow include after-fix live terminal output for the relevant launchctl GUI-domain error surface plus regression proof; the only proof gap is a true headless macOS host.
  • add rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🐚 platinum hermit and patch quality is 🐚 platinum hermit.
  • add status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (live_output): The PR body and latest proof workflow include after-fix live terminal output for the relevant launchctl GUI-domain error surface plus regression proof; the only proof gap is a true headless macOS host.
  • remove rating: 🌊 off-meta tidepool: Current PR rating is rating: 🐚 platinum hermit, so this older rating label is no longer current.

Label justifications:

  • P2: This is a normal-priority macOS gateway reliability fix with limited platform scope but meaningful operator impact.
  • merge-risk: 🚨 compatibility: The PR changes restart fallback behavior and adds a public runtime diagnostic state that existing scripts may observe.
  • merge-risk: 🚨 availability: Merging can make gateway restart fail closed on headless LaunchAgent hosts instead of attempting unmanaged process recovery.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🐚 platinum hermit and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (live_output): The PR body and latest proof workflow include after-fix live terminal output for the relevant launchctl GUI-domain error surface plus regression proof; the only proof gap is a true headless macOS host.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body and latest proof workflow include after-fix live terminal output for the relevant launchctl GUI-domain error surface plus regression proof; the only proof gap is a true headless macOS host.
Evidence reviewed

PR surface:

Source +128, Tests +205. Total +333 across 14 files.

View PR surface stats
Area Files Added Removed Net
Source 7 175 47 +128
Tests 7 207 2 +205
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 14 382 49 +333

What I checked:

  • Current main collapses headless GUI-domain print failures into generic supervision state: On current main, readLaunchAgentRuntime returns missingSupervision for any failed launchctl print when the plist exists; there is no distinct GUI-session state for unsupported gui/$UID failures. (src/daemon/launchd.ts:568, e9671ed60327)
  • Current main can fall through to unmanaged restart recovery: recoverInstalledLaunchAgent returns null for failed bootstrap repair, and runDaemonRestart then tries restartGatewayWithoutServiceManager, so a LaunchAgent GUI-session failure can fall through to unmanaged restart handling. (src/cli/daemon-cli/launchd-recovery.ts:28, e9671ed60327)
  • PR head classifies unsupported GUI domains at the launchd owner boundary: At the PR head, readLaunchAgentRuntime sets missingGuiSession for unsupported GUI-domain details and repairLaunchAgentBootstrap returns a typed gui-session-unavailable result instead of a generic bootstrap failure. (src/daemon/launchd.ts:574, ae5e34e66793)
  • PR head routes doctor to runtime hints before install guidance: The doctor flow reads runtime for local macOS gateways even when not loaded, skips install/bootstrap guidance for missingGuiSession, and notes the runtime hint instead. (src/commands/doctor-gateway-daemon-flow.ts:229, ae5e34e66793)
  • Regression coverage exercises the new state and fallback behavior: The PR adds launchd tests for both Bootstrap failed: 125 and Could not find domain for user gui, a restart test that avoids unmanaged fallback, and doctor tests that prefer GUI-session hints over install guidance. (src/daemon/launchd.test.ts:431, ae5e34e66793)
  • Latest head has CI and proof workflow success: The latest PR head ae5e34e667931d6f558420e8cdfc4f6343c842fe has successful CI and Real behavior proof workflow runs. (ae5e34e66793)

Likely related people:

  • steipete: Recent history shows repeated work on launchd recovery, doctor gateway checks, status output, and launchd documentation across the touched surfaces. (role: recent area contributor; confidence: high; commits: fd968bfb2d16, 3b914ca40bc8, 975d40d47483; files: src/cli/daemon-cli/lifecycle.ts, src/commands/doctor-gateway-daemon-flow.ts, src/daemon/launchd.ts)
  • vincentkoc: The macOS LaunchAgent supervision state currently being refined appears to trace through the fix(daemon): reconcile macOS LaunchAgent supervision state work that touched launchd, status, and doctor surfaces. (role: adjacent feature owner; confidence: high; commits: 60d4d5e1fa05; files: src/daemon/launchd.ts, src/cli/daemon-cli/status.print.ts, src/commands/doctor-gateway-daemon-flow.ts)
  • obviyus: Current-main history includes gateway status/probe work in the same status presentation area, and the latest PR commit also refines missing launchd GUI domain handling. (role: adjacent gateway status contributor; confidence: medium; commits: 485c258aaf96, ae5e34e66793; files: src/cli/daemon-cli/status.print.ts, src/daemon/launchd.ts, src/commands/doctor-gateway-daemon-flow.ts)
What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

How this review workflow works
  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.

@clawsweeper clawsweeper Bot added the rating: 🌊 off-meta tidepool PR readiness rating does not apply to this item. label Jun 9, 2026
@openclaw-barnacle openclaw-barnacle Bot added proof: supplied External PR includes structured after-fix real behavior proof. and removed triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. labels Jun 9, 2026
@fuller-stack-dev

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

Real behavior proof was updated in the PR body and the fresh Real behavior proof workflow passed on d40fcfc359677f3406209b61cd8d49487b817c1c: https://github.com/openclaw/openclaw/actions/runs/27185545577

@clawsweeper

clawsweeper Bot commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

@clawsweeper clawsweeper Bot added rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. P2 Normal backlog priority with limited blast radius. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. merge-risk: 🚨 availability 🚨 May cause crashes, hangs, restart loops, stalls, or process outages. and removed rating: 🌊 off-meta tidepool PR readiness rating does not apply to this item. labels Jun 9, 2026
@fuller-stack-dev

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

Addressed the doctor finding in e8feb58: doctor now reads macOS LaunchAgent runtime before the not-loaded branch and routes gui-session-unavailable bootstrap failures through the runtime hint path instead of generic install/bootstrap guidance.

Verification:

  • Real behavior proof passed on e8feb58: https://github.com/openclaw/openclaw/actions/runs/27254185221
  • node scripts/run-vitest.mjs src/commands/doctor-gateway-daemon-flow.test.ts src/commands/doctor-format.test.ts
  • pnpm tsgo:test:src
  • .agents/skills/autoreview/scripts/autoreview --mode commit --commit HEAD: clean, no accepted/actionable findings

@clawsweeper

clawsweeper Bot commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

@clawsweeper clawsweeper Bot added rating: 🌊 off-meta tidepool PR readiness rating does not apply to this item. and removed rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels Jun 10, 2026
@obviyus obviyus force-pushed the codex/macos-gateway-headless-state branch from 0f37ce1 to ae5e34e Compare June 10, 2026 05:05
@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed rating: 🌊 off-meta tidepool PR readiness rating does not apply to this item. labels Jun 10, 2026
@obviyus obviyus merged commit c7b4c6b into openclaw:main Jun 10, 2026
182 of 186 checks passed
@obviyus

obviyus commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

Landed via rebase onto main.

  • Scoped tests: node scripts/run-vitest.mjs src/daemon/launchd.test.ts src/commands/doctor-gateway-daemon-flow.test.ts src/cli/daemon-cli/launchd-recovery.test.ts src/cli/daemon-cli/shared.test.ts src/cli/daemon-cli/status.print.test.ts src/cli/daemon-cli/lifecycle.test.ts src/commands/doctor-format.test.ts
  • Review: .agents/skills/autoreview/scripts/autoreview --mode branch --base origin/main
  • Changelog: not updated; OpenClaw release generation owns CHANGELOG.md
  • Land commit: ae5e34e
  • Merge commit: c7b4c6b

Thanks @fuller-stack-dev!

eleboucher pushed a commit to eleboucher/homelab that referenced this pull request Jun 12, 2026
…26.6.6) (#1040)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [ghcr.io/openclaw/openclaw](https://openclaw.ai) ([source](https://github.com/openclaw/openclaw)) | patch | `2026.6.5` → `2026.6.6` |

---

### Release Notes

<details>
<summary>openclaw/openclaw (ghcr.io/openclaw/openclaw)</summary>

### [`v2026.6.6`](https://github.com/openclaw/openclaw/blob/HEAD/CHANGELOG.md#202666)

[Compare Source](openclaw/openclaw@v2026.6.5...v2026.6.6)

##### Highlights

- Security boundaries are substantially tighter across transcripts, sandbox binds, host environment inheritance, MCP stdio, Codex HTTP access, native search policy, elevated sender checks, deleted-agent ACP bypasses, loopback tools, Discord moderation, and Teams group actions; exec approvals now fail closed on timeout. ([#&#8203;91529](openclaw/openclaw#91529), [#&#8203;91618](openclaw/openclaw#91618), [#&#8203;91615](openclaw/openclaw#91615), [#&#8203;91619](openclaw/openclaw#91619), [#&#8203;91741](openclaw/openclaw#91741), [#&#8203;91745](openclaw/openclaw#91745), [#&#8203;91746](openclaw/openclaw#91746), [#&#8203;91748](openclaw/openclaw#91748), [#&#8203;91749](openclaw/openclaw#91749), [#&#8203;91750](openclaw/openclaw#91750), [#&#8203;91751](openclaw/openclaw#91751), [#&#8203;91752](openclaw/openclaw#91752), [#&#8203;91763](openclaw/openclaw#91763), [#&#8203;89938](openclaw/openclaw#89938)) Thanks [@&#8203;joshavant](https://github.com/joshavant), [@&#8203;pgondhi987](https://github.com/pgondhi987), [@&#8203;mmaps](https://github.com/mmaps), [@&#8203;eleqtrizit](https://github.com/eleqtrizit), [@&#8203;shakkernerd](https://github.com/shakkernerd), and [@&#8203;drobison00](https://github.com/drobison00).
- Telegram delivery is safer and more coherent: account-scoped topics route to the right agent, streamed text survives tool calls, `/compact` works on generic ingress, callback handling uses concrete APIs, draft chunking is shared, durable dispatch dedupe moved into the SDK, and unauthorized DM text stays out of cache and prompt context. ([#&#8203;91189](openclaw/openclaw#91189), [#&#8203;88682](openclaw/openclaw#88682), [#&#8203;89588](openclaw/openclaw#89588), [#&#8203;90212](openclaw/openclaw#90212), [#&#8203;91876](openclaw/openclaw#91876), [#&#8203;91874](openclaw/openclaw#91874), [#&#8203;91904](openclaw/openclaw#91904), [#&#8203;91478](openclaw/openclaw#91478), [#&#8203;91915](openclaw/openclaw#91915)) Thanks [@&#8203;codysai001](https://github.com/codysai001), [@&#8203;alexzhu0](https://github.com/alexzhu0), [@&#8203;joelnishanth](https://github.com/joelnishanth), [@&#8203;snowzlm](https://github.com/snowzlm), [@&#8203;obviyus](https://github.com/obviyus), and [@&#8203;sallyom](https://github.com/sallyom).
- iMessage recovery and delivery now cover always-on inbound restart, durable echo markers, block streaming, idle approval discovery, hardened outbound transport, and actionable inbound startup diagnostics. ([#&#8203;91335](openclaw/openclaw#91335), [#&#8203;91449](openclaw/openclaw#91449), [#&#8203;88969](openclaw/openclaw#88969), [#&#8203;88530](openclaw/openclaw#88530), [#&#8203;91783](openclaw/openclaw#91783), [#&#8203;91785](openclaw/openclaw#91785)) Thanks [@&#8203;omarshahine](https://github.com/omarshahine), [@&#8203;jmissig](https://github.com/jmissig), and [@&#8203;colmbrogan](https://github.com/colmbrogan).
- Browser and MCP connectivity gained existing-session CDP support, discovered WebSocket validation, default-profile `cdpUrl` handling, safer browser-output boundaries, Streamable HTTP loopback transport, corrected OAuth/SSE authorization handling, and broader schema compatibility. ([#&#8203;91422](openclaw/openclaw#91422), [#&#8203;89851](openclaw/openclaw#89851), [#&#8203;91736](openclaw/openclaw#91736), [#&#8203;91747](openclaw/openclaw#91747), [#&#8203;91451](openclaw/openclaw#91451), [#&#8203;80143](openclaw/openclaw#80143)) Thanks [@&#8203;pgondhi987](https://github.com/pgondhi987), [@&#8203;anagnorisis2peripeteia](https://github.com/anagnorisis2peripeteia), [@&#8203;lifuyue](https://github.com/lifuyue), [@&#8203;eleqtrizit](https://github.com/eleqtrizit), [@&#8203;LiuwqGit](https://github.com/LiuwqGit), and [@&#8203;HemantSudarshan](https://github.com/HemantSudarshan).
- Control UI startup and first-reply latency are lower through cached model metadata, removal of the startup catalog wait, lazy slash-command loading, and first-event tracing with slow-reply diagnostics. ([#&#8203;91531](openclaw/openclaw#91531), [#&#8203;91538](openclaw/openclaw#91538), [#&#8203;91568](openclaw/openclaw#91568), [#&#8203;91583](openclaw/openclaw#91583), [#&#8203;91598](openclaw/openclaw#91598))
- Provider support expands with OpenRouter OAuth onboarding and Claude Fable 5 adaptive thinking, while Codex sessions keep correct compaction ownership, local models skip guardian review, dynamic tool progress normalizes cleanly, and Gemma 4 reasoning replay is preserved. ([#&#8203;91830](openclaw/openclaw#91830), [#&#8203;91882](openclaw/openclaw#91882), [#&#8203;91590](openclaw/openclaw#91590), [#&#8203;88630](openclaw/openclaw#88630), [#&#8203;88768](openclaw/openclaw#88768), [#&#8203;91696](openclaw/openclaw#91696)) Thanks [@&#8203;Patrick-Erichsen](https://github.com/Patrick-Erichsen), [@&#8203;joshavant](https://github.com/joshavant), [@&#8203;bdjben](https://github.com/bdjben), and [@&#8203;Coder-Wangyankun](https://github.com/Coder-Wangyankun).

##### Changes

- CLI progress: emit Claude CLI commentary progress events and bridge inter-tool commentary into channel progress without exposing internal protocol scaffolding. ([#&#8203;89834](openclaw/openclaw#89834), [#&#8203;90883](openclaw/openclaw#90883)) Thanks [@&#8203;anagnorisis2peripeteia](https://github.com/anagnorisis2peripeteia).
- Observability: allow trusted diagnostics channels to capture tool input/output content, add first-assistant-event traces, and warn on slow initial replies. ([#&#8203;91256](openclaw/openclaw#91256), [#&#8203;91568](openclaw/openclaw#91568), [#&#8203;91583](openclaw/openclaw#91583)) Thanks [@&#8203;amknight](https://github.com/amknight).
- Plugins/ClawHub: dogfood reusable package publishing, let dry runs skip publish approval, allow declared installed trusted hooks, report managed plugin version drift, and warn instead of failing on retired Skill Workshop configuration. ([#&#8203;91574](openclaw/openclaw#91574), [#&#8203;91591](openclaw/openclaw#91591), [#&#8203;90004](openclaw/openclaw#90004), [#&#8203;90927](openclaw/openclaw#90927), [#&#8203;90838](openclaw/openclaw#90838)) Thanks [@&#8203;Patrick-Erichsen](https://github.com/Patrick-Erichsen), [@&#8203;brokemac79](https://github.com/brokemac79), and [@&#8203;lonexreb](https://github.com/lonexreb).
- Memory/providers: move the local llama.cpp runtime into its provider plugin, batch embeddings across files, persist the agent model catalog cache, and keep QMD JSON search one-shot while filtering stale REM recall previews. ([#&#8203;91324](openclaw/openclaw#91324), [#&#8203;89138](openclaw/openclaw#89138), [#&#8203;90457](openclaw/openclaw#90457), [#&#8203;91837](openclaw/openclaw#91837), [#&#8203;91851](openclaw/openclaw#91851)) Thanks [@&#8203;osolmaz](https://github.com/osolmaz), [@&#8203;mushuiyu886](https://github.com/mushuiyu886), [@&#8203;ai-hpc](https://github.com/ai-hpc), and [@&#8203;TurboTheTurtle](https://github.com/TurboTheTurtle).
- Channels/mobile: add the QQBot group mention toggle, improve iPad and iPhone control surfaces, and expose the active connection host in the TUI footer. ([#&#8203;91423](openclaw/openclaw#91423), [#&#8203;91557](openclaw/openclaw#91557), [#&#8203;89909](openclaw/openclaw#89909)) Thanks [@&#8203;cxyhhhhh](https://github.com/cxyhhhhh), [@&#8203;Solvely-Colin](https://github.com/Solvely-Colin), and [@&#8203;baskduf](https://github.com/baskduf).
- Performance: prewarm TUI runtime plugins, deduplicate plugin auto-enable fanout, trim dense text-delta snapshots, and reuse prepared startup model metadata. ([#&#8203;90782](openclaw/openclaw#90782), [#&#8203;89978](openclaw/openclaw#89978), [#&#8203;91580](openclaw/openclaw#91580), [#&#8203;91531](openclaw/openclaw#91531)) Thanks [@&#8203;RomneyDa](https://github.com/RomneyDa) and [@&#8203;ai-hpc](https://github.com/ai-hpc).

##### Fixes

- Agent/session recovery: drop stale approval follow-ups after session rebind, remove drained reply-queue items by identity, recover stale main and visible replies, preserve Codex context-engine compaction ownership, lower the default compaction timeout to 180 seconds while respecting explicit configuration, and keep provider-failure terminal lifecycle state correct. ([#&#8203;85679](openclaw/openclaw#85679), [#&#8203;91450](openclaw/openclaw#91450), [#&#8203;91566](openclaw/openclaw#91566), [#&#8203;91840](openclaw/openclaw#91840), [#&#8203;91590](openclaw/openclaw#91590), [#&#8203;91361](openclaw/openclaw#91361), [#&#8203;91895](openclaw/openclaw#91895)) Thanks [@&#8203;openperf](https://github.com/openperf), [@&#8203;yetval](https://github.com/yetval), [@&#8203;joshavant](https://github.com/joshavant), [@&#8203;wangmiao0668000666](https://github.com/wangmiao0668000666), and [@&#8203;TurboTheTurtle](https://github.com/TurboTheTurtle).
- User-visible content boundaries: suppress Codex/Harmony protocol artifacts, neutralize browser and LanceDB memory media directives, redact transcript images, and preserve native `/compact` replies through source suppression. ([#&#8203;89151](openclaw/openclaw#89151), [#&#8203;91422](openclaw/openclaw#91422), [#&#8203;91425](openclaw/openclaw#91425), [#&#8203;91529](openclaw/openclaw#91529), [#&#8203;90212](openclaw/openclaw#90212)) Thanks [@&#8203;joelnishanth](https://github.com/joelnishanth), [@&#8203;pgondhi987](https://github.com/pgondhi987), [@&#8203;joshavant](https://github.com/joshavant), and [@&#8203;snowzlm](https://github.com/snowzlm).
- Channel delivery: keep WhatsApp captured replies attached to the successor controller after restart, retry Feishu rate limits, preserve Mattermost thread replies, canonicalize LINE webhook paths, restore Discord reply hydration and runtime timeout exports, and show OpenAI Realtime WebRTC assistant transcripts. ([#&#8203;85823](openclaw/openclaw#85823), [#&#8203;89659](openclaw/openclaw#89659), [#&#8203;91684](openclaw/openclaw#91684), [#&#8203;91649](openclaw/openclaw#91649), [#&#8203;90263](openclaw/openclaw#90263), [#&#8203;91686](openclaw/openclaw#91686), [#&#8203;90426](openclaw/openclaw#90426)) Thanks [@&#8203;itsuzef](https://github.com/itsuzef), [@&#8203;ladygege](https://github.com/ladygege), [@&#8203;jacobtomlinson](https://github.com/jacobtomlinson), [@&#8203;fuller-stack-dev](https://github.com/fuller-stack-dev), and [@&#8203;shushushv](https://github.com/shushushv).
- Cron: cancel active task runs cleanly, preserve terminal timeout/cancel state, and recover no-deliver tool warnings instead of silently losing the outcome. ([#&#8203;90666](openclaw/openclaw#90666), [#&#8203;90678](openclaw/openclaw#90678)) Thanks [@&#8203;ai-hpc](https://github.com/ai-hpc).
- Gateway/config/auth: share the approval runtime socket token, replace arrays explicitly in `config.patch`, skip the deleted-agent guard only for valid ACP harness sessions, surface headless LaunchAgent state, verify SQLite auth migration before cleanup, and arm QMD startup maintenance. ([#&#8203;87105](openclaw/openclaw#87105), [#&#8203;91551](openclaw/openclaw#91551), [#&#8203;91219](openclaw/openclaw#91219), [#&#8203;91614](openclaw/openclaw#91614), [#&#8203;91740](openclaw/openclaw#91740), [#&#8203;91978](openclaw/openclaw#91978)) Thanks [@&#8203;fuller-stack-dev](https://github.com/fuller-stack-dev) and [@&#8203;scotthuang](https://github.com/scotthuang).
- Providers/Codex: clarify quota errors, restore the Codex synthetic usage line, canonicalize Codex protocol assets, require API-key auth for realtime voice, normalize ACP model refs, preserve Gemma 4 `reasoning_content`, and avoid guardian review for local models. ([#&#8203;91390](openclaw/openclaw#91390), [#&#8203;91709](openclaw/openclaw#91709), [#&#8203;91507](openclaw/openclaw#91507), [#&#8203;91567](openclaw/openclaw#91567), [#&#8203;88630](openclaw/openclaw#88630), [#&#8203;91696](openclaw/openclaw#91696)) Thanks [@&#8203;hxy91819](https://github.com/hxy91819), [@&#8203;brokemac79](https://github.com/brokemac79), [@&#8203;RomneyDa](https://github.com/RomneyDa), [@&#8203;joshavant](https://github.com/joshavant), and [@&#8203;Coder-Wangyankun](https://github.com/Coder-Wangyankun).
- Updates/builds: recover package Gateway restarts after refresh failure, expose plugin convergence repair, fall back to Corepack in PATH-less pnpm environments, seed the correct Docker store packages, and keep ClawHub dry-run and publish paths reusable. ([#&#8203;91581](openclaw/openclaw#91581), [#&#8203;91599](openclaw/openclaw#91599), [#&#8203;91547](openclaw/openclaw#91547), [#&#8203;91591](openclaw/openclaw#91591)) Thanks [@&#8203;fuller-stack-dev](https://github.com/fuller-stack-dev), [@&#8203;sallyom](https://github.com/sallyom), and [@&#8203;Patrick-Erichsen](https://github.com/Patrick-Erichsen).
- UI: require explicit user intent before opening chat sessions and drain restored chat queues after session switches. ([#&#8203;91480](openclaw/openclaw#91480)) Thanks [@&#8203;TurboTheTurtle](https://github.com/TurboTheTurtle).
- Android: avoid the `dataSync` foreground-service type for persistent nodes. ([#&#8203;80082](openclaw/openclaw#80082)) Thanks [@&#8203;davelutztx](https://github.com/davelutztx).
- Native hooks: bound relay lifetimes so abandoned native hook connections cannot linger indefinitely. ([#&#8203;91550](openclaw/openclaw#91550)) Thanks [@&#8203;joshavant](https://github.com/joshavant).

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMDEuMSIsInVwZGF0ZWRJblZlciI6IjQzLjEwMS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZS9jb250YWluZXIiLCJ0eXBlL3BhdGNoIl19-->

Reviewed-on: https://git.erwanleboucher.dev/eleboucher/homelab/pulls/1040
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cli CLI command changes commands Command implementations gateway Gateway runtime merge-risk: 🚨 availability 🚨 May cause crashes, hangs, restart loops, stalls, or process outages. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. P2 Normal backlog priority with limited blast radius. proof: sufficient ClawSweeper judged the real behavior proof convincing. proof: supplied External PR includes structured after-fix real behavior proof. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. size: M status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants