Skip to main content

What Are Skills?

Skills are code transformations that modify your NanoClaw Pro installation to add capabilities. Instead of maintaining a bloated codebase that supports every feature, skills let you compose exactly what you need.

Philosophy

Skills over features. Contributors don’t add features to the core codebase—they create skills that teach Claude Code how to transform your fork. You get clean code that does exactly what you need.

How Skills Work

A skill is a folder in .claude/skills/ containing:
  • SKILL.md - Instructions for Claude Code
  • Files to add (new code)
  • Modification intents (changes to existing code)
  • Test files (validation)
When you apply a skill, Claude Code:
  1. Reads the skill instructions
  2. Adds new files to your project
  3. Modifies existing files as needed
  4. Installs dependencies
  5. Guides you through configuration
  6. Tests the changes

Applying Skills

Skills are applied using slash commands in Claude Code:
/add-whatsapp
Or programmatically:
npx tsx scripts/apply-skill.ts .claude/skills/add-whatsapp
After applying a skill, rebuild and restart:
npm run build
launchctl kickstart -k gui/$(id -u)/com.nanoclaw  # macOS
systemctl --user restart nanoclaw                 # Linux

Available Skills

Setup & Configuration

First-time installation and configurationRuns all setup steps:
  • Install Node.js and dependencies
  • Choose and configure container runtime (Docker or Apple Container)
  • Set up Claude authentication
  • Configure messaging channels
  • Set mount allowlist
  • Start background service
/setup
Interactive customization wizardAsks questions to understand what you want, then:
  • Applies appropriate skills
  • Makes direct code changes
  • Suggests next steps
/customize
Container debugging and troubleshootingHelps diagnose issues with:
  • Container runtime
  • Channel authentication
  • Message routing
  • Scheduled tasks
/debug

Messaging Channels

Each channel is installed as a separate skill. Channels self-register at startup when their credentials are present.
WhatsApp messaging via QR code or pairing codeAdds:
  • src/channels/whatsapp.ts - WhatsApp channel implementation
  • src/whatsapp-auth.ts - Authentication script
  • Baileys library for WhatsApp protocol
Supports:
  • QR code authentication (browser or terminal)
  • Pairing code authentication (for headless servers)
  • Group chat sync
  • Message catching up (reads conversation context)
/add-whatsapp
Telegram bot integration via Bot APIAdds:
  • src/channels/telegram.ts - Telegram channel implementation
  • Bot token authentication via @BotFather
  • Group and DM support
/add-telegram
Slack workspace integrationAdds:
  • src/channels/slack.ts - Slack channel implementation
  • Socket Mode for real-time messaging
  • Thread support
/add-slack
Requires Slack app creation. See SLACK_SETUP.md.
Discord server integrationAdds:
  • src/channels/discord.ts - Discord channel implementation
  • Bot token authentication
  • Channel and DM support
/add-discord
Gmail integration for email-based communicationAdds:
  • Gmail API client
  • OAuth authentication
  • Email sending and receiving
/add-gmail

Media & Content Processing

Transcribe voice messages using Whisper APIModifies:
  • src/channels/whatsapp.ts - Adds voice message handling
Adds:
  • src/transcription.ts - Whisper API integration
  • Automatic transcription of voice messages
  • Text appended to message for Claude to read
/add-voice-transcription
Requires OPENAI_API_KEY in .env.
Use local Whisper instead of API for transcriptionModifies:
  • src/transcription.ts - Switches to local Whisper binary
Requires local whisper installation. Free alternative to API.
/use-local-whisper
Extract text from PDF attachmentsAdds:
  • container/skills/pdf-reader/ - PDF text extraction tool
  • Automatic PDF processing in messages
Claude can read PDFs sent in chat.
/add-pdf-reader
Analyze images using Claude’s vision capabilitiesModifies:
  • src/container-runner.ts - Adds image passing to agent
  • src/index.ts - Downloads and caches images
Claude can see and describe images sent in messages.
/add-image-vision

Advanced Features

Enable morning and afternoon check-ins with memoryAdds:
  • Morning check-in (9am): “What did you work on yesterday? What are you working on today?”
  • Afternoon check-in (4pm): Surfaces follow-ups, offers to draft messages
  • Dynamic reminders from natural language (“my friend’s birthday is Monday”)
  • qmd integration for semantic memory search
