Slack
huangruiteng/CS-Notes
A skill your agent uses when you need to control Slack from Clawdbot via the slack tool, including reacting to messages or pinning/unpinning items in Slack channels or DMs.
Switches a classic single-bot NanoClaw Slack install to one Slack app per agent group, or records a decision to stay on classic, without touching agent workspaces.
$ npx skills add nanocoai/nanoclaw --skill migrate-slack-agents -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install nanocoai/nanoclaw migrate-slack-agents --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/migrate-slack-agents .claude/skills/migrate-slack-agents && 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 "migrate-slack-agents" agent skill from https://github.com/nanocoai/nanoclaw/tree/main/.claude/skills/migrate-slack-agents into .claude/skills/migrate-slack-agents/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-slack-agents", 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/migrate-slack-agentsType 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 migrate-slack-agents -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install nanocoai/nanoclaw migrate-slack-agents --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/migrate-slack-agents .agents/skills/migrate-slack-agents && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "migrate-slack-agents" agent skill from https://github.com/nanocoai/nanoclaw/tree/main/.claude/skills/migrate-slack-agents into .agents/skills/migrate-slack-agents/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-slack-agents", 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 migrate-slack-agents -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install nanocoai/nanoclaw migrate-slack-agents --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/migrate-slack-agents .cursor/skills/migrate-slack-agents && 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 "migrate-slack-agents" agent skill from https://github.com/nanocoai/nanoclaw/tree/main/.claude/skills/migrate-slack-agents into .cursor/skills/migrate-slack-agents/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-slack-agents", 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/migrate-slack-agents--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 migrate-slack-agents -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install nanocoai/nanoclaw migrate-slack-agents --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/migrate-slack-agents .gemini/skills/migrate-slack-agents && 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 "migrate-slack-agents" agent skill from https://github.com/nanocoai/nanoclaw/tree/main/.claude/skills/migrate-slack-agents into .gemini/skills/migrate-slack-agents/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-slack-agents", 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 migrate-slack-agentsInstalls 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 migrate-slack-agents -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/migrate-slack-agents .github/skills/migrate-slack-agents && 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 "migrate-slack-agents" agent skill from https://github.com/nanocoai/nanoclaw/tree/main/.claude/skills/migrate-slack-agents into .github/skills/migrate-slack-agents/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-slack-agents", 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 migrate-slack-agents -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 migrate-slack-agents --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/migrate-slack-agents .opencode/skills/migrate-slack-agents && 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 "migrate-slack-agents" agent skill from https://github.com/nanocoai/nanoclaw/tree/main/.claude/skills/migrate-slack-agents into .opencode/skills/migrate-slack-agents/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-slack-agents", 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.
migrate-slack-agentsSwitches a classic single-bot NanoClaw Slack install to one Slack app per agent group, or records a decision to stay on classic, without touching agent workspaces.
The migration is optional and resumable, and the operator guides it. It first confirms classic state, which needs four signals: the Slack barrel import in src/channels/index.ts, a bot token plus an app token or signing secret in .env, wired groups in the central database, and at least one group lacking a complete named bot. With no classic state it stops as a harmless no-op, and with partial state it reports instead of guessing.
Each agent group then gets its own named Slack bot instance while keeping its identity, workspace, memory and wiring. Hard rules apply: never create an agent group, never change an agent group ID or write under the groups folders, never merge the channels branch, never print token values, and keep classic rows and credentials until you approve cutover. Choosing to stay on classic also satisfies the update requirement.
9 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 66f0823. 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:
pnpmgitbashFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use pnpm and git, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
SLACK_BOT_TOKENSLACK_APP_TOKENSLACK_SIGNING_SECRETNANOCLAW_INSTALL_TOKENSLACK_MANAGER_TOKENFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Migrate Slack Agents loads about 3.8k tokens when it runs. Until then it costs about 92 tokens; SKILL.md has 1,782 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.
2. `.env` has a non-empty unsuffixed `SLACK_BOT_TOKEN` and either a non-empty`.env` for `apps.manifest.create` + `apps.managedInstall`.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.
The full file from nanocoai/nanoclaw at commit 66f0823, republished under its MIT licence (© nanocoai). 1,782 words, ~3,798 tokens.
.claude/skills/migrate-slack-agents/SKILL.md (or your agent's skills folder).Turn every agent group wired through the classic instance='slack' adapter into
a named slack-<slug> bot without replacing the agent group. This is an
operator-guided, resumable data migration. It never creates an agent group and
never edits an agent workspace.
Migration is optional. Classic single-bot Slack remains fully supported; this skill first offers the choice, and staying on classic is a valid outcome that also satisfies the update requirement.
Hard invariants:
create_agent or ncl groups create.agent_groups.id or write under groups/<folder>/.channels branch; fetch and copy skill-owned files only.Run from the NanoClaw project root. Read the central DB only through the sanctioned wrapper.
Classic state requires all four signals:
src/channels/index.ts contains the Slack barrel import
import './slack.js';.
.env has a non-empty unsuffixed SLACK_BOT_TOKEN and either a non-empty
SLACK_APP_TOKEN or SLACK_SIGNING_SECRET. Check presence without echoing
values.
This query returns at least one row:
pnpm exec tsx scripts/q.ts data/v2.db "SELECT mg.id, mga.id, mga.agent_group_id FROM messaging_groups mg JOIN messaging_group_agents mga ON mga.messaging_group_id=mg.id WHERE mg.channel_type='slack' AND mg.instance='slack' ORDER BY mg.id, mga.agent_group_id"At least one wired group does not yet have complete named-instance coverage:
a stable slug, both SLACK_BOT_TOKEN_<SUFFIX> and
SLACK_APP_TOKEN_<SUFFIX>, that slug in SLACK_INSTANCES, and the expected
slack-<slug> messaging-group/wiring rows.
If the classic conjunction is absent and there is no partial state, stop with:
Nothing to migrate: this install does not have the classic shared-bot Slack state.
This is a successful no-op. If only some signals exist, make no changes; report the inconsistent or partial state instead of guessing. If every wired group already has complete named coverage, report that the migration is already complete and proceed only to the update-requirement acknowledgement in Phase 9.
Classic state confirmed does not mean migration is required. Present the decision to the operator before touching anything, in words like these:
Your classic Slack setup keeps working as-is — nothing forces this migration. The new Slack experience adds Slack agent spawning (create new agents straight from Slack, each with its own provisioned bot and avatar) plus UX improvements — per-agent identities, DM onboarding, multi-agent rooms. Say the word and we'll run the upgrade now — or run
/migrate-slack-agentslater manually.
If the operator chooses to stay on classic: make no changes, acknowledge the update requirement now using the Phase 9 ack command (the requirement records a decision, not only a completed migration), state that classic Slack continues working unchanged, and stop. Re-running this skill later re-offers the migration.
If the operator chooses to migrate, continue to Phase 2.
Before any mutation, capture every classic surface and its complete behavior:
pnpm exec tsx scripts/q.ts data/v2.db "SELECT ag.id, ag.name, ag.folder, mg.id, mg.platform_id, mg.name, mg.is_group, mg.unknown_sender_policy, mga.id, mga.engage_mode, mga.engage_pattern, mga.sender_scope, mga.ignored_message_policy, mga.session_mode, mga.threads, mga.priority FROM messaging_groups mg JOIN messaging_group_agents mga ON mga.messaging_group_id=mg.id JOIN agent_groups ag ON ag.id=mga.agent_group_id WHERE mg.channel_type='slack' AND mg.instance='slack' ORDER BY ag.id, mg.id, mga.priority DESC"
pnpm exec tsx scripts/q.ts data/v2.db "SELECT ad.agent_group_id, ad.local_name, ad.target_type, ad.target_id FROM agent_destinations ad JOIN messaging_groups mg ON ad.target_type='channel' AND ad.target_id=mg.id WHERE mg.channel_type='slack' AND mg.instance='slack' ORDER BY ad.agent_group_id, ad.local_name"Classify each surface as DM, channel, or MPIM. A D… conversation is a DM;
use Slack conversations.info with the classic bot token to distinguish an
MPIM from a channel when the stored id is ambiguous, returning only type/id
metadata and never the token.
Choose one stable, unique slug per agent group using the flow's normalization:
lowercase, replace non-alphanumerics with -, trim -, and add a numeric
suffix if an env key, SLACK_INSTANCES entry, or named DB instance is already
claimed by another group. Once any migration state exists, never change that
group's slug. Include the group commonly called “master”; it also gets its own
provisioned app.
Slugs are de-duplicated, but the Slack-visible bot display name comes from the agent group's name — and Slack allows two apps with identical display names in one workspace, leaving humans a mention picker with twins told apart only by avatar. If any two migrating groups share a display name, flag it in the dry-run and have the operator differentiate the names before provisioning; renaming at this point is free, while renaming after provisioning requires a manifest update.
Present a dry-run table with:
slack-<slug> surface and whether it is new, partial, or done.For a channel, map the old row to a sibling with the same platform_id and
instance='slack-<slug>'. DMs and MPIMs need new conversation ids as described
in Phase 6. Ask the operator to confirm the entire map before continuing.
First run /update-skills for the installed Slack channel only and require its
structured result to report success: true and refreshed. That refreshes the
barrel-registered /add-slack payload; it deliberately does not install
companion skills, credentials, wirings, or restarts.
Resolve the remote that points at nanocoai/nanoclaw the same fork-aware way
/update-skills does; do not assume it is origin. Fetch, but never merge:
source setup/lib/channels-remote.sh
channels_remote="$(resolve_channels_remote)"
git fetch "$channels_remote" channelsFrom $channels_remote/channels, materialize every file under
.claude/skills/slack-a2a-rooms/ and then every file under
.claude/skills/slack-agent-flow/ with git ls-tree + git show. Read each
new SKILL.md completely and apply its own Apply steps, in that order. The
order is load-bearing and mirrors setup/channels/companions.ts. The standard
driver may apply each document:
pnpm exec tsx setup/lib/skill-driver.ts .claude/skills/slack-a2a-rooms
pnpm exec tsx setup/lib/skill-driver.ts .claude/skills/slack-agent-flowDo not continue unless both report fully applied and their own build/tests
pass. Source contracts: .claude/skills/add-slack/SKILL.md,
setup/channels/companions.ts, and the two fetched companion SKILL.md files.
Pause and ask the operator to choose and complete one authority path:
NANOCLAW_INSTALL_TOKEN or the enrolled account.SLACK_MANAGER_TOKEN in
.env for apps.manifest.create + apps.managedInstall.Never select a path, workspace, or authority on the operator's behalf. Confirm
the intended workspace matches the classic bot's auth.test team before any
app is created. See src/provisioning/slack-app.ts and the fetched flow's
provision.ts for the two transport contracts.
Choose an existing classic Slack-wired group with a Slack approver as the
stable source group. It supplies the operator identity and authenticates the
origin slack instance; it is not cloned. For every inventoried group,
including the source/master group, run the installed finish primitive with
the recorded slug and defer room creation:
pnpm exec tsx scripts/slack-agent-flow-finish.ts \
--group <existing-agent-group-id> \
--name <stable-slug> \
--source-group <source-agent-group-id> \
--origin-instance slack \
--room noneDo not pass --restart yet. Run all groups first. The script reuses a complete
suffixed token pair, creates the operator DM and its wiring idempotently, and
does not create an agent group. On a partial pair, finish the existing Slack
app installation and retry the same slug; never choose a new slug or create a
second app. Ensure every completed slug is present exactly once in
SLACK_INSTANCES, including reuse cases. The exact CLI contract is documented
at the top of scripts/slack-agent-flow-finish.ts.
For each old wiring:
platform_id.Create each sibling through ncl messaging-groups create, copying name,
is_group, and unknown_sender_policy. Then use ncl wirings create with
--channel-type slack, the resolved --platform-id,
--instance slack-<slug>, and the existing --agent-group-id. Pass the
recorded --engage-mode, --engage-pattern, --sender-scope,
--ignored-message-policy, --session-mode, --priority, and thread policy;
omit --threads when the old value is NULL, otherwise pass true or false.
ncl messaging-groups create --channel-type slack --platform-id <new-or-reused-platform-id> --instance slack-<slug> --name "<recorded-name>" --is-group <0-or-1> --unknown-sender-policy <recorded-unknown-sender-policy>
ncl wirings create --channel-type slack --platform-id <new-or-reused-platform-id> --instance slack-<slug> --agent-group-id <existing-agent-group-id> --engage-mode <recorded-engage-mode> --sender-scope <recorded-sender-scope> --ignored-message-policy <recorded-ignored-policy> --session-mode <recorded-session-mode> --priority <recorded-priority>If a legacy pattern row has NULL engage_pattern, pass . to preserve its
match-all runtime behavior. Do not accept adapter defaults in place of any
recorded behavior field. These create operations are idempotent on their
natural keys/pairs and create the companion destination row.
Show these operator-visible warnings verbatim:
platform_ids are bot-specific (old DMs can't be copied; only the operator DM is auto-resolved — other DMs need re-opening per user).user_dms cache is not instance-aware.Keep suffixed destination names during the rollback window. If the operator
later retires an old wiring, reconcile with ncl destinations remove/add
instead of raw SQL, and transfer its original local name only after the old
target no longer needs it. src/db/messaging-groups.ts and
docs/db-central.md define the destination side effect and session behavior.
Restart once after all apps and rows exist:
bash setup/lib/restart.shDo not proceed until all checks pass:
slack-<slug> instance authenticates after restart; confirm with
instance-specific startup logs and Slack auth.test without printing tokens;agent_groups ids/folders are identical, every
original groups/<folder>/ remains in place, and no persona, workspace, or
memory file was rewritten;If a test fails, keep the classic app active, repair the partial named state, and resume from the ledger. Do not acknowledge the update requirement.
Show the verification result and ask the operator for explicit cutover confirmation. Only after approval, remove the classic bot from migrated channels and/or disable the unsuffixed Slack credentials so the shared adapter cannot answer alongside the named bots. Re-run the channel tests and require no duplicate responders.
Never delete or archive a Slack app automatically. Until this gate, keep the old rows, apps, and tokens intact. Detached old messaging-group rows preserve their wirings, sessions, and destinations, providing the rollback path: restore the unsuffixed credentials or re-invite the classic bot, restart, and disable the named instances if necessary.
The workflow is safe to re-run. Treat a group as complete only when its stable
slug has both suffixed tokens, a SLACK_INSTANCES entry, and matching DB
coverage for every mapped surface. Skip complete steps. Resume partial rows or
credentials with the same slug; the finish primitive reuses tokens and its
Slack/DB legs are get-before-create, so retries do not duplicate apps or rows.
Acknowledge the [BREAKING] requirement in exactly two cases: the operator
chose to stay on classic (Phase 1b), or Phases 7 and 8 passed. Use the
transaction id and requirement id supplied by /update-nanoclaw:
pnpm exec tsx "$stageRoot/scripts/update-nanoclaw.ts" ack \
--project-root "$PWD" --id "$id" \
--requirement "$requirement_id" --status succeededThen return control to /update-nanoclaw to finish and health-check. A failed
or half-migrated state remains pending; never acknowledge it merely to let the
update finish — either complete verification and cutover, or roll back to
classic and record the stay decision instead.
© 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/migrate-slack-agents of nanocoai/nanoclaw.
Open the folder on GitHubat commit 66f0823
We found 1 copy of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in nanocoai/nanoclaw, which our catalogue first saw on October 7, 2026.
Migrate Slack Agents 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 |
|---|---|---|---|---|---|---|
| Migrate Slack Agents this skillnanocoai/nanoclaw | 31k | 1 repos | ~3.8k | Automated safety check: Notes | MIT | |
| Slackhuangruiteng/CS-Notes | 4k | 10 repos | ~578 | Automated safety check: Pass | MIT | |
| Openloomi Connectorsmelandlabs/openloomi | 1k | — | ~3.3k | Automated safety check: Pass | Apache-2.0 | |
| Use Avibeavibe-bot/avibe | 620 | — | ~2.5k | Automated safety check: Pass | MIT | |
| Agent Deep Linkscomposio-community/awesome-codex-skills | 17k | — | ~513 | Automated safety check: Pass | None | |
| Chat SDKdatabuddy-analytics/Databuddy | 1.2k | — | ~2.6k | Automated safety check: Pass | AGPL-3.0 |
huangruiteng/CS-Notes
A skill your agent uses when you need to control Slack from Clawdbot via the slack tool, including reacting to messages or pinning/unpinning items in Slack channels or DMs.
melandlabs/openloomi
openloomi Connectors tools - manage the native 7 messaging integrations and pair with the composio skill for the 1000+ apps OAuth layer (Slack, Discord, X, Gmail, Outlook, Google…
avibe-bot/avibe
Safely inspect and modify local Avibe configuration, routing, runtime settings, watches, scheduled tasks, Avibe Cloud remote access, and operational state.
composio-community/awesome-codex-skills
Builds and checks clickable deep links that open a thread, file, folder or settings panel in tools like Codex, Cursor and VS Code, usually for sharing in Slack.
databuddy-analytics/Databuddy
Build multi-platform chat bots with Chat SDK (chat npm package).
dandaka/traul
Drives the traul CLI to sync, search and monitor messages from Slack, Telegram, Discord, Linear, Gmail, WhatsApp, Claude Code sessions and Markdown files.
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
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 or refreshes OneCLI as the gateway provider for NanoClaw, copying the adapter files, registering the provider and running the setup script.
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.
nanocoai/nanoclaw
Adds a persistent wiki knowledge base to a NanoClaw group following Karpathy's LLM Wiki pattern, with folders, a tailored container skill and a CLAUDE.md section.
Works with
Categories
Switches a classic single-bot NanoClaw Slack install to one Slack app per agent group, or records a decision to stay on classic, without touching agent workspaces. The migration is optional and resumable, and the operator guides it.env, wired groups in the central database, and at least one group lacking a complete named bot.
Migrate Slack Agents fits situations like: /update-nanoclaw reports the Slack agents requirement; giving each NanoClaw agent its own Slack app and identity; deciding whether to stay on the classic shared Slack bot.
Run `npx skills add nanocoai/nanoclaw --skill migrate-slack-agents -a claude-code`. Or copy the skill folder (.claude/skills/migrate-slack-agents in nanocoai/nanoclaw) into .claude/skills/migrate-slack-agents in your project. Claude Code loads it when a task matches its description.
Run `npx skills add nanocoai/nanoclaw --skill migrate-slack-agents -a codex`. Or copy the skill folder (.claude/skills/migrate-slack-agents in nanocoai/nanoclaw) into .agents/skills/migrate-slack-agents 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 migrate-slack-agents -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/migrate-slack-agents, .gemini/skills/migrate-slack-agents, .github/skills/migrate-slack-agents and .opencode/skills/migrate-slack-agents in your project.
Going by SKILL.md and its folder, Migrate Slack Agents needs the command-line tools its instructions call (pnpm, git and bash) and credentials named SLACK_BOT_TOKEN, SLACK_APP_TOKEN, SLACK_SIGNING_SECRET and NANOCLAW_INSTALL_TOKEN. Our summary lists: A NanoClaw install with the Slack channel set up; Slack bot and app tokens in .env; Operator approval before cutover.
SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. 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.
Migrate Slack Agents is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.8k tokens (SKILL.md is roughly 15k 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 Migrate Slack Agents: Slack (huangruiteng/CS-Notes, 4k stars), Openloomi Connectors (melandlabs/openloomi, 1k stars), Use Avibe (avibe-bot/avibe, 620 stars) and Agent Deep Links (composio-community/awesome-codex-skills, 17k 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,897 GitHub stars. The repository holds 59 skills in this directory. The repository was last updated on October 6, 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.