Skip to content

Add ClawHub skill verification and trust surfaces#86699

Merged
Patrick-Erichsen merged 20 commits into
mainfrom
pe/claw-179-skill-card-verify
May 27, 2026
Merged

Add ClawHub skill verification and trust surfaces#86699
Patrick-Erichsen merged 20 commits into
mainfrom
pe/claw-179-skill-card-verify

Conversation

@Patrick-Erichsen

@Patrick-Erichsen Patrick-Erichsen commented May 26, 2026

Copy link
Copy Markdown
Contributor

Summary

  • adds openclaw skills verify <slug> backed by ClawHub /verify, with --version, --tag, --card, shared/global workspace, and installed/uninstalled target resolution
  • resolves installed ClawHub skills from installer-owned lock/origin metadata and fails closed on malformed trust envelopes/card downloads
  • adds skills.securityVerdicts and skills.skillCard gateway methods so Control UI can show a top-level ClawHub verdict plus a lazy local skill-card.md tab
  • keeps verdict fetching bulk/narrow: one passive unauthenticated request for linked installs, no card data and no full scanner payload; detailed reports link out to ClawHub

Cross-repo dependency

  • depends on ClawHub bulk verdict endpoint in Add bulk skill security verdicts endpoint clawhub#2404: POST /api/v1/skills/-/security-verdicts
  • deployed to production on May 26, 2026 and verified against openclaw/discrawl@1.0.0
  • OpenClaw intentionally does not fall back to N per-skill requests; old/self-hosted ClawHub endpoints can report verdicts unavailable until the endpoint exists

Tests

  • CI=true pnpm test src/infra/clawhub.test.ts src/agents/skills-clawhub.test.ts src/cli/skills-cli.commands.test.ts src/cli/skills-cli.verify.test.ts -- --reporter=dot
  • CI=true pnpm check:changed
  • CI=true pnpm format:docs:check
  • git diff --check
  • pnpm test src/agents/skills-status.test.ts src/gateway/server-methods/skills.clawhub.test.ts src/infra/clawhub.test.ts src/gateway/server-methods-list.test.ts ui/src/ui/controllers/skills.test.ts ui/src/ui/views/skills.test.ts
  • pnpm tsgo:core
  • pnpm tsgo:test:src
  • pnpm tsgo:test:ui
  • pnpm check:changed
  • pnpm ui:build
  • pnpm protocol:check
  • pnpm ui:i18n:check

Real behavior proof

Behavior addressed: installed ClawHub skills can show a compact Control UI trust verdict, lazy-load the local skill-card.md, and link to the full ClawHub security report without cloning the scanner UI into OpenClaw.

Real environment tested: local OpenClaw workspace with openclaw/discrawl@1.0.0 installed from production https://clawhub.ai; source gateway from this PR branch on loopback port 18879; ClawHub production security-audit page.

Exact steps or command run after this patch:

  • Installed discrawl from ClawHub into the local main workspace.
  • Started a source gateway from this PR branch with channels disabled on loopback port 18879.
  • Called skills.status, skills.securityVerdicts, and skills.skillCard through the gateway.
  • Opened the Skills detail view in the Control UI, checked the verdict overview, opened the Skill Card tab, and opened the full ClawHub security report.
  • After the latest ClawSweeper findings, ran node scripts/run-vitest.mjs ui/src/ui/views/skills.test.ts src/agents/skills-clawhub.test.ts.

Evidence after fix:

{
  "schema": "openclaw.skills.security-verdicts.v1",
  "items": [
    {
      "registry": "https://clawhub.ai",
      "ok": true,
      "decision": "pass",
      "requestedSlug": "discrawl",
      "requestedVersion": "1.0.0",
      "slug": "discrawl",
      "version": "1.0.0",
      "displayName": "Discrawl",
      "publisherHandle": "openclaw",
      "skillUrl": "https://clawhub.ai/openclaw/discrawl",
      "securityAuditUrl": "https://clawhub.ai/openclaw/discrawl/security-audit?version=1.0.0",
      "securityStatus": "clean",
      "securityPassed": true
    }
  ]
}
skills.status confirmed discrawl is linked to https://clawhub.ai, installedVersion 1.0.0, with local skillCard.present true.
skills.skillCard returned the local card for discrawl from skill-card.md.
Control UI rendered the Clean verdict overview, Full security report link, and Skill Card tab.
The ClawHub production report opened at https://clawhub.ai/openclaw/discrawl/security-audit?version=1.0.0.
RUN  v4.1.7 /Users/patrickerichsen/Git/openclaw/openclaw

Test Files  3 passed (3)
Tests  60 passed (60)
Command: node scripts/run-vitest.mjs ui/src/ui/views/skills.test.ts src/agents/skills-clawhub.test.ts

Observed result after fix: the happy path renders the current ClawHub verdict and local Skill Card; the UI verdict helper now only shows clean when ok === true and decision === "pass"; installed CLI verification now rejects origin/lock registry disagreement before contacting a registry.

What was not tested: the currently installed packaged beta gateway does not expose these new methods until this PR ships; after the latest review fixes I reran the targeted touched tests above, not the full changed-file gate.

Review

  • autoreview accepted findings fixed: verified card URL binding, missing card metadata, card byte cap, release-owned changelog removal, fail-closed malformed decisions, lockfile-corroborated installed origin metadata, method reachability, token-safe passive verdict fetches, lazy/symlink-safe local card reads, provenance install-dir/registry checks, non-blocking verdict refresh, and stale Skill Card cache guards
  • final read-only subagent review: no blocking findings after fixes
  • final autoreview remaining finding rejected as an expected cross-repo dependency on Add bulk skill security verdicts endpoint clawhub#2404, verified in that ClawHub branch

Agent Transcript

Redacted Codex session transcript: Add ClawHub skill verification and trust surfaces
source: [LOCAL_SESSION]
redaction: local paths, emails, phone-shaped strings, token-shaped strings, auth headers, auth query params
omitted: raw tool outputs, system/developer prompts, local paths, secrets, browser/session/auth details, unrelated turns
scope: selected PR-relevant turns only

