Discord Channel Access
anthropics/claude-plugins-official
Manages who can reach Claude through a Discord channel: approve pairing codes, edit the allowlist and set direct-message and group policy.
Connects messaging channels to NanoClaw agent groups, sets isolation and engagement defaults, and reports which channels are wired, unwired or not configured.
$ npx skills add nanocoai/nanoclaw --skill manage-channels -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install nanocoai/nanoclaw manage-channels --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/nanocoai/nanoclaw.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/manage-channels .claude/skills/manage-channels && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "manage-channels" agent skill from https://github.com/nanocoai/nanoclaw/tree/main/.claude/skills/manage-channels into .claude/skills/manage-channels/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "manage-channels", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/nanocoai/nanoclaw/tree/main/.claude/skills/manage-channelsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add nanocoai/nanoclaw --skill manage-channels -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install nanocoai/nanoclaw manage-channels --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/nanocoai/nanoclaw.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/manage-channels .agents/skills/manage-channels && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "manage-channels" agent skill from https://github.com/nanocoai/nanoclaw/tree/main/.claude/skills/manage-channels into .agents/skills/manage-channels/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "manage-channels", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add nanocoai/nanoclaw --skill manage-channels -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install nanocoai/nanoclaw manage-channels --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/nanocoai/nanoclaw.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/manage-channels .cursor/skills/manage-channels && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "manage-channels" agent skill from https://github.com/nanocoai/nanoclaw/tree/main/.claude/skills/manage-channels into .cursor/skills/manage-channels/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "manage-channels", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/nanocoai/nanoclaw.git --path .claude/skills/manage-channels--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add nanocoai/nanoclaw --skill manage-channels -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install nanocoai/nanoclaw manage-channels --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/nanocoai/nanoclaw.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/manage-channels .gemini/skills/manage-channels && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "manage-channels" agent skill from https://github.com/nanocoai/nanoclaw/tree/main/.claude/skills/manage-channels into .gemini/skills/manage-channels/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "manage-channels", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install nanocoai/nanoclaw manage-channelsInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add nanocoai/nanoclaw --skill manage-channels -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/nanocoai/nanoclaw.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/manage-channels .github/skills/manage-channels && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "manage-channels" agent skill from https://github.com/nanocoai/nanoclaw/tree/main/.claude/skills/manage-channels into .github/skills/manage-channels/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "manage-channels", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add nanocoai/nanoclaw --skill manage-channels -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install nanocoai/nanoclaw manage-channels --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/nanocoai/nanoclaw.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/manage-channels .opencode/skills/manage-channels && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "manage-channels" agent skill from https://github.com/nanocoai/nanoclaw/tree/main/.claude/skills/manage-channels into .opencode/skills/manage-channels/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "manage-channels", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
manage-channelsConnects messaging channels to NanoClaw agent groups, sets isolation and engagement defaults, and reports which channels are wired, unwired or not configured.
The skill treats privilege as a property of users, not channels: there is no main channel, and any user can be granted owner or admin, globally or for one agent group. Messages from unknown senders are gated per messaging group by an `unknown_sender_policy` of strict, request_approval or public. The agent starts by reading the central database `data/v2.db` through the in-tree `scripts/q.ts` wrapper, since no `sqlite3` CLI is shipped, and checks `.env` for channel tokens and the channel barrel for imports.
From that it sorts each channel as wired, configured but unwired, or not configured. If no owner exists yet, it sends you to `/init-first-agent`, which also handles the very first channel, agent group and welcome message. Wiring defaults such as engage mode and pattern, threading and the unknown-sender policy resolve through a two-level model that the skill explains, and it can add further channel groups afterwards.
2 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit af699e7. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
pnpmFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use pnpm, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
NanoClaw Channel Wiring loads about 2.6k tokens when it runs. Until then it costs about 42 tokens; SKILL.md has 1,163 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
Also check `.env` for channel tokens and `src/channels/index.ts` for uncommented imports.t provider (`DEFAULT_AGENT_PROVIDER` in `.env`, or `claude` when unset). To run a group on a different provider, switchAutomated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from nanocoai/nanoclaw at commit af699e7, republished under its MIT licence (© nanocoai). 1,163 words, ~2,597 tokens.
.claude/skills/manage-channels/SKILL.md (or your agent's skills folder).Wire messaging channels to agent groups. See docs/isolation-model.md for the full isolation model.
Privilege is a user-level concept, not a channel-level one (see src/modules/permissions/db/user-roles.ts, src/modules/permissions/access.ts). There is no "main channel" / "main group" — any user can be granted owner or admin (global or scoped to an agent group) via grantRole(), and messages from unknown senders are gated per-messaging-group by unknown_sender_policy (strict | request_approval | public).
Read the central DB (data/v2.db) using these canonical queries (column names match the schema, not the CLI flags — the register command's --assistant-name is stored in agent_groups.name).
Run each via the in-tree wrapper — the host setup deliberately ships no sqlite3 CLI:
pnpm exec tsx scripts/q.ts data/v2.db "<query>"SELECT id, name AS assistant_name, folder, agent_provider FROM agent_groups;
SELECT id, channel_type, platform_id, name, unknown_sender_policy FROM messaging_groups;
SELECT messaging_group_id, agent_group_id, engage_mode, engage_pattern, session_mode, threads, priority FROM messaging_group_agents;
SELECT user_id, role, agent_group_id FROM user_roles ORDER BY role='owner' DESC;Also check .env for channel tokens and src/channels/index.ts for uncommented imports.
Categorize channels as: wired (has DB entities + messaging_group_agents row), configured but unwired (has credentials + barrel import, no DB entities), or not configured.
If the instance has no owner yet (SELECT COUNT(*) FROM user_roles WHERE role='owner' AND agent_group_id IS NULL returns 0), tell the user they should run /init-first-agent first — it stands up the first agent group, promotes the operator to owner, and verifies delivery end-to-end by having the agent DM them. Then return here for any additional channels/groups.
Delegate to /init-first-agent. It handles: channel choice, operator identity lookup, DM platform id resolution (with cold-DM or pair-code fallback), agent group creation, wiring, and the welcome DM. Return here afterward for any additional channels.
Wiring defaults (engage mode/pattern, threading, unknown_sender_policy) resolve through exactly two levels:
ChannelDefaults (separate DM and group contexts, plus a mentions capability) in its source file. The adapter copy is skill-installed and user-owned: to change a default install-wide, edit src/channels/<channel>.ts and restart. Declarations are never persisted to the DB.ncl wirings create / ncl messaging-groups create, the register wizard step, the approval-card flow, /init-first-agent) fills omitted fields from the declaration and stores the result on the row. Pass explicit flags to override one wiring.There is no third level: existing rows are never re-resolved, so editing a declaration only affects wirings created afterward. The one exception is the threads column, which stays live — NULL means "inherit the declaration at message time".
Channels with no declaration (stale adapter copies) fall back to the legacy behavior; run /update-skills to pull current adapters.
ncl requires the host service to be running (it connects over a Unix socket):
ncl messaging-groups create --channel-type <type> --platform-id "<id>" --name "<name>" [--is-group 1]
ncl wirings create --messaging-group-id <mg-id> --agent-group-id <ag-id> [--session-mode <mode>]Omitted engage_mode/engage_pattern/unknown_sender_policy come from the adapter declaration for the right context (DM vs group). Run ncl wirings help / ncl messaging-groups help for the full flag list.
--threads)ncl wirings create/update ... --threads true|false controls whether platform thread ids are honored for this wiring. true (in groups) means per-thread sessions and in-thread replies/typing/cards; false collapses to a flat session with top-level replies. Omitted = NULL = inherit the channel declaration. A wiring can disable threads on a threaded platform (Slack, Discord, GitHub), never enable them on a non-threaded one.
Two consequences to warn the user about:
threads on a live wiring orphans existing per-thread sessions (or splinters a shared one) — history stays in the old sessions; new messages start fresh ones.mention-sticky needs threads: sticky engagement is keyed on per-thread session existence, so with resolved threads off it would engage once and never disengage. Creation and update coerce mention-sticky → mention (with a warning) when the effective thread policy is off.Each declaration states which mention signal the adapter emits: platform (real platform mentions), dm-only (only DMs are flagged), or never. On a mentions: 'never' channel (Linear OAuth apps, WhatsApp personal-number mode, Emacs), mention/mention-sticky wirings are inert — they can never engage — and ncl rejects them at create/update with an error citing the declaration. For groups on those channels, use a name pattern instead:
ncl wirings update <id> --engage-mode pattern --engage-pattern '(?i)^@?<Name>\b'Renaming an agent group does not update stored patterns. Declared group patterns containing {name} are substituted with the agent group's name at creation and stored literally — after ncl groups update <id> --name <NewName>, audit that group's wirings for patterns still matching the old name and update them.
For each unwired channel:
## Channel Info for terminology, how-to-find-id, typical-use, and default-isolationPresent a multiple-choice with a contextual recommendation. The three options:
--session-mode "agent-shared" + existing folder) — all messages land in one session. Recommend for webhook + chat combos (GitHub + Slack).--session-mode "shared" + existing folder) — shared workspace/memory, independent threads. Recommend for same user across platforms.--folder) — full isolation. Recommend when different people are involved.Use the channel's typical-use and default-isolation fields to pick the recommendation. Offer to explain more if the user is unsure — reference docs/isolation-model.md for the detailed explanation.
pnpm exec tsx setup/index.ts --step register -- \
--platform-id "<id>" --name "<name>" \
--folder "<folder>" --channel "<type>" \
--session-mode "<shared|agent-shared|per-thread>" \
--assistant-name "<name>"The register step creates the agent group (reusing it if the folder already exists), the messaging group, and the wiring row. createMessagingGroupAgent auto-creates the companion agent_destinations row so the agent can address the channel by name.
Omitted engage/policy fields default from the channel adapter's declaration (see "Channel Defaults" above). Optional overrides: --trigger "<regex>" (explicit engage pattern), --engage-mode <pattern|mention|mention-sticky>, --is-group <true|false>, --unknown-sender-policy <strict|request_approval|public>. Don't pick a mention mode on a channel whose declaration says mentions: 'never' — it can never engage there.
New agent groups are created on the instance default provider (DEFAULT_AGENT_PROVIDER in .env, or claude when unset). To run a group on a different provider, switch it after creation with ncl groups config update --provider <name> (e.g. codex).
For separate agents, also ask for a folder name and optionally a different assistant name.
When adding another group/chat on an already-configured platform, open
.claude/skills/add-<channel>/SKILL.md, follow its current group-discovery
instructions, ask the isolation question, then register. Channel-specific
procedures belong in that channel's skill, not here.
messaging_group_agents entry, create a new oneagent_destinations row created for the old wiring is NOT automatically removed — if you want the old agent to stop seeing the channel as a named target, delete it from agent_destinations manually.Installs that approved WhatsApp group registration cards before the channel-defaults model wired those groups as engage_mode='pattern', engage_pattern='.' — respond-to-everything (the card flow couldn't tell groups from DMs on non-threaded platforms). Check once:
pnpm exec tsx scripts/q.ts data/v2.db "SELECT mga.id, mg.platform_id, mg.name FROM messaging_group_agents mga JOIN messaging_groups mg ON mg.id = mga.messaging_group_id WHERE mg.channel_type='whatsapp' AND mg.is_group=1 AND mga.engage_mode='pattern' AND mga.engage_pattern='.'"For any hit the operator didn't deliberately configure as always-on, offer the repair options in /add-whatsapp's "Migration audit" section (flip to mention/name-pattern engagement, or delete the wiring).
Display a readable summary showing:
messaging_group_agents)SELECT user_id, role, agent_group_id FROM user_roles ORDER BY role='owner' DESC© nanocoai, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/manage-channels of nanocoai/nanoclaw.
Open the folder on GitHubat commit af699e7
NanoClaw Channel Wiring next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| NanoClaw Channel Wiring this skillnanocoai/nanoclaw | 31k | — | ~2.6k | Automated safety check: Notes | MIT | |
| Discord Channel Accessanthropics/claude-plugins-official | 38k | 1 repos | ~1.1k | Automated safety check: Pass | Apache-2.0 | |
| Telegram Channel Setupanthropics/claude-plugins-official | 38k | 1 repos | ~1.1k | Automated safety check: Notes | Apache-2.0 | |
| Weixin Accessqufei1993/cc-weixin | 154 | — | ~372 | Automated safety check: Pass | MIT | |
| SetupRich627/whatsapp-claude-plugin | 103 | — | ~1.4k | Automated safety check: Notes | Apache-2.0 | |
| Feishu Doc Writerhyperlist/feishu-multi-agent | 273 | — | ~505 | Automated safety check: Pass | None |
anthropics/claude-plugins-official
Manages who can reach Claude through a Discord channel: approve pairing codes, edit the allowlist and set direct-message and group policy.
anthropics/claude-plugins-official
Saves a Telegram bot token for the Telegram channel plugin and reviews who may message the bot, steering the policy toward a fixed allowlist.
qufei1993/cc-weixin
Manage WeChat access control (pairing codes and allowlist). An agent skill from qufei1993/cc-weixin.
Rich627/whatsapp-claude-plugin
Interactive WhatsApp channel onboarding — guides through device linking, phone number config, and access control setup
hyperlist/feishu-multi-agent
Feishu document writing skill. An agent skill from hyperlist/feishu-multi-agent.
kangarooking/kangarooking-skills
Generate high-potential viral title candidates for content across WeChat public account articles, X/Twitter posts, YouTube videos, Bilibili videos, and similar content platforms.
nanocoai/nanoclaw
Installs or refreshes Iron Proxy and its Iron Control web console for NanoClaw, with a local Docker setup, database, credentials and a human approval bridge.
nanocoai/nanoclaw
Installs or refreshes OneCLI as the gateway provider for NanoClaw, copying the adapter files, registering the provider and running the setup script.
nanocoai/nanoclaw
Drives a web browser from the shell with the agent-browser CLI: open pages, read an element snapshot, click and fill by reference, grab text and screenshots.
nanocoai/nanoclaw
Installs the `dial` CLI and a credential in NanoClaw agent containers so chosen agents can send SMS, place AI voice calls and receive verification codes.
nanocoai/nanoclaw
Guides a conversational migration from an OpenClaw install to NanoClaw v2, carrying over identity, channel credentials, scheduled tasks and workspace files.
nanocoai/nanoclaw
Wires up an additional phone number onto an already-installed Dial channel, so one NanoClaw install answers SMS and AI voice calls on more than one line.
Categories
Connects messaging channels to NanoClaw agent groups, sets isolation and engagement defaults, and reports which channels are wired, unwired or not configured. The skill treats privilege as a property of users, not channels: there is no main channel, and any user can be granted owner or admin, globally or for one agent group. Messages from unknown senders are gated per messaging group by an `unknown_sender_policy` of strict, request_approval or public.
NanoClaw Channel Wiring fits situations like: wiring a newly added channel to an agent group; changing isolation levels or how an agent engages in a channel; auditing which channels are fully wired and which only have credentials; adding another messaging group to an existing install.
Run `npx skills add nanocoai/nanoclaw --skill manage-channels -a claude-code`. Or copy the skill folder (.claude/skills/manage-channels in nanocoai/nanoclaw) into .claude/skills/manage-channels in your project. Claude Code loads it when a task matches its description.
Run `npx skills add nanocoai/nanoclaw --skill manage-channels -a codex`. Or copy the skill folder (.claude/skills/manage-channels in nanocoai/nanoclaw) into .agents/skills/manage-channels in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add nanocoai/nanoclaw --skill manage-channels -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/manage-channels, .gemini/skills/manage-channels, .github/skills/manage-channels and .opencode/skills/manage-channels in your project.
Going by SKILL.md and its folder, NanoClaw Channel Wiring needs the command-line tools its instructions call (pnpm). Our summary lists: A NanoClaw installation with its central database at `data/v2.db`.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
NanoClaw Channel Wiring is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.6k tokens (SKILL.md is roughly 10k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with NanoClaw Channel Wiring: Discord Channel Access (anthropics/claude-plugins-official, 38k stars), Telegram Channel Setup (anthropics/claude-plugins-official, 38k stars), Weixin Access (qufei1993/cc-weixin, 154 stars) and Setup (Rich627/whatsapp-claude-plugin, 103 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
nanocoai (a GitHub organization) maintains it in nanocoai/nanoclaw, which has 30,906 GitHub stars. The repository holds 59 skills in this directory. The repository was last updated on October 9, 2026.
Source: nanocoai/nanoclaw on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.