Skip to content

feat: install GitHub-backed ClawHub skills#90478

Merged
Patrick-Erichsen merged 7 commits into
mainfrom
pe/clawhub-github-backed-installs
Jun 5, 2026
Merged

feat: install GitHub-backed ClawHub skills#90478
Patrick-Erichsen merged 7 commits into
mainfrom
pe/clawhub-github-backed-installs

Conversation

@Patrick-Erichsen

@Patrick-Erichsen Patrick-Erichsen commented Jun 4, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Resolve ClawHub installs through /api/v1/skills/:slug/install when no explicit version is requested.
  • Support GitHub-backed install resolutions by downloading the resolved repo commit from GitHub codeload and copying only the resolved skill path into the local skills directory.
  • Preserve the latest install-policy checks for both ClawHub archive installs and GitHub-backed installs.
  • Report authenticated install telemetry to ClawHub after successful installs.
  • Add unit and E2E coverage for GitHub-backed ClawHub skill installs.

Testing

  • pnpm tsgo:core
  • pnpm tsgo:test:src
  • bunx vitest run src/skills/lifecycle/clawhub.test.ts --reporter=dot
  • node scripts/run-vitest.mjs run --config test/vitest/vitest.e2e.config.ts src/cli/skills-cli.clawhub-install.e2e.test.ts --reporter=dot

@openclaw-barnacle openclaw-barnacle Bot added cli CLI command changes size: L maintainer Maintainer-authored PR labels Jun 4, 2026
@clawsweeper

clawsweeper Bot commented Jun 4, 2026

Copy link
Copy Markdown
Contributor

Codex review: found issues before merge. Reviewed June 4, 2026, 9:13 PM ET / 01:13 UTC.

Summary
The PR routes unversioned ClawHub skill installs through a new install resolver, adds GitHub codeload-backed skill downloads, reports install telemetry, and adds CLI/test coverage including a force-install option.

PR surface: Source +408, Tests +417, Other +4. Total +829 across 25 files.

Reproducibility: yes. for the blocking review path: source inspection shows the PR routes unversioned installs through /api/v1/skills/:slug/install, and a live check shows that endpoint returns 404 for an installable public skill while current detail/download endpoints still work.

Review metrics: 2 noteworthy metrics.

  • New install control surfaces: 1 CLI option added, 2 env variable names added. The new --force-install flag and codeload host env aliases affect install behavior and source-download trust before merge.
  • Default install path changed: 1 unversioned ClawHub install path changed. Normal openclaw skills install moves from detail/download resolution to the new resolver endpoint, which is an upgrade-sensitive workflow change.

Merge readiness
Overall: 🧂 unranked krab
Proof: 🦞 diamond lobster
Patch quality: 🧂 unranked krab
Result: blocked by patch quality or review findings.

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

Rank-up moves:

  • [P2] Preserve the current detail/download fallback or provide live default-registry resolver rollout proof before merge.
  • [P2] Reject non-40-hex GitHub resolver commits, or verify content hashes before download, lockfile, and install-policy recording.

Risk before merge

  • [P2] Merging before the public ClawHub resolver is deployed, or without a fallback, would make documented unversioned ClawHub skill installs fail against the default registry.
  • [P1] The resolver GitHub commit field is accepted as an immutable source without client-side validation, so a mutable ref could be locked and evaluated as pinned provenance.
  • [P1] The PR adds a production-reachable codeload host override for source downloads, which is a security-sensitive env surface that needs explicit maintainer comfort if it remains.

Maintainer options:

  1. Preserve default install compatibility (recommended)
    Keep the existing detail/download fallback for resolver 404 or gate the resolver path until the public registry endpoint is live, then cover both default-registry and resolver installs in tests.
  2. Land only after registry rollout proof
    Maintainers could accept the resolver-only behavior if the public ClawHub deployment is completed first and the PR includes live proof against https://clawhub.ai.
  3. Pause for source trust hardening
    If the permanent GitHub-backed install contract is still unsettled, pause the PR until immutable commit validation and any codeload override policy are explicit.

Next step before merge

  • [P2] Maintainer/API rollout and source-trust decisions are still needed, so this is not a conservative cleanup close or a safe autonomous repair lane candidate.

