Agent skill

Migrate Slack Agents

by nanocoai in nanocoai/nanoclaw

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.

MITAuto-check: notesProductivity & Automation

Install Migrate Slack Agents

skills CLI
$ npx skills add nanocoai/nanoclaw --skill migrate-slack-agents -a claude-code

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

GitHub CLI
$ gh skill install nanocoai/nanoclaw migrate-slack-agents --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/migrate-slack-agents .claude/skills/migrate-slack-agents && 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
migrate-slack-agents
GitHub stars
31k
Used in
1 other repo
Token cost
~3.8k tokens
SKILL.md length
1,782 words
Files
1
Skills in repo
59
Repo updated
First seen
Licence
MIT

At a glance

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.

  • Works in 9 steps: Detect classic state → Inventory and propose the map → Install the current Slack agents payloads → …
  • /update-nanoclaw reports the Slack agents requirement
  • SKILL.md covers Phase 1: Detect classic state, Phase 1b: Offer the choice, Phase 2: Inventory and propose… and Phase 3: Install the current…, plus 6 more sections
  • Calls pnpm, git and bash; needs SLACK_BOT_TOKEN and SLACK_APP_TOKEN

What it does

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.

When your agent uses it

  • /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

Example prompts

  • “Check whether my NanoClaw Slack install is still on the classic single bot and offer the migration.”
  • “Migrate each of my agent groups to its own Slack app, and keep the classic setup for rollback.”

Requirements

  • A NanoClaw install with the Slack channel set up
  • Slack bot and app tokens in .env
  • Operator approval before cutover

Workflow steps

9 steps, taken from the step headings in SKILL.md.

  1. Detect classic state
  2. Inventory and propose the map
  3. Install the current Slack agents payloads
  4. Get provisioning authority
  5. Provision every existing group
  6. Recreate surfaces and clone behavior
  7. Verify before cutover
  8. Explicit cutover gate
  9. Resume and acknowledge the update

What it can do on your machine

Read from SKILL.md and the folder at commit 66f0823. 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
    • git
    • bash

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

  • Network

    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.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • SLACK_BOT_TOKEN
    • SLACK_APP_TOKEN
    • SLACK_SIGNING_SECRET
    • NANOCLAW_INSTALL_TOKEN
    • SLACK_MANAGER_TOKEN

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

