[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M698T7BSB4RPBVWZWA487P45":3,"skill-same:01M698T7BSB4RPBVWZWA487P45":56},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":28,"linkOnly":29,"markdownContent":30,"markdownBody":31,"frontMatter":32,"refName":33,"commitSha":34,"skillDirectory":35,"forksCount":36,"repositoryHtmlUrl":37,"repositoryHomepageUrl":38,"ownerHtmlUrl":39,"ownerBlogUrl":38,"ownerDescription":40,"updatedAt":41,"install":42,"resources":55},"01M698T7BSB4RPBVWZWA487P45","configure-channel",null,"Configure and prove a chat channel with non-interactive one-liners; secrets only as SecretRefs.","openclaw\u002Fopenclaw","openclaw","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F252820863?v=4","01M698P3FSAZ6B4R928ZF19KPT","01M698PDMDRVH56MV30D253NFP",394302,"MIT","https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fblob\u002Fmain\u002Fcustodian-skills\u002Fconfigure-channel\u002FSKILL.md",[],[18,19,20,21,22,23,24,25,26,27],"configure channel","configure","channel","secrets","interactive","only","chat","as","with","prove","2026-11-10 10:12:30",false,"---\nname: configure-channel\ndescription: Configure and prove a chat channel with non-interactive one-liners; secrets only as SecretRefs.\n---\n\n# Configure a channel\n\nNever print or persist secret values; channel tokens enter config only as SecretRefs, or through the in-session `connect_channel` flow where the operator types the secret into a masked prompt. Never hand-edit config files on disk. Every run ends with the observable Prove result or an exact explanation of why it could not be proven.\n\n## Gather\n\n```\nopenclaw channels list --all\nopenclaw channels status\nopenclaw config get channels --json        # \"Config path not found\" is normal before first setup\n```\n\nConfirm the exact config path before writing — key names differ per channel (`channels.telegram.botToken`, `channels.discord.token`, ...):\n\n```\nopenclaw config schema --json | jq '.properties.channels.properties.telegram'\n```\n\n## Mutate\n\nConfirm the intended account and access changes with the operator before writing. Preserve existing approved allowlist entries, `dmPolicy`, and `groupPolicy` unless their replacement or change is explicitly approved; never broaden access to make a check pass.\n\nPreferred shell path — token staged as an env var on the gateway process or in a `0600` file, wired as a SecretRef (Telegram example):\n\n```\nopenclaw config set channels.telegram.botToken --ref-provider default --ref-source env --ref-id TELEGRAM_BOT_TOKEN\n```\n\nWith the bot connected and DM policy `pairing`, ask the operator to DM it. Read `Your Telegram user id` in the pairing reply, or run `openclaw logs --follow` and read `senderUserId` in that sender's `telegram pairing request` entry. Stop following once captured; keep unrelated logs private. If the current policy prevents this flow, use an already verified ID or report the discovery blocker; do not broaden access.\n\nUse the numeric **Telegram user ID**, not a phone number, username, chat\u002Fgroup ID, or bot ID. In this single-user example, `123456789` is a placeholder: replace it with the verified, approved user ID and retain any other approved entries.\n\n```\nopenclaw config set channels.telegram.allowFrom '[\"123456789\"]' --strict-json\n```\n\nMulti-field changes in one validated write:\n\n```\nopenclaw config patch --stdin \u003C\u003C'JSON'\n{ channels: { telegram: { enabled: true, groupPolicy: \"allowlist\" } } }\nJSON\n```\n\nIn-session alternative: call the `connect_channel` tool action with the channel id — the operator enters the token in a masked prompt, never in chat. Avoid `openclaw channels add --token \u003Cvalue>`: it puts the secret in argv and process listings.\n\n## Repair\n\n```\nopenclaw doctor --lint\nopenclaw channels status --probe\n```\n\n`doctor --lint` can exit `1` for findings: read the report and continue the remaining checks. Ordinary `doctor` and `doctor --non-interactive` can write config\u002Fstate; do not use them for diagnosis before approval. Apply `openclaw doctor --fix --non-interactive` only after explicit approval, then re-check status.\n\n## Prove\n\nSend one real, clearly labeled test message and confirm delivery from the command result (use `--dry-run` first to inspect the payload):\n\n```\nopenclaw message send --channel telegram --target \u003CchatId> --message \"OpenClaw channel test — please ignore\" --dry-run\nopenclaw message send --channel telegram --target \u003CchatId> --message \"OpenClaw channel test — please ignore\"\n```\n\nIf sending fails, report the exact account, permission, destination, or network blocker without exposing credentials.\n\n## Report\n\nState the channel and account changed, the exact config paths written (never values), the test destination, and the observed delivery result. List any remaining operator action.\n\nFurther reference: https:\u002F\u002Fdocs.openclaw.ai\u002Fchannels\u002Ftelegram (and the matching page for other channels)\n","# Configure a channel\n\nNever print or persist secret values; channel tokens enter config only as SecretRefs, or through the in-session `connect_channel` flow where the operator types the secret into a masked prompt. Never hand-edit config files on disk. Every run ends with the observable Prove result or an exact explanation of why it could not be proven.\n\n## Gather\n\n```\nopenclaw channels list --all\nopenclaw channels status\nopenclaw config get channels --json        # \"Config path not found\" is normal before first setup\n```\n\nConfirm the exact config path before writing — key names differ per channel (`channels.telegram.botToken`, `channels.discord.token`, ...):\n\n```\nopenclaw config schema --json | jq '.properties.channels.properties.telegram'\n```\n\n## Mutate\n\nConfirm the intended account and access changes with the operator before writing. Preserve existing approved allowlist entries, `dmPolicy`, and `groupPolicy` unless their replacement or change is explicitly approved; never broaden access to make a check pass.\n\nPreferred shell path — token staged as an env var on the gateway process or in a `0600` file, wired as a SecretRef (Telegram example):\n\n```\nopenclaw config set channels.telegram.botToken --ref-provider default --ref-source env --ref-id TELEGRAM_BOT_TOKEN\n```\n\nWith the bot connected and DM policy `pairing`, ask the operator to DM it. Read `Your Telegram user id` in the pairing reply, or run `openclaw logs --follow` and read `senderUserId` in that sender's `telegram pairing request` entry. Stop following once captured; keep unrelated logs private. If the current policy prevents this flow, use an already verified ID or report the discovery blocker; do not broaden access.\n\nUse the numeric **Telegram user ID**, not a phone number, username, chat\u002Fgroup ID, or bot ID. In this single-user example, `123456789` is a placeholder: replace it with the verified, approved user ID and retain any other approved entries.\n\n```\nopenclaw config set channels.telegram.allowFrom '[\"123456789\"]' --strict-json\n```\n\nMulti-field changes in one validated write:\n\n```\nopenclaw config patch --stdin \u003C\u003C'JSON'\n{ channels: { telegram: { enabled: true, groupPolicy: \"allowlist\" } } }\nJSON\n```\n\nIn-session alternative: call the `connect_channel` tool action with the channel id — the operator enters the token in a masked prompt, never in chat. Avoid `openclaw channels add --token \u003Cvalue>`: it puts the secret in argv and process listings.\n\n## Repair\n\n```\nopenclaw doctor --lint\nopenclaw channels status --probe\n```\n\n`doctor --lint` can exit `1` for findings: read the report and continue the remaining checks. Ordinary `doctor` and `doctor --non-interactive` can write config\u002Fstate; do not use them for diagnosis before approval. Apply `openclaw doctor --fix --non-interactive` only after explicit approval, then re-check status.\n\n## Prove\n\nSend one real, clearly labeled test message and confirm delivery from the command result (use `--dry-run` first to inspect the payload):\n\n```\nopenclaw message send --channel telegram --target \u003CchatId> --message \"OpenClaw channel test — please ignore\" --dry-run\nopenclaw message send --channel telegram --target \u003CchatId> --message \"OpenClaw channel test — please ignore\"\n```\n\nIf sending fails, report the exact account, permission, destination, or network blocker without exposing credentials.\n\n## Report\n\nState the channel and account changed, the exact config paths written (never values), the test destination, and the observed delivery result. List any remaining operator action.\n\nFurther reference: https:\u002F\u002Fdocs.openclaw.ai\u002Fchannels\u002Ftelegram (and the matching page for other channels)\n",{"name":5,"description":7},"main","f1c93577085244aa96aa87b53a2df9b59d293bd7","custodian-skills\u002Fconfigure-channel",82862,"https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw","https:\u002F\u002Fopenclaw.ai","https:\u002F\u002Fgithub.com\u002Fopenclaw","Your personal, open source AI assistant.","2026-11-11 08:46:30",{"source":8,"skillName":5,"commands":43,"prompt":53,"zipAvailable":54},[44,47,50],{"tool":45,"command":46},"npx","npx skills add openclaw\u002Fopenclaw --skill configure-channel",{"tool":48,"command":49},"bunx","bunx skills add openclaw\u002Fopenclaw --skill configure-channel",{"tool":51,"command":52},"pnpm","pnpm dlx skills add openclaw\u002Fopenclaw --skill configure-channel","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fblob\u002Fmain\u002Fcustodian-skills\u002Fconfigure-channel\u002FSKILL.md",true,[],[57,63,86,103,125,149],{"skillNo":58,"name":59,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":60,"categories":61,"keywords":62,"publishedAt":28},"01M698VP84FNM6G9MR1HPX7MF7","lobster","https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fblob\u002Fmain\u002Fextensions\u002Flobster\u002FSKILL.md",[],[59],{"skillNo":64,"name":65,"nameZh":6,"description":66,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":67,"categories":68,"keywords":69,"publishedAt":28},"01M698YY8QGQ7S8TJNKJG6VTPH","xurl","xurl CLI for authenticated X posts, replies, reads\u002Fsearch, DMs, media upload, followers, auth status, or raw v2 API calls.","https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fblob\u002Fmain\u002Fskills\u002Fxurl\u002FSKILL.md",[],[65,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85],"for","api","calls","replies","posts","upload","tap","install","brew","node","Media","search","npm","status","auth","cli",{"skillNo":87,"name":88,"nameZh":6,"description":89,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":90,"categories":91,"keywords":92,"publishedAt":28},"01M698YWT1CJ0WK88WB909R9RT","weather","Current weather and forecasts with web_fetch, falling back to wttr.in curl for locations, rain, temperature, travel planning.","https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fblob\u002Fmain\u002Fskills\u002Fweather\u002FSKILL.md",[],[88,93,94,77,95,78,96,97,98,99,100,101,70,102,26],"travel planning","travel","fetch","curl","https","help","planning","web","back","temperature",{"skillNo":104,"name":105,"nameZh":6,"description":106,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":107,"categories":108,"keywords":114,"publishedAt":28},"01M698YV2Q0R0JJKAWGFS21K0N","visualize","Create inline visuals for code and explanations, or author persistent OpenClaw dashboard widgets with show_widget.","https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fblob\u002Fmain\u002Fskills\u002Fvisualize\u002FSKILL.md",[109],{"categoryNo":110,"categoryName":111,"taxonomyType":112,"taxonomyTypeDesc":113},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[105,115,116,117,118,70,26,119,120,121,122,123,9,124],"widgets","openclaw dashboard","author","inline","show","code","create","visuals","dashboard","widget",{"skillNo":126,"name":127,"nameZh":6,"description":128,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":129,"categories":130,"keywords":139,"publishedAt":28},"01M698YS2TRJH9ENG28HD9CD87","trello","Manage Trello boards, lists, and cards via the Trello REST API.","https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fblob\u002Fmain\u002Fskills\u002Ftrello\u002FSKILL.md",[131,136],{"categoryNo":132,"categoryName":133,"taxonomyType":134,"taxonomyTypeDesc":135},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",{"categoryNo":137,"categoryName":138,"taxonomyType":112,"taxonomyTypeDesc":113},"01JBSEEDCAT000000000000030","开发工程师",[127,97,140,141,142,143,144,145,77,78,146,96,71,147,148],"cloud","manage","via","rest api","token","atlassian","jq","REST","developer",{"skillNo":150,"name":151,"nameZh":6,"description":152,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":153,"categories":154,"keywords":155,"publishedAt":28},"01M698YQ9Q3M4W78EWV2KSCSVW","tmux","Control tmux sessions\u002Fpanes for interactive CLIs: list, capture output, send keys, paste text, monitor prompts.","https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fblob\u002Fmain\u002Fskills\u002Ftmux\u002FSKILL.md",[],[151,77,156,157,70,158,159,160,161,162,22,163,78,164,165,166,167,168,169],"send","darwin","keys","paste","output","control","prompts","list","capture","panes","text","monitor","sessions","linux"]