OpenClaw for the cloud. Deploy an open source personal AI agent with chat UI, skills system, MCP support, and multi-model routing. Built on Convex.
Inspired by OpenClaw.ai
- Multi-Agent System - Run multiple agents simultaneously, each with independent config, skills, MCP servers, and memory
- Shared Soul Documents - Define reusable agent personalities that can power one or many agents
- Agent Controls - Auto-run, pause, restart, single task, or think-to-continue modes per agent
- Agent-to-Agent Interaction - Agents can communicate and delegate tasks to each other
- Public Chat UI - Clean, real-time chat with streaming responses and agent selector
- SyncBoard Admin - Private dashboard to manage agents, souls, skills, and integrations
- Skills System - Template, webhook, or code-based skills with a marketplace for external registries
- Multi-Model - Claude, GPT, Grok, Gemini, or any OpenRouter model (configurable per agent)
- MCP Support - Connect to MCP servers or expose your agent as one (assignable per agent)
- Channel Integrations - Telegram, Discord, WhatsApp, Slack, Email
- X (Twitter) Integration - Read, reply, and post tweets from your agent
- AgentMail - Email inboxes for your agent with rate limits
- File Storage - Upload and manage files with Convex native storage or Cloudflare R2
- Browser Automation - Extract data, act, or run autonomous agents on any URL via Stagehand
- Web Scraping - Scrape any URL to markdown with durable caching via Firecrawl
- AI Analytics - Weekly or manual deep analysis of metrics with anomaly detection and recommendations
- Agent Research - Competitive, topic, and real-time X research with external API sources
- Persistent Memory - Supermemory integration for long-term recall across conversations
- Live Activity Feed - Public real-time log of agent actions with per-agent filtering
- Unified Agent Feed - Combined activity view across all agents with filter chips
- Node.js 18+
- npm or pnpm
- A Convex account (free tier works)
- An Anthropic API key (or OpenAI/OpenRouter)
- Clone and install:
git clone https://github.com/waynesutton/clawsync.git
cd clawsync
npm install- Initialize Convex:
npx convex devThis will prompt you to create a new Convex project. Follow the prompts.
- Set environment variables:
In the Convex Dashboard (dashboard.convex.dev), go to Settings > Environment Variables and add:
ANTHROPIC_API_KEY=sk-ant-...
Optional for multi-model support:
OPENAI_API_KEY=sk-...
XAI_API_KEY=xai-...
OPENROUTER_API_KEY=sk-or-...
Optional for SyncBoard features (each feature activates when its key is set):
FIRECRAWL_API_KEY=... # Web scraping
BROWSERBASE_API_KEY=... # Stagehand browser automation
BROWSERBASE_PROJECT_ID=... # Stagehand browser automation
SUPERMEMORY_API_KEY=... # Persistent agent memory
R2_ACCOUNT_ID=... # Cloudflare R2 file storage
R2_ACCESS_KEY_ID=... # Cloudflare R2 file storage
R2_SECRET_ACCESS_KEY=... # Cloudflare R2 file storage
R2_BUCKET_NAME=... # Cloudflare R2 file storage
- Start the frontend:
npm run dev- Complete setup:
Visit http://localhost:5173 and complete the setup wizard. This creates your agent configuration.
- Open in browser:
- Landing Page: http://localhost:5173
- Chat: http://localhost:5173/chat
- SyncBoard: http://localhost:5173/syncboard
# Deploy everything (backend + frontend)
npm run deploy
# Or deploy static files only
npm run deploy:staticYour app will be available at https://your-project.convex.site.
| Mode | Description | Best For |
|---|---|---|
| Convex Storage | Files in Convex, served via HTTP | Simple apps, development |
| Convex + Cloudflare CDN | Files in Convex, cached at edge | Custom domains, production |
See @convex-dev/self-static-hosting for advanced options.
Protect your admin dashboard with a password:
- Generate a password hash:
node -e "console.log(require('crypto').createHash('sha256').update('your-password').digest('hex'))"-
Set
SYNCBOARD_PASSWORD_HASHin Convex Dashboard > Settings > Environment Variables. -
Restart your app. SyncBoard will now require login.
Enterprise SSO support via WorkOS AuthKit is planned. The codebase is prepared for this integration:
convex/auth.config.ts- JWT validation configuration (placeholder)src/main.tsx- Comments for AuthKit provider setupsrc/App.tsx- SyncBoardAuthGuard ready for WorkOS
See Convex AuthKit docs when ready to enable.
Connect your agent to X (Twitter) to read tweets, reply to mentions, and post updates.
- Create a project at X Developer Portal
- Get your API credentials (OAuth 1.0a for posting, Bearer Token for reading)
- Set environment variables in Convex Dashboard:
X_BEARER_TOKEN=... # For reading tweets
X_API_KEY=... # OAuth 1.0a Consumer Key
X_API_SECRET=... # OAuth 1.0a Consumer Secret
X_ACCESS_TOKEN=... # OAuth 1.0a Access Token
X_ACCESS_TOKEN_SECRET=... # OAuth 1.0a Access Token Secret
- Enable in SyncBoard > X (Twitter)
- Configure options:
- Show on Landing - Display agent tweets on your landing page
- Auto-Reply - Automatically reply to mentions
- Post from Agent - Allow the agent to post tweets
- Read tweets and thread conversations
- Reply to mentions automatically
- Post tweets from the agent
- Display selected tweets on landing page
- Activity logging for all X interactions
ClawSync supports xAI's Grok models alongside Claude, GPT, and others.
- Get an API key from xAI Console
- Set
XAI_API_KEYin Convex Dashboard - Select Grok models in SyncBoard > Models or during setup
| Model | Description |
|---|---|
| grok-3 | xAI flagship model |
| grok-3-fast | Fast variant for quicker responses |
clawsync/
├── convex/ # Convex backend
│ ├── agent/ # Agent core
│ │ ├── clawsync.ts # Agent definition with multi-agent factory
│ │ ├── security.ts # Security checker
│ │ ├── toolLoader.ts # Per-agent tool loading with ask_agent tools
│ │ └── modelRouter.ts # Per-agent model routing
│ ├── agents.ts # Multi-agent CRUD
│ ├── souls.ts # Shared soul document CRUD
│ ├── agentAssignments.ts # Per-agent skill/MCP assignments
│ ├── agentInteractions.ts # Agent-to-agent interaction log
│ ├── auth.config.ts # WorkOS config (placeholder)
│ ├── xTwitter.ts # X/Twitter integration
│ ├── staticHosting.ts # Self-static-hosting API
│ ├── media.ts # Convex native file storage
│ ├── r2Storage.ts # Cloudflare R2 storage (optional)
│ ├── stagehand.ts # Stagehand job storage
│ ├── stagehandActions.ts # Browser automation actions
│ ├── firecrawl.ts # Web scraping via Firecrawl
│ ├── analytics.ts # Metrics snapshot aggregation
│ ├── analyticsReport.ts # AI analytics report CRUD
│ ├── analyticsReportAction.ts # AI report generation (Node.js)
│ ├── analyticsCron.ts # Weekly analytics cron
│ ├── research.ts # Research projects and findings
│ ├── researchActions.ts # Research execution actions
│ ├── skillsMarketplace.ts # Skills marketplace management
│ ├── skillsMarketplaceActions.ts # Skills sync from registries
│ ├── supermemory.ts # Supermemory config
│ ├── supermemoryActions.ts # Persistent memory actions
│ ├── schema.ts # Database schema
│ ├── convex.config.ts # Component registration
│ └── http.ts # HTTP endpoints
├── src/ # React frontend
│ ├── pages/
│ │ ├── LandingPage.tsx # Public landing with tweets + activity
│ │ ├── ChatPage.tsx # Chat UI with agent selector
│ │ ├── SetupWizard.tsx # First-run setup
│ │ ├── SyncBoardAgents.tsx # Multi-agent management
│ │ ├── SyncBoardAgentDetail.tsx # Agent configuration
│ │ ├── SyncBoardSouls.tsx # Shared soul documents
│ │ ├── SyncBoardAgentFeed.tsx # Unified agent activity feed
│ │ ├── SyncBoardX.tsx # X/Twitter config
│ │ ├── SyncBoardMedia.tsx # File manager
│ │ ├── SyncBoardStagehand.tsx # Browser automation
│ │ ├── SyncBoardFirecrawl.tsx # Web scraping
│ │ ├── SyncBoardAnalytics.tsx # AI analytics reports
│ │ ├── SyncBoardResearch.tsx # Research projects
│ │ ├── SyncBoardMemory.tsx # Supermemory config
│ │ ├── SyncBoard*.tsx # Other admin pages
│ │ └── SyncBoardLogin.tsx # Password login
│ ├── components/
│ │ ├── agents/ # Multi-agent UI components
│ │ │ ├── AgentCard.tsx # Agent summary card
│ │ │ ├── AgentControls.tsx # Run/pause/restart controls
│ │ │ ├── AgentSelector.tsx # Chat agent picker
│ │ │ └── AgentFeedItem.tsx # Activity feed entry
│ │ ├── chat/ # Chat components
│ │ └── syncboard/ # SyncBoard layout
│ └── styles/
│ ├── tokens.css # Design tokens (Geist fonts)
│ └── global.css
├── features.html # Standalone features page
├── content/
│ └── soul.md # Default soul document
├── AGENTS.md # For AI coding agents
└── CLAUDE.md # For Claude Code
ClawSync uses a custom design system with Geist fonts from Vercel.
| Token | Value | Usage |
|---|---|---|
--bg-primary |
#f3f3f3 | Page backgrounds |
--bg-secondary |
#ececec | Cards, inputs |
--interactive |
#ea5b26 | Buttons, links |
--text-primary |
#232323 | Body text |
--font-sans |
Geist | UI text |
--font-mono |
Geist Mono | Code |
All tokens are in src/styles/tokens.css. Never hardcode colors.
npm install # Install dependencies
npx convex dev # Start Convex backend
npm run dev # Start Vite frontend
npm run build # Production build
npm run deploy # Deploy to Convex
npm run lint # ESLint
npm run typecheck # TypeScript check- SyncBoard > Skills > Add Skill
- Select "Template Skill"
- Choose a template and configure
- Approve the skill
- SyncBoard > Skills > Add Skill
- Select "Webhook Skill"
- Enter the API endpoint URL
- Add domain to allowlist
- Approve the skill
Add a file in convex/agent/skills/ and register it in the skill registry.
See CLAUDE.md for security rules:
- Never store secrets in code
- Never modify
security.tswithout review - All skills start unapproved
- Webhook handlers verify signatures
- No
.collect()without.take(n)
- Fork the repo
- Create a feature branch
- Make changes following CLAUDE.md guidelines
- Submit a pull request
MIT License. Fork it, own it.
Built with Convex, WorkOS (coming soon), xAI, Supermemory, and Geist.