[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M69A4GSPMCCVN1AE2NEMH8EM":3,"skill-same:01M69A4GSPMCCVN1AE2NEMH8EM":64},{"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":22,"linkOnly":23,"markdownContent":24,"markdownBody":25,"frontMatter":26,"refName":27,"commitSha":28,"skillDirectory":29,"forksCount":30,"repositoryHtmlUrl":31,"repositoryHomepageUrl":6,"ownerHtmlUrl":32,"ownerBlogUrl":33,"ownerDescription":34,"updatedAt":35,"install":36,"resources":49},"01M69A4GSPMCCVN1AE2NEMH8EM","add-telegram",null,"Add Telegram channel integration via Chat SDK.","microsoft\u002Famplifier-app-nanoclaw","microsoft","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F6154722?v=4","01M698VYDXZ6JW5WH3CRV650R8","Microsoft","01M69A31J3GTKVZDZZVPRQWWR5",5,"MIT","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Famplifier-app-nanoclaw\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fadd-telegram\u002FSKILL.md",[],[19,20,21],"add telegram","sdk","chat sdk","2026-11-10 10:12:30",false,"---\nname: add-telegram\ndescription: Add Telegram channel integration via Chat SDK.\n---\n\n# Add Telegram Channel\n\nAdds Telegram bot support via the Chat SDK bridge.\n\n## Install\n\nNanoClaw doesn't ship channels in trunk. This skill copies the Telegram adapter, its formatting\u002Fpairing helpers, their tests, and the `pair-telegram` setup step in from the `channels` branch.\n\n### Pre-flight (idempotent)\n\nSkip to **Credentials** if all of these are already in place:\n\n- `src\u002Fchannels\u002Ftelegram.ts`, `telegram-pairing.ts`, `telegram-markdown-sanitize.ts` (and their `.test.ts` siblings) all exist\n- `src\u002Fchannels\u002Findex.ts` contains `import '.\u002Ftelegram.js';`\n- `setup\u002Fpair-telegram.ts` exists and `setup\u002Findex.ts`'s `STEPS` map contains `'pair-telegram':`\n- `@chat-adapter\u002Ftelegram` is listed in `package.json` dependencies\n\nOtherwise continue. Every step below is safe to re-run.\n\n### 1. Fetch the channels branch\n\n```bash\ngit fetch origin channels\n```\n\n### 2. Copy the adapter, helpers, tests, and setup step\n\n```bash\ngit show origin\u002Fchannels:src\u002Fchannels\u002Ftelegram.ts                        > src\u002Fchannels\u002Ftelegram.ts\ngit show origin\u002Fchannels:src\u002Fchannels\u002Ftelegram-pairing.ts                > src\u002Fchannels\u002Ftelegram-pairing.ts\ngit show origin\u002Fchannels:src\u002Fchannels\u002Ftelegram-pairing.test.ts           > src\u002Fchannels\u002Ftelegram-pairing.test.ts\ngit show origin\u002Fchannels:src\u002Fchannels\u002Ftelegram-markdown-sanitize.ts      > src\u002Fchannels\u002Ftelegram-markdown-sanitize.ts\ngit show origin\u002Fchannels:src\u002Fchannels\u002Ftelegram-markdown-sanitize.test.ts > src\u002Fchannels\u002Ftelegram-markdown-sanitize.test.ts\ngit show origin\u002Fchannels:setup\u002Fpair-telegram.ts                          > setup\u002Fpair-telegram.ts\n```\n\n### 3. Append the self-registration import\n\nAppend to `src\u002Fchannels\u002Findex.ts` (skip if already present):\n\n```typescript\nimport '.\u002Ftelegram.js';\n```\n\n### 4. Register the setup step\n\nIn `setup\u002Findex.ts`, add this entry to the `STEPS` map (right after the `register` line is fine; skip if already present):\n\n```typescript\n'pair-telegram': () => import('.\u002Fpair-telegram.js'),\n```\n\n### 5. Install the adapter package (pinned)\n\n```bash\npnpm install @chat-adapter\u002Ftelegram@4.27.0\n```\n\n### 6. Build\n\n```bash\npnpm run build\n```\n\n## Credentials\n\n### Create Telegram Bot\n\n1. Open Telegram and search for `@BotFather`\n2. Send `\u002Fnewbot` and follow the prompts:\n   - Bot name: Something friendly (e.g., \"NanoClaw Assistant\")\n   - Bot username: Must end with \"bot\" (e.g., \"nanoclaw_bot\")\n3. Copy the bot token (looks like `123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11`)\n\n**Important for group chats**: By default, Telegram bots only see @mentions and commands in groups. To let the bot see all messages:\n\n1. Open `@BotFather` > `\u002Fmybots` > select your bot\n2. **Bot Settings** > **Group Privacy** > **Turn off**\n\n### Configure environment\n\nAdd to `.env`:\n\n```bash\nTELEGRAM_BOT_TOKEN=your-bot-token\n```\n\nSync to container: `mkdir -p data\u002Fenv && cp .env data\u002Fenv\u002Fenv`\n\n## Next Steps\n\nIf you're in the middle of `\u002Fsetup`, return to the setup flow now.\n\nOtherwise, run `\u002Fmanage-channels` to wire this channel to an agent group.\n\n## Channel Info\n\n- **type**: `telegram`\n- **terminology**: Telegram calls them \"groups\" and \"chats.\" A \"group\" has multiple members; a \"chat\" is a 1:1 conversation with the bot.\n- **how-to-find-id**: Do NOT ask the user for a chat ID. Telegram registration uses pairing — run `pnpm exec tsx setup\u002Findex.ts --step pair-telegram -- --intent \u003Cmain|wire-to:folder|new-agent:folder>`, show the user the 4-digit `CODE` from the `PAIR_TELEGRAM_ISSUED` block (follow the `REMINDER_TO_ASSISTANT` line in that block), and tell them to send just the 4 digits as a message from the chat they want to register (DM the bot for `main`, post in the group otherwise). In groups with Group Privacy ON, prefix with the bot handle: `@\u003Cbotname> CODE`. Wrong guesses invalidate the code — if a `PAIR_TELEGRAM_ATTEMPT` block arrives with a mismatched `RECEIVED_CODE`, a `PAIR_TELEGRAM_NEW_CODE` block will follow automatically (up to 5 regenerations); show the new code. On `PAIR_TELEGRAM STATUS=failed ERROR=max-regenerations-exceeded`, ask the user if they want to try again and re-invoke the step — each invocation starts a fresh 5-attempt batch. Success emits `PAIR_TELEGRAM STATUS=success` with `PLATFORM_ID`, `IS_GROUP`, and `ADMIN_USER_ID`. The service must be running for this to work (the polling adapter is what observes the code).\n- **supports-threads**: no\n- **typical-use**: Interactive chat — direct messages or small groups\n- **default-isolation**: Same agent group if you're the only participant across multiple chats. Separate agent group if different people are in different groups.\n","# Add Telegram Channel\n\nAdds Telegram bot support via the Chat SDK bridge.\n\n## Install\n\nNanoClaw doesn't ship channels in trunk. This skill copies the Telegram adapter, its formatting\u002Fpairing helpers, their tests, and the `pair-telegram` setup step in from the `channels` branch.\n\n### Pre-flight (idempotent)\n\nSkip to **Credentials** if all of these are already in place:\n\n- `src\u002Fchannels\u002Ftelegram.ts`, `telegram-pairing.ts`, `telegram-markdown-sanitize.ts` (and their `.test.ts` siblings) all exist\n- `src\u002Fchannels\u002Findex.ts` contains `import '.\u002Ftelegram.js';`\n- `setup\u002Fpair-telegram.ts` exists and `setup\u002Findex.ts`'s `STEPS` map contains `'pair-telegram':`\n- `@chat-adapter\u002Ftelegram` is listed in `package.json` dependencies\n\nOtherwise continue. Every step below is safe to re-run.\n\n### 1. Fetch the channels branch\n\n```bash\ngit fetch origin channels\n```\n\n### 2. Copy the adapter, helpers, tests, and setup step\n\n```bash\ngit show origin\u002Fchannels:src\u002Fchannels\u002Ftelegram.ts                        > src\u002Fchannels\u002Ftelegram.ts\ngit show origin\u002Fchannels:src\u002Fchannels\u002Ftelegram-pairing.ts                > src\u002Fchannels\u002Ftelegram-pairing.ts\ngit show origin\u002Fchannels:src\u002Fchannels\u002Ftelegram-pairing.test.ts           > src\u002Fchannels\u002Ftelegram-pairing.test.ts\ngit show origin\u002Fchannels:src\u002Fchannels\u002Ftelegram-markdown-sanitize.ts      > src\u002Fchannels\u002Ftelegram-markdown-sanitize.ts\ngit show origin\u002Fchannels:src\u002Fchannels\u002Ftelegram-markdown-sanitize.test.ts > src\u002Fchannels\u002Ftelegram-markdown-sanitize.test.ts\ngit show origin\u002Fchannels:setup\u002Fpair-telegram.ts                          > setup\u002Fpair-telegram.ts\n```\n\n### 3. Append the self-registration import\n\nAppend to `src\u002Fchannels\u002Findex.ts` (skip if already present):\n\n```typescript\nimport '.\u002Ftelegram.js';\n```\n\n### 4. Register the setup step\n\nIn `setup\u002Findex.ts`, add this entry to the `STEPS` map (right after the `register` line is fine; skip if already present):\n\n```typescript\n'pair-telegram': () => import('.\u002Fpair-telegram.js'),\n```\n\n### 5. Install the adapter package (pinned)\n\n```bash\npnpm install @chat-adapter\u002Ftelegram@4.27.0\n```\n\n### 6. Build\n\n```bash\npnpm run build\n```\n\n## Credentials\n\n### Create Telegram Bot\n\n1. Open Telegram and search for `@BotFather`\n2. Send `\u002Fnewbot` and follow the prompts:\n   - Bot name: Something friendly (e.g., \"NanoClaw Assistant\")\n   - Bot username: Must end with \"bot\" (e.g., \"nanoclaw_bot\")\n3. Copy the bot token (looks like `123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11`)\n\n**Important for group chats**: By default, Telegram bots only see @mentions and commands in groups. To let the bot see all messages:\n\n1. Open `@BotFather` > `\u002Fmybots` > select your bot\n2. **Bot Settings** > **Group Privacy** > **Turn off**\n\n### Configure environment\n\nAdd to `.env`:\n\n```bash\nTELEGRAM_BOT_TOKEN=your-bot-token\n```\n\nSync to container: `mkdir -p data\u002Fenv && cp .env data\u002Fenv\u002Fenv`\n\n## Next Steps\n\nIf you're in the middle of `\u002Fsetup`, return to the setup flow now.\n\nOtherwise, run `\u002Fmanage-channels` to wire this channel to an agent group.\n\n## Channel Info\n\n- **type**: `telegram`\n- **terminology**: Telegram calls them \"groups\" and \"chats.\" A \"group\" has multiple members; a \"chat\" is a 1:1 conversation with the bot.\n- **how-to-find-id**: Do NOT ask the user for a chat ID. Telegram registration uses pairing — run `pnpm exec tsx setup\u002Findex.ts --step pair-telegram -- --intent \u003Cmain|wire-to:folder|new-agent:folder>`, show the user the 4-digit `CODE` from the `PAIR_TELEGRAM_ISSUED` block (follow the `REMINDER_TO_ASSISTANT` line in that block), and tell them to send just the 4 digits as a message from the chat they want to register (DM the bot for `main`, post in the group otherwise). In groups with Group Privacy ON, prefix with the bot handle: `@\u003Cbotname> CODE`. Wrong guesses invalidate the code — if a `PAIR_TELEGRAM_ATTEMPT` block arrives with a mismatched `RECEIVED_CODE`, a `PAIR_TELEGRAM_NEW_CODE` block will follow automatically (up to 5 regenerations); show the new code. On `PAIR_TELEGRAM STATUS=failed ERROR=max-regenerations-exceeded`, ask the user if they want to try again and re-invoke the step — each invocation starts a fresh 5-attempt batch. Success emits `PAIR_TELEGRAM STATUS=success` with `PLATFORM_ID`, `IS_GROUP`, and `ADMIN_USER_ID`. The service must be running for this to work (the polling adapter is what observes the code).\n- **supports-threads**: no\n- **typical-use**: Interactive chat — direct messages or small groups\n- **default-isolation**: Same agent group if you're the only participant across multiple chats. Separate agent group if different people are in different groups.\n",{"name":5,"description":7},"main","85a2d934766d21e4696ac1b00157179f28bca9e3",".claude\u002Fskills\u002Fadd-telegram",2,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Famplifier-app-nanoclaw","https:\u002F\u002Fgithub.com\u002Fmicrosoft","https:\u002F\u002Fopensource.microsoft.com","Open source projects and samples from Microsoft","2026-10-30 04:24:16",{"source":8,"skillName":5,"commands":37,"prompt":47,"zipAvailable":48},[38,41,44],{"tool":39,"command":40},"npx","npx skills add microsoft\u002Famplifier-app-nanoclaw --skill add-telegram",{"tool":42,"command":43},"bunx","bunx skills add microsoft\u002Famplifier-app-nanoclaw --skill add-telegram",{"tool":45,"command":46},"pnpm","pnpm dlx skills add microsoft\u002Famplifier-app-nanoclaw --skill add-telegram","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Famplifier-app-nanoclaw\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fadd-telegram\u002FSKILL.md",true,[50,56,60],{"path":51,"resourceType":52,"resourceTypeDesc":53,"sizeBytes":54,"sourceHtmlUrl":55},"references\u002Fattribution.md","REFERENCE","参考文档",1980,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fcloud\u002Fagent-platform-endpoint-management\u002Freferences\u002Fattribution.md",{"path":57,"resourceType":52,"resourceTypeDesc":53,"sizeBytes":58,"sourceHtmlUrl":59},"REMOVE.md",195,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Famplifier-app-nanoclaw\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fadd-telegram\u002FREMOVE.md",{"path":61,"resourceType":52,"resourceTypeDesc":53,"sizeBytes":62,"sourceHtmlUrl":63},"VERIFY.md",182,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Famplifier-app-nanoclaw\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fadd-telegram\u002FVERIFY.md",[65,74,81,92,106,119],{"skillNo":66,"name":67,"nameZh":6,"description":68,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":69,"categories":70,"keywords":71,"publishedAt":22},"01M69A6E27JZN10H82TZ2GMC3A","whatsapp-formatting","Format messages for WhatsApp, including mentions that render as real WhatsApp tags. Use when responding in a WhatsApp conversation (platform_id \u002F chatJid ends with @s.whatsapp.net or @g.us).","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Famplifier-app-nanoclaw\u002Fblob\u002Fmain\u002Fcontainer\u002Fskills\u002Fwhatsapp-formatting\u002FSKILL.md",[],[72,73],"whatsapp","whatsapp formatting",{"skillNo":75,"name":76,"nameZh":6,"description":77,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":78,"categories":79,"keywords":80,"publishedAt":22},"01M69A6CGJ968RNVGYTRSWZKWB","welcome","Introduce yourself to a newly connected channel. Triggered automatically when a channel is first wired. Send a friendly greeting and brief overview of what you can do.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Famplifier-app-nanoclaw\u002Fblob\u002Fmain\u002Fcontainer\u002Fskills\u002Fwelcome\u002FSKILL.md",[],[76],{"skillNo":82,"name":83,"nameZh":6,"description":84,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":87,"publishedAt":22},"01M69A6ADX690STSN63WKRD37K","vercel-cli","Deploy apps to Vercel. Use when asked to deploy, ship, or publish a web application, or manage Vercel projects, domains, and environment variables.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Famplifier-app-nanoclaw\u002Fblob\u002Fmain\u002Fcontainer\u002Fskills\u002Fvercel-cli\u002FSKILL.md",[],[88,89,90,91],"cli","vercel cli","web","deploy",{"skillNo":93,"name":94,"nameZh":6,"description":95,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":96,"categories":97,"keywords":103,"publishedAt":22},"01M69A68WJ94V4MXGXGK9T0QG7","slack-formatting","Format messages for Slack using mrkdwn syntax. Use when responding to Slack channels (folder starts with \"slack_\" or JID contains slack identifiers).","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Famplifier-app-nanoclaw\u002Fblob\u002Fmain\u002Fcontainer\u002Fskills\u002Fslack-formatting\u002FSKILL.md",[98],{"categoryNo":99,"categoryName":100,"taxonomyType":101,"taxonomyTypeDesc":102},"01JBSEEDCAT000000000000005","邮件与沟通","SCENARIO","使用场景",[104,105],"slack","slack formatting",{"skillNo":107,"name":108,"nameZh":6,"description":109,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":110,"categories":111,"keywords":115,"publishedAt":22},"01M69A673Z17TDXK3DBC5YJFM7","self-customize","Customize your own agent — add capabilities, install packages, add MCP servers, edit code or CLAUDE.md. Use when the user asks you to add a feature, install a tool, or modify how you work. For non-trivial code changes, delegate to a builder agent via create_agent.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Famplifier-app-nanoclaw\u002Fblob\u002Fmain\u002Fcontainer\u002Fskills\u002Fself-customize\u002FSKILL.md",[112],{"categoryNo":113,"categoryName":114,"taxonomyType":101,"taxonomyTypeDesc":102},"01JBSEEDCAT000000000000023","Skill与智能体开发",[116,117,118],"customize","self customize","MCP",{"skillNo":120,"name":121,"nameZh":6,"description":122,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":123,"categories":124,"keywords":126,"publishedAt":22},"01M69A657JFNEG45Z1Y05BVK5R","onecli-gateway","OneCLI Gateway: transparent HTTPS proxy that injects stored credentials into outbound calls. You MUST use this skill when the user asks you to read emails, check calendar, access GitHub repos, create issues, check Stripe payments, or interact with ANY external service or API. Do NOT use browser extensions or OAuth CLI tools. Make HTTP requests directly; the gateway injects credentials automatically.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Famplifier-app-nanoclaw\u002Fblob\u002Fmain\u002Fcontainer\u002Fskills\u002Fonecli-gateway\u002FSKILL.md",[125],{"categoryNo":113,"categoryName":114,"taxonomyType":101,"taxonomyTypeDesc":102},[127,88,128,129],"onecli gateway","github","repos"]