Help us improve
Share bugs, ideas, or general feedback.
From claudeclaw
Adds new capabilities or modifies ClaudeClaw behavior. Supports adding channels (Telegram, Slack, email), changing triggers, integrations, and router changes. Interactive skill that asks questions to understand customization requests.
npx claudepluginhub sbusso/claudeclawHow this skill is triggered — by the user, by Claude, or both
Slash command
/claudeclaw:customizeThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
This skill helps users add capabilities or modify behavior. Use AskUserQuestion to understand what they want before making changes.
Performs first-time setup of a ClaudeClaw instance: installs dependencies, authenticates messaging channels, registers the main channel, and starts background services.
Conducts an interactive interview to understand goals and environment, then generates a tailored OpenClaw deployment plan with milestones, commands, and configurations.
Guides setting up external messaging channels (WhatsApp, Telegram, Discord, iMessage) for Claude Code agents via plugins. Useful for enabling communication outside the CLI.
Share bugs, ideas, or general feedback.
This skill helps users add capabilities or modify behavior. Use AskUserQuestion to understand what they want before making changes.
Check if .claude-plugin/plugin.json exists in cwd:
cat .claude-plugin/plugin.json 2>/dev/null | grep '"name": "claudeclaw"' && echo "DEVELOPER_MODE" || echo "PLUGIN_MODE"
If plugin mode, offer the user a choice via AskUserQuestion:
If "Fork to developer mode" is chosen, run the migration flow below. Otherwise, proceed with the normal workflow (limited to invoking existing skills like /add-slack, /add-telegram).
~/Code/claudeclaw)Service name: Derived from the directory name:
com.claudeclaw.<dirname>(macOS) /claudeclaw-<dirname>(Linux). For example, if cwd ismy-assistant, the service iscom.claudeclaw.my-assistant. Determine the correct service name before running service commands below.
launchctl unload ~/Library/LaunchAgents/com.claudeclaw.<dirname>.plistsystemctl --user stop claudeclaw-<dirname>git clone https://github.com/<username>/claudeclaw.git <clone-path>cp -r store groups .env <clone-path>/cp -r logs <clone-path>/sqlite3 <clone-path>/store/messages.db "DELETE FROM sessions"cd <clone-path> && npm install && npm run buildcd <clone-path> && git remote add upstream https://github.com/sbusso/claudeclaw.gitcd <clone-path> && npx tsx setup/index.ts --step servicecd <clone-path> && claude to use developer mode. Remove --plugin-dir from your Claude Code invocation."/add-telegram for adding Telegram), invoke it instead of implementing manually.| File | Purpose |
|---|---|
src/service.ts | Service entry: loads channels/extensions, starts message loop |
src/index.ts | Plugin entry: non-blocking, loaded by Claude Code |
src/orchestrator/message-loop.ts | Core loop: poll, trigger, queue, dispatch agents |
src/orchestrator/config.ts | STATE_ROOT, paths, trigger pattern, runtime selection |
src/orchestrator/channel-registry.ts | Channel self-registration |
src/orchestrator/extensions.ts | Extension system (IPC, DB schema, startup hooks) |
src/orchestrator/types.ts | TypeScript interfaces (Channel, RegisteredGroup, AgentConfig) |
src/orchestrator/db.ts | Database initialization and queries |
groups/CLAUDE.md | Global memory/persona |
Questions to ask:
Implementation pattern:
src/channels/{name}.ts implementing the Channel interface from src/orchestrator/types.ts (see src/channels/whatsapp.ts for reference)main() in src/index.ts and wire callbacks (onMessage, onChatMetadata)onMessage callback; routing is automatic via ownsJid()Questions to ask:
Implementation:
src/orchestrator/container-runner.ts for how MCP servers are mounted)groups/CLAUDE.mdQuestions to ask:
Simple changes → edit src/orchestrator/config.ts
Persona changes → edit groups/CLAUDE.md
Per-group behavior → edit specific group's CLAUDE.md
Questions to ask:
Implementation:
groups/CLAUDE.md or the group's CLAUDE.mdprocessGroupMessages() in src/index.tsQuestions to ask:
Implementation:
Always tell the user:
# Rebuild and restart
npm run build
# macOS:
launchctl unload ~/Library/LaunchAgents/com.claudeclaw.plist
launchctl load ~/Library/LaunchAgents/com.claudeclaw.plist
# Linux:
# systemctl --user restart claudeclaw
User: "Add Telegram as an input channel"
src/channels/telegram.ts implementing the Channel interface (see src/channels/whatsapp.ts)main() in src/index.ts