Security
Needs attention: The diff improves the token boundary for off-registry archive URLs, but the GitHub-backed source-download path still needs immutable-ref validation before merge.

Review findings

  • [P1] Keep unversioned installs working until the resolver is live — src/skills/lifecycle/clawhub.ts:917-921
  • [P1] Validate resolver commits before treating them as immutable — src/skills/lifecycle/clawhub.ts:924-929
Review details

Best possible solution:

Land a version that preserves the existing unversioned install path until the default ClawHub resolver is live, validates GitHub commit immutability before download/lock/policy, and keeps any source-download override intentional and documented.

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

Yes for the blocking review path: source inspection shows the PR routes unversioned installs through /api/v1/skills/:slug/install, and a live check shows that endpoint returns 404 for an installable public skill while current detail/download endpoints still work.

Is this the best way to solve the issue?

No: the resolver approach is plausible, but the best merge shape must preserve the existing default install path until rollout is proven and must validate immutable GitHub commits before recording source provenance.

Full review comments:

  • [P1] Keep unversioned installs working until the resolver is live — src/skills/lifecycle/clawhub.ts:917-921
    For unversioned ClawHub installs this now always calls the new install resolver. The public registry still returns 404 for an installable skill at /api/v1/skills/calendar/install, while /api/v1/skills/calendar and /api/v1/download?slug=calendar&version=1.0.0 work, so merging this before deployment or fallback handling would break documented openclaw skills install <slug>.
    Confidence: 0.97
  • [P1] Validate resolver commits before treating them as immutable — src/skills/lifecycle/clawhub.ts:924-929
    The resolver's github.commit is accepted as the installed version, codeload ref, lockfile value, and mutable: false install-policy source. If the resolver returns main, a tag, or another non-40-hex ref, OpenClaw records mutable content as pinned provenance; reject non-commit refs or verify the content hash before download and policy evaluation.
    Confidence: 0.92

Overall correctness: patch is incorrect
Overall confidence: 0.94

AGENTS.md: found and applied where relevant.

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

Label changes

Label justifications:

  • P1: The PR can break a documented ClawHub install workflow for real users if merged before resolver rollout or fallback handling.
  • merge-risk: 🚨 compatibility: Existing unversioned skill installs against the default public registry can fail because the new resolver endpoint currently returns 404.
  • merge-risk: 🚨 security-boundary: The diff changes source download provenance and install-policy trust for GitHub-backed skill archives.
  • rating: 🧂 unranked krab: Overall readiness is 🧂 unranked krab; proof is 🦞 diamond lobster and patch quality is 🧂 unranked krab.
  • status: ⏳ waiting on author: ClawSweeper has contributor-facing work open and is waiting for author action. Sufficient (terminal): The contributor provided terminal proof from a real OpenClaw CLI process with a temporary resolver and real GitHub codeload archive; it is sufficient for the GitHub-backed path but does not settle public registry rollout.
  • proof: sufficient: Contributor real behavior proof is sufficient. The contributor provided terminal proof from a real OpenClaw CLI process with a temporary resolver and real GitHub codeload archive; it is sufficient for the GitHub-backed path but does not settle public registry rollout.
Evidence reviewed

PR surface:

Source +408, Tests +417, Other +4. Total +829 across 25 files.

View PR surface stats
Area Files Added Removed Net
Source 7 460 52 +408
Tests 12 565 148 +417
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 6 39 35 +4
Total 25 1064 235 +829

Security concerns:

  • [medium] Mutable resolver refs can be recorded as pinned source — src/skills/lifecycle/clawhub.ts:924
    The client uses latestResolution.github.commit directly as the codeload ref and immutable install-policy provenance without validating that it is a real commit SHA.
    Confidence: 0.92
  • [low] Codeload host override broadens source-download trust — src/infra/clawhub.ts:476
    The production path reads OPENCLAW_CLAWHUB_GITHUB_CODELOAD_BASE_URL and CLAWHUB_GITHUB_CODELOAD_BASE_URL, allowing GitHub-backed installs to fetch archives from a different host while still using GitHub-style provenance.
    Confidence: 0.78