[user]
Linked the earlier draft OpenClaw PR and the merged ClawHub Skill Card work, then asked to mirror the current ClawHub CLI behavior in OpenClaw so users can verify a skill.

[assistant]
Grounded the work in the newer ClawHub contract rather than the stale draft. Identified the OpenClaw work as a consumer-side implementation for ClawHub `/verify` plus Skill Card behavior, with installed-skill resolution from ClawHub origin metadata.

[user]
Asked whether ClawHub's hashing fixes for generated `skill-card.md` would affect OpenClaw.

[assistant]
Decided OpenClaw verification should not recompute local bundle hashes. The installed bundle may contain generated `skill-card.md`, but OpenClaw should resolve the installed slug/version from local provenance and trust ClawHub's verification envelope. Added a regression requirement so local generated cards do not cause source-fingerprint mismatch failures.


[user]
Clarified the CLI surface: mirror `--version`, `--tag`, and `--card`; remove `--json` because JSON is already the default.

[assistant]
Implemented the OpenClaw CLI work test-first. Added ClawHub client helpers for the current `/verify` and card fetch contracts, installed-origin target resolution, `openclaw skills verify`, JSON-default output, `--card`, failure exit behavior, and generated `skill-card.md` regression coverage.

[assistant]
During review, accepted and fixed trust-surface findings: `--card` must fetch the exact verified `card.url`, card downloads must be bounded, and successful verification must require both `ok === true` and `decision === "pass"`. Reran focused tests and changed-file gates after each fix.

[user]
Asked how the Control UI should show security scan info and the Skill Card, and whether OpenClaw should fetch full scan details from ClawHub at page load.

[assistant]
Separated the authority boundaries:
- disk state proves install provenance and can provide local `skill-card.md`;
- ClawHub remains the runtime authority for the current security verdict;
- ClawHub remains the UI owner for the full security report.

[user]
Asked whether OpenClaw would need `n` requests to refresh verdicts for many installed skills and whether a bulk endpoint was needed.

[assistant]
Recommended a new ClawHub bulk security verdict endpoint rather than per-skill verify calls or full scan fetches. The endpoint should return compact top-level verdicts for exact `{ slug, version }` pairs, and OpenClaw should render only the minimal verdict summary plus a link to the full ClawHub report.

[user]
Confirmed that OpenClaw should not fetch card data remotely because installed ClawHub skills already have local `skill-card.md`.

[assistant]
Updated the design accordingly: Control UI reads the Skill Card from disk, fetches only current security verdicts from ClawHub, avoids maintaining a duplicate scanner UI, and links out to ClawHub for details.

[assistant]
Implemented the OpenClaw UI/gateway side. Added ClawHub linkage and local Skill Card metadata to skills status, new gateway methods for bulk `skills.securityVerdicts` and lazy local `skills.skillCard`, protocol models, UI controller caching/loading, and Skills view rendering for verdict overview, full security report link, and the Skill Card tab.

[assistant]
Collected local proof with `openclaw/discrawl@1.0.0`: installed the skill, confirmed local `skill-card.md` and ClawHub origin metadata, verified the production bulk verdict returned `pass` / `clean`, and confirmed the source gateway rendered the verdict overview and Skill Card tab. Saved UI screenshots for PR proof.

[tool summary]
Local-only transcript render; raw tool outputs omitted. Relevant implementation proof included targeted Vitest shards, changed-file gates, autoreview fixes, protocol generation, and browser verification of the OpenClaw Skills UI against a locally running source gateway.

@openclaw-barnacle openclaw-barnacle Bot added docs Improvements or additions to documentation cli CLI command changes agents Agent runtime and tooling size: XL maintainer Maintainer-authored PR labels May 26, 2026
@clawsweeper

clawsweeper Bot commented May 26, 2026

Copy link
Copy Markdown
Contributor

Codex review: found issues before merge. Reviewed May 27, 2026, 3:10 PM ET / 19:10 UTC.

Summary
The PR adds ClawHub skill verification CLI support, ClawHub trust/card helpers, new skills gateway methods/protocol models, Control UI verdict and Skill Card rendering, docs, and tests.

PR surface: Source +1679, Tests +2095, Docs +31, Other +80. Total +3885 across 32 files.

Reproducibility: yes. for the review finding: source inspection shows --card reads card.url from the verification envelope and fetchClawHubSkillCard follows absolute off-registry URLs. I did not run the PR because this is a read-only review.

Review metrics: 1 noteworthy metric.

  • New trust surfaces: 1 CLI command, 2 gateway methods. The PR adds operator-visible verification and protocol methods on a security/trust boundary, so maintainers should review the API and threat model before merge.

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:

  • Bind generated-card fetches to the selected registry or documented allowlist and add an off-registry rejection test.
  • Rerun the focused CLI, ClawHub helper, gateway, UI, protocol, and i18n checks already listed in the PR after the security-boundary repair.

Mantis proof suggestion
The Control UI trust verdict and Skill Card tab are visible behavior that would benefit from a short maintainer-run visual proof after the security fix. A maintainer can ask Mantis to capture proof by posting a new PR comment that starts with the OpenClaw Mantis account mention, followed by:

visual task: verify an installed ClawHub skill shows the Clean verdict, Full security report link, and Skill Card tab in the Skills detail view.

Risk before merge

  • The current --card path can make an operator machine fetch an arbitrary absolute URL supplied by a ClawHub verification response; suppressing auth avoids credential leakage but does not close the registry trust boundary.
  • This PR carries the protected maintainer label and a security-boundary merge risk, so the card URL policy needs explicit maintainer comfort even after the narrow repair.

