{"skill":{"slug":"upgrade-openclaw","displayName":"Upgrade Openclaw","summary":"Upgrade OpenClaw and comprehensively discover new features, config options, hooks, and improvements. Use when: user says \"upgrade openclaw\", \"update openclaw...","description":"---\nname: upgrade-openclaw\ndescription: |\n  Upgrade OpenClaw and comprehensively discover new features, config options, hooks, and improvements.\n  Use when: user says \"upgrade openclaw\", \"update openclaw\", \"check for openclaw updates\",\n  \"what's new in openclaw\", or \"/skills upgrade_openclaw\". Runs the update, diffs the changelog\n  against enabled channels/plugins, performs config schema gap analysis, audits hooks and doctor\n  recommendations, and presents ALL findings for user approval before applying.\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"emoji\": \"🚀\",\n        \"author\": \"decentraliser\",\n        \"requires\": { \"bins\": [\"openclaw\", \"curl\", \"clawhub\"] }\n      }\n  }\n---\n\n# Upgrade OpenClaw\n\nUpdate, diff, audit, propose. Every new feature surfaced. Nothing missed.\n\n## Settings\n\nOn first run, check `settings.json` in this skill's directory. If `subagentModel` not set, ask:\n\n> \"Which model for upgrade sub-agents? (e.g., `claude-sonnet-4-6`, `deepseek-chat`). Note: external providers will receive config data.\"\n\nSave to `settings.json`:\n```json\n{ \"subagentModel\": \"anthropic/claude-sonnet-4-6\" }\n```\n\n## Procedure\n\n### 1. Record Pre-Update State\n\nBefore touching anything:\n\n```bash\nPRE_VERSION=$(openclaw --version | grep -oP '\\d{4}\\.\\d+\\.\\d+')\necho \"$PRE_VERSION\"\n```\n\nSave `PRE_VERSION` — needed for changelog diffing in Step 3.\n\n### 2. Run Update\n\n```bash\nopenclaw update\n```\n\nIf dirty working tree, stash first:\n```bash\ncd \"$(openclaw --version 2>&1 | grep -oP '(?<=\\().*?(?=\\))' || echo ~/openclaw)\" \ngit stash --include-untracked -m \"pre-update stash\" && openclaw update\n```\n\nRecord new version:\n```bash\nPOST_VERSION=$(openclaw --version | grep -oP '\\d{4}\\.\\d+\\.\\d+')\n```\n\nIf `PRE_VERSION == POST_VERSION`, report \"Already up to date\" and skip to Step 5 (audit only).\n\n### 3. Extract Delta Changelog\n\nThe changelog lives locally at `~/openclaw/CHANGELOG.md` after update. Versions delimited by `## YYYY.x.x` headers.\n\nExtract only entries between old and new version:\n\n```bash\nawk \"/^## $POST_VERSION/,/^## $PRE_VERSION/\" ~/openclaw/CHANGELOG.md\n```\n\nThen **filter by relevance** to this setup:\n\n1. Read current config via `gateway config.get` to identify enabled channels/plugins\n2. From the changelog delta, **keep** entries matching:\n   - Enabled channels (e.g., Telegram — skip LINE/Discord/Feishu/etc. unless enabled)\n   - Core agent/gateway/cron/tools/memory/security changes (always relevant)\n   - ACP/sessions/subagent changes (if ACP enabled)\n   - Breaking changes (always relevant)\n3. **Discard** entries for disabled channels, iOS/macOS app changes, and platforms not in use\n4. **Categorize** kept entries into: Features | Fixes | Security | Breaking Changes\n\n### 4. Config Schema Gap Analysis\n\nFetch the live schema and current config:\n\n- Schema: `gateway config.schema`\n- Current: `gateway config.get`\n\nCompare systematically:\n\n1. Walk schema `properties` tree recursively\n2. For each schema key path, check if it exists in current config\n3. **New/unset options** = schema keys not present in current config (excluding keys with sensible defaults)\n4. Focus on actionable fields — ones where setting a non-default value provides clear benefit\n5. Flag fields from the changelog delta (new in this version) separately as \"New in this release\"\n\nPresent as a table:\n```\n| Config Path | Type | Default | Description | New? |\n```\n\n### 5. Audit Current Setup\n\n```bash\nopenclaw hooks list --json\nopenclaw doctor --non-interactive\nclawhub update --all --dry-run 2>&1\n```\n\nCollect:\n- **Hooks**: any hooks available but not enabled\n- **Doctor**: all warnings and recommendations\n- **Skills**: any ClawHub updates available\n\n### 6. Present Comprehensive Report\n\nStructure the report exactly like this:\n\n```markdown\n## 🔍 Post-Upgrade Report: {PRE_VERSION} → {POST_VERSION}\n\n### 🆕 New Features (Relevant to Your Setup)\n- [Feature]: What it does, why it matters for you\n  - Config: `path.to.setting` (if applicable)\n\n### 🔧 Notable Fixes\n- [Fix]: What was broken, now fixed\n\n### 🔐 Security Updates\n- [Security]: What was patched\n\n### ⚠️ Breaking Changes\n- [Breaking]: What changed, migration needed\n\n### 📋 New Config Options Available\n| Config Path | Type | Default | Why Enable |\n|-------------|------|---------|------------|\n\n### 🪝 Hooks Status\n- [hook]: enabled/available/new\n\n### 🏥 Doctor Recommendations\n- [Item]: severity + action\n\n### 📦 Skill Updates Available\n- [skill]: current → available version\n\n---\n**Apply these improvements?** Reply with:\n- \"yes\" / \"all\" — apply everything\n- \"select\" — I'll list numbered items to pick from\n- specific items by name\n```\n\n**Critical**: Do NOT present a thin report. Every changelog entry that survived the relevance filter in Step 3 MUST appear. Every new config option from Step 4 MUST appear. Every doctor finding from Step 5 MUST appear. The user triggered this skill to see EVERYTHING.\n\n### 7. Apply with Approval\n\n**Never apply without explicit user approval.**\n\nOn approval, apply changes via:\n- Config changes: `gateway config.patch`\n- Hook enablement: `openclaw hooks enable <hook>`\n- Skill installs: `clawhub install <skill>`\n\nAfter applying, pop any git stash:\n```bash\ncd ~/openclaw && git stash list | grep -q \"pre-update stash\" && git stash pop\n```\n\n### 8. Persist State\n\nWrite upgrade state to `state.json` in this skill's directory:\n\n```json\n{\n  \"lastUpgrade\": {\n    \"from\": \"2026.3.2\",\n    \"to\": \"2026.3.3\",\n    \"timestamp\": \"2026-03-05T06:50:00Z\",\n    \"featuresProposed\": [\"telegram-streaming\", \"pdf-tool\", ...],\n    \"featuresApplied\": [\"telegram-streaming\", ...],\n    \"doctorApplied\": [\"entrypoint-fix\", ...]\n  }\n}\n```\n\nThis prevents re-proposing on repeated runs and enables \"what changed since last upgrade\" queries.\n","tags":{"latest":"2.0.0"},"stats":{"comments":0,"downloads":1058,"installsAllTime":3,"installsCurrent":3,"stars":0,"versions":4},"createdAt":1772009529242,"updatedAt":1779077329857},"latestVersion":{"version":"2.0.0","createdAt":1772694016937,"changelog":"v2: Local CHANGELOG.md diffing instead of useless llms.txt. Config schema gap analysis. Relevance filtering by enabled channels/plugins. State persistence (state.json). Git stash handling. Categorized reports (Features/Fixes/Security/Breaking). Comprehensive report guarantee — nothing missed.","license":null},"metadata":{"setup":[],"os":null,"systems":null},"owner":{"handle":"decentraliser","userId":"s17avd3wyfhj48wa3z905w7d5983g6m7","displayName":"Decentraliser🌵","image":"https://avatars.githubusercontent.com/u/36499647?v=4"},"moderation":{"isSuspicious":false,"isMalwareBlocked":false,"verdict":"clean","reasonCodes":["review.llm_review"],"summary":"Review: review.llm_review","engineVersion":"v2.4.24","updatedAt":1779958876191}}