[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M777FC79CMF2G2SWPCV5J3SF":3,"skill-same:01M777FC79CMF2G2SWPCV5J3SF":47},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":25,"commitSha":26,"skillDirectory":27,"forksCount":28,"repositoryHtmlUrl":29,"repositoryHomepageUrl":30,"ownerHtmlUrl":31,"ownerBlogUrl":6,"ownerDescription":32,"updatedAt":33,"install":34,"resources":46},"01M777FC79CMF2G2SWPCV5J3SF","claw-config",null,"A grounded self-diagnosis and safe self-modification skill for any OpenClaw agent. Lets the calling agent answer \"who am I, what do I own, what does my config look like, and how do I change a field without breaking it?\" — without hallucinating field names, identity, or paths. Before patching openclaw.json, the agent must run `claw-config whoami` (self-identification) → `schema \u003Cpath>` (real field name + type from the installed binary) → `docs \u003Ctopic>` or `docs search:\u003Ckeyword>` (official semantics from docs.openclaw.ai). Read-only and diagnose subcommands are cron-safe; `apply` (destructive write) refuses to run under `OPENCLAW_CRON_CONTEXT`.","Lord1Egypt\u002Fawesome-skill-forge","Lord1Egypt","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F99746359?v=4","01M7592YDNT0XK9WJ0T2MQVPDN","Mohamed Mounir Ali AL Keshita","01M75GRFNHC8VZNWEB8DKDE433",3,"MIT","https:\u002F\u002Fgithub.com\u002FLord1Egypt\u002Fawesome-skill-forge\u002Fblob\u002Fmaster\u002Fcommunity\u002Fclawhub\u002Fc\u002Fclaw-config\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: claw-config\ndescription: A grounded self-diagnosis and safe self-modification skill for any OpenClaw agent. Lets the calling agent answer \"who am I, what do I own, what does my config look like, and how do I change a field without breaking it?\" — without hallucinating field names, identity, or paths. Before patching openclaw.json, the agent must run `claw-config whoami` (self-identification) → `schema \u003Cpath>` (real field name + type from the installed binary) → `docs \u003Ctopic>` or `docs search:\u003Ckeyword>` (official semantics from docs.openclaw.ai). Read-only and diagnose subcommands are cron-safe; `apply` (destructive write) refuses to run under `OPENCLAW_CRON_CONTEXT`.\nuser-invocable: true\n---\n\n# \u002Fclaw-config\n\nA grounded toolkit that lets any OpenClaw agent reliably answer:\n\n> *\"Who am I, what does my own config look like, and how do I change it safely?\"*\n\n**Design principle: no hallucination.** Every field name, every JSON pointer, every current value is read from the installed `openclaw` CLI at call time (`openclaw config schema`, `openclaw config get`). Every write goes through `openclaw config patch` (which validates against the schema internally). When the agent needs to know what a field *does*, the skill fetches the official documentation from `docs.openclaw.ai` (Mintlify `.md` raw + full-content index `llms-full.txt`) — never the model's training memory.\n\n**Comparison with `openclaw doctor`**: `doctor` is a system-wide health check (gateway \u002F secrets \u002F channels), human-readable output. `claw-config` is **agent-scoped** (sliced by `$OPENCLAW_AGENT_ID` — only sees the caller's own config) and supports `--json` for downstream tooling. They are complementary, not duplicates.\n\n**Cron behaviour**: `apply` is hard-refused under `OPENCLAW_CRON_CONTEXT=1` (destructive write). All other subcommands run anywhere (read-only or cache-only); `docs` will serve a cached page in cron context but never makes a fresh HTTPS request.\n\n## ⚠️ Docs vs installed schema — trust the schema when they disagree\n\n`docs.openclaw.ai` is a **single-version site** that always reflects the latest published release (no `\u002Fv2026.5\u002F...` history URLs, no `\u002Fchangelog` — only `\u002Fannouncements` for breaking changes). The installed `openclaw` binary may lag (stable channel) or lead (dev channel). So docs and the installed binary can drift:\n\n- **Schema is truth** — `openclaw config schema` is generated by the installed binary. If a field appears in schema, it works.\n- **Docs are guidance** — they may describe fields your version does not have yet, or omit new fields you do have.\n- **When they disagree, trust schema.** Treat docs as background context.\n\n**The skill defends against this drift**: cache files live under `~\u002F.openclaw\u002F.maintenance-cache\u002Fdocs\u002F\u003Copenclaw-version>\u002F\u003Cslug>`. When you upgrade `openclaw`, the previous version's cache directory is auto-removed on the next `docs` call. Each `docs` call also reports cache age on stderr so the calling agent can decide whether to `--refresh`.\n\n**After upgrading openclaw**, run `claw-config docs announcements` to see breaking changes.\n\n## When to invoke\n\n- An operator (the human running the agents) asks you (the agent) to check whether your own config is correct\n- You are about to modify a field that belongs to you in `~\u002F.openclaw\u002Fopenclaw.json` (your telegram account, your cron bindings, your model override, your memorySearch settings, your identity)\n- You suspect something is wrong with your own setup but cannot describe it precisely (telegram not receiving messages? skill not visible? binding not routing?) → run `diagnose`\n- An operator reports an incident like \"the agent silently lost access to its workspace skills\" → run `report` to give them a snapshot\n\n## When NOT to invoke\n\n- The field you want to change does **not belong to you** (e.g., agent `myagent` trying to edit `other-agent`'s telegram account) → escalate to a coordinator agent or the operator. The skill statically refuses such patches at the `plan` step.\n- The change is to a **cron job** (lives in `~\u002F.openclaw\u002Fcron\u002Fjobs.json`, not `openclaw.json`) → use `openclaw cron add\u002Fedit\u002Frm` instead\n- The change involves **agent-level `auth-profiles.json`, secrets, or credentials** → out of scope; ask the operator\n- You are in **cron context** and want to call `apply` → it is hard-refused (interactive only)\n\n## Hard rules\n\n1. **Never hand-edit `~\u002F.openclaw\u002Fopenclaw.json`** (no `sed`, no `awk`, no `python json.dump` rewriting the file). All writes go through `claw-config apply` → `openclaw config patch`.\n2. **Before composing any patch, run `whoami`.** Confirm that `$OPENCLAW_AGENT_ID` resolves to you. If `whoami` fails, stop and tell the operator. **Do not guess your own identity.**\n3. **If you do not know what a field is called, run `schema \u003Cpath>`.** Do not write `nativeSkill` \u002F `enableSkills` \u002F `commands.skills` from memory. The real names come from the installed binary's schema.\n4. **Before composing a patch, read the docs.** Run `docs \u003Ctopic>` (e.g., `cli\u002Fconfig`, `channels\u002Ftelegram`, `tools\u002Fskills`, `cli\u002Fcron`, `gateway\u002Fconfig-agents`, `announcements`). If you do not know which page is relevant, run `docs` (no argument, prints the site index) or `docs search:\u003Ckeyword>` (greps the full-content corpus across every page). **`--help` is not enough.** Many field semantics are documented only in the prose docs, not in `--help` output or schema descriptions. The canonical motivating example: a production incident where `commands.nativeSkills: false` silently hid an agent's workspace skills from its Telegram dispatch table — `--help` did not describe the field at all, and the schema only said `boolean | \"auto\"`. The actual semantics lived in `tools\u002Fslash-commands`, reachable via `docs search:nativeSkills`.\n5. **Before `apply`, always `plan` first.** `plan` is a dry-run via `openclaw config patch --dry-run`. Read the diff, confirm the validate result.\n6. **If `apply` fails, the backup is automatically restored.** Quote the stderr verbatim to the operator. **Do not retry the patch with guessed adjustments** — that is the start of the hallucination spiral the skill exists to prevent.\n\n## Seven subcommands\n\nWorkflow ordering: `whoami` → `schema` → `docs` → (compose patch) → `plan` → `apply` → `report`\n\n| Subcommand | What it does | Writes? | Cron-safe? |\n|---|---|---|---|\n| `claw-config whoami [--json]` | Agent record (id \u002F workspace \u002F agentDir \u002F model) + telegram flags + bindings + cron jobs + skills inventory | No | Yes |\n| `claw-config schema [\u003Cpointer>]` | Prints the JSON schema (or sub-tree at a JSON pointer or dot path) for the installed `openclaw` binary | No | Yes |\n| `claw-config docs [\u003Ctopic>\\|search:\u003Ckw>] [--refresh] [--max-age \u003Ch>]` | Official documentation as raw markdown from `docs.openclaw.ai` (Mintlify `.md`). No argument prints the site index. `search:\u003Ckw>` greps the full-content corpus and groups hits by source page. Cache is keyed by installed openclaw version and TTL'd | No (writes cache) | Yes (cache-only in cron) |\n| `claw-config diagnose [--json]` | 12 structural self-checks. Each result reports a dot-path pointer that can be pasted directly into `openclaw config get`. Exits `3` on any `fail` | No | Yes |\n| `claw-config plan \u003Cpatch.json5>` | Dry-run: invokes `openclaw config patch --dry-run`. Prints diff at the affected paths + validation outcome | No | Yes |\n| `claw-config apply \u003Cpatch.json5>` | Versioned backup → `openclaw config patch` → on failure, restore from backup | **Yes** | **No** |\n| `claw-config report [--json]` | Combines `whoami` + `diagnose` into a single markdown block suitable for pasting back to the operator | No | Yes |\n\nExit codes: `0` ok \u002F `1` runtime error \u002F `2` bad args or self cannot be resolved \u002F `3` `diagnose` found at least one `fail`.\n\n## Self-identification (refuses to guess)\n\nResolution order:\n\n1. `$OPENCLAW_AGENT_ID` environment variable\n2. `--agent \u003Cid>` CLI flag\n3. If neither is set → `exit 2` with the message `cannot resolve self: refusing to guess`\n\n**The skill never infers identity from `cwd`, hostname, or the first entry in `agents.list[]`.** The reason: writing the wrong agent's config (e.g., `myagent` accidentally editing `other-agent`'s telegram bot token) is the highest-impact failure mode this skill is designed to prevent. Forcing the caller to declare its identity makes that class of bug impossible by construction.\n\n## Patch format: JSON5 recursive merge\n\n`openclaw config patch` accepts JSON5 natively: comments, trailing commas, unquoted keys, single quotes are all fine. Semantics:\n\n- Objects merge recursively\n- Arrays and scalars **replace** entire value at that path\n- `null` **deletes** the path\n\nThe skill writes patches as JSON5 files (typically in `\u002Ftmp\u002F`) and passes them to `plan` \u002F `apply`. The patch file itself is your audit trail — start it with a comment explaining *why* you are making the change.\n\n**Example patch** (sets `commands.nativeSkills` to `true` for agent `myagent`'s Telegram account):\n\n```json5\n\u002F\u002F re-enable native skill dispatch on telegram so workspace skills become visible\n{\n  channels: {\n    telegram: {\n      accounts: {\n        myagent: {\n          commands: { nativeSkills: true }\n        }\n      }\n    }\n  }\n}\n```\n\nThree meaningful tokens (`myagent`, `nativeSkills`, `true`). Everything else is structural path framing — the agent already retrieved the canonical path from `schema channels\u002Ftelegram\u002Faccounts\u002Fmyagent\u002Fcommands` and confirmed semantics with `docs search:nativeSkills`.\n\n## Cross-agent safety\n\n`plan` and `apply` statically walk the top-level paths inside the patch. If the patch references **another agent's slice** (`channels.\u003Cchan>.accounts.\u003Cother>`, `agents.list[i].id != self`, `bindings[i].agentId != self`), the skill refuses with `exit 1` and a message like:\n\n```\npatch refers to other agent(s):\n  - channels.telegram.accounts.other-agent\nself is 'myagent'. refusing — wrong-agent writes are the #1 risk class.\n```\n\nPatches touching **shared** sections (`agents.defaults`, `gateway`, `secrets`, `auth`, etc.) are also refused unless you pass `--force-shared`. This is to make agent-level vs. system-level changes ergonomically distinct.\n\n## Backup naming\n\nBackups go to `~\u002F.openclaw\u002F.maintenance-backups\u002Fopenclaw.\u003CYYYYMMDD-HHMMSS>.pre-\u003Cpatch-stem>.json`. They live in a dedicated directory to **avoid** being caught by openclaw's own rotating backup scheme (which rotates files matching `openclaw.json.bak[.N]`). On `apply` failure the file is `cp`-restored to `~\u002F.openclaw\u002Fopenclaw.json` before the script exits non-zero.\n\n## Failure modes\n\n| stderr keyword | Meaning | What the agent should do |\n|---|---|---|\n| `cannot resolve self` | `$OPENCLAW_AGENT_ID` missing and no `--agent` flag | Report to the operator; ask them to export `OPENCLAW_AGENT_ID=\u003Cyour-id>` in the calling shell |\n| `schema path not found` | The path passed to `schema` does not exist in the installed binary's schema | Run `schema` with no argument first to see the top-level shape; check field name spelling |\n| `validate failed: \u003Creason>` | Schema validation rejected the patch (during `plan` dry-run or live `apply`) | Quote the patch file and the validator output verbatim to the operator. **Do not edit the patch and retry on guesswork** — that is the hallucination loop this skill exists to break |\n| `patch refers to other agent: \u003Cx>` | The patch touches another agent's slice | Stop. Escalate to the operator |\n| `backup restored from \u003Cpath>` | `apply` failed mid-flight; the previous config has been restored | The system is in the pre-patch state. Safe to investigate |\n| `docs fetch disabled in cron and no cached copy` | In cron context, the requested docs page has never been fetched | Re-run in interactive context once to populate the cache |\n\n## Invocation\n\n```bash\nOPENCLAW_AGENT_ID=myagent claw-config whoami --json\nOPENCLAW_AGENT_ID=myagent claw-config schema channels\u002Ftelegram\u002Faccounts\u002Fmyagent\u002Fcommands\nclaw-config docs                                  # site index\nclaw-config docs cli\u002Fconfig                       # one page\nclaw-config docs channels\u002Ftelegram                # one page\nclaw-config docs search:nativeSkills              # corpus search\nclaw-config docs announcements                    # breaking changes\nOPENCLAW_AGENT_ID=myagent claw-config diagnose\nOPENCLAW_AGENT_ID=myagent claw-config plan  \u002Ftmp\u002Ffix.json5\nOPENCLAW_AGENT_ID=myagent claw-config apply \u002Ftmp\u002Ffix.json5\nOPENCLAW_AGENT_ID=myagent claw-config report\n```\n\nIf you want a shorter command name in your own shell, symlink it:\n\n```bash\nln -s ~\u002F.local\u002Fbin\u002Fclaw-config ~\u002F.local\u002Fbin\u002Foclm\n```\n\nStdout is structured plain text by default, or JSON with `--json` (where the subcommand supports it). All informational notes (cache age, fetch URLs, hints) go to stderr so they do not pollute the structured output.\n","# \u002Fclaw-config\n\nA grounded toolkit that lets any OpenClaw agent reliably answer:\n\n> *\"Who am I, what does my own config look like, and how do I change it safely?\"*\n\n**Design principle: no hallucination.** Every field name, every JSON pointer, every current value is read from the installed `openclaw` CLI at call time (`openclaw config schema`, `openclaw config get`). Every write goes through `openclaw config patch` (which validates against the schema internally). When the agent needs to know what a field *does*, the skill fetches the official documentation from `docs.openclaw.ai` (Mintlify `.md` raw + full-content index `llms-full.txt`) — never the model's training memory.\n\n**Comparison with `openclaw doctor`**: `doctor` is a system-wide health check (gateway \u002F secrets \u002F channels), human-readable output. `claw-config` is **agent-scoped** (sliced by `$OPENCLAW_AGENT_ID` — only sees the caller's own config) and supports `--json` for downstream tooling. They are complementary, not duplicates.\n\n**Cron behaviour**: `apply` is hard-refused under `OPENCLAW_CRON_CONTEXT=1` (destructive write). All other subcommands run anywhere (read-only or cache-only); `docs` will serve a cached page in cron context but never makes a fresh HTTPS request.\n\n## ⚠️ Docs vs installed schema — trust the schema when they disagree\n\n`docs.openclaw.ai` is a **single-version site** that always reflects the latest published release (no `\u002Fv2026.5\u002F...` history URLs, no `\u002Fchangelog` — only `\u002Fannouncements` for breaking changes). The installed `openclaw` binary may lag (stable channel) or lead (dev channel). So docs and the installed binary can drift:\n\n- **Schema is truth** — `openclaw config schema` is generated by the installed binary. If a field appears in schema, it works.\n- **Docs are guidance** — they may describe fields your version does not have yet, or omit new fields you do have.\n- **When they disagree, trust schema.** Treat docs as background context.\n\n**The skill defends against this drift**: cache files live under `~\u002F.openclaw\u002F.maintenance-cache\u002Fdocs\u002F\u003Copenclaw-version>\u002F\u003Cslug>`. When you upgrade `openclaw`, the previous version's cache directory is auto-removed on the next `docs` call. Each `docs` call also reports cache age on stderr so the calling agent can decide whether to `--refresh`.\n\n**After upgrading openclaw**, run `claw-config docs announcements` to see breaking changes.\n\n## When to invoke\n\n- An operator (the human running the agents) asks you (the agent) to check whether your own config is correct\n- You are about to modify a field that belongs to you in `~\u002F.openclaw\u002Fopenclaw.json` (your telegram account, your cron bindings, your model override, your memorySearch settings, your identity)\n- You suspect something is wrong with your own setup but cannot describe it precisely (telegram not receiving messages? skill not visible? binding not routing?) → run `diagnose`\n- An operator reports an incident like \"the agent silently lost access to its workspace skills\" → run `report` to give them a snapshot\n\n## When NOT to invoke\n\n- The field you want to change does **not belong to you** (e.g., agent `myagent` trying to edit `other-agent`'s telegram account) → escalate to a coordinator agent or the operator. The skill statically refuses such patches at the `plan` step.\n- The change is to a **cron job** (lives in `~\u002F.openclaw\u002Fcron\u002Fjobs.json`, not `openclaw.json`) → use `openclaw cron add\u002Fedit\u002Frm` instead\n- The change involves **agent-level `auth-profiles.json`, secrets, or credentials** → out of scope; ask the operator\n- You are in **cron context** and want to call `apply` → it is hard-refused (interactive only)\n\n## Hard rules\n\n1. **Never hand-edit `~\u002F.openclaw\u002Fopenclaw.json`** (no `sed`, no `awk`, no `python json.dump` rewriting the file). All writes go through `claw-config apply` → `openclaw config patch`.\n2. **Before composing any patch, run `whoami`.** Confirm that `$OPENCLAW_AGENT_ID` resolves to you. If `whoami` fails, stop and tell the operator. **Do not guess your own identity.**\n3. **If you do not know what a field is called, run `schema \u003Cpath>`.** Do not write `nativeSkill` \u002F `enableSkills` \u002F `commands.skills` from memory. The real names come from the installed binary's schema.\n4. **Before composing a patch, read the docs.** Run `docs \u003Ctopic>` (e.g., `cli\u002Fconfig`, `channels\u002Ftelegram`, `tools\u002Fskills`, `cli\u002Fcron`, `gateway\u002Fconfig-agents`, `announcements`). If you do not know which page is relevant, run `docs` (no argument, prints the site index) or `docs search:\u003Ckeyword>` (greps the full-content corpus across every page). **`--help` is not enough.** Many field semantics are documented only in the prose docs, not in `--help` output or schema descriptions. The canonical motivating example: a production incident where `commands.nativeSkills: false` silently hid an agent's workspace skills from its Telegram dispatch table — `--help` did not describe the field at all, and the schema only said `boolean | \"auto\"`. The actual semantics lived in `tools\u002Fslash-commands`, reachable via `docs search:nativeSkills`.\n5. **Before `apply`, always `plan` first.** `plan` is a dry-run via `openclaw config patch --dry-run`. Read the diff, confirm the validate result.\n6. **If `apply` fails, the backup is automatically restored.** Quote the stderr verbatim to the operator. **Do not retry the patch with guessed adjustments** — that is the start of the hallucination spiral the skill exists to prevent.\n\n## Seven subcommands\n\nWorkflow ordering: `whoami` → `schema` → `docs` → (compose patch) → `plan` → `apply` → `report`\n\n| Subcommand | What it does | Writes? | Cron-safe? |\n|---|---|---|---|\n| `claw-config whoami [--json]` | Agent record (id \u002F workspace \u002F agentDir \u002F model) + telegram flags + bindings + cron jobs + skills inventory | No | Yes |\n| `claw-config schema [\u003Cpointer>]` | Prints the JSON schema (or sub-tree at a JSON pointer or dot path) for the installed `openclaw` binary | No | Yes |\n| `claw-config docs [\u003Ctopic>\\|search:\u003Ckw>] [--refresh] [--max-age \u003Ch>]` | Official documentation as raw markdown from `docs.openclaw.ai` (Mintlify `.md`). No argument prints the site index. `search:\u003Ckw>` greps the full-content corpus and groups hits by source page. Cache is keyed by installed openclaw version and TTL'd | No (writes cache) | Yes (cache-only in cron) |\n| `claw-config diagnose [--json]` | 12 structural self-checks. Each result reports a dot-path pointer that can be pasted directly into `openclaw config get`. Exits `3` on any `fail` | No | Yes |\n| `claw-config plan \u003Cpatch.json5>` | Dry-run: invokes `openclaw config patch --dry-run`. Prints diff at the affected paths + validation outcome | No | Yes |\n| `claw-config apply \u003Cpatch.json5>` | Versioned backup → `openclaw config patch` → on failure, restore from backup | **Yes** | **No** |\n| `claw-config report [--json]` | Combines `whoami` + `diagnose` into a single markdown block suitable for pasting back to the operator | No | Yes |\n\nExit codes: `0` ok \u002F `1` runtime error \u002F `2` bad args or self cannot be resolved \u002F `3` `diagnose` found at least one `fail`.\n\n## Self-identification (refuses to guess)\n\nResolution order:\n\n1. `$OPENCLAW_AGENT_ID` environment variable\n2. `--agent \u003Cid>` CLI flag\n3. If neither is set → `exit 2` with the message `cannot resolve self: refusing to guess`\n\n**The skill never infers identity from `cwd`, hostname, or the first entry in `agents.list[]`.** The reason: writing the wrong agent's config (e.g., `myagent` accidentally editing `other-agent`'s telegram bot token) is the highest-impact failure mode this skill is designed to prevent. Forcing the caller to declare its identity makes that class of bug impossible by construction.\n\n## Patch format: JSON5 recursive merge\n\n`openclaw config patch` accepts JSON5 natively: comments, trailing commas, unquoted keys, single quotes are all fine. Semantics:\n\n- Objects merge recursively\n- Arrays and scalars **replace** entire value at that path\n- `null` **deletes** the path\n\nThe skill writes patches as JSON5 files (typically in `\u002Ftmp\u002F`) and passes them to `plan` \u002F `apply`. The patch file itself is your audit trail — start it with a comment explaining *why* you are making the change.\n\n**Example patch** (sets `commands.nativeSkills` to `true` for agent `myagent`'s Telegram account):\n\n```json5\n\u002F\u002F re-enable native skill dispatch on telegram so workspace skills become visible\n{\n  channels: {\n    telegram: {\n      accounts: {\n        myagent: {\n          commands: { nativeSkills: true }\n        }\n      }\n    }\n  }\n}\n```\n\nThree meaningful tokens (`myagent`, `nativeSkills`, `true`). Everything else is structural path framing — the agent already retrieved the canonical path from `schema channels\u002Ftelegram\u002Faccounts\u002Fmyagent\u002Fcommands` and confirmed semantics with `docs search:nativeSkills`.\n\n## Cross-agent safety\n\n`plan` and `apply` statically walk the top-level paths inside the patch. If the patch references **another agent's slice** (`channels.\u003Cchan>.accounts.\u003Cother>`, `agents.list[i].id != self`, `bindings[i].agentId != self`), the skill refuses with `exit 1` and a message like:\n\n```\npatch refers to other agent(s):\n  - channels.telegram.accounts.other-agent\nself is 'myagent'. refusing — wrong-agent writes are the #1 risk class.\n```\n\nPatches touching **shared** sections (`agents.defaults`, `gateway`, `secrets`, `auth`, etc.) are also refused unless you pass `--force-shared`. This is to make agent-level vs. system-level changes ergonomically distinct.\n\n## Backup naming\n\nBackups go to `~\u002F.openclaw\u002F.maintenance-backups\u002Fopenclaw.\u003CYYYYMMDD-HHMMSS>.pre-\u003Cpatch-stem>.json`. They live in a dedicated directory to **avoid** being caught by openclaw's own rotating backup scheme (which rotates files matching `openclaw.json.bak[.N]`). On `apply` failure the file is `cp`-restored to `~\u002F.openclaw\u002Fopenclaw.json` before the script exits non-zero.\n\n## Failure modes\n\n| stderr keyword | Meaning | What the agent should do |\n|---|---|---|\n| `cannot resolve self` | `$OPENCLAW_AGENT_ID` missing and no `--agent` flag | Report to the operator; ask them to export `OPENCLAW_AGENT_ID=\u003Cyour-id>` in the calling shell |\n| `schema path not found` | The path passed to `schema` does not exist in the installed binary's schema | Run `schema` with no argument first to see the top-level shape; check field name spelling |\n| `validate failed: \u003Creason>` | Schema validation rejected the patch (during `plan` dry-run or live `apply`) | Quote the patch file and the validator output verbatim to the operator. **Do not edit the patch and retry on guesswork** — that is the hallucination loop this skill exists to break |\n| `patch refers to other agent: \u003Cx>` | The patch touches another agent's slice | Stop. Escalate to the operator |\n| `backup restored from \u003Cpath>` | `apply` failed mid-flight; the previous config has been restored | The system is in the pre-patch state. Safe to investigate |\n| `docs fetch disabled in cron and no cached copy` | In cron context, the requested docs page has never been fetched | Re-run in interactive context once to populate the cache |\n\n## Invocation\n\n```bash\nOPENCLAW_AGENT_ID=myagent claw-config whoami --json\nOPENCLAW_AGENT_ID=myagent claw-config schema channels\u002Ftelegram\u002Faccounts\u002Fmyagent\u002Fcommands\nclaw-config docs                                  # site index\nclaw-config docs cli\u002Fconfig                       # one page\nclaw-config docs channels\u002Ftelegram                # one page\nclaw-config docs search:nativeSkills              # corpus search\nclaw-config docs announcements                    # breaking changes\nOPENCLAW_AGENT_ID=myagent claw-config diagnose\nOPENCLAW_AGENT_ID=myagent claw-config plan  \u002Ftmp\u002Ffix.json5\nOPENCLAW_AGENT_ID=myagent claw-config apply \u002Ftmp\u002Ffix.json5\nOPENCLAW_AGENT_ID=myagent claw-config report\n```\n\nIf you want a shorter command name in your own shell, symlink it:\n\n```bash\nln -s ~\u002F.local\u002Fbin\u002Fclaw-config ~\u002F.local\u002Fbin\u002Foclm\n```\n\nStdout is structured plain text by default, or JSON with `--json` (where the subcommand supports it). All informational notes (cache age, fetch URLs, hints) go to stderr so they do not pollute the structured output.\n",{"name":5,"description":7,"user-invocable":24},true,"master","4aa004da461d820f4ea5499e58eb8d196cf99016","community\u002Fclawhub\u002Fc\u002Fclaw-config",0,"https:\u002F\u002Fgithub.com\u002FLord1Egypt\u002Fawesome-skill-forge","https:\u002F\u002Fskill-explorer-rho.vercel.app","https:\u002F\u002Fgithub.com\u002FLord1Egypt","Unbreakable. Unstoppable. Unmatched⚡.\r\n Speaker of machine tongues 🤖  | World-builder of decentralized dreams 🌐 | Defender of the digital realm🛡️.","2026-06-10 08:21:01",{"source":8,"skillName":5,"commands":35,"prompt":45,"zipAvailable":24},[36,39,42],{"tool":37,"command":38},"npx","npx skills add Lord1Egypt\u002Fawesome-skill-forge --skill claw-config",{"tool":40,"command":41},"bunx","bunx skills add Lord1Egypt\u002Fawesome-skill-forge --skill claw-config",{"tool":43,"command":44},"pnpm","pnpm dlx skills add Lord1Egypt\u002Fawesome-skill-forge --skill claw-config","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FLord1Egypt\u002Fawesome-skill-forge\u002Fblob\u002Fmaster\u002Fcommunity\u002Fclawhub\u002Fc\u002Fclaw-config\u002FSKILL.md",[],[48,55,62,69,76,83],{"skillNo":49,"name":50,"nameZh":6,"description":51,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":52,"categories":53,"keywords":54,"publishedAt":19},"01M785WKJB99G3STR1NF9NRTJW","youtube-content","YouTube transcripts to summaries, threads, blogs.","https:\u002F\u002Fgithub.com\u002FLord1Egypt\u002Fawesome-skill-forge\u002Fblob\u002Fmaster\u002Fskills\u002Fyoutube-content\u002FSKILL.md",[],[],{"skillNo":56,"name":57,"nameZh":6,"description":58,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":59,"categories":60,"keywords":61,"publishedAt":19},"01M785WEFHB0G2S9YA6EPR3H0E","xurl","X\u002FTwitter via xurl CLI: post, search, DM, media, v2 API.","https:\u002F\u002Fgithub.com\u002FLord1Egypt\u002Fawesome-skill-forge\u002Fblob\u002Fmaster\u002Fskills\u002Fxurl\u002FSKILL.md",[],[],{"skillNo":63,"name":64,"nameZh":6,"description":65,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":66,"categories":67,"keywords":68,"publishedAt":19},"01M785W98EDN4EFJXJPMQEHCRC","touchdesigner-mcp","Control a running TouchDesigner instance via twozero MCP — create operators, set parameters, wire connections, execute Python, build real-time visuals. 36 native tools.","https:\u002F\u002Fgithub.com\u002FLord1Egypt\u002Fawesome-skill-forge\u002Fblob\u002Fmaster\u002Fskills\u002Ftouchdesigner-mcp\u002FSKILL.md",[],[],{"skillNo":70,"name":71,"nameZh":6,"description":72,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":73,"categories":74,"keywords":75,"publishedAt":19},"01M785W5S9FP3QBH2V191E025P","test-driven-development","TDD: enforce RED-GREEN-REFACTOR, tests before code.","https:\u002F\u002Fgithub.com\u002FLord1Egypt\u002Fawesome-skill-forge\u002Fblob\u002Fmaster\u002Fskills\u002Ftest-driven-development\u002FSKILL.md",[],[],{"skillNo":77,"name":78,"nameZh":6,"description":79,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":80,"categories":81,"keywords":82,"publishedAt":19},"01M785W2AS08NSSH9YATCV6FJB","teams-meeting-pipeline","Operate the Teams meeting summary pipeline via Hermes CLI — summarize meetings, inspect pipeline status, replay jobs, manage Microsoft Graph subscriptions.","https:\u002F\u002Fgithub.com\u002FLord1Egypt\u002Fawesome-skill-forge\u002Fblob\u002Fmaster\u002Fskills\u002Fteams-meeting-pipeline\u002FSKILL.md",[],[],{"skillNo":84,"name":85,"nameZh":6,"description":86,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":87,"categories":88,"keywords":89,"publishedAt":19},"01M785VXKW4T34BTP1SCHW1R7F","systematic-debugging","4-phase root cause debugging: understand bugs before fixing.","https:\u002F\u002Fgithub.com\u002FLord1Egypt\u002Fawesome-skill-forge\u002Fblob\u002Fmaster\u002Fskills\u002Fsystematic-debugging\u002FSKILL.md",[],[]]