Agent skill

NanoClaw Channel Wiring

by nanocoai in nanocoai/nanoclaw

Connects messaging channels to NanoClaw agent groups, sets isolation and engagement defaults, and reports which channels are wired, unwired or not configured.

MITAuto-check: notesProductivity & Automation

Install NanoClaw Channel Wiring

skills CLI
$ npx skills add nanocoai/nanoclaw --skill manage-channels -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install nanocoai/nanoclaw manage-channels --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ 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-src

Use ~/.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/

Facts

Skill name
manage-channels
GitHub stars
31k
Token cost
~2.6k tokens
SKILL.md length
1,163 words
Files
1
Skills in repo
59
Repo updated
First seen
Licence
MIT

At a glance

Connects messaging channels to NanoClaw agent groups, sets isolation and engagement defaults, and reports which channels are wired, unwired or not configured.

  • Works in 2 steps: Adapter declaration — each channel… → Per-wiring/per-mg values chosen at…
  • Wiring a newly added channel to an agent group
  • SKILL.md covers Assess Current State, First Channel (No Agent Groups…, Channel Defaults: The… and Wire New Channel, plus 4 more sections
  • Calls pnpm

What it does

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.

When your agent uses it

  • 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

Example prompts

  • “Show which of my NanoClaw channels are wired to an agent group and which are not.”
  • “Wire the new Telegram channel to the support agent group.”
  • “Make unknown senders in the Slack channel require approval before the agent replies.”

Requirements

  • A NanoClaw installation with its central database at `data/v2.db`

Workflow steps

2 steps, taken from the first numbered list in SKILL.md.

  1. Adapter declaration — each channel adapter declares ChannelDefaults (separate DM and group contexts, plus a mentions capability) in its…
  2. Per-wiring/per-mg values chosen at creation — every creation surface (ncl wirings create / ncl messaging-groups create, the register…

What it can do on your machine

Read from SKILL.md and the folder at commit af699e7. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Shell commands in SKILL.md call:

    • pnpm

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    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.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

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.

Always · name and description, kept in context so the agent knows when to use it
~42
When it runs · the whole SKILL.md, loaded when a task matches
~2.6k

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.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NoteMentions a .env fileSKILL.md:29
    Also check `.env` for channel tokens and `src/channels/index.ts` for uncommented imports.
  • NoteMentions a .env fileSKILL.md:113
    t provider (`DEFAULT_AGENT_PROVIDER` in `.env`, or `claude` when unset). To run a group on a different provider, switch

Automated 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.

SKILL.md

The full file from nanocoai/nanoclaw at commit af699e7, republished under its MIT licence (© nanocoai). 1,163 words, ~2,597 tokens.

Download SKILL.mdSave it as .claude/skills/manage-channels/SKILL.md (or your agent's skills folder).
name
manage-channels
description
Wire channels to agent groups, manage isolation levels, add new channel groups. Use after adding a channel, during setup, or standalone to reconfigure.

Manage Channels

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).

Assess Current State

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:

bash
pnpm exec tsx scripts/q.ts data/v2.db "<query>"
sql
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.

First Channel (No Agent Groups Exist)

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.

Channel Defaults: The Two-Level Model

Wiring defaults (engage mode/pattern, threading, unknown_sender_policy) resolve through exactly two levels:

  1. Adapter declaration — each channel adapter declares 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.
  2. Per-wiring/per-mg values chosen at creation — every creation surface (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.

Wiring via ncl

ncl requires the host service to be running (it connects over a Unix socket):

bash
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.

Threading override (--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:

  • Session identity: sessions are never deleted. Flipping 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.
Mention capability

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:

bash
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.

Show full SKILL.md (475 more words)Show less

Wire New Channel

For each unwired channel:

  1. Read its SKILL.md ## Channel Info for terminology, how-to-find-id, typical-use, and default-isolation
  2. Ask for the platform ID using the platform's terminology
  3. Ask the isolation question (see below)
  4. Register with the appropriate flags
Isolation Question

Present a multiple-choice with a contextual recommendation. The three options:

  • Same conversation (--session-mode "agent-shared" + existing folder) — all messages land in one session. Recommend for webhook + chat combos (GitHub + Slack).
  • Same agent, separate conversations (--session-mode "shared" + existing folder) — shared workspace/memory, independent threads. Recommend for same user across platforms.
  • Separate agent (new --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.

Register Command
bash
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.

Add Channel Group

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.

Change Wiring

  1. Show current wiring (agent_groups × messaging_group_agents)
  2. Ask which channel to move and to which agent group
  3. Delete the old messaging_group_agents entry, create a new one
  4. Note: existing sessions stay with the old agent group; new messages route to the new one. The agent_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.

One-Time Check: Legacy Mis-Wired WhatsApp Groups

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:

bash
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).

Show Configuration

Display a readable summary showing:

  • Agent groups with their wired channels (from messaging_group_agents)
  • Configured-but-unwired channels (credentials present, no DB entities)
  • Unconfigured channels
  • Privileged users: 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

Files

Just SKILL.md in .claude/skills/manage-channels of nanocoai/nanoclaw.

Open the folder on GitHubat commit af699e7

Compare with similar skills

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.

NanoClaw Channel Wiring compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
NanoClaw Channel Wiring this skillnanocoai/nanoclaw31k—~2.6kAutomated safety check: NotesMIT
Discord Channel Accessanthropics/claude-plugins-official38k1 repos~1.1kAutomated safety check: PassApache-2.0
Telegram Channel Setupanthropics/claude-plugins-official38k1 repos~1.1kAutomated safety check: NotesApache-2.0
Weixin Accessqufei1993/cc-weixin154—~372Automated safety check: PassMIT
SetupRich627/whatsapp-claude-plugin103—~1.4kAutomated safety check: NotesApache-2.0
Feishu Doc Writerhyperlist/feishu-multi-agent273—~505Automated safety check: PassNone

Similar skills

  • Discord Channel Access

    anthropics/claude-plugins-official

    Official

    Manages who can reach Claude through a Discord channel: approve pairing codes, edit the allowlist and set direct-message and group policy.

    38k GitHub starsUsed in 1 repo~1.1k tokens
    Productivity & AutomationAuto-check passed
  • Telegram Channel Setup

    anthropics/claude-plugins-official

    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.

    38k GitHub starsUsed in 1 repo~1.1k tokens
    Productivity & AutomationAuto-check: notes
  • Weixin Access

    qufei1993/cc-weixin

    Manage WeChat access control (pairing codes and allowlist). An agent skill from qufei1993/cc-weixin.

    154 GitHub stars~372 tokensUpdated 5 mo ago
    Productivity & AutomationAuto-check passed
  • Setup

    Rich627/whatsapp-claude-plugin

    Interactive WhatsApp channel onboarding — guides through device linking, phone number config, and access control setup

    103 GitHub stars~1.4k tokensUpdated today
    Productivity & AutomationAuto-check: notes
  • Feishu Doc Writer

    hyperlist/feishu-multi-agent

    Feishu document writing skill. An agent skill from hyperlist/feishu-multi-agent.

    273 GitHub stars~505 tokensUpdated 7 mo ago
    Productivity & AutomationAuto-check passed
  • Viral Title

    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.

    662 GitHub stars~1.7k tokensUpdated 1 mo ago
    Productivity & AutomationAuto-check passed

More from nanocoai/nanoclaw

All 59 skills in this repo
  • 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.

    31k GitHub stars~4.6k tokensUpdated yesterday
    Auto-check: notes
  • Installs or refreshes OneCLI as the gateway provider for NanoClaw, copying the adapter files, registering the provider and running the setup script.

    31k GitHub stars~1.1k tokensUpdated yesterday
    Auto-check: notes
  • Agent Browser

    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.

    31k GitHub starsUsed in 2 repos~1.6k tokens
    Auto-check passed
  • Add Dial Tool

    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.

    31k GitHub stars~4.8k tokensUpdated yesterday
    Auto-check passed
  • Guides a conversational migration from an OpenClaw install to NanoClaw v2, carrying over identity, channel credentials, scheduled tasks and workspace files.

    31k GitHub stars~6k tokensUpdated yesterday
    Auto-check: notes
  • 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.

    31k GitHub stars~1.5k tokensUpdated yesterday
    Auto-check passed

Questions about NanoClaw Channel Wiring

What does NanoClaw Channel Wiring do?

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.

When should I use NanoClaw Channel Wiring?

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.

How do I install NanoClaw Channel Wiring in Claude Code?

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.

How do I install NanoClaw Channel Wiring in Codex?

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.

Can I use NanoClaw Channel Wiring in Cursor, Gemini CLI or GitHub Copilot?

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.

What does NanoClaw Channel Wiring need to run?

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`.

Does NanoClaw Channel Wiring access the network?

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.

Is NanoClaw Channel Wiring safe to install?

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.

What licence does NanoClaw Channel Wiring use?

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.

How many tokens does NanoClaw Channel Wiring use?

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.

What are the alternatives to NanoClaw Channel Wiring?

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.

Who maintains NanoClaw Channel Wiring?

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.