[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M69A3BGRJCYXSDKX5N45MAHP":3,"skill-same:01M69A3BGRJCYXSDKX5N45MAHP":60},{"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},"01M69A3BGRJCYXSDKX5N45MAHP","add-deltachat",null,"Add DeltaChat channel integration via @deltachat\u002Fstdio-rpc-server. Native adapter — no Chat SDK bridge. Email-based messaging with end-to-end encryption.","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-deltachat\u002FSKILL.md",[],[19,20,21],"add deltachat","sdk","chat sdk","2026-11-10 10:12:30",false,"---\nname: add-deltachat\ndescription: Add DeltaChat channel integration via @deltachat\u002Fstdio-rpc-server. Native adapter — no Chat SDK bridge. Email-based messaging with end-to-end encryption.\n---\n\n# Add DeltaChat Channel\n\nThe adapter drives the `@deltachat\u002Fstdio-rpc-server` JSON-RPC subprocess directly — pure Node.js against the DeltaChat core library. Messages are delivered over email with Autocrypt\u002FOpenPGP encryption.\n\n## Install\n\n### Pre-flight (idempotent)\n\nSkip to **Credentials** if all of these are already in place:\n\n- `src\u002Fchannels\u002Fdeltachat.ts` exists\n- `src\u002Fchannels\u002Findex.ts` contains `import '.\u002Fdeltachat.js';`\n- `@deltachat\u002Fstdio-rpc-server` 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\n\n```bash\ngit show origin\u002Fchannels:src\u002Fchannels\u002Fdeltachat.ts > src\u002Fchannels\u002Fdeltachat.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 '.\u002Fdeltachat.js';\n```\n\n### 4. Install the adapter package (pinned)\n\n```bash\npnpm install @deltachat\u002Fstdio-rpc-server@2.49.0\n```\n\n### 5. Build\n\n```bash\npnpm run build\n```\n\n## Account Setup\n\nA dedicated email account is strongly recommended — it will accumulate DeltaChat-formatted messages and store encryption keys. Not all providers work well with DeltaChat; check https:\u002F\u002Fproviders.delta.chat\u002F before picking one.\n\n**Default security modes:** IMAP uses SSL\u002FTLS (port 993), SMTP uses STARTTLS (port 587). Both are configurable via `.env` — see Credentials below.\n\nTo find the correct hostnames for a domain:\n\n```bash\nnode -e \"require('dns').resolveMx('example.com', (e,r) => console.log(r))\"\n```\n\nMost providers publish their IMAP\u002FSMTP hostnames in their help docs under \"manual setup\" or \"IMAP access.\"\n\n## Credentials\n\nAdd to `.env`:\n\n```bash\nDC_EMAIL=bot@example.com\nDC_PASSWORD=your-app-password\nDC_IMAP_HOST=imap.example.com\nDC_IMAP_PORT=993\nDC_IMAP_SECURITY=1        # 1=SSL\u002FTLS (default), 2=STARTTLS, 3=plain\nDC_SMTP_HOST=smtp.example.com\nDC_SMTP_PORT=587\nDC_SMTP_SECURITY=2        # 2=STARTTLS (default), 1=SSL\u002FTLS, 3=plain\n```\n\nSecurity settings are applied on every startup, so changing them in `.env` and restarting takes effect without wiping the account.\n\nSync to container: `mkdir -p data\u002Fenv && cp .env data\u002Fenv\u002Fenv`\n\n### Optional settings\n\nThe following are read from the process environment (not `.env`). To override them, add `Environment=` lines to the systemd service unit or your launchd plist:\n\n| Variable | Default | Description |\n|----------|---------|-------------|\n| `DC_ACCOUNT_DIR` | `dc-account` | Directory for DeltaChat account data (IMAP state, keys, blobs) |\n| `DC_DISPLAY_NAME` | `NanoClaw` | Bot display name shown in DeltaChat |\n| `DC_AVATAR_PATH` | _(none)_ | Absolute path to avatar image; set at startup only |\n\nThe `\u002Fset-avatar` command (send an image with that caption) is the easiest way to set the avatar at runtime without modifying the service file. Only users with `owner` or global `admin` role can use it.\n\n### Restart\n\nRun from your NanoClaw project root:\n\n```bash\nsource setup\u002Flib\u002Finstall-slug.sh\n\n# Linux\nsystemctl --user restart $(systemd_unit)\n\n# macOS\nlaunchctl kickstart -k gui\u002F$(id -u)\u002F$(launchd_label)\n```\n\nOn first start the adapter configures the email account (IMAP\u002FSMTP credentials, calls `configure()`). Subsequent starts skip straight to `startIo()`. Account data is stored in `dc-account\u002F` in the project root (or your `DC_ACCOUNT_DIR`).\n\n## Wiring\n\n### DMs\n\n**DeltaChat contacts cannot be added by email alone** — to start a chat, the user must open the bot's invite link in their DeltaChat app or scan its QR code. This triggers the SecureJoin handshake.\n\n#### Step 1 — Get the invite link\n\nAfter the service starts, the adapter logs the invite URL and writes a QR SVG:\n\n```bash\ngrep \"invite link\" logs\u002Fnanoclaw.log | tail -1\n# url field contains the https:\u002F\u002Fi.delta.chat\u002F... invite link\n# also written to dc-account\u002Finvite-qr.svg (or $DC_ACCOUNT_DIR\u002Finvite-qr.svg)\n```\n\nThe invite URL is stable (tied to the bot's email and encryption keys) so it stays valid across restarts.\n\n#### Step 2 — Add the bot in DeltaChat\n\nTwo options for the user to connect:\n\n- **Link**: Copy the `https:\u002F\u002Fi.delta.chat\u002F...` URL and open it on the device running DeltaChat. The app recognises it and shows a \"Start chat\" prompt.\n- **QR code**: Open `dc-account\u002Finvite-qr.svg` in a browser or image viewer, display it on screen, and scan it from the DeltaChat app using the QR-scan button on the new-chat screen.\n\nAfter accepting, DeltaChat exchanges keys and creates the chat automatically.\n\n#### Step 3 — Wire the chat to an agent\n\nOnce the first message arrives the router auto-creates a `messaging_groups` row. Look up the chat ID:\n\n```bash\npnpm exec tsx scripts\u002Fq.ts data\u002Fv2.db \\\n  \"SELECT platform_id, name FROM messaging_groups WHERE channel_type='deltachat' AND is_group=0 ORDER BY created_at DESC LIMIT 5\"\n```\n\nThen run `\u002Finit-first-agent` — it creates the agent group, grants the user owner access, and wires the messaging group in one step:\n\n```bash\npnpm exec tsx scripts\u002Finit-first-agent.ts \\\n  --channel deltachat \\\n  --user-id deltachat:user@example.com \\\n  --platform-id \u003Cplatform_id from above> \\\n  --display-name \"Your Name\"\n```\n\n### Groups\n\nAdd the bot email to a DeltaChat group. When any member sends a message, the router creates a `messaging_groups` row with `is_group = 1`. Run `\u002Fmanage-channels` to wire it to an agent group.\n\n## Next Steps\n\nIf you're in the middle of `\u002Fsetup`, return to the setup flow now.\n\nOtherwise, run `\u002Finit-first-agent` to create an agent and wire it to your DeltaChat DM (see Wiring above), or `\u002Fmanage-channels` to wire this channel to an existing agent group.\n\n## Channel Info\n\n- **type**: `deltachat`\n- **terminology**: DeltaChat calls them \"chats\" (1:1 DMs) and \"groups\"\n- **supports-threads**: no — DeltaChat has no thread model\n- **platform-id-format**: numeric chat ID as a string (e.g. `\"12\"`) — the DeltaChat core's internal chat identifier\n- **user-id-format**: `deltachat:{email}` — the contact's email address\n- **how-to-find-id**: Send a message from DeltaChat to the bot email, then query `messaging_groups` as shown above\n- **typical-use**: Personal assistant over DeltaChat DMs; small groups where participants use DeltaChat\n- **default-isolation**: One agent per bot identity. Multiple chats with the same operator can share an agent group; groups with other people should typically use `isolated` session mode\n\n### Features\n\n- File attachments — inbound and outbound; inbound waits up to 30 seconds for large-message download to complete\n- Invite link logged on every startup — URL + QR SVG written to `dc-account\u002Finvite-qr.svg`; see Wiring for the bootstrap flow\n- `\u002Fset-avatar` — send an image with this caption to change the bot's DeltaChat avatar (admin\u002Fowner only)\n- Connectivity watchdog — restarts IO if IMAP goes quiet for 20 minutes or connectivity drops below threshold for two consecutive 5-minute checks\n- Network nudge — `maybeNetwork()` called every 10 minutes to recover from prolonged idle\n\nNot supported: DeltaChat reactions, message editing\u002Fdeletion, read receipts.\n\n### Connectivity model\n\n`isConnected()` returns `true` when the internal connectivity value is ≥ 3000:\n\n| Range | Meaning |\n|-------|---------|\n| 1000–1999 | Not connected |\n| 2000–2999 | Connecting |\n| 3000–3999 | Working (IMAP fetching) |\n| ≥ 4000 | Fully connected (IMAP IDLE) |\n\n## Troubleshooting\n\n### Adapter not starting — credentials missing\n\n```bash\ngrep \"Channel credentials missing\" logs\u002Fnanoclaw.log | grep deltachat\n```\n\nAll six required vars (`DC_EMAIL`, `DC_PASSWORD`, `DC_IMAP_HOST`, `DC_IMAP_PORT`, `DC_SMTP_HOST`, `DC_SMTP_PORT`) must be present in `.env`.\n\n### Account configure fails\n\n```bash\ngrep \"DeltaChat\" logs\u002Fnanoclaw.log | tail -20\n```\n\nCommon causes:\n- Wrong IMAP\u002FSMTP hostnames — double-check provider docs\n- App password not generated — Gmail and some others require this when 2FA is enabled\n- Port\u002Fsecurity mismatch — defaults are port 993 + SSL\u002FTLS for IMAP and port 587 + STARTTLS for SMTP; override with `DC_IMAP_PORT`\u002F`DC_IMAP_SECURITY` or `DC_SMTP_PORT`\u002F`DC_SMTP_SECURITY` in `.env`\n\n### Provider uses SMTP port 465 (SSL\u002FTLS) instead of 587\n\nSet `DC_SMTP_SECURITY=1` and `DC_SMTP_PORT=465` in `.env`, then restart.\n\n### Messages not arriving\n\n1. Check the service is running and the adapter started: `grep \"Channel adapter started.*deltachat\" logs\u002Fnanoclaw.log`\n2. Check connectivity: `grep \"DeltaChat: IO started\" logs\u002Fnanoclaw.log`\n3. Check the sender has been granted access — run `\u002Finit-first-agent` to create their user record and wire the chat\n4. Verify the messaging group is wired: `pnpm exec tsx scripts\u002Fq.ts data\u002Fv2.db \"SELECT mg.platform_id, mga.agent_group_id FROM messaging_groups mg JOIN messaging_group_agents mga ON mg.id = mga.messaging_group_id WHERE mg.channel_type='deltachat'\"`\n\n### Stale lock file after crash\n\n```bash\nrm -f dc-account\u002Faccounts.lock\nsystemctl --user restart \"$(. setup\u002Flib\u002Finstall-slug.sh && systemd_unit)\"\n```\n\n### Bot not responding after restart\n\nThe account is already configured — IO restarts automatically on service start. If the RPC subprocess is stuck, restart the service. Check for errors:\n\n```bash\ngrep \"DeltaChat\" logs\u002Fnanoclaw.error.log | tail -20\n```\n\n### Messages received but agent not responding\n\nThe messaging group exists but may not be wired to an agent group. Run:\n\n```bash\npnpm exec tsx scripts\u002Fq.ts data\u002Fv2.db \"SELECT id, platform_id, name FROM messaging_groups WHERE channel_type='deltachat'\"\n```\n\nIf the group has no entry in `messaging_group_agents`, wire it with `\u002Fmanage-channels`.\n","# Add DeltaChat Channel\n\nThe adapter drives the `@deltachat\u002Fstdio-rpc-server` JSON-RPC subprocess directly — pure Node.js against the DeltaChat core library. Messages are delivered over email with Autocrypt\u002FOpenPGP encryption.\n\n## Install\n\n### Pre-flight (idempotent)\n\nSkip to **Credentials** if all of these are already in place:\n\n- `src\u002Fchannels\u002Fdeltachat.ts` exists\n- `src\u002Fchannels\u002Findex.ts` contains `import '.\u002Fdeltachat.js';`\n- `@deltachat\u002Fstdio-rpc-server` 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\n\n```bash\ngit show origin\u002Fchannels:src\u002Fchannels\u002Fdeltachat.ts > src\u002Fchannels\u002Fdeltachat.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 '.\u002Fdeltachat.js';\n```\n\n### 4. Install the adapter package (pinned)\n\n```bash\npnpm install @deltachat\u002Fstdio-rpc-server@2.49.0\n```\n\n### 5. Build\n\n```bash\npnpm run build\n```\n\n## Account Setup\n\nA dedicated email account is strongly recommended — it will accumulate DeltaChat-formatted messages and store encryption keys. Not all providers work well with DeltaChat; check https:\u002F\u002Fproviders.delta.chat\u002F before picking one.\n\n**Default security modes:** IMAP uses SSL\u002FTLS (port 993), SMTP uses STARTTLS (port 587). Both are configurable via `.env` — see Credentials below.\n\nTo find the correct hostnames for a domain:\n\n```bash\nnode -e \"require('dns').resolveMx('example.com', (e,r) => console.log(r))\"\n```\n\nMost providers publish their IMAP\u002FSMTP hostnames in their help docs under \"manual setup\" or \"IMAP access.\"\n\n## Credentials\n\nAdd to `.env`:\n\n```bash\nDC_EMAIL=bot@example.com\nDC_PASSWORD=your-app-password\nDC_IMAP_HOST=imap.example.com\nDC_IMAP_PORT=993\nDC_IMAP_SECURITY=1        # 1=SSL\u002FTLS (default), 2=STARTTLS, 3=plain\nDC_SMTP_HOST=smtp.example.com\nDC_SMTP_PORT=587\nDC_SMTP_SECURITY=2        # 2=STARTTLS (default), 1=SSL\u002FTLS, 3=plain\n```\n\nSecurity settings are applied on every startup, so changing them in `.env` and restarting takes effect without wiping the account.\n\nSync to container: `mkdir -p data\u002Fenv && cp .env data\u002Fenv\u002Fenv`\n\n### Optional settings\n\nThe following are read from the process environment (not `.env`). To override them, add `Environment=` lines to the systemd service unit or your launchd plist:\n\n| Variable | Default | Description |\n|----------|---------|-------------|\n| `DC_ACCOUNT_DIR` | `dc-account` | Directory for DeltaChat account data (IMAP state, keys, blobs) |\n| `DC_DISPLAY_NAME` | `NanoClaw` | Bot display name shown in DeltaChat |\n| `DC_AVATAR_PATH` | _(none)_ | Absolute path to avatar image; set at startup only |\n\nThe `\u002Fset-avatar` command (send an image with that caption) is the easiest way to set the avatar at runtime without modifying the service file. Only users with `owner` or global `admin` role can use it.\n\n### Restart\n\nRun from your NanoClaw project root:\n\n```bash\nsource setup\u002Flib\u002Finstall-slug.sh\n\n# Linux\nsystemctl --user restart $(systemd_unit)\n\n# macOS\nlaunchctl kickstart -k gui\u002F$(id -u)\u002F$(launchd_label)\n```\n\nOn first start the adapter configures the email account (IMAP\u002FSMTP credentials, calls `configure()`). Subsequent starts skip straight to `startIo()`. Account data is stored in `dc-account\u002F` in the project root (or your `DC_ACCOUNT_DIR`).\n\n## Wiring\n\n### DMs\n\n**DeltaChat contacts cannot be added by email alone** — to start a chat, the user must open the bot's invite link in their DeltaChat app or scan its QR code. This triggers the SecureJoin handshake.\n\n#### Step 1 — Get the invite link\n\nAfter the service starts, the adapter logs the invite URL and writes a QR SVG:\n\n```bash\ngrep \"invite link\" logs\u002Fnanoclaw.log | tail -1\n# url field contains the https:\u002F\u002Fi.delta.chat\u002F... invite link\n# also written to dc-account\u002Finvite-qr.svg (or $DC_ACCOUNT_DIR\u002Finvite-qr.svg)\n```\n\nThe invite URL is stable (tied to the bot's email and encryption keys) so it stays valid across restarts.\n\n#### Step 2 — Add the bot in DeltaChat\n\nTwo options for the user to connect:\n\n- **Link**: Copy the `https:\u002F\u002Fi.delta.chat\u002F...` URL and open it on the device running DeltaChat. The app recognises it and shows a \"Start chat\" prompt.\n- **QR code**: Open `dc-account\u002Finvite-qr.svg` in a browser or image viewer, display it on screen, and scan it from the DeltaChat app using the QR-scan button on the new-chat screen.\n\nAfter accepting, DeltaChat exchanges keys and creates the chat automatically.\n\n#### Step 3 — Wire the chat to an agent\n\nOnce the first message arrives the router auto-creates a `messaging_groups` row. Look up the chat ID:\n\n```bash\npnpm exec tsx scripts\u002Fq.ts data\u002Fv2.db \\\n  \"SELECT platform_id, name FROM messaging_groups WHERE channel_type='deltachat' AND is_group=0 ORDER BY created_at DESC LIMIT 5\"\n```\n\nThen run `\u002Finit-first-agent` — it creates the agent group, grants the user owner access, and wires the messaging group in one step:\n\n```bash\npnpm exec tsx scripts\u002Finit-first-agent.ts \\\n  --channel deltachat \\\n  --user-id deltachat:user@example.com \\\n  --platform-id \u003Cplatform_id from above> \\\n  --display-name \"Your Name\"\n```\n\n### Groups\n\nAdd the bot email to a DeltaChat group. When any member sends a message, the router creates a `messaging_groups` row with `is_group = 1`. Run `\u002Fmanage-channels` to wire it to an agent group.\n\n## Next Steps\n\nIf you're in the middle of `\u002Fsetup`, return to the setup flow now.\n\nOtherwise, run `\u002Finit-first-agent` to create an agent and wire it to your DeltaChat DM (see Wiring above), or `\u002Fmanage-channels` to wire this channel to an existing agent group.\n\n## Channel Info\n\n- **type**: `deltachat`\n- **terminology**: DeltaChat calls them \"chats\" (1:1 DMs) and \"groups\"\n- **supports-threads**: no — DeltaChat has no thread model\n- **platform-id-format**: numeric chat ID as a string (e.g. `\"12\"`) — the DeltaChat core's internal chat identifier\n- **user-id-format**: `deltachat:{email}` — the contact's email address\n- **how-to-find-id**: Send a message from DeltaChat to the bot email, then query `messaging_groups` as shown above\n- **typical-use**: Personal assistant over DeltaChat DMs; small groups where participants use DeltaChat\n- **default-isolation**: One agent per bot identity. Multiple chats with the same operator can share an agent group; groups with other people should typically use `isolated` session mode\n\n### Features\n\n- File attachments — inbound and outbound; inbound waits up to 30 seconds for large-message download to complete\n- Invite link logged on every startup — URL + QR SVG written to `dc-account\u002Finvite-qr.svg`; see Wiring for the bootstrap flow\n- `\u002Fset-avatar` — send an image with this caption to change the bot's DeltaChat avatar (admin\u002Fowner only)\n- Connectivity watchdog — restarts IO if IMAP goes quiet for 20 minutes or connectivity drops below threshold for two consecutive 5-minute checks\n- Network nudge — `maybeNetwork()` called every 10 minutes to recover from prolonged idle\n\nNot supported: DeltaChat reactions, message editing\u002Fdeletion, read receipts.\n\n### Connectivity model\n\n`isConnected()` returns `true` when the internal connectivity value is ≥ 3000:\n\n| Range | Meaning |\n|-------|---------|\n| 1000–1999 | Not connected |\n| 2000–2999 | Connecting |\n| 3000–3999 | Working (IMAP fetching) |\n| ≥ 4000 | Fully connected (IMAP IDLE) |\n\n## Troubleshooting\n\n### Adapter not starting — credentials missing\n\n```bash\ngrep \"Channel credentials missing\" logs\u002Fnanoclaw.log | grep deltachat\n```\n\nAll six required vars (`DC_EMAIL`, `DC_PASSWORD`, `DC_IMAP_HOST`, `DC_IMAP_PORT`, `DC_SMTP_HOST`, `DC_SMTP_PORT`) must be present in `.env`.\n\n### Account configure fails\n\n```bash\ngrep \"DeltaChat\" logs\u002Fnanoclaw.log | tail -20\n```\n\nCommon causes:\n- Wrong IMAP\u002FSMTP hostnames — double-check provider docs\n- App password not generated — Gmail and some others require this when 2FA is enabled\n- Port\u002Fsecurity mismatch — defaults are port 993 + SSL\u002FTLS for IMAP and port 587 + STARTTLS for SMTP; override with `DC_IMAP_PORT`\u002F`DC_IMAP_SECURITY` or `DC_SMTP_PORT`\u002F`DC_SMTP_SECURITY` in `.env`\n\n### Provider uses SMTP port 465 (SSL\u002FTLS) instead of 587\n\nSet `DC_SMTP_SECURITY=1` and `DC_SMTP_PORT=465` in `.env`, then restart.\n\n### Messages not arriving\n\n1. Check the service is running and the adapter started: `grep \"Channel adapter started.*deltachat\" logs\u002Fnanoclaw.log`\n2. Check connectivity: `grep \"DeltaChat: IO started\" logs\u002Fnanoclaw.log`\n3. Check the sender has been granted access — run `\u002Finit-first-agent` to create their user record and wire the chat\n4. Verify the messaging group is wired: `pnpm exec tsx scripts\u002Fq.ts data\u002Fv2.db \"SELECT mg.platform_id, mga.agent_group_id FROM messaging_groups mg JOIN messaging_group_agents mga ON mg.id = mga.messaging_group_id WHERE mg.channel_type='deltachat'\"`\n\n### Stale lock file after crash\n\n```bash\nrm -f dc-account\u002Faccounts.lock\nsystemctl --user restart \"$(. setup\u002Flib\u002Finstall-slug.sh && systemd_unit)\"\n```\n\n### Bot not responding after restart\n\nThe account is already configured — IO restarts automatically on service start. If the RPC subprocess is stuck, restart the service. Check for errors:\n\n```bash\ngrep \"DeltaChat\" logs\u002Fnanoclaw.error.log | tail -20\n```\n\n### Messages received but agent not responding\n\nThe messaging group exists but may not be wired to an agent group. Run:\n\n```bash\npnpm exec tsx scripts\u002Fq.ts data\u002Fv2.db \"SELECT id, platform_id, name FROM messaging_groups WHERE channel_type='deltachat'\"\n```\n\nIf the group has no entry in `messaging_group_agents`, wire it with `\u002Fmanage-channels`.\n",{"name":5,"description":7},"main","85a2d934766d21e4696ac1b00157179f28bca9e3",".claude\u002Fskills\u002Fadd-deltachat",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-deltachat",{"tool":42,"command":43},"bunx","bunx skills add microsoft\u002Famplifier-app-nanoclaw --skill add-deltachat",{"tool":45,"command":46},"pnpm","pnpm dlx skills add microsoft\u002Famplifier-app-nanoclaw --skill add-deltachat","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Famplifier-app-nanoclaw\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fadd-deltachat\u002FSKILL.md",true,[50,56],{"path":51,"resourceType":52,"resourceTypeDesc":53,"sizeBytes":54,"sourceHtmlUrl":55},"REMOVE.md","REFERENCE","参考文档",1209,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Famplifier-app-nanoclaw\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fadd-deltachat\u002FREMOVE.md",{"path":57,"resourceType":52,"resourceTypeDesc":53,"sizeBytes":58,"sourceHtmlUrl":59},"VERIFY.md",1569,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Famplifier-app-nanoclaw\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fadd-deltachat\u002FVERIFY.md",[61,70,77,88,102,115],{"skillNo":62,"name":63,"nameZh":6,"description":64,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":65,"categories":66,"keywords":67,"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",[],[68,69],"whatsapp","whatsapp formatting",{"skillNo":71,"name":72,"nameZh":6,"description":73,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":74,"categories":75,"keywords":76,"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",[],[72],{"skillNo":78,"name":79,"nameZh":6,"description":80,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":81,"categories":82,"keywords":83,"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",[],[84,85,86,87],"cli","vercel cli","web","deploy",{"skillNo":89,"name":90,"nameZh":6,"description":91,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":92,"categories":93,"keywords":99,"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",[94],{"categoryNo":95,"categoryName":96,"taxonomyType":97,"taxonomyTypeDesc":98},"01JBSEEDCAT000000000000005","邮件与沟通","SCENARIO","使用场景",[100,101],"slack","slack formatting",{"skillNo":103,"name":104,"nameZh":6,"description":105,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":106,"categories":107,"keywords":111,"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",[108],{"categoryNo":109,"categoryName":110,"taxonomyType":97,"taxonomyTypeDesc":98},"01JBSEEDCAT000000000000023","Skill与智能体开发",[112,113,114],"customize","self customize","MCP",{"skillNo":116,"name":117,"nameZh":6,"description":118,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":119,"categories":120,"keywords":122,"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",[121],{"categoryNo":109,"categoryName":110,"taxonomyType":97,"taxonomyTypeDesc":98},[123,84,124,125],"onecli gateway","github","repos"]