Context cost

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.

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

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:35
    2. `.env` has a non-empty unsuffixed `SLACK_BOT_TOKEN` and either a non-empty
  • NoteMentions a .env fileSKILL.md:158
    `.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.

SKILL.md

The full file from nanocoai/nanoclaw at commit 66f0823, republished under its MIT licence (© nanocoai). 1,782 words, ~3,798 tokens.

Download SKILL.mdSave it as .claude/skills/migrate-slack-agents/SKILL.md (or your agent's skills folder).
name
migrate-slack-agents
description
Migrate a classic single-bot Slack install to one provisioned Slack app per existing agent group while preserving agent identities, workspaces, memory, and wiring behavior — or record the operator's choice to stay on classic, which remains supported. Use when /update-nanoclaw surfaces the Slack agents requirement, or standalone any time later.

Migrate classic Slack agents

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:

  • Never call create_agent or ncl groups create.
  • Never change an agent_groups.id or write under groups/<folder>/.
  • Never merge the channels branch; fetch and copy skill-owned files only.
  • Never print token values. Show key names and masked presence only.
  • Keep classic rows, credentials, and the shared Slack app available for rollback until the operator explicitly approves cutover.

Phase 1: Detect classic state

Run from the NanoClaw project root. Read the central DB only through the sanctioned wrapper.

Classic state requires all four signals:

  1. src/channels/index.ts contains the Slack barrel import import './slack.js';.

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

  3. This query returns at least one row:

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

Phase 1b: Offer the choice

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-agents later 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.

Phase 2: Inventory and propose the map

Before any mutation, capture every classic surface and its complete behavior:

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

  • agent group id, name, folder, and chosen slug;
  • every old messaging-group id, type, platform id, and destination name;
  • the full old wiring row and unknown-sender policy;
  • the proposed 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.

Phase 3: Install the current Slack agents payloads

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:

bash
source setup/lib/channels-remote.sh
channels_remote="$(resolve_channels_remote)"
git fetch "$channels_remote" channels

From $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:

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

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

Phase 4: Get provisioning authority

Pause and ask the operator to choose and complete one authority path:

  1. Managed broker — enroll/validate the registry install token, then have the operator connect the intended Slack workspace through the broker OAuth flow. The flow accepts NANOCLAW_INSTALL_TOKEN or the enrolled account.
  2. Direct Slack — the operator supplies a valid 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.

Phase 5: Provision every existing group

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:

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

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

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

Phase 6: Recreate surfaces and clone behavior

For each old wiring:

  • Channel: the operator or an authorized Slack API caller must invite the new bot to the existing channel. Use the same channel platform_id.
  • DM: use the operator DM created by the finish script. Every other user must open a new DM with the new bot; use that new DM id.
  • MPIM: recreate the membership with the new bot. Slack forks it to a new conversation id; use the new 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.

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

  • DM 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.
  • MPIM membership changes fork conversations (new IDs).
  • Existing sessions stay on the old rows (session history does not transfer — new instances start fresh sessions).
  • Destination names collide → suffixed (reconcile deliberately, preserve the original local name where the old wiring is retired).

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.

Phase 7: Verify before cutover

Restart once after all apps and rows exist:

bash
bash setup/lib/restart.sh

Do not proceed until all checks pass:

  • every slack-<slug> instance authenticates after restart; confirm with instance-specific startup logs and Slack auth.test without printing tokens;
  • the operator can DM every agent and receive the response from the new bot;
  • each new bot is invited to every mapped channel, and an explicit mention of that bot reaches only the expected existing agent group;
  • controlled channel tests show no duplicate responders from the classic and named bots;
  • the baseline and current agent_groups ids/folders are identical, every original groups/<folder>/ remains in place, and no persona, workspace, or memory file was rewritten;
  • every mapped sibling row and wiring matches the recorded behavior fields.

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.

Phase 8: Explicit cutover gate

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.

Phase 9: Resume and acknowledge the update

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:

bash
pnpm exec tsx "$stageRoot/scripts/update-nanoclaw.ts" ack \
  --project-root "$PWD" --id "$id" \
  --requirement "$requirement_id" --status succeeded

Then 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

Files

Just SKILL.md in .claude/skills/migrate-slack-agents of nanocoai/nanoclaw.

Open the folder on GitHubat commit 66f0823

Used in 1 other repository

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.

Compare with similar skills

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.

Migrate Slack Agents compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Migrate Slack Agents this skillnanocoai/nanoclaw31k1 repos~3.8kAutomated safety check: NotesMIT
Slackhuangruiteng/CS-Notes4k10 repos~578Automated safety check: PassMIT
Openloomi Connectorsmelandlabs/openloomi1k—~3.3kAutomated safety check: PassApache-2.0
Use Avibeavibe-bot/avibe620—~2.5kAutomated safety check: PassMIT
Agent Deep Linkscomposio-community/awesome-codex-skills17k—~513Automated safety check: PassNone
Chat SDKdatabuddy-analytics/Databuddy1.2k—~2.6kAutomated safety check: PassAGPL-3.0

Similar skills

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

    4k GitHub starsUsed in 10 repos~578 tokens
    Productivity & AutomationAuto-check passed
  • Openloomi Connectors

    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…

    1k GitHub stars~3.3k tokensUpdated 14 days ago
    Productivity & AutomationAuto-check passed
  • Use Avibe

    avibe-bot/avibe

    Safely inspect and modify local Avibe configuration, routing, runtime settings, watches, scheduled tasks, Avibe Cloud remote access, and operational state.

    620 GitHub stars~2.5k tokensUpdated today
    Productivity & AutomationAuto-check passed
  • Agent Deep Links

    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.

    17k GitHub stars~513 tokensUpdated 2 mo ago
    Productivity & AutomationAuto-check passed
  • Chat SDK

    databuddy-analytics/Databuddy

    Build multi-platform chat bots with Chat SDK (chat npm package).

    1.2k GitHub stars~2.6k tokensUpdated yesterday
    Agent WorkflowsAuto-check passed
  • Drives the traul CLI to sync, search and monitor messages from Slack, Telegram, Discord, Linear, Gmail, WhatsApp, Claude Code sessions and Markdown files.

    113 GitHub stars~3.9k tokensUpdated 5 mo ago
    Productivity & AutomationAuto-check: notes

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 2 days ago
    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 3 repos~1.6k tokens
    Auto-check passed
  • 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 2 days ago
    Auto-check: notes
  • 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 2 days ago
    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 starsUsed in 1 repo~1.5k tokens
    Auto-check passed
  • NanoClaw LLM Wiki Setup

    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.

    31k GitHub starsUsed in 1 repo~1.3k tokens
    Auto-check passed

Works with

Questions about Migrate Slack Agents

What does Migrate Slack Agents do?

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.

When should I use Migrate Slack Agents?

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.

How do I install Migrate Slack Agents in Claude Code?

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.

How do I install Migrate Slack Agents in Codex?

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.

Can I use Migrate Slack Agents 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 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.

What does Migrate Slack Agents need to run?

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.

Does Migrate Slack Agents access the network?

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.

Is Migrate Slack Agents 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 Migrate Slack Agents use?

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.

How many tokens does Migrate Slack Agents use?

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.

What are the alternatives to Migrate Slack Agents?

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.

Who maintains Migrate Slack Agents?

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.