---name: setupdescription: Run initial NanoClaw setup. Use when user wants to install dependencies, authenticate messaging channels, register their main channel, or start the background services.---# NanoClaw Setup**Principle:** When something is broken or missing, fix it. Don't tell the user to go fix it themselves unless it genuinely requires their manual action.**UX Note:** Use `AskUserQuestion` for all user-facing questions.## 1. Bootstrap (Node.js + Dependencies)Run `bash setup.sh` and parse the status block.- If NODE_OK=false → Node.js is missing or too old. Use `AskUserQuestion: Would you like me to install Node.js 22?` - macOS: `brew install node@22` or install nvm - Linux: `curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -`...
Comprehensive troubleshooting for each failure mode:
**If BUILD_OK=false:** Read `logs/setup.log` tail for the build error.- Cache issue: `docker builder prune -f` and retry- Dockerfile syntax: diagnose from log and fix, then retry**If TEST_OK=false but BUILD_OK=true:** The image built but won't run.- Check logs — common cause is runtime not fully started- Wait a moment and retry the test
## Phase 1: Pre-flight### Check if already appliedCheck git history for a previous merge of skill/telegram.### Ask the userAskUserQuestion: Should Telegram replace existing channels or run alongside them?- **Replace existing channels** - sets TELEGRAM_ONLY=true- **Alongside** - both channels activeAskUserQuestion: Do you have a Telegram bot token, or do you need tocreate one?
Test the connection:Tell the user to send a message to their registered Telegram chat. The bot should respond within a few seconds.Check logs if needed:
---name: customizedescription: Add new capabilities or modify NanoClaw behavior. Use when user wants to add channels, change triggers, add integrations, or make any other customizations.---# NanoClaw Customization## Workflow1. **Understand the request** - Ask clarifying questions2. **Plan the changes** - Identify files to modify3. **Implement** - Make changes directly to the code4. **Test guidance** - Tell user how to verify## Common Customization Patterns### Adding a New Input ChannelQuestions to ask:- Which channel? (Telegram, Slack, Discord, email, SMS, etc.)- Same trigger word or different?- Same memory hierarchy or separate?Implementation pattern:1. Create `src/channels/{name}.ts` implementing the `Channel` interface2. Add the channel instance to `main()` in `src/index.ts`3. Messages are stored via the `onMessage` callback
### Adding a New Input ChannelQuestions to ask:- Which channel?- Same trigger word or different?- Same memory hierarchy or separate?Implementation pattern:1. Create `src/channels/{name}.ts`2. Add to `main()` in `src/index.ts`3. Wire callbacks
The skill’s SKILL.md in the marketplace includes a reference to a setup guide:From SKILL.md:
### Create Slack App (if needed)If the user doesn't have a Slack app, share [SLACK_SETUP.md](SLACK_SETUP.md) which has step-by-step instructions with screenshots guidance, troubleshooting, and a token reference table.Quick summary of what's needed:1. Create a Slack app at api.slack.com/apps2. Enable Socket Mode and generate an App-Level Token3. Subscribe to bot events: `message.channels`, `message.groups`, `message.im`4. Add OAuth scopes: `chat:write`, `channels:history`, etc.5. Install to workspace and copy the Bot Token
## Known Limitations- **Threads are flattened** — Threaded replies are delivered to the agent as regular channel messages. The agent sees them but has no awareness they originated in a thread. Responses always go to the channel, not back into the thread.- **No typing indicator** — Slack's Bot API does not expose a typing indicator endpoint. The `setTyping()` method is a no-op.- **Message splitting is naive** — Long messages are split at a fixed 4000-character boundary, which may break mid-word or mid-sentence.- **No file/image handling** — The bot only processes text content. File uploads, images, and rich message blocks are not forwarded to the agent.
The /claw skill installs a Python CLI tool that runs NanoClaw agents from the terminal — no chat app required. It’s an operational skill on main with a bundled script.
This lets the CLI kill the container immediately once output is received, rather than waiting for the Node.js event loop to exit naturally.Learn more about the claw CLI in the command-line interface guide.
</Tab><Tab title="Non-blocking async">```markdown### Deep Research - DO NOT BLOCK!**After permission - Use scheduler instead:**1. Create the task using `mcp__parallel-task__create_task_run`2. Get the `run_id` from the response3. Create a polling scheduled task:
Prompt: “Check Parallel AI task run [run_id] and send results
when ready.
Use the Parallel Task MCP to check the task status
If status is ‘completed’, extract the results
Send results with mcp__nanoclaw__send_message
Use mcp__nanoclaw__cancel_task to remove the polling task
If status is still ‘running’, do nothing (task will run again
in 30s).”Schedule: interval every 30 seconds
Context mode: isolated
4. Send acknowledgment with tracking link5. Exit immediately - scheduler handles the rest
### 5. Add Usage Instructions to CLAUDE.md## Web Research Tools### Quick Web Search (`mcp__parallel-search__search`)**When to use:** Freely use for factual lookups, current events**Permission:** Not needed - use whenever it helps### Deep Research (`mcp__parallel-task__create_task_run`)**When to use:** Comprehensive analysis, complex topics**Permission:** ALWAYS use `AskUserQuestion` before using this tool**How to ask permission:**
AskUserQuestion: I can do deep research on [topic] using Parallel’s
Task API. This will take 2-5 minutes and provide comprehensive analysis.
Should I proceed?