What I checked:

  • Current main install path: Current main resolves unversioned ClawHub skill installs through skill detail metadata and then downloads /api/v1/download with the resolved version, preserving the documented openclaw skills install path. (src/skills/lifecycle/clawhub.ts:737, e282cb2af50c)
  • PR install path: The PR branch changes unversioned installs to call fetchClawHubSkillInstallResolution at /api/v1/skills/:slug/install before any detail/download fallback. (src/skills/lifecycle/clawhub.ts:917, 9bf44b3a8d19)
  • Live resolver rollout check: A live GET to https://clawhub.ai/api/v1/skills/calendar/install returned 404 Not found, while the same skill's detail endpoint returned 200, matching the contributor's note that the public resolver is not deployed yet.
  • Existing live download path: A live GET to the current download path for calendar@1.0.0 returned HTTP 200, so the current public registry can still satisfy the shipped detail/download install flow that this PR bypasses.
  • GitHub commit trust boundary: The PR uses latestResolution.github.commit as the installed version, codeload ref, origin commit, and immutable install-policy source without a 40-hex validation or content-hash check in the client path. (src/skills/lifecycle/clawhub.ts:924, 9bf44b3a8d19)
  • Contributor proof: The contributor provided terminal proof from a real OpenClaw CLI process using a temporary local resolver and a real GitHub codeload archive from NVIDIA/skills; it proves the GitHub-backed path, but not public default-registry rollout. (231d0010c300)