This is what makes NanoClaw Pro “Pro”.
/proactive-agent
Agent Swarms - collaborative multi-agent teamsEnables spinning up multiple specialized agents that collaborate:
@Andy spin up a team: researcher, writer, and editor.
Research AI agent frameworks, write a blog post, and edit it.
First personal AI assistant to support agent swarms.
/add-parallel
Switch from Docker to Apple Container runtime (macOS only)Modifies:
  • src/container-runtime.ts - Runtime detection and commands
  • src/container-runner.ts - Mount and exec syntax
  • container/build.sh - Build commands
  • container/Dockerfile - Image syntax
Apple Container is lighter weight and native to macOS.
/convert-to-apple-container
Post, reply, like, and retweet on X/TwitterAdds:
  • Browser automation for X
  • Cookie-based authentication (no API key needed)
  • Full tweet interaction capabilities
/x-integration
Run local LLMs via Ollama for specific tasksAdds:
  • MCP server for Ollama
  • Tool for Claude to invoke local models
  • Useful for privacy-sensitive tasks
/add-ollama-tool

Development & Maintenance

Merge upstream NanoClaw updates into your customized forkSafely brings in bug fixes and improvements from the upstream NanoClaw repository without overwriting your customizations.
/update-nanoclaw
Load Qodo coding rules before making changesFetches organization and repository coding standards from Qodo, ensuring code changes follow team conventions.
/get-qodo-rules
Fetch and resolve Qodo PR review issuesInteractively or batch-fix code review issues flagged by Qodo.
/qodo-pr-resolver

Creating Custom Skills

Want to contribute a skill? Here’s the structure:
.claude/skills/your-skill-name/
├── SKILL.md                    # Instructions for Claude Code
├── manifest.yaml               # Metadata and dependencies
├── add/                        # New files to add
│   └── src/your-feature.ts
├── modify/                     # Changes to existing files
│   └── src/index.ts.intent.md
└── tests/                      # Validation tests
    └── your-feature.test.ts

SKILL.md Format

Write instructions that Claude Code can follow:
---
name: your-skill-name
description: Short description of what this skill does
---

# Your Skill Name

This skill adds [capability] to NanoClaw Pro.

## Phase 1: Pre-flight

Check if already installed:
```bash
test -f src/your-feature.ts && echo "Installed" || echo "Not installed"

Phase 2: Install Code

Apply the skill files:
npx tsx scripts/apply-skill.ts .claude/skills/your-skill-name

Phase 3: Configure

AskUserQuestion: What configuration do you need? [Guide through setup steps…]

Phase 4: Verify

Test the integration:
npm run build

### Best Practices for Skills

<Steps>
  <Step title="Make skills composable">
    Skills should work independently and alongside other skills. Don't assume specific configurations.
  </Step>
  
  <Step title="Use AskUserQuestion for configuration">
    Never prompt in stdout—use the structured `AskUserQuestion` tool so the skill works in both interactive and automated modes.
  </Step>
  
  <Step title="Detect existing state">
    Check if the skill is already applied before making changes. Support re-running safely.
  </Step>
  
  <Step title="Provide clear error messages">
    When something fails, explain what went wrong and how to fix it.
  </Step>
  
  <Step title="Document removal">
    Include instructions for removing the skill if users want to uninstall it.
  </Step>
</Steps>

## Skill vs. Direct Code Change?

Use this decision tree:

<Steps>
  <Step title="Is it a reusable feature others might want?">
    Yes → Create a skill and contribute it
    
    No → Make direct code changes
  </Step>
  
  <Step title="Does it require multiple files or dependencies?">
    Yes → Create a skill
    
    No → Direct code change is simpler
  </Step>
  
  <Step title="Will it be updated or maintained separately?">
    Yes → Create a skill for easier updates
    
    No → Direct code change
  </Step>
</Steps>

## Next Steps

<CardGroup cols={2}>
  <Card title="Configuration Reference" icon="gear" href="/customization/configuration">
    Environment variables and settings
  </Card>
  <Card title="Container Configuration" icon="container-storage" href="/customization/container-config">
    Mount additional directories and configure isolation
  </Card>
</CardGroup>

Build docs developers (and LLMs) love