|
|
||
|---|---|---|
| .agent | ||
| .github | ||
| apps | ||
| assets | ||
| dist/control-ui | ||
| docs | ||
| extensions | ||
| git-hooks | ||
| patches | ||
| scripts | ||
| skills | ||
| src | ||
| Swabble | ||
| test | ||
| ui | ||
| vendor/a2ui | ||
| .detect-secrets.cfg | ||
| .dockerignore | ||
| .env.example | ||
| .gitattributes | ||
| .gitignore | ||
| .npmrc | ||
| .oxfmtrc.jsonc | ||
| .oxlintrc.json | ||
| .prettierignore | ||
| .secrets.baseline | ||
| .swiftformat | ||
| .swiftlint.yml | ||
| AGENTS.md | ||
| appcast.xml | ||
| CHANGELOG.md | ||
| CLAUDE.md | ||
| CONTRIBUTING.md | ||
| docker-compose.yml | ||
| docker-setup.sh | ||
| Dockerfile | ||
| Dockerfile.sandbox | ||
| Dockerfile.sandbox-browser | ||
| docs.acp.md | ||
| LICENSE | ||
| package.json | ||
| pnpm-lock.yaml | ||
| pnpm-workspace.yaml | ||
| readme_header.png | ||
| README.md | ||
| SECURITY.md | ||
| tsconfig.json | ||
| vitest.config.ts | ||
| vitest.e2e.config.ts | ||
| vitest.gateway.config.ts | ||
| vitest.live.config.ts | ||
| vitest.unit.config.ts | ||
🦞 Clawdbot + Mobile GitHub App
This is a customized fork of Clawdbot with a mobile GitHub app for on-the-go coding sessions.
What is this?
This is Clawdbot - a personal AI assistant you run on your own devices - with added mobile GitHub integration.
Core Features
- Multi-platform AI agent that can write code, run terminal commands, and manage files
- Mobile GitHub App (React Native/Expo) for coding sessions from your phone
- Real-time tool streaming - watch Claude write code, run commands, create files
- Repository context - automatically clones/checkout GitHub repos before coding
- Multiple channels - WhatsApp, Telegram, Discord, Slack, Signal, iMessage, WebChat
What's Different From Upstream?
| Feature | Upstream Clawdbot | This Fork |
|---|---|---|
| Mobile GitHub App | ❌ | ✅ Expo app with real-time streaming |
| Repo Context | ❌ | ✅ Auto clone/checkout before session |
| Gateway WebSocket | ✅ | ✅ Enhanced with repo support |
| All other features | ✅ | ✅ Same as upstream |
System Requirements
For Mac Mini (Gateway Server)
- macOS 13+ (Ventura or later recommended)
- Node.js 22+ (check with
node --version) - pnpm (recommended) or npm
- Git and GitHub CLI (
gh) - for repo operations - Xcode (only if building macOS/iOS apps)
For Mobile App
- iOS 13+ or Android 8+
- Expo Go app (for development) OR native build
- iPhone must be on same network as Mac Mini OR use Tailscale
Installation Guide
Step 1: Install Node.js and pnpm
Open Terminal on your Mac Mini:
# Install Homebrew if not already installed
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Install Node.js 22+
brew install node@22
# Add Node to PATH (add to ~/.zshrc)
echo 'export PATH="/opt/homebrew/opt/node@22/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
# Verify versions
node --version # Should be v22.x.x
npm --version
# Install pnpm
npm install -g pnpm
# Verify
pnpm --version
Step 2: Clone This Repository
# Clone your fork
git clone https://github.com/YOUR_USERNAME/clawdbot.git
cd clawdbot
# Or if you have the repo locally
cd /path/to/clawdbot
Step 3: Install Dependencies and Build
# Install all dependencies (this may take a few minutes)
pnpm install
# Build the Control UI
pnpm ui:build
# Build TypeScript to dist/
pnpm build
# Verify build succeeded
ls dist/ # Should show many .js files
Step 4: Run Onboarding Wizard
# Run the interactive setup wizard
./node_modules/.bin/clawdbot onboard --install-daemon
The wizard will ask you to:
-
Model Provider Selection
- Choose Anthropic (recommended) or OpenAI
- Select API Key option (not OAuth for custom keys)
-
API Key Setup
- Enter your Anthropic API key (sk-ant-...)
- Or OpenAI API key (sk-...)
- These are stored in
~/.clawdbot/agents/global/agent/auth-profiles.json
-
Workspace Directory
- Default:
~/clawd(press Enter to accept) - This is where Claude will write code
- Default:
-
Gateway Configuration
- Port:
18789(default) - Bind:
loopback(local only, safe)
- Port:
-
Channels (optional)
- You can skip or add WhatsApp/Telegram/etc.
-
Daemon Installation
- Choose Yes to install as background service
- This keeps Gateway running after terminal closes
Step 5: Configure GitHub CLI
# Login to GitHub (opens browser)
gh auth login
# Select: GitHub.com
# Select: SSH or HTTPS (HTTPS is easier)
# Select: Login with a web browser
Step 6: Start the Gateway
# Start the gateway service
./node_modules/.bin/clawdbot gateway start
# OR run directly to see logs
./node_modules/.bin/clawdbot gateway --verbose
Verify it's running:
# Check gateway status
./node_modules/.bin/clawdbot gateway status
# Test connection
curl http://127.0.0.1:18789/health
Step 7: Note Your Gateway URL
For the mobile app, you'll need:
Local Network (same WiFi):
# Get your Mac's local IP
ipconfig getifaddr en0 # WiFi
# or
ipconfig getifaddr en1 # Ethernet
Example: ws://192.168.1.100:18789
Remote (Tailscale):
- Install Tailscale on Mac Mini
- Get Tailscale IP:
tailscale ip -4 - Use:
ws://100.x.y.z:18789
Mobile App Setup
Option A: Expo Go (Easiest - Development)
# In the clawdbot directory
cd apps/expo-github-mobile
# Install dependencies
npm install
# Start Expo dev server
npm start
- Install Expo Go on your iPhone from App Store
- Scan the QR code shown in terminal
- App will open in Expo Go
Option B: Native Build (Production)
For a standalone app, you need an Apple Developer account:
# Install EAS CLI
npm install -g eas-cli
# Login to Expo
eas login
# Configure build
eas build:configure
# Build for iOS (requires Apple Developer account)
eas build --platform ios
Mobile App Configuration
Once the app is open:
1. Settings (Gear Icon)
| Field | Description | Example |
|---|---|---|
| GitHub Username | Your GitHub handle | johndoe |
| Gateway URL | WebSocket address | ws://192.168.1.100:18789 |
2. Create a New Session
- Tap + button
- Enter your coding request (e.g., "Add dark mode to my app")
- Select:
- Model: Sonnet 4.5, Opus 4.5, or Haiku
- Repository: Your GitHub repo (fetched via API)
- Branch: main, develop, etc.
3. Watch Claude Work
The app shows:
- Real-time text streaming as Claude thinks
- Tool execution with collapsible cards:
- 📝 Write - Creating files
- 💻 Bash - Running commands
- 📖 Read - Reading files
- ✏️ Edit - Modifying code
- Connection status - green when connected, red when disconnected
API Key Configuration
Using Custom API Keys
Your keys are stored securely in ~/.clawdbot/:
# View your configured keys
cat ~/.clawdbot/agents/global/agent/auth-profiles.json
Format:
{
"profiles": [
{
"id": "anthropic-custom",
"provider": "anthropic",
"apiKey": "sk-ant-...",
"baseURL": "https://api.anthropic.com",
"model": "claude-opus-4-5"
}
],
"defaultProfile": "anthropic-custom"
}
Using ChatGPT (OpenAI)
The same config works for OpenAI:
{
"profiles": [
{
"id": "openai-gpt4",
"provider": "openai",
"apiKey": "sk-...",
"baseURL": "https://api.openai.com/v1",
"model": "gpt-4o"
}
],
"defaultProfile": "openai-gpt4"
}
Using Multiple Providers (Failover)
{
"profiles": [
{
"id": "primary-opus",
"provider": "anthropic",
"apiKey": "sk-ant-...",
"model": "claude-opus-4-5"
},
{
"id": "fallback-sonnet",
"provider": "anthropic",
"apiKey": "sk-ant-...",
"model": "claude-sonnet-4-5"
},
{
"id": "backup-gpt4",
"provider": "openai",
"apiKey": "sk-...",
"model": "gpt-4o"
}
],
"defaultProfile": "primary-opus",
"fallbackOrder": ["fallback-sonnet", "backup-gpt4"]
}
How It Works
┌─────────────────┐ WebSocket ┌──────────────────┐
│ Mobile App │◄──────────────────►│ Gateway │
│ (Expo/iOS/ │ ws://...:18789 │ (port 18789) │
│ Android) │ └────────┬─────────┘
└────────┬────────┘ │
│ │
│ Select Repo │
└────────────────────────────────────────┘
│
▼
┌─────────────────────┐
│ GitHub API │
│ (public repos) │
└─────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ Agent Session with repoContext │
│ { owner: "...", name: "...", │
│ branch: "..." } │
└─────────────────────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ Workspace Setup │
│ 1. Clone repo (gh or git) │
│ 2. Checkout branch │
│ 3. Run in repo workspace │
└─────────────────────────────────────┘
Troubleshooting
Gateway Won't Start
# Check what's using port 18789
lsof -nP -iTCP:18789 -sTCP:LISTEN
# Kill zombie process
kill -9 <PID>
# Or use a different port
./node_modules/.bin/clawdbot gateway --port 18790
Mobile App Can't Connect
-
Check Mac's firewall:
# Allow incoming connections on port 18789 sudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /usr/local/bin/node -
Verify gateway is accessible:
# From your Mac, test with curl curl http://127.0.0.1:18789/health -
Check mobile app URL:
- Wrong:
http://192.168.1.100:18789 - Correct:
ws://192.168.1.100:18789
- Wrong:
GitHub Repos Not Loading
- Check GitHub username is correct (case-sensitive)
- Verify repos are public (or use GitHub with auth)
- Check API rate limits:
curl -i https://api.github.com/users/YOUR_USERNAME/repos
Repo Clone Fails
# Verify gh is authenticated
gh auth status
# Test clone manually
gh repo clone owner/repo ~/test-clone
# If gh fails, check git config
git config --global github.user
File Locations
| What | Location |
|---|---|
| Config | ~/.clawdbot/clawdbot.json |
| API Keys | ~/.clawdbot/agents/*/agent/auth-profiles.json |
| Sessions | ~/.clawdbot/agents/*/sessions/ |
| Workspace | ~/clawd/ (default) |
| Repo Workspaces | ~/clawd/.workspaces/{owner}/{repo}/ |
| Logs | ~/Library/Logs/com.clawdbot.mac/ (macOS app) |
Development
Running Gateway from Source (Hot Reload)
# In clawdbot root
pnpm gateway:watch
This auto-restarts when TypeScript files change.
Running Mobile App in Development
cd apps/expo-github-mobile
# Start with tunnel (works remotely too)
npx expo start --tunnel
# Or local only
npm start
Building All Apps
# Build TypeScript
pnpm build
# Build macOS app (requires Xcode)
./scripts/package-mac-app.sh
# Output: dist/Clawdbot.app
Commands Reference
# Gateway
./node_modules/.bin/clawdbot gateway start
./node_modules/.bin/clawdbot gateway stop
./node_modules/.bin/clawdbot gateway restart
./node_modules/.bin/clawdbot gateway status
# Send a message from CLI
./node_modules/.bin/clawdbot message send --to "+1234567890" --message "Hello"
# Talk to agent (direct)
./node_modules/.bin/clawdbot agent --message "Explain this code"
# Doctor (health check)
./node_modules/.bin/clawdbot doctor
# Update from upstream
git fetch upstream
git rebase upstream/main
Security Notes
- Gateway is bound to loopback by default - only accessible from your machine
- To expose to network, use Tailscale or SSH tunneling
- API keys are stored locally and never sent to external servers
- Pairing is required for unknown DMs (WhatsApp/Telegram)
- Sandbox mode recommended for group chats
Architecture
Gateway WebSocket Protocol
Request Frame:
{
"type": "req",
"method": "agent",
"id": "unique-id",
"params": {
"message": "Your coding task",
"repoContext": {
"owner": "github-user",
"name": "repo-name",
"branch": "main"
},
"idempotencyKey": "unique-key"
}
}
Response Frame:
{
"type": "res",
"id": "unique-id",
"ok": true,
"payload": {
"runId": "run-123",
"status": "accepted"
}
}
Event Stream:
{
"type": "event",
"event": "agent",
"payload": {
"runId": "run-123",
"stream": "assistant",
"data": { "delta": "Hello! I'll help you" }
}
}
Contributing
This fork focuses on mobile GitHub integration. Upstream Clawdbot is at: https://github.com/clawdbot/clawdbot
To contribute:
- Fork this repo
- Create a feature branch
- Make your changes
- Submit a pull request
License
MIT License - Same as upstream Clawdbot.
Links
- Upstream: https://github.com/clawdbot/clawdbot
- Docs: https://docs.clawd.bot
- Discord: https://discord.gg/clawd
- Expo: https://expo.dev
