customize
SKILL.md
NanoClaw Customization
This skill helps users add capabilities or modify behavior. Use AskUserQuestion to understand what they want before making changes.
Workflow
- Understand the request - Ask clarifying questions
- Plan the changes - Identify files to modify. If a skill exists for the request (e.g.,
/add-telegramfor adding Telegram), invoke it instead of implementing manually. - Implement - Make changes directly to the code
- Test guidance - Tell user how to verify
Key Files
| File | Purpose |
|---|---|
src/index.ts |
Orchestrator: state, message loop, agent invocation |
src/channels/whatsapp.ts |
WhatsApp connection, auth, send/receive |
src/ipc.ts |
IPC watcher and task processing |
src/router.ts |
Message formatting and outbound routing |
src/types.ts |
TypeScript interfaces (includes Channel) |
src/config.ts |
Assistant name, trigger pattern, directories |
src/db.ts |
Database initialization and queries |
src/whatsapp-auth.ts |
Standalone WhatsApp authentication script |
groups/CLAUDE.md |
Global memory/persona |
Common Customization Patterns
Adding a New Input Channel (e.g., Telegram, Slack, Email)
Questions to ask:
- Which channel? (Telegram, Slack, Discord, email, SMS, etc.)
- Same trigger word or different?
- Same memory hierarchy or separate?
- Should messages from this channel go to existing groups or new ones?
Implementation pattern:
- Create
src/channels/{name}.tsimplementing theChannelinterface fromsrc/types.ts(seesrc/channels/whatsapp.tsfor reference) - Add the channel instance to
main()insrc/index.tsand wire callbacks (onMessage,onChatMetadata) - Messages are stored via the
onMessagecallback; routing is automatic viaownsJid()
Adding a New MCP Integration
Questions to ask:
- What service? (Calendar, Notion, database, etc.)
- What operations needed? (read, write, both)
- Which groups should have access?
Implementation:
- Add MCP server config to the container settings (see
src/container-runner.tsfor how MCP servers are mounted) - Document available tools in
groups/CLAUDE.md
Changing Assistant Behavior
Questions to ask:
- What aspect? (name, trigger, persona, response style)
- Apply to all groups or specific ones?
Simple changes → edit src/config.ts
Persona changes → edit groups/CLAUDE.md
Per-group behavior → edit specific group's CLAUDE.md
Adding New Commands
Questions to ask:
- What should the command do?
- Available in all groups or main only?
- Does it need new MCP tools?
Implementation:
- Commands are handled by the agent naturally — add instructions to
groups/CLAUDE.mdor the group'sCLAUDE.md - For trigger-level routing changes, modify
processGroupMessages()insrc/index.ts
Changing Deployment
Questions to ask:
- Target platform? (Linux server, Docker, different Mac)
- Service manager? (systemd, Docker, supervisord)
Implementation:
- Create appropriate service files
- Update paths in config
- Provide setup instructions
After Changes
Always tell the user:
# Rebuild and restart
npm run build
# macOS:
launchctl unload ~/Library/LaunchAgents/com.nanoclaw.plist
launchctl load ~/Library/LaunchAgents/com.nanoclaw.plist
# Linux:
# systemctl --user restart nanoclaw
Example Interaction
User: "Add Telegram as an input channel"
- Ask: "Should Telegram use the same @Andy trigger, or a different one?"
- Ask: "Should Telegram messages create separate conversation contexts, or share with WhatsApp groups?"
- Create
src/channels/telegram.tsimplementing theChannelinterface (seesrc/channels/whatsapp.ts) - Add the channel to
main()insrc/index.ts - Tell user how to authenticate and test
Weekly Installs
3
Repository
qwibitai/nanoclawGitHub Stars
22.4K
First Seen
11 days ago
Security Audits
Installed on
amp3
cline3
opencode3
cursor3
kimi-cli3
codex3