TinyClaw 🦞
Multi-agent, Multi-team, Multi-channel, 24/7 AI assistant
Run multiple teams of AI agents that collaborate with each other simultaneously with isolated workspaces.
tinyclaw.mp4
✨ Features
- ✅ Multi-agent - Run multiple isolated AI agents with specialized roles
- ✅ Multi-team collaboration - Agents hand off work to teammates via chain execution and fan-out
- ✅ Multi-channel - Discord, WhatsApp, and Telegram
- ✅ Team Observation - You can observe agent teams conversations via
tinyclaw team visualize - ✅ Multiple AI providers - Anthropic Claude and OpenAI Codex using existing subscriptions without breaking ToS
- ✅ Parallel processing - Agents process messages concurrently
- ✅ Live TUI dashboard - Real-time team visualizer for monitoring agent chains
- ✅ Persistent sessions - Conversation context maintained across restarts
- ✅ File-based queue - No race conditions, reliable message handling
- ✅ 24/7 operation - Runs in tmux for always-on availability
🚀 Quick Start
Prerequisites
- macOS or Linux
- Node.js v14+
- tmux
- Bash 4.0+ (macOS:
brew install bash) - Claude Code CLI (for Anthropic provider)
- Codex CLI (for OpenAI provider)
Installation
Option 1: One-line Install (Recommended)
curl -fsSL https://raw.githubusercontent.com/jlia0/tinyclaw/main/scripts/remote-install.sh | bashOption 2: From Release
wget https://github.com/jlia0/tinyclaw/releases/latest/download/tinyclaw-bundle.tar.gz tar -xzf tinyclaw-bundle.tar.gz cd tinyclaw && ./scripts/install.sh
Option 3: From Source
git clone https://github.com/jlia0/tinyclaw.git cd tinyclaw && npm install && ./scripts/install.sh
First Run
tinyclaw start # Runs interactive setup wizardThe setup wizard will guide you through:
- Channel selection - Choose Discord, WhatsApp, and/or Telegram
- Bot tokens - Enter tokens for enabled channels
- Workspace setup - Name your workspace directory
- Default agent - Configure your main AI assistant
- AI provider - Select Anthropic (Claude) or OpenAI
- Model selection - Choose model (e.g., Sonnet, Opus, GPT-5.3)
- Heartbeat interval - Set proactive check-in frequency
📱 Channel Setup Guides
Discord Setup
- Go to Discord Developer Portal
- Create application → Bot section → Create bot
- Copy bot token
- Enable "Message Content Intent"
- Invite bot using OAuth2 URL Generator
Telegram Setup
- Open Telegram → Search
@BotFather - Send
/newbot→ Follow prompts - Copy bot token
- Start chat with your bot
WhatsApp Setup
After starting TinyClaw, scan the QR code:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
WhatsApp QR Code
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[QR CODE HERE]
📱 Settings → Linked Devices → Link a Device
📋 Commands
Commands work with tinyclaw (if CLI installed) or ./tinyclaw.sh (direct script).
Core Commands
| Command | Description | Example |
|---|---|---|
start |
Start TinyClaw daemon | tinyclaw start |
stop |
Stop all processes | tinyclaw stop |
restart |
Restart TinyClaw | tinyclaw restart |
status |
Show current status and activity | tinyclaw status |
setup |
Run setup wizard (reconfigure) | tinyclaw setup |
logs [type] |
View logs (discord/telegram/whatsapp/queue/heartbeat/all) | tinyclaw logs queue |
attach |
Attach to tmux session | tinyclaw attach |
Agent Commands
| Command | Description | Example |
|---|---|---|
agent list |
List all configured agents | tinyclaw agent list |
agent add |
Add new agent (interactive) | tinyclaw agent add |
agent show <id> |
Show agent configuration | tinyclaw agent show coder |
agent remove <id> |
Remove an agent | tinyclaw agent remove coder |
agent reset <id> |
Reset agent conversation | tinyclaw agent reset coder |
agent provider <id> [provider] |
Show or set agent's AI provider | tinyclaw agent provider coder anthropic |
agent provider <id> <p> --model <m> |
Set agent's provider and model | tinyclaw agent provider coder openai --model gpt-5.3-codex |
Team Commands
| Command | Description | Example |
|---|---|---|
team list |
List all configured teams | tinyclaw team list |
team add |
Add new team (interactive) | tinyclaw team add |
team show <id> |
Show team configuration | tinyclaw team show dev |
team remove <id> |
Remove a team | tinyclaw team remove dev |
team visualize [id] |
Live TUI dashboard for team chains | tinyclaw team visualize dev |
Configuration Commands
| Command | Description | Example |
|---|---|---|
provider [name] |
Show or switch AI provider | tinyclaw provider anthropic |
provider <name> --model <model> |
Switch provider and model | tinyclaw provider openai --model gpt-5.3-codex |
model [name] |
Show or switch AI model | tinyclaw model opus |
reset |
Reset all conversations | tinyclaw reset |
channels reset <channel> |
Reset channel authentication | tinyclaw channels reset whatsapp |
Pairing Commands
Use sender pairing to control who can message your agents.
| Command | Description | Example |
|---|---|---|
pairing pending |
Show pending sender approvals (with pairing codes) | tinyclaw pairing pending |
pairing approved |
Show approved senders | tinyclaw pairing approved |
pairing list |
Show both pending and approved senders | tinyclaw pairing list |
pairing approve <code> |
Move a sender from pending to approved by code | tinyclaw pairing approve ABCD1234 |
pairing unpair <channel> <sender_id> |
Remove an approved sender from the allowlist | tinyclaw pairing unpair telegram 1234567 |
Pairing behavior:
- First message from unknown sender: TinyClaw generates a code and sends approval instructions.
- Additional messages while still pending: TinyClaw blocks silently (no repeated pairing message).
- After approval: messages from that sender are processed normally.
Update Commands
| Command | Description | Example |
|---|---|---|
update |
Update TinyClaw to latest version | tinyclaw update |
Note: If you are on v0.0.1 or v0.0.2, the update script was broken. Please re-install instead:
curl -fsSL https://raw.githubusercontent.com/jlia0/tinyclaw/main/scripts/remote-install.sh | bashYour settings and user data will be preserved.
Update Details
Auto-detection: TinyClaw checks for updates on startup (once per hour).
Manual update:
This will:
- Check for latest release
- Show changelog URL
- Download bundle
- Create backup of current installation
- Install new version
Disable update checks:
export TINYCLAW_SKIP_UPDATE_CHECK=1Messaging Commands
| Command | Description | Example |
|---|---|---|
send <message> |
Send message to AI manually | tinyclaw send "Hello!" |
send <message> |
Route to specific agent | tinyclaw send "@coder fix bug" |
In-Chat Commands
These commands work in Discord, Telegram, and WhatsApp:
| Command | Description | Example |
|---|---|---|
@agent_id message |
Route message to specific agent | @coder fix the bug |
@team_id message |
Route message to team leader | @dev fix the auth bug |
/agent |
List all available agents | /agent |
/team |
List all available teams | /team |
@agent_id /reset |
Reset specific agent conversation | @coder /reset |
/reset |
Reset conversation (WhatsApp/global) | /reset or !reset |
message |
Send to default agent (no prefix) | help me with this |
Note: The @agent_id routing prefix requires a space after it (e.g., @coder fix not @coderfix).
Access control note: before routing, channel clients apply sender pairing allowlist checks.
🤖 Using Agents
Routing Messages
Use @agent_id prefix to route messages to specific agents (see In-Chat Commands table above):
@coder fix the authentication bug
@writer document the API endpoints
@researcher find papers on transformers
help me with this ← goes to default agent (no prefix needed)
Agent Configuration
Agents are configured in .tinyclaw/settings.json:
{
"workspace": {
"path": "/Users/me/tinyclaw-workspace",
"name": "tinyclaw-workspace"
},
"agents": {
"coder": {
"name": "Code Assistant",
"provider": "anthropic",
"model": "sonnet",
"working_directory": "/Users/me/tinyclaw-workspace/coder"
},
"writer": {
"name": "Technical Writer",
"provider": "openai",
"model": "gpt-5.3-codex",
"working_directory": "/Users/me/tinyclaw-workspace/writer"
}
}
}Each agent operates in isolation:
- Separate workspace directory -
~/tinyclaw-workspace/{agent_id}/ - Own conversation history - Maintained by CLI
- Custom configuration -
.claude/,heartbeat.md(root),AGENTS.md - Independent resets - Reset individual agent conversations
📖 Learn more about agents
See docs/AGENTS.md for:
- Architecture details
- Agent configuration
- Use cases and examples
- Advanced features
- Troubleshooting
📐 Architecture
┌─────────────────────────────────────────────────────────────┐
│ Message Channels │
│ (Discord, Telegram, WhatsApp, Heartbeat) │
└────────────────────┬────────────────────────────────────────┘
│ Write message.json
↓
┌─────────────────────────────────────────────────────────────┐
│ ~/.tinyclaw/queue/ │
│ │
│ incoming/ processing/ outgoing/ │
│ ├─ msg1.json → ├─ msg1.json → ├─ msg1.json │
│ ├─ msg2.json └─ msg2.json └─ msg2.json │
│ └─ msg3.json │
│ │
└────────────────────┬────────────────────────────────────────┘
│ Queue Processor
↓
┌─────────────────────────────────────────────────────────────┐
│ Parallel Processing by Agent │
│ │
│ Agent: coder Agent: writer Agent: assistant │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Message 1│ │ Message 1│ │ Message 1│ │
│ │ Message 2│ ... │ Message 2│ ... │ Message 2│ ... │
│ │ Message 3│ │ │ │ │ │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
│ │ │ │ │
└───────┼──────────────────┼─────────────────────┼────────────┘
↓ ↓ ↓
claude CLI claude CLI claude CLI
(workspace/coder) (workspace/writer) (workspace/assistant)
Key features:
- File-based queue - Atomic operations, no race conditions
- Parallel agents - Different agents process messages concurrently
- Sequential per agent - Preserves conversation order within each agent
- Isolated workspaces - Each agent has its own directory and context
📖 Learn more about the queue system
See docs/QUEUE.md for:
- Detailed message flow
- Parallel processing explanation
- Performance characteristics
- Debugging tips
📁 Directory Structure
tinyclaw/
├── .tinyclaw/ # TinyClaw data
│ ├── settings.json # Configuration
│ ├── queue/ # Message queue
│ │ ├── incoming/
│ │ ├── processing/
│ │ └── outgoing/
│ ├── logs/ # All logs
│ ├── channels/ # Channel state
│ ├── files/ # Uploaded files
│ ├── pairing.json # Sender allowlist state (pending + approved)
│ ├── chats/ # Team chain chat history
│ │ └── {team_id}/ # Per-team chat logs
│ ├── events/ # Real-time event files
│ ├── .claude/ # Template for agents
│ ├── heartbeat.md # Template for agents
│ └── AGENTS.md # Template for agents
├── ~/tinyclaw-workspace/ # Agent workspaces
│ ├── coder/
│ │ ├── .claude/
│ │ ├── heartbeat.md
│ │ └── AGENTS.md
│ ├── writer/
│ └── assistant/
├── src/ # TypeScript sources
├── dist/ # Compiled output
├── lib/ # Runtime scripts
├── scripts/ # Installation scripts
└── tinyclaw.sh # Main script
⚙️ Configuration
Settings File
Located at .tinyclaw/settings.json:
{
"channels": {
"enabled": ["discord", "telegram", "whatsapp"],
"discord": { "bot_token": "..." },
"telegram": { "bot_token": "..." },
"whatsapp": {}
},
"workspace": {
"path": "/Users/me/tinyclaw-workspace",
"name": "tinyclaw-workspace"
},
"agents": {
"assistant": {
"name": "Assistant",
"provider": "anthropic",
"model": "sonnet",
"working_directory": "/Users/me/tinyclaw-workspace/assistant"
}
},
"teams": {
"dev": {
"name": "Development Team",
"agents": ["coder", "reviewer"],
"leader_agent": "coder"
}
},
"monitoring": {
"heartbeat_interval": 3600
}
}Heartbeat Configuration
Edit agent-specific heartbeat prompts:
# Edit heartbeat for specific agent nano ~/tinyclaw-workspace/coder/heartbeat.md
Default heartbeat prompt:
Check for: 1. Pending tasks 2. Errors 3. Unread messages Take action if needed.
🎯 Use Cases
Personal AI Assistant
You: "Remind me to call mom"
Claude: "I'll remind you!"
[1 hour later via heartbeat]
Claude: "Don't forget to call mom!"
Multi-Agent Workflow
@coder Review and fix bugs in auth.ts
@writer Document the changes
@reviewer Check the documentation quality
Team Collaboration
@dev fix the auth bug
# → Routes to team leader (@coder)
# → Coder fixes bug, mentions @reviewer in response
# → Reviewer automatically invoked, reviews changes
# → Combined response sent back to user
Teams support sequential chains (single handoff) and parallel fan-out (multiple teammate mentions). See docs/TEAMS.md for details.
Cross-Device Access
- WhatsApp on phone
- Discord on desktop
- Telegram anywhere
- CLI for automation
All channels share agent conversations!
📚 Documentation
- AGENTS.md - Agent management and routing
- TEAMS.md - Team collaboration, chain execution, and visualizer
- QUEUE.md - Queue system and message flow
- TROUBLESHOOTING.md - Common issues and solutions
🐛 Troubleshooting
See docs/TROUBLESHOOTING.md for detailed solutions.
Quick fixes:
# Reset everything (preserves settings) tinyclaw stop && rm -rf .tinyclaw/queue/* && tinyclaw start # Reset WhatsApp tinyclaw channels reset whatsapp # Check status tinyclaw status # View logs tinyclaw logs all
Common issues:
- Bash version error → Install bash 4.0+:
brew install bash - WhatsApp not connecting → Reset auth:
tinyclaw channels reset whatsapp - Messages stuck → Clear queue:
rm -rf .tinyclaw/queue/processing/* - Agent not found → Check:
tinyclaw agent list - Corrupted settings.json → TinyClaw auto-repairs invalid JSON (trailing commas, comments, BOM) and creates a
.bakbackup
Need help?
- GitHub Issues
- Check logs:
tinyclaw logs all
🙏 Credits
- Inspired by OpenClaw by Peter Steinberger
- Built on Claude Code and Codex CLI
- Uses discord.js, whatsapp-web.js, node-telegram-bot-api
📄 License
MIT
TinyClaw - Tiny but mighty! 🦞✨