Maintainer options:

  1. Bind Card Fetches To Registry (recommended)
    Require verified Skill Card URLs to resolve under the selected ClawHub registry or a documented allowlist, and add a regression that rejects off-registry absolute URLs.
  2. Own Delegated Card Hosting
    Maintainers could explicitly accept delegated card hosting, but that should be documented as part of the ClawHub verification contract before merging.
  3. Pause For ClawHub Contract
    If CDN or external card hosting is required, pause this PR until ClawHub exposes a registry-owned card URL or signed redirect contract OpenClaw can enforce.
Copy recommended automerge instruction
@clawsweeper automerge

Special instructions:
Constrain `fetchClawHubSkillCard`/`readVerifiedSkillCardUrl` so `--card` only fetches same-registry HTTPS card URLs for the verified slug/version, add a regression rejecting off-registry absolute URLs, and keep Authorization from being sent to non-registry origins.

Next step before merge
The remaining blocker is a concrete security-boundary repair plus maintainer agreement on the permanent card URL policy, so this should stay with the author/maintainer review path rather than be swept closed.

Security
Needs attention: The diff adds useful trust surfaces, but the generated-card fetch path still crosses the registry boundary by following arbitrary verification-provided URLs.

Review findings

  • [P1] Reject off-registry Skill Card URLs — src/infra/clawhub.ts:1035-1038
Review details

Best possible solution:

Bind Skill Card downloads to the selected ClawHub registry or an explicit maintainer-approved allowlist, add an off-registry rejection regression, then rerun the targeted trust-surface tests before maintainer review.

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

Yes for the review finding: source inspection shows --card reads card.url from the verification envelope and fetchClawHubSkillCard follows absolute off-registry URLs. I did not run the PR because this is a read-only review.

Is this the best way to solve the issue?

No: the feature direction is strong, but the card-fetch implementation should enforce the registry trust boundary before merge. The safer path is to keep the local Skill Card UI design and bind remote generated-card fetches to registry-owned URLs.

Full review comments:

  • [P1] Reject off-registry Skill Card URLs — src/infra/clawhub.ts:1035-1038
    fetchClawHubSkillCard still accepts the verification envelope's absolute card.url and fetches it even when it points outside the selected ClawHub registry; it only suppresses auth for a different origin. That lets a compromised or misconfigured registry turn openclaw skills verify --card into an arbitrary outbound fetch from the operator machine. Bind this to the registry-owned card endpoint or an explicit allowlist and add a rejection test for off-registry URLs.
    Confidence: 0.88

Overall correctness: patch is incorrect
Overall confidence: 0.88

AGENTS.md: found and applied where relevant.

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

Label changes

Label justifications:

  • P2: This is a normal-priority feature PR with a focused security-boundary blocker rather than an active user regression.
  • merge-risk: 🚨 security-boundary: Merging as-is would let a ClawHub verification response drive outbound Skill Card fetches from the operator machine outside the selected registry.
  • 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 (live_output): The PR body includes after-fix live output from a local source gateway and Control UI against an installed production ClawHub skill, plus observed verdict/card behavior; contributors should continue redacting private paths, endpoints, keys, phone numbers, and similar details in future proof.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body includes after-fix live output from a local source gateway and Control UI against an installed production ClawHub skill, plus observed verdict/card behavior; contributors should continue redacting private paths, endpoints, keys, phone numbers, and similar details in future proof.
Evidence reviewed

PR surface:

Source +1679, Tests +2095, Docs +31, Other +80. Total +3885 across 32 files.

View PR surface stats
Area Files Added Removed Net
Source 18 1720 41 +1679
Tests 11 2107 12 +2095
Docs 2 42 11 +31
Config 0 0 0 0
Generated 0 0 0 0
Other 1 80 0 +80
Total 32 3949 64 +3885

Security concerns:

  • [medium] Off-registry Skill Card fetch — src/infra/clawhub.ts:1035
    The helper follows absolute card.url values from the verification response, so a registry can cause OpenClaw to fetch non-registry URLs from the operator environment; suppressing Authorization does not remove the outbound request/security-boundary concern.
    Confidence: 0.88

What I checked:

  • Root and scoped policy read: Read the full root AGENTS.md plus scoped guides for docs, agents, gateway, gateway protocol, gateway server methods, UI, and scripts; the security-boundary and additive protocol guidance applies to this PR. (AGENTS.md:1, 2f710f560450)
  • CLI card path follows verified response URL: openclaw skills verify --card reads card.url from the verification response and passes it to fetchClawHubSkillCard with the selected registry as base. (src/cli/skills-cli.ts:386, 85a7c2926360)
  • Helper permits off-registry card fetches: fetchClawHubSkillCard accepts an absolute url and sends it to clawhubRequest; the only off-origin guard is suppressing auth, not rejecting non-registry URLs. (src/infra/clawhub.ts:1035, 85a7c2926360)
  • Regression currently blesses off-registry cards: The PR test suite expects fetchClawHubSkillCard to fetch https://cards.example.test/... while the selected base URL is https://clawhub.ai, confirming the behavior is intentional in the patch rather than a missing test case. (src/infra/clawhub.test.ts:467, 85a7c2926360)
  • Bulk verdict dependency contract checked: The merged ClawHub dependency documents POST /api/v1/skills/-/security-verdicts as security-only and explicitly excludes Skill Card data, matching the PR's local-card UI design. (667bc55299c4)
  • Real behavior proof present: The PR body reports a live local OpenClaw workspace with openclaw/discrawl@1.0.0, source gateway calls to skills.status, skills.securityVerdicts, and skills.skillCard, Control UI rendering, and copied live output showing the production verdict payload. (85a7c2926360)