Likely related people:

  • steipete: Current-main blame for the ClawHub lifecycle and infra install helpers in this checkout points to Peter Steinberger commits, and GitHub history shows recent ClawHub skill/infra documentation touches by steipete. (role: recent area contributor; confidence: medium; commits: 6d58ff356227, 1275368151dd, 6c48a1256213; files: src/skills/lifecycle/clawhub.ts, src/infra/clawhub.ts)
  • joshavant: GitHub history for the ClawHub lifecycle path shows the operator install policy work that this PR now feeds with GitHub-backed source metadata. (role: install-policy feature contributor; confidence: medium; commits: 154f439c8103; files: src/skills/lifecycle/clawhub.ts, src/skills/lifecycle/archive-install.ts, src/security/install-policy.ts)
  • shakkernerd: GitHub history for the ClawHub lifecycle path shows a recent skills subsystem layout refactor, making this a useful routing candidate for lifecycle boundaries. (role: skills subsystem refactor contributor; confidence: medium; commits: d9278c8efdb5; files: src/skills/lifecycle/clawhub.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 rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. P1 High-priority user-facing bug, regression, or broken workflow. merge-risk: 🚨 security-boundary 🚨 May affect sandboxing, authorization, credentials, or sensitive data. labels Jun 4, 2026
…ked-installs

# Conflicts:
#	src/infra/clawhub.ts
#	src/skills/lifecycle/clawhub.test.ts
#	src/skills/lifecycle/clawhub.ts
@openclaw-barnacle openclaw-barnacle Bot added channel: discord Channel integration: discord channel: whatsapp-web Channel integration: whatsapp-web scripts Repository scripts agents Agent runtime and tooling size: XL and removed size: L labels Jun 4, 2026
@clawsweeper clawsweeper Bot added the merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. label Jun 4, 2026
@Patrick-Erichsen

Copy link
Copy Markdown
Contributor Author

GitHub-backed ClawHub install proof for 231d0010c3007e35315cca13c34914c70b9c0447.

I fixed the resolver archive URL auth boundary and added regression coverage that ambient ClawHub tokens are not sent to off-registry resolver archive URLs.

Local validation:

pnpm docs:list
PASS

pnpm lint --threads=8
PASS

pnpm tsgo:core
PASS

pnpm tsgo:test:src
PASS

bunx vitest run src/infra/clawhub.test.ts src/skills/lifecycle/clawhub.test.ts --reporter=dot
Test Files  2 passed (2)
Tests  85 passed (85)

node scripts/run-vitest.mjs run --config test/vitest/vitest.e2e.config.ts src/cli/skills-cli.clawhub-install.e2e.test.ts --reporter=dot
Test Files  1 passed (1)
Tests  1 passed (1)

pnpm exec vitest run --config test/vitest/vitest.agents-core.config.ts src/agents/workspace-templates.test.ts --reporter=dot
Test Files  1 passed (1)
Tests  5 passed (5)

pnpm exec vitest run --config test/vitest/vitest.agents-tools.config.ts src/agents/tools/pdf-tool.model-config.test.ts --reporter=dot
Test Files  1 passed (1)
Tests  12 passed (12)

Manual source-backed install proof:

  • Real OpenClaw CLI process
  • Temporary local ClawHub install resolver
  • Real GitHub codeload archive from NVIDIA/skills
  • Pinned source commit bb0436faf7c9c5270f2dbc3d30c39379e5e2305b
  • Skill path skills/aiq-deploy
  • Temp state path redacted
Manual GitHub-backed ClawHub install proof
startedAt=2026-06-04T23:58:28.496Z
resolver=http://127.0.0.1:<port>
source=https://github.com/NVIDIA/skills/tree/bb0436faf7c9c5270f2dbc3d30c39379e5e2305b/skills/aiq-deploy
command=OPENCLAW_STATE_DIR=<temp> OPENCLAW_CLAWHUB_URL=<local-resolver> openclaw skills install aiq-deploy --global
exitCode=0
--- stdout ---
Downloading aiq-deploy@bb0436faf7c9c5270f2dbc3d30c39379e5e2305b from GitHub...
Installing to <temp>/skills/aiq-deploy...
Installed aiq-deploy@bb0436faf7c9c5270f2dbc3d30c39379e5e2305b -> <temp>/skills/aiq-deploy
--- stderr ---
<empty>
--- resolver requests ---
GET /api/v1/skills/aiq-deploy/install
POST /api/cli/telemetry/install
--- installed files ---
SKILL.md size=13321 firstLine="---"
skill-card.md size=4067
--- telemetry summary ---
[
  {
    "rootCount": 1,
    "skills": [
      {
        "slug": "aiq-deploy",
        "version": "bb0436faf7c9c5270f2dbc3d30c39379e5e2305b"
      }
    ]
  }
]

https://clawhub.ai does not have the new install resolver deployed yet, so this proof uses a temporary local resolver while preserving the important external boundary: install bytes came from GitHub codeload for the pinned NVIDIA commit, not from a mocked zip.

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jun 5, 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 proof: sufficient ClawSweeper judged the real behavior proof convincing. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. and removed status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels Jun 5, 2026
@Patrick-Erichsen

Copy link
Copy Markdown
Contributor Author

Follow-up after addressing the ClawSweeper finding and CI failures:

  • Fixed the token-leak review finding: GitHub-backed archive URLs no longer receive the ambient OPENCLAW_CLAWHUB_TOKEN when the resolver returns an absolute non-ClawHub URL.
  • Added a regression test proving the codeload request is made without Authorization.
  • Fixed the heartbeat template regression from the first CI pass by keeping the canonical comment-only template non-actionable and teaching heartbeat parsing to ignore single-line HTML comments.
  • Uploaded the manual GitHub-backed install proof here: feat: install GitHub-backed ClawHub skills #90478 (comment)

Local verification run:

git diff --check
pnpm lint --threads=8
pnpm tsgo:core
pnpm tsgo:test:src
bunx vitest run src/infra/clawhub.test.ts --reporter=dot
bunx vitest run src/infra/clawhub.test.ts src/skills/lifecycle/clawhub.test.ts --reporter=dot
node scripts/run-vitest.mjs run --config test/vitest/vitest.e2e.config.ts src/cli/skills-cli.clawhub-install.e2e.test.ts --reporter=dot
pnpm exec vitest run --config test/vitest/vitest.commands.config.ts src/commands/doctor-heartbeat-session-target.test.ts src/commands/doctor-heartbeat-template-repair.test.ts src/commands/doctor-session-locks.test.ts src/commands/doctor-session-snapshots.test.ts src/commands/doctor-session-state-providers.test.ts src/commands/doctor-session-transcripts.test.ts --reporter=dot
pnpm exec vitest run --config test/vitest/vitest.agents-core.config.ts src/agents/workspace.test.ts src/agents/workspace-templates.test.ts --reporter=dot
pnpm exec vitest run src/auto-reply/heartbeat.test.ts --reporter=dot

CI verification:

Note: the manual CI workflow was dispatched from main with target_ref=pe/clawhub-github-backed-installs, so the Actions page displays the workflow file SHA from main, while the preflight checkout resolved and tested the PR branch.

@Patrick-Erichsen Patrick-Erichsen merged commit 8f85f94 into main Jun 5, 2026
159 checks passed
@Patrick-Erichsen Patrick-Erichsen deleted the pe/clawhub-github-backed-installs branch June 5, 2026 02:10
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Jun 5, 2026
* feat: install GitHub-backed ClawHub skills

* fix: satisfy ClawHub install type checks

* fix: harden github-backed skill installs

* fix: keep heartbeat template non-actionable

* feat: support forcing pending ClawHub installs
traoremp pushed a commit to traoremp/openclaw that referenced this pull request Jun 5, 2026
* feat: install GitHub-backed ClawHub skills

* fix: satisfy ClawHub install type checks

* fix: harden github-backed skill installs

* fix: keep heartbeat template non-actionable

* feat: support forcing pending ClawHub installs
849261680 pushed a commit to 849261680/openclaw that referenced this pull request Jun 7, 2026
* feat: install GitHub-backed ClawHub skills

* fix: satisfy ClawHub install type checks

* fix: harden github-backed skill installs

* fix: keep heartbeat template non-actionable

* feat: support forcing pending ClawHub installs
wangmiao0668000666 pushed a commit to wangmiao0668000666/openclaw that referenced this pull request Jun 9, 2026
* feat: install GitHub-backed ClawHub skills

* fix: satisfy ClawHub install type checks

* fix: harden github-backed skill installs

* fix: keep heartbeat template non-actionable

* feat: support forcing pending ClawHub installs
eleboucher pushed a commit to eleboucher/homelab that referenced this pull request Jun 9, 2026
…26.6.5) (#963)

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.1` → `2026.6.5` |

---

### Release Notes

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

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

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

##### Highlights

- QQBot now strips model reasoning/thinking scaffolding before native delivery, preventing raw `<thinking>` content from leaking into channel replies. ([#&#8203;89913](openclaw/openclaw#89913), [#&#8203;90132](openclaw/openclaw#90132)) Thanks [@&#8203;openperf](https://github.com/openperf).
- MCP tool results now coerce `resource_link`, `resource`, `audio`, malformed image, and future non-text/image blocks at the materialize boundary, preventing Anthropic 400s and poisoned session history after a tool returns richer MCP content. ([#&#8203;90710](openclaw/openclaw#90710), [#&#8203;90728](openclaw/openclaw#90728)) Thanks [@&#8203;RanSHammer](https://github.com/RanSHammer) and [@&#8203;849261680](https://github.com/849261680).
- Anthropic extended-thinking sessions recover after prompt-cache expiry or Gateway restart because stream start events wait for `message_start`, letting pre-generation signature errors trigger the existing recovery retry. ([#&#8203;90667](openclaw/openclaw#90667), [#&#8203;90697](openclaw/openclaw#90697)) Thanks [@&#8203;openperf](https://github.com/openperf).
- Parallel is now a bundled `web_search` provider with `PARALLEL_API_KEY` discovery, guarded endpoint handling, cache-safe session ids, onboarding picker support, and docs. ([#&#8203;85158](openclaw/openclaw#85158)) Thanks [@&#8203;NormallyGaussian](https://github.com/NormallyGaussian).
- Google Vertex ADC users get static catalog rows and runtime model resolution again, while single-provider cooldown recovery and memory adapter status checks are more reliable. ([#&#8203;90506](openclaw/openclaw#90506), [#&#8203;90609](openclaw/openclaw#90609), [#&#8203;90717](openclaw/openclaw#90717), [#&#8203;90816](openclaw/openclaw#90816)) Thanks [@&#8203;849261680](https://github.com/849261680).
- Matrix can preflight voice notes before mention gating, preserve thread reads/replies through Matrix relations pagination, and carry QA coverage for voice and thread flows. ([#&#8203;78016](openclaw/openclaw#78016), [#&#8203;90415](openclaw/openclaw#90415))
- Auth and plugin install state is more durable: auth profiles now live in SQLite, official npm plugin install records keep their trusted pins, and prerelease fallback integrity checks avoid carrying stale integrity forward. ([#&#8203;89102](openclaw/openclaw#89102), [#&#8203;88585](openclaw/openclaw#88585))
- macOS node mode no longer silently self-reconnects away from a healthy direct Gateway session, reducing unexpected companion app session churn. ([#&#8203;90668](openclaw/openclaw#90668), [#&#8203;90815](openclaw/openclaw#90815)) Thanks [@&#8203;vrurg](https://github.com/vrurg).
- Upgrade and service paths are safer: cron legacy JSON stores migrate during doctor preflight, service env placeholders no longer mask state-dir secrets, WhatsApp startup waits are bounded, and disabled WhatsApp accounts tear down on config reload. ([#&#8203;90072](openclaw/openclaw#90072), [#&#8203;90208](openclaw/openclaw#90208), [#&#8203;90277](openclaw/openclaw#90277), [#&#8203;90488](openclaw/openclaw#90488), [#&#8203;90486](openclaw/openclaw#90486), [#&#8203;87951](openclaw/openclaw#87951), [#&#8203;87965](openclaw/openclaw#87965)) Thanks [@&#8203;MonkeyLeeT](https://github.com/MonkeyLeeT), [@&#8203;sallyom](https://github.com/sallyom), [@&#8203;mcaxtr](https://github.com/mcaxtr), and [@&#8203;MukundaKatta](https://github.com/MukundaKatta).

##### Changes

- Search/providers: add the Parallel bundled web-search plugin, live provider tests, registration contracts, onboarding/docs wiring, and guarded `api.parallel.ai/v1/search` support. ([#&#8203;85158](openclaw/openclaw#85158)) Thanks [@&#8203;NormallyGaussian](https://github.com/NormallyGaussian).
- Matrix/channels: add voice-message preflight and thread-aware read/reply behavior, including Matrix QA scenario wiring and docs for voice-message behavior. ([#&#8203;78016](openclaw/openclaw#78016), [#&#8203;90415](openclaw/openclaw#90415))
- Skills/ClawHub: install ClawHub skills backed by GitHub repositories through the resolved install API, download the pinned GitHub commit, keep install-policy checks, and report install telemetry after success. ([#&#8203;90478](openclaw/openclaw#90478)) Thanks [@&#8203;Patrick-Erichsen](https://github.com/Patrick-Erichsen).
- Google Chat/channels: add native approval card actions and click handling so Google Chat approvals use platform-native cards instead of generic message flow.
- Mobile: Android provider/model screens now surface expiring, unavailable, unresolved, and attention states more clearly, while iOS settings and Talk tabs keep diagnostics, gateway rows, attachment labels, and unavailable Talk controls reachable.
- Memory: QMD search can use the new rerank toggle, and memory adapter status uses the resolved default model identity when checking plain status. ([#&#8203;61834](openclaw/openclaw#61834))
- Docs/tooling: add Parallel search docs, refresh weather-skill guidance toward `web_fetch`, clarify legacy `openai-codex` auth, document release/test helper scripts, and tighten changed-test routing docs for CI/debugging work. ([#&#8203;90028](openclaw/openclaw#90028), [#&#8203;90250](openclaw/openclaw#90250)) Thanks [@&#8203;fuller-stack-dev](https://github.com/fuller-stack-dev).
- Release/process: switch release trains to `YYYY.M.PATCH` monthly patch numbering, keep pre-transition tags compatible, and pin the June 2026 floor at `2026.6.5` after the published beta.
- Platform maintenance: refresh Android, Swift/macOS, Docker, CodeQL, Buildx, Docker build/push, and Codex Action dependencies for this release train. ([#&#8203;74980](openclaw/openclaw#74980), [#&#8203;81757](openclaw/openclaw#81757), [#&#8203;86481](openclaw/openclaw#86481), [#&#8203;86483](openclaw/openclaw#86483), [#&#8203;90601](openclaw/openclaw#90601))
- QQBot: add `/bot-group-allways on|off` slash command (with named-account and default-account support) to toggle whether group messages require an `@mention` before the bot replies, and clear the runtime config snapshot after the write so the new account-level `defaultRequireMention` takes effect immediately without restart. ([#&#8203;91423](openclaw/openclaw#91423)) Thanks [@&#8203;cxyhhhhh](https://github.com/cxyhhhhh).

##### Fixes

- Channel content boundaries: QQBot now strips reasoning/thinking tags before sending, preserving final answers while hiding internal model narration from users. ([#&#8203;89913](openclaw/openclaw#89913), [#&#8203;90132](openclaw/openclaw#90132)) Thanks [@&#8203;openperf](https://github.com/openperf).
- Agents/MCP/providers: coerce non-text/image MCP tool-result blocks before they reach provider converters, preserving valid images and turning richer MCP content into text instead of malformed image blocks. ([#&#8203;90710](openclaw/openclaw#90710), [#&#8203;90728](openclaw/openclaw#90728)) Thanks [@&#8203;RanSHammer](https://github.com/RanSHammer) and [@&#8203;849261680](https://github.com/849261680).
- Anthropic/Codex/ACP/agent recovery: defer Anthropic stream start events until `message_start`, strip stale compaction thinking signatures before Anthropic replay, detect unsigned thinking-only stalls, refresh prompt fences after compaction writes, reject empty completion handoffs, preserve parent streaming-off overrides/shared progress commentary, forward heartbeat metadata to context-engine hooks, and cover Codex session/thread migration edge cases. ([#&#8203;90667](openclaw/openclaw#90667), [#&#8203;90697](openclaw/openclaw#90697), [#&#8203;90163](openclaw/openclaw#90163), [#&#8203;90108](openclaw/openclaw#90108), [#&#8203;89874](openclaw/openclaw#89874), [#&#8203;89505](openclaw/openclaw#89505), [#&#8203;90632](openclaw/openclaw#90632), [#&#8203;89302](openclaw/openclaw#89302), [#&#8203;90729](openclaw/openclaw#90729), [#&#8203;90317](openclaw/openclaw#90317), [#&#8203;90319](openclaw/openclaw#90319)) Thanks [@&#8203;openperf](https://github.com/openperf), [@&#8203;100yenadmin](https://github.com/100yenadmin), and [@&#8203;ooiuuii](https://github.com/ooiuuii).
- Provider/model resolution: preserve Google Vertex ADC auth markers in generated catalogs, re-probe a single-provider primary after cooldown, share Codex model visibility, fail closed for unknown model auth, preserve Codex alias availability, keep unresolved profile refs unknown, and avoid resolving auth while listing models. ([#&#8203;90506](openclaw/openclaw#90506), [#&#8203;90609](openclaw/openclaw#90609), [#&#8203;90717](openclaw/openclaw#90717), [#&#8203;90702](openclaw/openclaw#90702)) Thanks [@&#8203;849261680](https://github.com/849261680).
- Gateway/macOS/mobile: avoid duplicate Gateway probe warnings by identity, rate-limit node pairing requests while preserving paired-node reconnects, keep macOS node mode on a healthy direct Gateway session, keep iOS diagnostics and gateway rows reachable, and avoid Linux ARM Gradle resource tasks during Android builds. ([#&#8203;85791](openclaw/openclaw#85791), [#&#8203;90147](openclaw/openclaw#90147), [#&#8203;90668](openclaw/openclaw#90668), [#&#8203;90815](openclaw/openclaw#90815)) Thanks [@&#8203;giodl73-repo](https://github.com/giodl73-repo) and [@&#8203;vrurg](https://github.com/vrurg).
- TUI/chat/Workboard/auto-reply: optimistic user messages stay stable across stale history reloads, runId reassignment, and abort windows instead of disappearing, jumping, or lingering as ghost rows; Workboard stale lifecycle bulk updates no longer overwrite newer status/provenance; message-tool sends now count as delivery. ([#&#8203;86205](openclaw/openclaw#86205), [#&#8203;89600](openclaw/openclaw#89600), [#&#8203;88592](openclaw/openclaw#88592), [#&#8203;90123](openclaw/openclaw#90123)) Thanks [@&#8203;RomneyDa](https://github.com/RomneyDa).
- Cron/update/service env: doctor config preflight now migrates legacy cron JSON stores into SQLite before runtime reads, service env planning skips unresolved placeholders that would mask state-dir `.env` values, and session transcript rewrites keep registry markers/discriminants consistent. ([#&#8203;90072](openclaw/openclaw#90072), [#&#8203;90208](openclaw/openclaw#90208), [#&#8203;90277](openclaw/openclaw#90277), [#&#8203;90488](openclaw/openclaw#90488)) Thanks [@&#8203;MonkeyLeeT](https://github.com/MonkeyLeeT) and [@&#8203;sallyom](https://github.com/sallyom).
- Security/config/tooling: guard MCP HTTP redirects, protect global agent config defaults, and keep release/test/tooling proof failures bounded and explicit. ([#&#8203;89732](openclaw/openclaw#89732), [#&#8203;90145](openclaw/openclaw#90145))
- Channels: WhatsApp restarts when per-account config changes, bounds background startup waits, closes failed sockets, and preserves reconnect behavior; Mattermost slash commands keep their state on `globalThis`; Feishu streaming cards preserve full merged content; voice-call tracks Twilio streams after connect; ClickClack reply tools respect `toolsAllow`. ([#&#8203;87951](openclaw/openclaw#87951), [#&#8203;87965](openclaw/openclaw#87965), [#&#8203;90486](openclaw/openclaw#90486), [#&#8203;68113](openclaw/openclaw#68113), [#&#8203;90534](openclaw/openclaw#90534), [#&#8203;90181](openclaw/openclaw#90181), [#&#8203;90607](openclaw/openclaw#90607), [#&#8203;89500](openclaw/openclaw#89500)) Thanks [@&#8203;MukundaKatta](https://github.com/MukundaKatta), [@&#8203;mcaxtr](https://github.com/mcaxtr), [@&#8203;infoanton](https://github.com/infoanton), [@&#8203;mushuiyu886](https://github.com/mushuiyu886), and [@&#8203;sahibzada-allahyar](https://github.com/sahibzada-allahyar).
- Feishu: retry transient send rate-limit errors (HTTP 429, per-chat code 230020, tenant-level code 11232) with linear backoff, including SDK responses that fulfill with rate-limit bodies instead of throwing, and route streaming-card sends through the retry wrapper. ([#&#8203;89659](openclaw/openclaw#89659)) Thanks [@&#8203;ladygege](https://github.com/ladygege).
- Release/CI/E2E: main CI guard drift, PR merge diff scoping, live Docker credential staging, base-image qualification, installer Docker classification, Playwright dependency install recovery, API-key auth for Codex live Docker lanes, Parallels option terminators, and JSON-mode progress handling are tighter so release proof fails cleaner. ([#&#8203;90532](openclaw/openclaw#90532), [#&#8203;90287](openclaw/openclaw#90287), [#&#8203;90058](openclaw/openclaw#90058)) Thanks [@&#8203;RomneyDa](https://github.com/RomneyDa), [@&#8203;hxy91819](https://github.com/hxy91819), and [@&#8203;mrunalp](https://github.com/mrunalp).
- Release/CI/E2E: Docker E2E and live Docker harness runs now apply default memory, CPU, and process ceilings while preserving explicit per-lane overrides.
- Release/CI/E2E: plugin lifecycle matrix resource sampling now fails phases that exceed RSS, wall-clock, or CPU ceilings instead of only logging the measurements.
- Release/CI/E2E: Codex npm plugin live assertions now cap transcript discovery and diagnostic log reads so failure proof stays bounded.
- Tests/state isolation: QA Lab valid-tool-call metrics now require runtime tool-call evidence when runtime parity data is available instead of counting tool-backed scenario pass status alone.
- Tests/state isolation: QA Lab runtime parity now fails planned-only tool-call rows without matching tool results instead of treating matching mock plans as real tool evidence.
- Tests/state isolation: provider, media, auth, cron, task, session, sandbox, Gateway, and Codex timeout fixtures now scope more home/state/env data per test, reducing cross-test leakage and making release validation failures less noisy. ([#&#8203;90027](openclaw/openclaw#90027), [#&#8203;89974](openclaw/openclaw#89974))

</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/963
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agents Agent runtime and tooling channel: discord Channel integration: discord channel: whatsapp-web Channel integration: whatsapp-web cli CLI command changes maintainer Maintainer-authored PR merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. merge-risk: 🚨 security-boundary 🚨 May affect sandboxing, authorization, credentials, or sensitive data. P1 High-priority user-facing bug, regression, or broken workflow. proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. scripts Repository scripts size: XL status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant