Skip to content

Block unsafe Node runtime env overrides [AI]#87308

Merged
pgondhi987 merged 4 commits into
openclaw:mainfrom
pgondhi987:fix/fix-698
May 27, 2026
Merged

Block unsafe Node runtime env overrides [AI]#87308
pgondhi987 merged 4 commits into
openclaw:mainfrom
pgondhi987:fix/fix-698

Conversation

@pgondhi987
Copy link
Copy Markdown
Contributor

@pgondhi987 pgondhi987 commented May 27, 2026

Summary

  • Blocks Node runtime-control environment variables in the shared host environment policy.
  • Regenerates the macOS host environment policy artifact from the shared JSON policy.
  • Adds regression coverage for explicit overrides, inherited environment filtering, workspace .env, CLI dotenv loading, and skill env overrides.
  • Updates user-facing docs that describe filtered startup environment keys.

Linked context

No public auto-closing issue reference in this PR body.

Real behavior proof (required for external PRs)

  • Behavior addressed: Node runtime-control environment keys are now rejected by the same sanitizer paths that already reject comparable startup and loader controls.
  • Real environment tested: Local OpenClaw worktree on Linux with Node 24.15.0; proof exercised the node-host system.run sanitizer boundary.
  • Exact steps or command run after this patch: ./node_modules/.bin/tsx --eval '<script importing sanitizeEnv from src/node-host/invoke.ts and passing NODE_REDIRECT_WARNINGS, NODE_REPL_EXTERNAL_MODULE, NODE_REPL_HISTORY, NODE_V8_COVERAGE overrides>'
  • Evidence after fix:
{
  "proof": "node-host system.run sanitizeEnv override filtering",
  "safeValue": "kept",
  "blockedSurvivors": []
}
  • Observed result after fix: The safe proof key survived, while NODE_REDIRECT_WARNINGS, NODE_REPL_EXTERNAL_MODULE, NODE_REPL_HISTORY, and NODE_V8_COVERAGE were all removed by the OpenClaw node-host sanitizer path.
  • What was not tested: A full live gateway with an attached external node was not run locally.
  • Proof limitations or environment constraints: This is local runtime proof against the node-host sanitizer function used by system.run, plus focused tests for sibling sanitizer consumers.
  • Before evidence: Existing policy and tests did not cover these Node runtime-control keys.

Tests and validation

Commands run:

node scripts/run-vitest.mjs src/infra/host-env-security.test.ts src/infra/host-env-security.reported-baseline.test.ts src/infra/host-env-security.policy-parity.test.ts src/infra/dotenv.test.ts src/agents/skills.test.ts
git diff --check
pnpm docs:check-mdx
./node_modules/.bin/oxfmt --check --threads=1 src/agents/skills.test.ts src/infra/dotenv.test.ts src/infra/host-env-security-policy.json src/infra/host-env-security.reported-baseline.json src/infra/host-env-security.reported-baseline.test.ts src/infra/host-env-security.test.ts
pnpm format:docs:check
.agents/skills/autoreview/scripts/autoreview --mode branch --base origin/main
/home/ubuntu/openclaw-tracking/skill-based-auto-pr-creation/scripts/auto-pr.sh issue 698 --run-stage ghsa_dry_run

Regression coverage added or updated:

  • Host environment policy baseline coverage for the additional keys.
  • Explicit inherited and override sanitizer assertions.
  • Workspace and CLI dotenv filtering assertions.
  • Skill env override filtering assertions.
  • macOS generated policy parity coverage through the existing parity test.

Risk checklist

Did user-visible behavior change? (Yes/No)

Yes. These environment variables are now filtered where dangerous runtime-control env keys are already filtered.

Did config, environment, or migration behavior change? (Yes/No)

Yes. Environment override and dotenv handling rejects additional Node runtime-control names.

Did security, auth, secrets, network, or tool execution behavior change? (Yes/No)

Yes. This changes host child-process environment sanitization.

What is the highest-risk area?

Blocking a legitimate local workflow that intentionally relied on these Node variables through OpenClaw-managed child process env surfaces.

How is that risk mitigated?

The change is limited to the existing dangerous environment policy boundary, keeps trusted global operator dotenv behavior unchanged, documents the new filtered names, and adds focused regression coverage across affected sanitizer consumers.

Current review state

What is the next action?

Wait for CI and fresh automation review on the latest commit.

What is still waiting on author, maintainer, CI, or external proof?

CI is pending. Maintainer review is still needed for the compatibility impact of blocking these Node runtime-control variables.

Which bot or reviewer comments were addressed?

Autoreview requested blocking same-class Node path redirection env variables; this PR now also blocks NODE_REDIRECT_WARNINGS and NODE_REPL_HISTORY with matching docs/tests. ClawSweeper requested real behavior proof; this body now includes node-host sanitizer proof output.

AI-assisted: yes.

@openclaw-barnacle openclaw-barnacle Bot added docs Improvements or additions to documentation app: macos App: macos agents Agent runtime and tooling plugin: file-transfer size: S maintainer Maintainer-authored PR labels May 27, 2026
@clawsweeper
Copy link
Copy Markdown
Contributor

clawsweeper Bot commented May 27, 2026

Codex review: needs maintainer review before merge. Reviewed May 27, 2026, 10:37 AM ET / 14:37 UTC.

Summary
Adds four Node runtime-control environment variable names to the shared host environment denylist, regenerated macOS policy artifact, user-facing docs, and focused regression coverage.

PR surface: Source +8, Tests +87, Docs 0, Generated +8. Total +103 across 10 files.

Reproducibility: yes. Current main lacks the four Node runtime-control names in the shared policy while sanitizer paths derive blocked inherited and override behavior from that policy, and Node 24.15.0 help confirms the names alter runtime behavior.

Review metrics: 1 noteworthy metric.

  • Blocked env policy surface: 4 added, 0 changed, 0 removed. Adding blocked env names changes runtime compatibility for existing users who pass these Node variables through OpenClaw-managed env surfaces.

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:

  • Have a maintainer explicitly accept the compatibility impact of filtering these four env keys before merge.

Risk before merge

  • Merging intentionally blocks NODE_REDIRECT_WARNINGS, NODE_REPL_EXTERNAL_MODULE, NODE_REPL_HISTORY, and NODE_V8_COVERAGE across OpenClaw-managed environment surfaces; existing users relying on those variables through system.run, workspace dotenv, CLI dotenv, skills, or stdio MCP env need maintainer-accepted compatibility breakage.

Maintainer options:

  1. Accept stricter Node env filtering (recommended)
    A maintainer can explicitly accept that these four Node runtime-control variables stop passing through OpenClaw-managed env surfaces because the security boundary is worth the compatibility cost.
  2. Narrow any legitimate exception
    If maintainers decide a variable such as REPL history or V8 coverage should remain supported, adjust the shared policy and docs before merge rather than blocking it everywhere.
  3. Pause until workflow evidence appears
    If there is credible evidence of common legitimate workflows depending on these variables, pause this PR and decide the env policy in a focused maintainer thread.

Next step before merge
Protected maintainer labeling and intentional compatibility-sensitive env filtering require human approval; no narrow repair defect was found.

Security
Cleared: No supply-chain or security-regression concern found; the patch tightens an existing host child-process environment boundary without touching dependencies, workflows, lockfiles, or secret handling.

Review details

Best possible solution:

Land only after a maintainer accepts the stricter Node env policy and CI is green; otherwise narrow the policy scope or document an explicit supported exception path.

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

Yes. Current main lacks the four Node runtime-control names in the shared policy while sanitizer paths derive blocked inherited and override behavior from that policy, and Node 24.15.0 help confirms the names alter runtime behavior.

Is this the best way to solve the issue?

Yes if maintainers want these keys blocked. The PR uses the shared JSON policy so node-host, dotenv, skill env overrides, docs, and generated macOS policy stay aligned; the unresolved part is compatibility acceptance, not a code repair.

AGENTS.md: found and applied where relevant.

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

Label changes

Label changes:

  • add proof: sufficient: Contributor real behavior proof is sufficient. The PR body now includes copied after-fix live output from a local Node 24 OpenClaw runtime eval of node-host sanitizeEnv; it proves the sanitizer boundary, while full gateway/macOS live paths remain untested.
  • 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 now includes copied after-fix live output from a local Node 24 OpenClaw runtime eval of node-host sanitizeEnv; it proves the sanitizer boundary, while full gateway/macOS live paths remain untested.
  • remove rating: 🧂 unranked krab: Current PR rating is rating: 🐚 platinum hermit, so this older rating label is no longer current.
  • remove status: 📣 needs proof: Current PR status label is status: 👀 ready for maintainer look.

Label justifications:

  • P2: This is a normal-priority security hardening PR with focused scope but real compatibility impact.
  • merge-risk: 🚨 compatibility: The diff intentionally makes existing env/dotenv/skill/MCP configurations that relied on four Node variables stop passing those values through.
  • 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 now includes copied after-fix live output from a local Node 24 OpenClaw runtime eval of node-host sanitizeEnv; it proves the sanitizer boundary, while full gateway/macOS live paths remain untested.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body now includes copied after-fix live output from a local Node 24 OpenClaw runtime eval of node-host sanitizeEnv; it proves the sanitizer boundary, while full gateway/macOS live paths remain untested.
Evidence reviewed

PR surface:

Source +8, Tests +87, Docs 0, Generated +8. Total +103 across 10 files.

View PR surface stats
Area Files Added Removed Net
Source 2 9 1 +8
Tests 4 111 24 +87
Docs 3 3 3 0
Config 0 0 0 0
Generated 1 8 0 +8
Other 0 0 0 0
Total 10 131 28 +103

What I checked:

  • Repository policy applied: Root and scoped AGENTS guidance was read; the root policy treats config/default/env filtering and fail-closed changes as compatibility-sensitive merge risk even with green CI. (AGENTS.md:16, b8cf83aeb3b5)
  • Current main policy gap: Current main blocks NODE_OPTIONS and NODE_PATH in the shared policy, but not NODE_REDIRECT_WARNINGS, NODE_REPL_EXTERNAL_MODULE, NODE_REPL_HISTORY, or NODE_V8_COVERAGE. (src/infra/host-env-security-policy.json:2, b8cf83aeb3b5)
  • PR policy change: The PR adds NODE_REDIRECT_WARNINGS, NODE_REPL_EXTERNAL_MODULE, NODE_REPL_HISTORY, and NODE_V8_COVERAGE to blockedEverywhereKeys. (src/infra/host-env-security-policy.json:5, 254872e11bfb)
  • Runtime sanitizer path: The host sanitizer derives dangerous inherited and override filtering from the shared policy, so adding those policy keys affects node-host system.run, inherited env, and override filtering without extra runtime code changes. (src/infra/host-env-security.ts:203, b8cf83aeb3b5)
  • Dependency contract check: Node 24.15.0 help documents these variables as controlling warning redirection, external REPL module loading, REPL history, and V8 coverage output.
  • Regression coverage: The PR adds assertions that the new names are dangerous host env vars and are filtered from workspace dotenv and skill env override paths. (src/infra/host-env-security.test.ts:194, 254872e11bfb)

