{"id":44367733,"url":"https://github.com/jlia0/tinyclaw","last_synced_at":"2026-02-15T23:01:06.883Z","repository":{"id":337335843,"uuid":"1153146773","full_name":"jlia0/tinyclaw","owner":"jlia0","description":"TinyClaw is a team of personal agents that collaborate with each other","archived":false,"fork":false,"pushed_at":"2026-02-15T03:47:35.000Z","size":17940,"stargazers_count":1413,"open_issues_count":44,"forks_count":188,"subscribers_count":11,"default_branch":"main","last_synced_at":"2026-02-15T04:17:46.819Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jlia0.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-02-09T00:34:11.000Z","updated_at":"2026-02-15T04:11:26.000Z","dependencies_parsed_at":"2026-02-15T23:00:56.809Z","dependency_job_id":null,"html_url":"https://github.com/jlia0/tinyclaw","commit_stats":null,"previous_names":["jlia0/tinyclaw"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/jlia0/tinyclaw","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jlia0%2Ftinyclaw","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jlia0%2Ftinyclaw/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jlia0%2Ftinyclaw/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jlia0%2Ftinyclaw/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jlia0","download_url":"https://codeload.github.com/jlia0/tinyclaw/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jlia0%2Ftinyclaw/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29491998,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-15T19:29:10.908Z","status":"ssl_error","status_checked_at":"2026-02-15T19:29:10.419Z","response_time":118,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-02-11T19:05:57.465Z","updated_at":"2026-02-15T23:01:06.827Z","avatar_url":"https://github.com/jlia0.png","language":"TypeScript","funding_links":[],"categories":["🗂️ Projects","Lightweight Alternatives \u0026 Forks","框架与衍生项目","Multi-Agent","Setup Methods (1-10 Minutes)","Ecosystem","Alternative Architekturen","\u003ca name=\"TypeScript\"\u003e\u003c/a\u003eTypeScript","Lightweight \u0026 Embedded Claws"],"sub_categories":["📋 Project Overview","Recommended","Context Management","Comparison Table"],"readme":"# TinyClaw 🦞\n\nMinimal multi-channel AI assistant with Discord, WhatsApp, and Telegram integration.\n\n## 🎯 What is TinyClaw?\n\nTinyClaw is a lightweight multi-provider AI assistant that:\n\n- ✅ Supports **Anthropic Claude** and **OpenAI GPT** models\n- ✅ Connects Discord, WhatsApp, and Telegram\n- ✅ Processes messages sequentially (no race conditions)\n- ✅ Maintains conversation context\n- ✅ Runs 24/7 in tmux\n- ✅ Extensible multi-channel architecture\n\n**Key innovation:** File-based queue system prevents race conditions and enables seamless multi-channel support.\n\n## 📐 Architecture\n\n```\n┌─────────────────┐\n│  Discord        │──┐\n│  Client         │  │\n└─────────────────┘  │\n                     │\n┌─────────────────┐  │\n│  WhatsApp       │──┤\n│  Client         │  │\n└─────────────────┘  ├──→ Queue (incoming/)\n                     │        ↓\n┌─────────────────┐  │   ┌──────────────┐\n│  Telegram       │──┤   │   Queue      │\n│  Client         │  │   │  Processor   │\n└─────────────────┘  │   └──────────────┘\n                     │        ↓\n                     │   AI Provider\n                     │   (Claude or OpenAI)\n                     │        ↓\n                     │   Queue (outgoing/)\n                     │        ↓\n                     └──\u003e Channels send\n                          responses\n```\n\n## 🚀 Quick Start\n\n### Prerequisites\n\n- macOS or Linux\n- [Claude Code](https://claude.com/claude-code) installed (for Anthropic provider)\n- **[Codex CLI](https://docs.openai.com/codex)** installed and authenticated (for OpenAI provider)\n- Node.js v14+\n- tmux\n- Bash 4.0+ (macOS users: `brew install bash` - system bash 3.2 won't work)\n\n### Installation\n\n#### Option 1: Quick Install (Recommended)\n\nOne-line install with all dependencies bundled:\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/jlia0/tinyclaw/main/scripts/remote-install.sh | bash\n```\n\nThis automatically:\n\n- Downloads pre-built bundle (no npm install needed)\n- Installs to `~/.tinyclaw`\n- Creates global `tinyclaw` command\n- Falls back to source install if bundle unavailable\n\n#### Option 2: Manual from Release\n\nDownload the latest release bundle:\n\n```bash\n# Download from GitHub releases\nwget https://github.com/jlia0/tinyclaw/releases/latest/download/tinyclaw-bundle.tar.gz\n\n# Extract\ntar -xzf tinyclaw-bundle.tar.gz\ncd tinyclaw\n\n# Install CLI globally\n./scripts/install.sh\n```\n\n#### Option 3: From Source\n\nClone and build from source:\n\n```bash\n# Clone repository\ngit clone https://github.com/jlia0/tinyclaw.git\ncd tinyclaw\n\n# Install dependencies\nnpm install\n\n# Install CLI globally\n./scripts/install.sh\n```\n\n#### Option 4: Direct Script (No CLI Install)\n\nRun TinyClaw from its directory without global CLI:\n\n```bash\ncd /path/to/tinyclaw\n\n# Install dependencies\nnpm install\n\n# Start TinyClaw (first run triggers setup wizard)\n./tinyclaw.sh start\n```\n\n### First Run - Setup Wizard\n\nOn first start, you'll see an interactive setup wizard:\n\n```\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n  TinyClaw - Setup Wizard\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\nWhich messaging channels do you want to enable?\n\n  Enable Discord? [y/N]: y\n    ✓ Discord enabled\n  Enable WhatsApp? [y/N]: y\n    ✓ WhatsApp enabled\n  Enable Telegram? [y/N]: y\n    ✓ Telegram enabled\n\nEnter your Discord bot token:\n(Get one at: https://discord.com/developers/applications)\n\nToken: YOUR_DISCORD_BOT_TOKEN_HERE\n\n✓ Discord token saved\n\nEnter your Telegram bot token:\n(Create a bot via @BotFather on Telegram to get a token)\n\nToken: YOUR_TELEGRAM_BOT_TOKEN_HERE\n\n✓ Telegram token saved\n\nWhich AI provider?\n\n  1) Anthropic (Claude)  (recommended)\n  2) OpenAI (Codex/GPT)\n\nChoose [1-2]: 1\n\n✓ Provider: anthropic\n\nWhich Claude model?\n\n  1) Sonnet  (fast, recommended)\n  2) Opus    (smartest)\n\nChoose [1-2]: 1\n\n✓ Model: sonnet\n\nHeartbeat interval (seconds)?\n(How often Claude checks in proactively)\n\nInterval [default: 3600]: 3600\n\n✓ Heartbeat interval: 3600s\n\n✓ Configuration saved to .tinyclaw/settings.json\n```\n\n### Discord Setup\n\n1. Go to [Discord Developer Portal](https://discord.com/developers/applications)\n2. Create a new application\n3. Go to \"Bot\" section and create a bot\n4. Copy the bot token\n5. Enable \"Message Content Intent\" in Bot settings\n6. Invite the bot to your server using OAuth2 URL Generator\n\n### Telegram Setup\n\n1. Open Telegram and search for @BotFather\n2. Send `/newbot` and follow the prompts\n3. Choose a name and username for your bot\n4. Copy the bot token provided by BotFather\n5. Start a chat with your bot or add it to a group\n\n### WhatsApp Setup\n\nAfter starting, a QR code will appear if WhatsApp is enabled:\n\n```\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n        WhatsApp QR Code\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n[QR CODE HERE]\n\n📱 Scan with WhatsApp:\n   Settings → Linked Devices → Link a Device\n```\n\nScan it with your phone. **Done!** 🎉\n\n### Test It\n\n**Discord:** Send a DM to your bot or mention it in a channel\n\n**WhatsApp:** Send a message to the connected number\n\n**Telegram:** Send a message to your bot\n\nYou'll get a response! 🤖\n\n## 📋 Commands\n\nIf installed as CLI tool, use `tinyclaw` command. Otherwise use `./tinyclaw.sh`.\n\n```bash\n# Start TinyClaw\ntinyclaw start\n\n# Run setup wizard (change channels/model/heartbeat)\ntinyclaw setup\n\n# Check status\ntinyclaw status\n\n# Send manual message\ntinyclaw send \"What's the weather?\"\n\n# Reset conversation\ntinyclaw reset\n\n# Reset channel authentication\ntinyclaw channels reset whatsapp  # Clear WhatsApp session\ntinyclaw channels reset discord   # Shows Discord reset instructions\ntinyclaw channels reset telegram  # Shows Telegram reset instructions\n\n# Switch AI provider (one-step command)\ntinyclaw provider                                   # Show current provider and model\ntinyclaw provider anthropic --model sonnet          # Switch to Anthropic with Sonnet\ntinyclaw provider openai --model gpt-5.3-codex      # Switch to OpenAI with GPT-5.3 Codex\ntinyclaw provider openai --model gpt-4o             # Switch to OpenAI with custom model\n\n# Or switch provider/model separately\ntinyclaw provider anthropic    # Switch to Anthropic only\ntinyclaw model sonnet          # Then switch model\ntinyclaw model opus            # Switch to Claude Opus\ntinyclaw model gpt-5.2         # Switch to OpenAI GPT-5.2\n\n# View logs\ntinyclaw logs whatsapp   # WhatsApp activity\ntinyclaw logs discord    # Discord activity\ntinyclaw logs telegram   # Telegram activity\ntinyclaw logs queue      # Queue processing\ntinyclaw logs heartbeat  # Heartbeat checks\n\n# Attach to tmux\ntinyclaw attach\n\n# Restart\ntinyclaw restart\n\n# Stop\ntinyclaw stop\n```\n\n### Uninstall CLI\n\nTo remove the global CLI installation:\n\n```bash\ncd /path/to/tinyclaw\n./scripts/uninstall.sh\n```\n\nThis only removes the CLI symlink. The TinyClaw installation directory remains intact.\n\n## 🔧 Components\n\n### 1. lib/setup-wizard.sh\n\n- Interactive setup on first run\n- Configures channels (Discord/WhatsApp/Telegram)\n- Collects bot tokens for enabled channels\n- Selects Claude model\n- Writes to `.tinyclaw/settings.json`\n\n### 2. discord-client.ts\n\n- Connects to Discord via bot token\n- Listens for DMs and mentions\n- Writes incoming messages to queue\n- Reads responses from queue\n- Sends replies back\n\n### 3. whatsapp-client.ts\n\n- Connects to WhatsApp via QR code\n- Writes incoming messages to queue\n- Reads responses from queue\n- Sends replies back\n\n### 4. telegram-client.ts\n\n- Connects to Telegram via bot token\n- Listens for messages\n- Writes incoming messages to queue\n- Reads responses from queue\n- Sends replies back\n\n### 5. queue-processor.ts\n\n- Polls incoming queue\n- Processes **ONE message at a time**\n- Routes to configured AI provider:\n  - **Anthropic:** Calls `claude -c -p` (supports long-running agent tasks)\n  - **OpenAI:** Calls `codex exec resume --last --json` with configured model\n  - Parses JSONL output and extracts final agent message\n- Waits indefinitely for response\n- Writes responses to outgoing queue\n\n### 6. lib/heartbeat-cron.sh\n\n- Runs every 60 minutes\n- Sends heartbeat via queue\n- Keeps conversation active\n\n### 7. tinyclaw.sh\n\n- Main orchestrator\n- Manages tmux session\n- CLI interface\n\n## 💬 Message Flow\n\n```\nMessage arrives (Discord/WhatsApp/Telegram)\n       ↓\nClient writes to:\n  .tinyclaw/queue/incoming/{channel}_\u003cid\u003e.json\n       ↓\nqueue-processor.ts picks it up\n       ↓\nRoutes to AI provider:\n  - Claude: claude -c -p \"message\"\n  - Codex: codex exec resume --last --json \"message\"\n       ↓\nWrites to:\n  .tinyclaw/queue/outgoing/{channel}_\u003cid\u003e.json\n       ↓\nClient reads and sends response\n       ↓\nUser receives reply\n```\n\n## 📁 Directory Structure\n\n```\ntinyclaw/\n├── .claude/              # Claude Code config\n│   ├── settings.json     # Hooks config\n│   └── hooks/            # Hook scripts\n├── .tinyclaw/            # TinyClaw data\n│   ├── settings.json     # Configuration (channel, model, tokens)\n│   ├── queue/\n│   │   ├── incoming/     # New messages\n│   │   ├── processing/   # Being processed\n│   │   └── outgoing/     # Responses\n│   ├── logs/\n│   │   ├── discord.log\n│   │   ├── whatsapp.log\n│   │   ├── queue.log\n│   │   └── heartbeat.log\n│   ├── channels/         # Runtime channel data\n│   ├── whatsapp-session/\n│   └── heartbeat.md\n├── src/\n│   ├── discord-client.ts    # Discord I/O\n│   ├── whatsapp-client.ts   # WhatsApp I/O\n│   ├── telegram-client.ts   # Telegram I/O\n│   └── queue-processor.ts   # Message processing\n├── dist/                 # TypeScript build output\n├── lib/                  # Runtime helper scripts\n│   ├── setup-wizard.sh   # Interactive setup (first run)\n│   └── heartbeat-cron.sh # Health checks\n├── scripts/              # Installation \u0026 build scripts\n│   ├── install.sh        # CLI installation\n│   ├── uninstall.sh      # CLI uninstallation\n│   ├── bundle.sh         # Create release bundle\n│   └── remote-install.sh # Remote installation\n└── tinyclaw.sh           # Main script\n```\n\n## 🔄 Reset Conversation\n\n### Via CLI\n\n```bash\n./tinyclaw.sh reset\n```\n\n### Via WhatsApp\n\nSend: `!reset` or `/reset`\n\nNext message starts fresh (no conversation history).\n\n## ⚙️ Configuration\n\n### Settings File\n\nAll configuration is stored in `.tinyclaw/settings.json`:\n\n**Anthropic (Claude) example:**\n\n```json\n{\n  \"channels\": {\n    \"enabled\": [\"telegram\", \"discord\"],\n    \"discord\": {\n      \"bot_token\": \"YOUR_DISCORD_TOKEN_HERE\"\n    },\n    \"telegram\": {\n      \"bot_token\": \"YOUR_TELEGRAM_TOKEN_HERE\"\n    },\n    \"whatsapp\": {}\n  },\n  \"models\": {\n    \"provider\": \"anthropic\",\n    \"anthropic\": {\n      \"model\": \"sonnet\"\n    }\n  },\n  \"monitoring\": {\n    \"heartbeat_interval\": 3600\n  }\n}\n```\n\n**OpenAI (Codex CLI) example:**\n\n```json\n{\n  \"channels\": {\n    \"enabled\": [\"telegram\", \"discord\"],\n    \"discord\": {\n      \"bot_token\": \"YOUR_DISCORD_TOKEN_HERE\"\n    },\n    \"telegram\": {\n      \"bot_token\": \"YOUR_TELEGRAM_TOKEN_HERE\"\n    },\n    \"whatsapp\": {}\n  },\n  \"models\": {\n    \"provider\": \"openai\",\n    \"openai\": {\n      \"model\": \"gpt-5.3-codex\"\n    }\n  },\n  \"monitoring\": {\n    \"heartbeat_interval\": 3600\n  }\n}\n```\n\n**Note:** Authentication is handled by the `codex` CLI. Make sure to run `codex` and authenticate before using the OpenAI provider.\n\nTo reconfigure, run:\n\n```bash\n./tinyclaw.sh setup\n```\n\nThe heartbeat interval is in seconds (default: 3600s = 60 minutes).\nThis controls how often Claude proactively checks in.\n\n### Heartbeat Prompt\n\nEdit `.tinyclaw/heartbeat.md`:\n\n```markdown\nCheck for:\n\n1. Pending tasks\n2. Errors\n3. Unread messages\n\nTake action if needed.\n```\n\n## 📊 Monitoring\n\n### View Logs\n\n```bash\n# WhatsApp activity\ntail -f .tinyclaw/logs/whatsapp.log\n\n# Discord activity\ntail -f .tinyclaw/logs/discord.log\n\n# Telegram activity\ntail -f .tinyclaw/logs/telegram.log\n\n# Queue processing\ntail -f .tinyclaw/logs/queue.log\n\n# Heartbeat checks\ntail -f .tinyclaw/logs/heartbeat.log\n\n# All logs\n./tinyclaw.sh logs daemon\n```\n\n### Watch Queue\n\n```bash\n# Incoming messages\nwatch -n 1 'ls -lh .tinyclaw/queue/incoming/'\n\n# Outgoing responses\nwatch -n 1 'ls -lh .tinyclaw/queue/outgoing/'\n```\n\n## 🎨 Features\n\n### ✅ No Race Conditions\n\nMessages processed **sequentially**, one at a time:\n\n```\nMessage 1 → Process → Done\nMessage 2 → Wait → Process → Done\nMessage 3 → Wait → Process → Done\n```\n\n### ✅ Multi-Channel Support\n\nDiscord, WhatsApp, and Telegram work seamlessly together. All channels share the same conversation context!\n\n**Adding more channels is easy:**\n\n```typescript\n// new-channel-client.ts\n// Write to queue\nfs.writeFileSync(\n  \".tinyclaw/queue/incoming/channel_\u003cid\u003e.json\",\n  JSON.stringify({\n    channel: \"channel-name\",\n    message,\n    sender,\n    timestamp,\n  }),\n);\n\n// Read responses from outgoing queue\n// Same format as other channels\n```\n\nQueue processor handles all channels automatically!\n\n### ✅ Multiple AI Providers\n\n**Anthropic Claude:**\n\n- Sonnet (fast, recommended)\n- Opus (smartest)\n- Uses `claude -c -p` CLI for conversation continuity\n\n**OpenAI Codex:**\n\n- GPT-5.3 Codex (recommended)\n- GPT-5.2\n- Uses `codex exec resume --last` for conversation continuity\n- Parses JSONL output to extract agent messages\n- Requires Codex CLI to be installed and authenticated\n\nSwitch providers and models in one command:\n\n```bash\n# One-step command (recommended)\n./tinyclaw.sh provider openai --model gpt-5.3-codex\n\n# Or two-step\n./tinyclaw.sh provider openai\n./tinyclaw.sh model gpt-5.3-codex\n\n# Custom OpenAI model\n./tinyclaw.sh provider openai --model gpt-4o\n```\n\n### ✅ Persistent Sessions\n\nWhatsApp session persists across restarts:\n\n```bash\n# First time: Scan QR code\n./tinyclaw.sh start\n\n# Subsequent starts: Auto-connects\n./tinyclaw.sh restart\n```\n\n## 🔐 Security\n\n- WhatsApp session stored locally in `.tinyclaw/whatsapp-session/`\n- Queue files are local (no network exposure)\n- Each channel handles its own authentication\n- Claude runs with your user permissions\n\n## 🐛 Troubleshooting\n\n### Bash version error on macOS\n\nIf you see:\n\n```\nError: This script requires bash 4.0 or higher (you have 3.2.57)\n```\n\nmacOS ships with bash 3.2 by default. Install a newer version:\n\n```bash\n# Install bash 5.x via Homebrew\nbrew install bash\n\n# Add to your PATH (add this to ~/.zshrc or ~/.bash_profile)\nexport PATH=\"/opt/homebrew/bin:$PATH\"\n\n# Or run directly with the new bash\n/opt/homebrew/bin/bash ./tinyclaw.sh start\n```\n\n### WhatsApp not connecting\n\n```bash\n# Check logs\n./tinyclaw.sh logs whatsapp\n\n# Reset WhatsApp authentication\n./tinyclaw.sh channels reset whatsapp\n./tinyclaw.sh restart\n```\n\n### Discord not connecting\n\n```bash\n# Check logs\n./tinyclaw.sh logs discord\n\n# Update Discord bot token\n./tinyclaw.sh setup\n```\n\n### Telegram not connecting\n\n```bash\n# Check logs\n./tinyclaw.sh logs telegram\n\n# Update Telegram bot token\n./tinyclaw.sh setup\n```\n\n### Messages not processing\n\n```bash\n# Check queue processor\n./tinyclaw.sh status\n\n# Check queue\nls -la .tinyclaw/queue/incoming/\n\n# View queue logs\n./tinyclaw.sh logs queue\n```\n\n### QR code not showing\n\n```bash\n# Attach to tmux to see the QR code\ntmux attach -t tinyclaw\n```\n\n## 🚀 Production Deployment\n\n### Using systemd\n\n```bash\nsudo systemctl enable tinyclaw\nsudo systemctl start tinyclaw\n```\n\n### Using PM2\n\n```bash\npm2 start tinyclaw.sh --name tinyclaw\npm2 save\n```\n\n### Using supervisor\n\n```ini\n[program:tinyclaw]\ncommand=/path/to/tinyclaw/tinyclaw.sh start\nautostart=true\nautorestart=true\n```\n\n## 🛠️ Development \u0026 Releases\n\n### Creating a Release Bundle\n\nFor maintainers creating releases:\n\n```bash\n# Build a distributable bundle with all dependencies\n./scripts/bundle.sh\n```\n\nThis creates `tinyclaw-bundle-{version}.tar.gz` with:\n\n- All source code\n- Pre-installed `node_modules/` (production only)\n- Compiled TypeScript (dist/)\n- All scripts and configurations\n\nUpload this bundle to GitHub Releases, and the remote installer will automatically use it!\n\n### Automated Releases\n\nThe project includes a GitHub Actions workflow that automatically:\n\n1. Builds the bundle when you push a version tag\n2. Creates a GitHub Release\n3. Uploads the bundle as a release asset\n\nTo create a new release:\n\n```bash\n# Tag a new version\ngit tag v1.0.0\ngit push origin v1.0.0\n\n# GitHub Actions will automatically:\n# - Build the bundle\n# - Create the release\n# - Upload the bundle\n```\n\n### Manual Bundle Testing\n\nTest a bundle locally before releasing:\n\n```bash\n# Create bundle\n./scripts/bundle.sh\n\n# Test installation\nmkdir test-install\ntar -xzf tinyclaw-bundle-*.tar.gz -C test-install --strip-components=1\ncd test-install\n./install.sh\n\n# Test the CLI\ntinyclaw status\n```\n\nThe bundle structure maintains the organized directory layout with `scripts/` and `lib/` directories.\n\n## 🎯 Use Cases\n\n### Personal AI Assistant\n\n```\nYou: \"Remind me to call mom\"\nClaude: \"I'll remind you!\"\n[5 minutes later via heartbeat]\nClaude: \"Don't forget to call mom!\"\n```\n\n### Code Helper\n\n```\nYou: \"Review my code\"\nClaude: [reads files, provides feedback]\nYou: \"Fix the bug\"\nClaude: [fixes and commits]\n```\n\n### Multi-Device\n\n- WhatsApp on phone\n- Discord on desktop/mobile\n- Telegram on any device\n- CLI for scripts\n\nAll channels share the same Claude conversation!\n\n## Star History\n\n[![Star History Chart](https://api.star-history.com/svg?repos=jlia0/tinyclaw\u0026type=date\u0026legend=top-left)](https://www.star-history.com/#jlia0/tinyclaw\u0026type=date\u0026legend=top-left)\n\n## 🙏 Credits\n\n- Inspired by [OpenClaw](https://openclaw.ai/) by Peter Steinberger\n- Built on [Claude Code](https://claude.com/claude-code)\n- Uses [discord.js](https://discord.js.org/)\n- Uses [whatsapp-web.js](https://github.com/pedroslopez/whatsapp-web.js)\n\n## 📄 License\n\nMIT\n\n---\n\n**TinyClaw - Small but mighty!** 🦞✨\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjlia0%2Ftinyclaw","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjlia0%2Ftinyclaw","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjlia0%2Ftinyclaw/lists"}