Likely related people:

  • Patrick-Erichsen: Authored prior merged skill install work on current main that owns the src/agents/skills-clawhub.ts path and is directly adjacent to the verification target-resolution changes. (role: recent area contributor; confidence: high; commits: c0312748c4f7; files: src/agents/skills-clawhub.ts, src/cli/skills-cli.ts)
  • steipete: Recent current-main history shows broad refactors and UI/gateway work touching the affected infra, gateway, and Skills dialog surfaces. (role: recent adjacent owner; confidence: medium; commits: 77d9ac30bb8d, 756379b11ddf, b33ce7a37104; files: src/infra/clawhub.ts, src/gateway/server-methods/skills.ts, ui/src/ui/views/skills.ts)
  • vincentkoc: Recent current-main and local blame history both point to ClawHub infra maintenance around malformed marketplace/ClawHub client handling. (role: adjacent infra contributor; confidence: medium; commits: eb07aba9731b; files: src/infra/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. P2 Normal backlog priority with limited blast radius. merge-risk: 🚨 security-boundary 🚨 May affect sandboxing, authorization, credentials, or sensitive data. labels May 26, 2026
@clawsweeper

clawsweeper Bot commented May 26, 2026

Copy link
Copy Markdown
Contributor

ClawSweeper PR egg

🔥 Warming up: real-behavior proof passed; findings, security review, or rank-up moves are still in progress.

Hatch command

Comment @clawsweeper hatch when this PR is hatchable.

Hatchability rules:

  • Merged PRs are hatchable.
  • Open PRs are hatchable when they are status: 👀 ready for maintainer look, status: 🚀 automerge armed, or labeled clawsweeper:automerge.
  • Closed unmerged PRs are hatchable only when one of those hatchable labels is still present in the durable record.
What is this egg doing here?
  • Eggs appear after the PR passes real-behavior proof. It is here for vibes, not verdicts: it does not change labels, ratings, merge decisions, or automation.
  • The shell reacts to review momentum: open follow-up work warms it up, re-review makes it wobble, and a clean final review lets it hatch.
  • Hatchability usually comes from sufficient real-behavior proof, no blocking P0/P1/P2 findings, no security attention needed, and clean correctness. A merged PR is already final, so merge makes the egg hatchable independently.
  • The hatch is seeded from this repository and PR number, so the same PR keeps the same creature; the reviewed head SHA can only change safe visual details.
  • Rarity is just collectible sparkle: 🥚 common, 🌱 uncommon, 💎 rare, ✨ glimmer, and 🌈 legendary.

@Patrick-Erichsen Patrick-Erichsen changed the title Add ClawHub skill verification CLI Add ClawHub skill verification and trust surfaces May 26, 2026
@openclaw-barnacle openclaw-barnacle Bot added app: web-ui App: web-ui gateway Gateway runtime labels May 26, 2026
@Patrick-Erichsen

Copy link
Copy Markdown
Contributor Author

/clawsweeper re-review

@clawsweeper

clawsweeper Bot commented May 26, 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 the status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. label May 27, 2026
@Patrick-Erichsen

Copy link
Copy Markdown
Contributor Author

/clawsweeper re-review

@clawsweeper

clawsweeper Bot commented May 27, 2026

Copy link
Copy Markdown
Contributor

🦞👀
ClawSweeper picked this up.

Command router queued. I will update this comment with the next step.

Re-review progress:

@Patrick-Erichsen

Copy link
Copy Markdown
Contributor Author

/clawsweeper re-review

@clawsweeper

clawsweeper Bot commented May 27, 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: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. and removed 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. labels May 27, 2026
@Patrick-Erichsen Patrick-Erichsen requested a review from a team as a code owner May 27, 2026 18:44
@github-actions github-actions Bot added the dependencies-changed PR changes dependency-related files label May 27, 2026
@socket-security

socket-security Bot commented May 27, 2026

Copy link
Copy Markdown

No dependency changes detected. Learn more about Socket for GitHub.

👍 No dependency changes detected in pull request

…d-verify

# Conflicts:
#	extensions/diffs-language-pack/package.json
@github-actions github-actions Bot removed the dependencies-changed PR changes dependency-related files label May 27, 2026
@openclaw-barnacle openclaw-barnacle Bot added dependencies-changed PR changes dependency-related files and removed extensions: diffs labels May 27, 2026
…d-verify

# Conflicts:
#	extensions/canvas/src/cli.ts
@github-actions github-actions Bot removed the dependencies-changed PR changes dependency-related files label May 27, 2026
@Patrick-Erichsen Patrick-Erichsen merged commit ee57f34 into main May 27, 2026
98 of 100 checks passed
@Patrick-Erichsen Patrick-Erichsen deleted the pe/claw-179-skill-card-verify branch May 27, 2026 19:23
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request May 28, 2026
* feat(skills): fetch ClawHub skill verification

* feat(skills): resolve ClawHub verification targets

* feat(skills): add ClawHub verify command

* docs(skills): document ClawHub verification

* test(skills): type verify CLI fixture

* fix(skills): fetch verified skill card URL

* fix(skills): bound verified card downloads

* fix(skills): fail closed on malformed verification

* fix(skills): corroborate ClawHub install origins

* feat(skills): surface ClawHub trust in control UI

* chore(protocol): refresh generated gateway models

* chore(ui): refresh i18n raw copy baseline

* docs: clarify skills verify wording

* fix: fail closed on skill trust mismatches

* fix: reject incomplete clawhub provenance

* fix: satisfy trust verdict lint

* fix: restore ci checks after main merge
eleboucher pushed a commit to eleboucher/homelab that referenced this pull request May 31, 2026
…026.5.28) (#759)

This PR contains the following updates:

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

---

### Release Notes

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

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

[Compare Source](openclaw/openclaw@v2026.5.27...v2026.5.28)

##### Highlights

- Agent and Codex runtime recovery is steadier: subagents keep cwd/workspace separation, hook context stays prompt-local, session locks release on timeout abort while live OpenClaw locks survive cleanup, stale restart continuations are avoided, and Codex app-server/helper failures no longer tear down shared runtime state. ([#&#8203;87218](openclaw/openclaw#87218), [#&#8203;86875](openclaw/openclaw#86875), [#&#8203;87409](openclaw/openclaw#87409), [#&#8203;87399](openclaw/openclaw#87399), [#&#8203;87375](openclaw/openclaw#87375), [#&#8203;88129](openclaw/openclaw#88129))
- Channel delivery and session identity got safer across outbound plugin hooks, Matrix room ids, iMessage reactions/approvals, Slack final replies, Discord recovered tool warnings, runtime-config message actions, WhatsApp profile auth roots, Telegram polling, and Microsoft Teams service URL trust checks. ([#&#8203;73706](openclaw/openclaw#73706), [#&#8203;75670](openclaw/openclaw#75670), [#&#8203;87366](openclaw/openclaw#87366), [#&#8203;87451](openclaw/openclaw#87451), [#&#8203;87334](openclaw/openclaw#87334), [#&#8203;84535](openclaw/openclaw#84535), [#&#8203;82492](openclaw/openclaw#82492), [#&#8203;83304](openclaw/openclaw#83304), [#&#8203;87160](openclaw/openclaw#87160))
- Mobile and chat surfaces got a broader refresh: the iOS Pro UI, hosted push relay default, realtime Talk tab playback, Gateway chat transport, onboarding, Talk permissions, WebChat reconnect delivery, and session picker behavior now preserve more state across reconnects and empty searches. ([#&#8203;87367](openclaw/openclaw#87367), [#&#8203;87531](openclaw/openclaw#87531), [#&#8203;87682](openclaw/openclaw#87682), [#&#8203;88096](openclaw/openclaw#88096), [#&#8203;88105](openclaw/openclaw#88105)) Thanks [@&#8203;ngutman](https://github.com/ngutman) and [@&#8203;BunsDev](https://github.com/BunsDev).
- Browser, channel, and automation inputs are stricter: Browser tool timeouts, viewport/tab indices, Gateway ports, cron retry handling, Discord component ids, schema array refs, Telegram callback pages, and channel progress callbacks now reject malformed values earlier and preserve the intended delivery context. ([#&#8203;82887](openclaw/openclaw#82887))
- Provider, media, and document coverage expands with Claude Opus 4.8, Fal Krea image schemas, NVIDIA featured models, MiniMax streaming music responses, encrypted PDF extraction, voice model catalogs, GitHub Copilot agent runtime support, and a Codex Supervisor plugin path for delegated Codex workflows. ([#&#8203;87845](openclaw/openclaw#87845), [#&#8203;87890](openclaw/openclaw#87890), [#&#8203;80775](openclaw/openclaw#80775), [#&#8203;84764](openclaw/openclaw#84764), [#&#8203;87751](openclaw/openclaw#87751), [#&#8203;87794](openclaw/openclaw#87794))
- CLI, auth, doctor, and provider paths fail faster and recover more clearly: malformed numeric/version options are rejected, workspace dotenv provider credentials are ignored, heartbeat defaults, OAuth/token lifetimes, and local service startup requests are bounded, agent auth health labels are clearer, legacy `api_key` auth profiles migrate to canonical form, and restart guidance is actionable. ([#&#8203;87398](openclaw/openclaw#87398), [#&#8203;86281](openclaw/openclaw#86281), [#&#8203;87361](openclaw/openclaw#87361), [#&#8203;88133](openclaw/openclaw#88133), [#&#8203;83655](openclaw/openclaw#83655), [#&#8203;87559](openclaw/openclaw#87559), [#&#8203;88088](openclaw/openclaw#88088), [#&#8203;85924](openclaw/openclaw#85924)) Thanks [@&#8203;vincentkoc](https://github.com/vincentkoc) and [@&#8203;giodl73-repo](https://github.com/giodl73-repo).
- Plugin and Gateway hot paths do less repeated work while preserving cache correctness for install records, config JSON parsing, tool search catalogs, session stores, manifest model rows, auto-enabled plugin config, browser tokens, viewer assets, and release-split external plugin packages. ([#&#8203;86699](openclaw/openclaw#86699))
- Release, QA, and E2E validation now bound more log, artifact, harness, and cross-OS waits so failing lanes produce proof instead of hanging or false-greening.

##### Changes

- Status: show active subagent details in status output.
- Diffs: split the default language pack and expand default Diffs language coverage while keeping the host floor aligned. ([#&#8203;87370](openclaw/openclaw#87370), [#&#8203;87372](openclaw/openclaw#87372)) Thanks [@&#8203;RomneyDa](https://github.com/RomneyDa).
- ClawHub: add plugin display names plus skill verification and trust surfaces. ([#&#8203;87354](openclaw/openclaw#87354), [#&#8203;86699](openclaw/openclaw#86699)) Thanks [@&#8203;thewilloftheshadow](https://github.com/thewilloftheshadow) and [@&#8203;Patrick-Erichsen](https://github.com/Patrick-Erichsen).
- iOS: refresh the dev app with Pro Command, Chat, Agents, Settings, hosted push relay defaults, and realtime Talk playback wired to gateway sessions, diagnostics, chat, and realtime Talk. ([#&#8203;87367](openclaw/openclaw#87367), [#&#8203;88096](openclaw/openclaw#88096), [#&#8203;88105](openclaw/openclaw#88105)) Thanks [@&#8203;Solvely-Colin](https://github.com/Solvely-Colin) and [@&#8203;ngutman](https://github.com/ngutman).
- Docs: clarify Codex computer-use setup, paste-token stdin auth setup, macOS gateway sleep troubleshooting, native Codex hook relay recovery, container model auth, install deployment cards, device-token admin gating, CLI setup flow compatibility, Notte cloud browser CDP setup, and backport targets. ([#&#8203;87313](openclaw/openclaw#87313), [#&#8203;63050](openclaw/openclaw#63050), [#&#8203;87685](openclaw/openclaw#87685)) Thanks [@&#8203;bdjben](https://github.com/bdjben), [@&#8203;liaoandi](https://github.com/liaoandi), and [@&#8203;thewilloftheshadow](https://github.com/thewilloftheshadow).
- PDF/tools: use ClawPDF for PDF extraction, support encrypted PDF extraction, and surface MCP structured content in agent tool results. ([#&#8203;87670](openclaw/openclaw#87670), [#&#8203;87751](openclaw/openclaw#87751))
- Providers: add Claude Opus 4.8 support, Fal Krea image model schemas, NVIDIA featured model catalogs, MiniMax streaming music responses, and provider-backed voice model catalogs. ([#&#8203;87845](openclaw/openclaw#87845), [#&#8203;87890](openclaw/openclaw#87890), [#&#8203;80775](openclaw/openclaw#80775), [#&#8203;84764](openclaw/openclaw#84764), [#&#8203;87794](openclaw/openclaw#87794)) Thanks [@&#8203;eleqtrizit](https://github.com/eleqtrizit) and [@&#8203;vincentkoc](https://github.com/vincentkoc).
- Codex/GitHub: add the GitHub Copilot agent runtime and the Codex Supervisor plugin package.
- Plugins: externalize GitHub Copilot and Tokenjuice as official install-on-demand plugins with npm and ClawHub publish metadata.
- Workboard: add agent coordination tools for tracking and handing off active agent work.
- Discord: show commentary in progress drafts so live Discord runs expose useful in-progress context. ([#&#8203;85200](openclaw/openclaw#85200))
- Plugin SDK: add a reply payload sending hook for plugins that need to deliver channel-owned replies and flatten package types for SDK declarations. ([#&#8203;82823](openclaw/openclaw#82823), [#&#8203;87165](openclaw/openclaw#87165)) Thanks [@&#8203;piersonr](https://github.com/piersonr) and [@&#8203;RomneyDa](https://github.com/RomneyDa).
- Policy: add policy comparison, ingress-channel conformance, and sandbox-posture conformance checks. ([#&#8203;85572](openclaw/openclaw#85572), [#&#8203;85744](openclaw/openclaw#85744), [#&#8203;86768](openclaw/openclaw#86768))

##### Fixes

- Agents: fall back to local config pruning when the optional `agents delete` Gateway probe cannot authenticate, so offline installs can still delete agents without removing shared workspaces.
- Tighten phone-control mutation authorization \[AI]. ([#&#8203;87150](openclaw/openclaw#87150)) Thanks [@&#8203;pgondhi987](https://github.com/pgondhi987).
- Clarify directive persistence authorization policy \[AI]. ([#&#8203;86369](openclaw/openclaw#86369)) Thanks [@&#8203;pgondhi987](https://github.com/pgondhi987).
- Agents/Codex: keep spawned agent cwd/workspace state separated, forward ACP spawn attachments, keep hook context prompt-local, release session locks on timeout abort and runtime teardown without deleting live OpenClaw-owned locks during cleanup, avoid session event queue self-wait, clean up exec abort listeners, stream assistant deltas incrementally, recover raw missing-thread compaction failures, preserve rotated compaction session identity, keep compaction-timeout snapshots continuable, preserve shared app-server state across startup or helper failures, keep native hook relay alive across restarts and prune stale bridge files, close native hook relay replacement races, keep Claude live tool progress visible for watchdog recovery, suppress abandoned requester completion handoff, route workspace memory through tools, resolve Codex runtime models first, report quarantined dynamic tools, format `skills` command output, bind node auto-review to prepared plans, retry Claude CLI transcript probes, and bound compaction/steering retries. ([#&#8203;87218](openclaw/openclaw#87218), [#&#8203;86875](openclaw/openclaw#86875), [#&#8203;86123](openclaw/openclaw#86123), [#&#8203;88129](openclaw/openclaw#88129), [#&#8203;87399](openclaw/openclaw#87399), [#&#8203;87375](openclaw/openclaw#87375), [#&#8203;72574](openclaw/openclaw#72574), [#&#8203;87383](openclaw/openclaw#87383), [#&#8203;87400](openclaw/openclaw#87400), [#&#8203;83022](openclaw/openclaw#83022), [#&#8203;87671](openclaw/openclaw#87671), [#&#8203;87738](openclaw/openclaw#87738), [#&#8203;87747](openclaw/openclaw#87747), [#&#8203;87706](openclaw/openclaw#87706), [#&#8203;87546](openclaw/openclaw#87546), [#&#8203;87541](openclaw/openclaw#87541), [#&#8203;81048](openclaw/openclaw#81048)) Thanks [@&#8203;mbelinky](https://github.com/mbelinky), [@&#8203;Alix-007](https://github.com/Alix-007), [@&#8203;luoyanglang](https://github.com/luoyanglang), [@&#8203;yetval](https://github.com/yetval), [@&#8203;sjf](https://github.com/sjf), [@&#8203;joshavant](https://github.com/joshavant), [@&#8203;benjamin1492](https://github.com/benjamin1492), [@&#8203;c19354837](https://github.com/c19354837), [@&#8203;fuller-stack-dev](https://github.com/fuller-stack-dev), [@&#8203;pfrederiksen](https://github.com/pfrederiksen), and [@&#8203;dodge1218](https://github.com/dodge1218).
- Codex Supervisor: keep real-home app-server MCP session listing on the loaded state path, bound stored history scans, and close WebSocket probes cleanly.
- Channels: thread canonical session keys into outbound hooks, preserve Matrix room-id case, keep fallback tool warnings mention-inert, retain delivered Slack final replies during late cleanup, continue iMessage polling after denied reactions, suppress duplicate native exec approvals, resolve Gateway message actions against the active runtime config, preserve Telegram SecretRef prompt config and polling keepalives, preserve WhatsApp profile auth roots, QR display, document filenames, and plugin hook config, suppress Discord recovered tool warnings, preserve the Discord voice outbound helper, cap Discord/Signal/Zalo channel request and container timeouts, and block untrusted Teams service URLs while keeping TeamsSDK patterns aligned. ([#&#8203;73706](openclaw/openclaw#73706), [#&#8203;75670](openclaw/openclaw#75670), [#&#8203;87366](openclaw/openclaw#87366), [#&#8203;87451](openclaw/openclaw#87451), [#&#8203;87465](openclaw/openclaw#87465), [#&#8203;87334](openclaw/openclaw#87334), [#&#8203;84535](openclaw/openclaw#84535), [#&#8203;76262](openclaw/openclaw#76262), [#&#8203;83304](openclaw/openclaw#83304), [#&#8203;82492](openclaw/openclaw#82492), [#&#8203;87581](openclaw/openclaw#87581), [#&#8203;77114](openclaw/openclaw#77114), [#&#8203;86426](openclaw/openclaw#86426), [#&#8203;85529](openclaw/openclaw#85529), [#&#8203;87160](openclaw/openclaw#87160)) Thanks [@&#8203;zeroaltitude](https://github.com/zeroaltitude), [@&#8203;lukeboyett](https://github.com/lukeboyett), [@&#8203;jarvis-mns1](https://github.com/jarvis-mns1), [@&#8203;xiaotian](https://github.com/xiaotian), [@&#8203;funmerlin](https://github.com/funmerlin), [@&#8203;joshavant](https://github.com/joshavant), [@&#8203;eleqtrizit](https://github.com/eleqtrizit), [@&#8203;heyitsaamir](https://github.com/heyitsaamir), [@&#8203;amittell](https://github.com/amittell), [@&#8203;lidge-jun](https://github.com/lidge-jun), [@&#8203;liorb-mountapps](https://github.com/liorb-mountapps), [@&#8203;masatohoshino](https://github.com/masatohoshino), [@&#8203;bladin](https://github.com/bladin), and [@&#8203;giodl73-repo](https://github.com/giodl73-repo).
- CLI/auth/doctor/providers: reject malformed numeric/timeout/subcommand-version inputs, ignore workspace dotenv provider credentials, wait for respawn child shutdown, bound heartbeat defaults plus Codex, GitHub Copilot, OpenAI, Anthropic, Google, Feishu, LM Studio, MiniMax, Xiaomi TTS, and local-provider OAuth/token/model requests, harden Codex auth probes, label auth health by agent, preserve explicit agentRuntime pins during Codex model migration, warm provider auth off the main thread, honor Codex response timeouts, stop migrating current Claude Haiku 4.5 profiles to Sonnet, bound local service startup, resolve GPT-5.5 without cached catalog, migrate legacy memory auto-provider config, rewrite non-canonical `api_key` auth profiles, and make doctor restart follow-ups actionable. ([#&#8203;87398](openclaw/openclaw#87398), [#&#8203;86281](openclaw/openclaw#86281), [#&#8203;87361](openclaw/openclaw#87361), [#&#8203;88133](openclaw/openclaw#88133), [#&#8203;83655](openclaw/openclaw#83655), [#&#8203;87559](openclaw/openclaw#87559), [#&#8203;87719](openclaw/openclaw#87719), [#&#8203;88088](openclaw/openclaw#88088), [#&#8203;85924](openclaw/openclaw#85924), [#&#8203;84362](openclaw/openclaw#84362)) Thanks [@&#8203;Patrick-Erichsen](https://github.com/Patrick-Erichsen), [@&#8203;samzong](https://github.com/samzong), [@&#8203;giodl73-repo](https://github.com/giodl73-repo), [@&#8203;alkor2000](https://github.com/alkor2000), [@&#8203;mmaps](https://github.com/mmaps), [@&#8203;nxmxbbd](https://github.com/nxmxbbd), and [@&#8203;vincentkoc](https://github.com/vincentkoc).
- Gateway/security/session state: expire browser tokens after auth rotation, scope assistant idempotency dedupe, drain probe client closes, avoid stale restart continuation reuse, preserve retry-after fallbacks and stale rate-limit cooldown probes, bound webchat image and artifact transcript scans, include seconds in inbound metadata timestamps, clear completed session active runs, clear stale chat stream buffers, and evict current plugin-state namespaces at row caps. ([#&#8203;87810](openclaw/openclaw#87810), [#&#8203;87833](openclaw/openclaw#87833), [#&#8203;75089](openclaw/openclaw#75089)) Thanks [@&#8203;joshavant](https://github.com/joshavant) and [@&#8203;litang9](https://github.com/litang9).
- Config/parsing/network: reject partial numeric parsing, parse provider/Discord retry headers and dates strictly, honor IPv6 and bare IPv6 `no_proxy` entries, preserve empty plugin allowlists, canonicalize secret target array indexes, and reject malformed media content lengths, inspected TCP ports, marketplace content lengths, cron epochs, sandbox stat fields, unsafe duration values, empty config path segments, noncanonical schema array refs, unsafe Telegram callback pages, and invalid Teams attachment-fetch DNS targets. ([#&#8203;87883](openclaw/openclaw#87883)) Thanks [@&#8203;zhangguiping-xydt](https://github.com/zhangguiping-xydt).
- Browser/input hardening: reject invalid tab indexes, excessive viewport resizes, explicit zero CDP ports, malformed geolocation options, unsafe screenshot or permission-grant timeouts, loose response-body limits, invalid cookie expiries, and non-finite Browser tool delays/timeouts.
- Cron/automation: retry recurring jobs after transient model rate limits before waiting for the next scheduled slot, and preflight model fallbacks before skipping scheduled work. ([#&#8203;82887](openclaw/openclaw#82887)) Thanks [@&#8203;chen-zhang-cs-code](https://github.com/chen-zhang-cs-code).
- Auto-reply/directives: respect provider and relayed channel metadata during directive persistence so channel-originated decisions keep their intended context. ([#&#8203;87683](openclaw/openclaw#87683))
- WhatsApp: resolve the auth directory from the active profile so profile-scoped WhatsApp installs do not drift to the wrong credential root. ([#&#8203;82492](openclaw/openclaw#82492)) Thanks [@&#8203;lidge-jun](https://github.com/lidge-jun).
- Gateway/session state: clear completed session active runs, avoid cold-loading providers for MCP inventory, cache single-session child indexes, cap handshake timers, and bound preauth, auth-guard, media, transcript, readiness, and port options.
- Channels/replies: preserve channel-owned progress callbacks when verbose output is off, keep group-room progress suppression intact, prefer external session delivery context, escape Discord component id delimiters, force final TUI chat repaints, show Slack reasoning previews, and normalize Discord/Matrix/Mattermost channel numeric options. ([#&#8203;87476](openclaw/openclaw#87476), [#&#8203;87423](openclaw/openclaw#87423))
- Agents/tool args: harden smart-quoted argument repair for edit arrays and exact escaped arguments so model-produced tool calls recover without corrupting valid input. ([#&#8203;86611](openclaw/openclaw#86611)) Thanks [@&#8203;ferminquant](https://github.com/ferminquant).
- Providers/agents: preserve seeded Anthropic signatures, preserve signed thinking payloads, concatenate signature-delta chunks, preserve DeepSeek `reasoning_content` replay across tier suffixes, apply OpenRouter strict9 ids to Mistral routes, promote Ollama plain-text tool calls, load NVIDIA featured model catalogs, stream MiniMax music generation responses, and recover empty preflight compaction. ([#&#8203;87593](openclaw/openclaw#87593), [#&#8203;87493](openclaw/openclaw#87493), [#&#8203;80775](openclaw/openclaw#80775), [#&#8203;84764](openclaw/openclaw#84764)) Thanks [@&#8203;Pluviobyte](https://github.com/Pluviobyte) and [@&#8203;eleqtrizit](https://github.com/eleqtrizit).
- Media/images: skip CLI image cache refs when resolving generated images, allow trusted generated HTML attachments, and bound generated video downloads so stale refs and slow providers fail cleanly. ([#&#8203;87523](openclaw/openclaw#87523), [#&#8203;87982](openclaw/openclaw#87982))
- File transfer: handle late tar stdin pipe errors after archive validation or unpacking has already settled.
- Performance: trust install-record caches between reloads, prefer native JSON parsing, reuse unchanged tool-search catalogs, reuse gateway session and plugin metadata paths, skip unchanged store serialization, patch single-entry session writes, add precomputed session patch writers, reduce store clone allocations, cache manifest model catalog rows and auto-enabled plugin config, avoid full session snapshots for entry reads, defer configured Slack full startup, prefer bundled plugin dist entries, and slim current metadata identity caches. ([#&#8203;87760](openclaw/openclaw#87760))
- Docker/release/QA: package runtime workspace templates, stream cross-OS served artifacts, preserve sparse Crabbox run artifacts, isolate npm plugin installs per package, reject incompatible package plugin API installs, drop the leftover root Sharp dependency from package manifests after the Rastermill migration, bound OpenClaw instance logs, plugin gauntlet relay logs, MCP channel buffers, kitchen-sink scans, agent-turn assertions, QA-Lab credential broker calls, QA Matrix substrate requests, and release scenario logs, and keep release/google live guards current. ([#&#8203;87647](openclaw/openclaw#87647), [#&#8203;87477](openclaw/openclaw#87477)) Thanks [@&#8203;rohitjavvadi](https://github.com/rohitjavvadi) and [@&#8203;vincentkoc](https://github.com/vincentkoc).
- Release/CI: bound manual git fetches, ClawHub verifier responses, ClawHub owner metadata, dependency-guard error bodies, Parallels limits, startup/test/memory budget parsing, and diffs viewer build warnings so release lanes fail with useful proof instead of hanging. ([#&#8203;87839](openclaw/openclaw#87839))

</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/759
SYU8384 pushed a commit to SYU8384/openclaw that referenced this pull request Jun 3, 2026
* feat(skills): fetch ClawHub skill verification

* feat(skills): resolve ClawHub verification targets

* feat(skills): add ClawHub verify command

* docs(skills): document ClawHub verification

* test(skills): type verify CLI fixture

* fix(skills): fetch verified skill card URL

* fix(skills): bound verified card downloads

* fix(skills): fail closed on malformed verification

* fix(skills): corroborate ClawHub install origins

* feat(skills): surface ClawHub trust in control UI

* chore(protocol): refresh generated gateway models

* chore(ui): refresh i18n raw copy baseline

* docs: clarify skills verify wording

* fix: fail closed on skill trust mismatches

* fix: reject incomplete clawhub provenance

* fix: satisfy trust verdict lint

* fix: restore ci checks after main merge
sablehead pushed a commit to sablehead/openclaw that referenced this pull request Jun 10, 2026
* feat(skills): fetch ClawHub skill verification

* feat(skills): resolve ClawHub verification targets

* feat(skills): add ClawHub verify command

* docs(skills): document ClawHub verification

* test(skills): type verify CLI fixture

* fix(skills): fetch verified skill card URL

* fix(skills): bound verified card downloads

* fix(skills): fail closed on malformed verification

* fix(skills): corroborate ClawHub install origins

* feat(skills): surface ClawHub trust in control UI

* chore(protocol): refresh generated gateway models

* chore(ui): refresh i18n raw copy baseline

* docs: clarify skills verify wording

* fix: fail closed on skill trust mismatches

* fix: reject incomplete clawhub provenance

* fix: satisfy trust verdict lint

* fix: restore ci checks after main merge
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agents Agent runtime and tooling app: web-ui App: web-ui cli CLI command changes docs Improvements or additions to documentation feature: ✨ showcase ClawSweeper spotlight: unusually compelling feature idea for maintainer attention. gateway Gateway runtime maintainer Maintainer-authored PR merge-risk: 🚨 security-boundary 🚨 May affect sandboxing, authorization, credentials, or sensitive data. P2 Normal backlog priority with limited blast radius. proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. 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