Likely related people:

  • steipete: Current blame and shortlog history show Peter Steinberger recently carried the shared host-env policy and related sanitizer files in commit fd648ed. (role: recent area contributor; confidence: medium; commits: fd648edfa95c; files: src/infra/host-env-security-policy.json, src/infra/host-env-security.ts, src/infra/dotenv.ts)
  • joshavant: Josh Avant introduced the host env override hardening across gateway, node, and macOS surfaces that this PR extends. (role: introduced behavior; confidence: high; commits: 7abfff756d6c; files: src/infra/host-env-security.ts, src/node-host/invoke-system-run.ts, apps/macos/Sources/OpenClaw/HostEnvSanitizer.swift)
  • Agustin Rivera: Agustin Rivera split and aligned inherited host exec env filtering, which is directly affected by adding blockedEverywhereKeys. (role: adjacent owner; confidence: high; commits: fa82193c7273; files: src/infra/host-env-security-policy.js, src/infra/host-env-security-policy.json, src/infra/host-env-security.ts)
  • pgondhi987: Pavan Kumar Gondhi previously expanded the same host env security denylist and baseline coverage in merged history, beyond authoring this PR. (role: prior area contributor; confidence: medium; commits: 2d126fc62343; files: src/infra/host-env-security-policy.json, src/infra/host-env-security.test.ts, src/infra/host-env-security.reported-baseline.json)
  • Vincent Koc: Vincent Koc restored the dotenv trust boundary that this PR now extends for workspace and CLI dotenv filtering. (role: adjacent owner; confidence: medium; commits: 11590eb6ce38; files: src/infra/dotenv.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: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. labels May 27, 2026
@clawsweeper
Copy link
Copy Markdown
Contributor

clawsweeper Bot commented May 27, 2026

ClawSweeper PR egg

✨ Hatched: 🥚 common Brave Shellbean

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.

Rarity: 🥚 common.
Trait: polishes edge cases.
Image traits: location workflow harbor; accessory miniature diff map; palette sunrise gold and clean white; mood celebratory; pose waving from a small platform; shell soft speckled shell; lighting calm overcast light; background little resolved-comment flags.
Share on X: post this hatch
Copy: My PR egg hatched a 🥚 common Brave Shellbean in ClawSweeper.

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.

@pgondhi987
Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

Updated the PR body with real behavior proof and the latest sanitizer scope.

@clawsweeper
Copy link
Copy Markdown
Contributor

clawsweeper Bot commented May 27, 2026

🦞🧹
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. 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: 🧂 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. labels May 27, 2026
@pgondhi987 pgondhi987 merged commit 9159013 into openclaw:main May 27, 2026
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request May 28, 2026
* fix: block unsafe node runtime env overrides

* fix: block node env path redirects

* docs: add changelog entry for PR merge
eleboucher pushed a commit to eleboucher/homelab that referenced this pull request May 28, 2026
…026.5.27) (#698)

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.26` → `2026.5.27` |

---

### Release Notes

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

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

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

##### Highlights

- Safer local/runtime boundaries: OpenClaw now rejects unsafe command wrappers, malformed CLI numeric options, unsafe Node runtime env overrides, no-auth Tailscale exposure, and non-admin device-role pairing approvals before they can affect live runs. ([#&#8203;87308](openclaw/openclaw#87308), [#&#8203;87305](openclaw/openclaw#87305), [#&#8203;87292](openclaw/openclaw#87292), [#&#8203;87146](openclaw/openclaw#87146))
- Matrix and auto-reply delivery are steadier: mention previews stay inert, final mention replies deliver normally, shared-DM notices are awaited, MXID parsing ignores filenames, and reasoning-prefixed `NO_REPLY` responses stay suppressed.
- Provider and agent reliability improved across OpenAI-compatible embeddings, cached token usage, Anthropic/Codex/Claude runtime state, unsupported tool-schema quarantine, heartbeat templates, and session fallback errors. ([#&#8203;85269](openclaw/openclaw#85269), [#&#8203;82062](openclaw/openclaw#82062), [#&#8203;85416](openclaw/openclaw#85416), [#&#8203;86855](openclaw/openclaw#86855))
- Plugin and package release paths got tighter: Pixverse ships as an external video plugin with region selection, package exclusions and shrinkwrap inventory match the published npm shape, and release/package smoke commands fail bounded instead of hanging.
- Gateway hot paths do less rediscovery by reusing current plugin metadata fingerprints, stable plugin index fingerprints, read-only session metadata, active working stores, status fast paths, and auth/env snapshots. ([#&#8203;86439](openclaw/openclaw#86439))

##### Changes

- Memory: add a core OpenAI-compatible embedding provider for local and hosted OpenAI-style endpoints, with config, doctor, and docs support. ([#&#8203;85269](openclaw/openclaw#85269)) Thanks [@&#8203;dutifulbob](https://github.com/dutifulbob).
- Plugin SDK: mark memory-specific embedding provider registration as deprecated compatibility and surface non-bundled usage in plugin compatibility diagnostics. ([#&#8203;85072](openclaw/openclaw#85072)) Thanks [@&#8203;mbelinky](https://github.com/mbelinky).
- Pixverse: add video generation provider support, API region selection, and external plugin publishing.
- Plugins: expose approval action metadata for plugin-driven approval surfaces.

##### Fixes

- Security/CLI/runtime: harden hostname normalization for repeated trailing dots, block side-effecting command wrappers, reject unsafe Node runtime env overrides, reject loose numeric CLI and gateway options, require admin approval for node device-role pairing, and reject no-auth Tailscale exposure. ([#&#8203;87305](openclaw/openclaw#87305), [#&#8203;87292](openclaw/openclaw#87292), [#&#8203;87308](openclaw/openclaw#87308), [#&#8203;87146](openclaw/openclaw#87146)) Thanks [@&#8203;pgondhi987](https://github.com/pgondhi987).
- Doctor: validate runtime tool schemas for every configured embedded agent while skipping ACP-only profiles, so bad non-default plugin or MCP tools are reported before assistant turns.
- Telegram: route `sendMessage` action replies through durable outbound delivery so completed agent responses remain retryable when the gateway send path times out. ([#&#8203;87261](openclaw/openclaw#87261)) Thanks [@&#8203;mbelinky](https://github.com/mbelinky).
- Matrix/auto-reply: keep draft previews mention-inert, preserve final mention delivery, send mention finals normally, await shared DM notices, ignore filename-embedded MXIDs, and suppress reasoning-prefixed `NO_REPLY` responses.
- Agents/providers: add OpenAI-compatible cache retention, forward cached token usage in chat completions, preserve runtime context before active user turns, strip stale Anthropic thinking, load Claude CLI OAuth for Pi auth profiles, avoid false Codex runtime live switches, and quarantine unsupported tool schemas. ([#&#8203;82062](openclaw/openclaw#82062), [#&#8203;87167](openclaw/openclaw#87167), [#&#8203;86855](openclaw/openclaw#86855))
- Gateway/performance: cache plugin metadata fingerprints and stable plugin index fingerprints, borrow read-only session metadata safely, keep the active session working store hot, keep status on a bounded fast path, and preserve model auth profile suffixes. ([#&#8203;86439](openclaw/openclaw#86439))
- Package/install/release: align npm package exclusions and inventory, omit unpacked test helpers, skip Homebrew until macOS packages need it, cap tsdown heap in containers, bound install/release smoke waits, and harden post-publish verification.
- Codex/Auth: bound ChatGPT OAuth token exchange and refresh requests, and honor cancellation across Codex and Anthropic OAuth login flows.
- QA/E2E/CI: bound Telegram, kitchen-sink, Open WebUI, ClawHub, MCP, Discord, realtime, labeler, and GitHub API waits; fail empty explicit test, live-media, gateway CPU, startup benchmark, plugin gauntlet, and beta-smoke runs instead of false-greening.
- Agents/Codex: keep spawned agent bootstrap files rooted in the agent workspace while running task commands, transcripts, and compaction from the requested cwd. ([#&#8203;87218](openclaw/openclaw#87218)) Thanks [@&#8203;mbelinky](https://github.com/mbelinky).

</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/698
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: macos App: macos docs Improvements or additions to documentation maintainer Maintainer-authored PR merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. P2 Normal backlog priority with limited blast radius. plugin: file-transfer proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. size: S 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.

1 participant