{"id":45185212,"url":"https://github.com/waynesutton/clawsync","last_synced_at":"2026-02-20T10:31:21.513Z","repository":{"id":337129343,"uuid":"1152432331","full_name":"waynesutton/clawsync","owner":"waynesutton","description":null,"archived":false,"fork":false,"pushed_at":"2026-02-08T06:39:40.000Z","size":516,"stargazers_count":5,"open_issues_count":0,"forks_count":6,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-08T06:48:35.462Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://github.com/waynesutton/clawsync","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/waynesutton.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"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":"docs/AGENTS.md","dco":null,"cla":null}},"created_at":"2026-02-07T21:38:40.000Z","updated_at":"2026-02-08T06:39:44.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/waynesutton/clawsync","commit_stats":null,"previous_names":["waynesutton/clawsync"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/waynesutton/clawsync","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/waynesutton%2Fclawsync","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/waynesutton%2Fclawsync/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/waynesutton%2Fclawsync/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/waynesutton%2Fclawsync/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/waynesutton","download_url":"https://codeload.github.com/waynesutton/clawsync/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/waynesutton%2Fclawsync/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29647894,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-20T09:27:29.698Z","status":"ssl_error","status_checked_at":"2026-02-20T09:26:12.373Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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-20T10:31:20.896Z","updated_at":"2026-02-20T10:31:21.508Z","avatar_url":"https://github.com/waynesutton.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"public/clawsync-logo.svg\" alt=\"ClawSync\" width=\"180\" /\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eClawSync\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\nOpenClaw for the cloud.\nDeploy an open source personal AI agent with chat UI, skills system, MCP support, and multi-model routing. Built on Convex.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cem\u003eInspired by \u003ca href=\"https://openclaw.ai/\"\u003eOpenClaw.ai\u003c/a\u003e\u003c/em\u003e\n\u003c/p\u003e\n\n## Features\n\n- **Multi-Agent System** - Run multiple agents simultaneously, each with independent config, skills, MCP servers, and memory\n- **Shared Soul Documents** - Define reusable agent personalities that can power one or many agents\n- **Agent Controls** - Auto-run, pause, restart, single task, or think-to-continue modes per agent\n- **Agent-to-Agent Interaction** - Agents can communicate and delegate tasks to each other\n- **Public Chat UI** - Clean, real-time chat with streaming responses and agent selector\n- **SyncBoard Admin** - Private dashboard to manage agents, souls, skills, and integrations\n- **Skills System** - Template, webhook, or code-based skills with a marketplace for external registries\n- **Multi-Model** - Claude, GPT, Grok, Gemini, or any OpenRouter model (configurable per agent)\n- **MCP Support** - Connect to MCP servers or expose your agent as one (assignable per agent)\n- **Channel Integrations** - Telegram, Discord, WhatsApp, Slack, Email\n- **X (Twitter) Integration** - Read, reply, and post tweets from your agent\n- **AgentMail** - Email inboxes for your agent with rate limits\n- **File Storage** - Upload and manage files with Convex native storage or Cloudflare R2\n- **Browser Automation** - Extract data, act, or run autonomous agents on any URL via Stagehand\n- **Web Scraping** - Scrape any URL to markdown with durable caching via Firecrawl\n- **AI Analytics** - Weekly or manual deep analysis of metrics with anomaly detection and recommendations\n- **Agent Research** - Competitive, topic, and real-time X research with external API sources\n- **Persistent Memory** - Supermemory integration for long-term recall across conversations\n- **Live Activity Feed** - Public real-time log of agent actions with per-agent filtering\n- **Unified Agent Feed** - Combined activity view across all agents with filter chips\n\n## Quick Start\n\n### Prerequisites\n\n- Node.js 18+\n- npm or pnpm\n- A Convex account (free tier works)\n- An Anthropic API key (or OpenAI/OpenRouter)\n\n### Setup\n\n1. **Clone and install:**\n\n```bash\ngit clone https://github.com/waynesutton/clawsync.git\ncd clawsync\nnpm install\n```\n\n2. **Initialize Convex:**\n\n```bash\nnpx convex dev\n```\n\nThis will prompt you to create a new Convex project. Follow the prompts.\n\n3. **Set environment variables:**\n\nIn the Convex Dashboard (dashboard.convex.dev), go to Settings \u003e Environment Variables and add:\n\n```\nANTHROPIC_API_KEY=sk-ant-...\n```\n\nOptional for multi-model support:\n\n```\nOPENAI_API_KEY=sk-...\nXAI_API_KEY=xai-...\nOPENROUTER_API_KEY=sk-or-...\n```\n\nOptional for SyncBoard features (each feature activates when its key is set):\n\n```\nFIRECRAWL_API_KEY=...              # Web scraping\nBROWSERBASE_API_KEY=...            # Stagehand browser automation\nBROWSERBASE_PROJECT_ID=...         # Stagehand browser automation\nSUPERMEMORY_API_KEY=...            # Persistent agent memory\nR2_ACCOUNT_ID=...                  # Cloudflare R2 file storage\nR2_ACCESS_KEY_ID=...               # Cloudflare R2 file storage\nR2_SECRET_ACCESS_KEY=...           # Cloudflare R2 file storage\nR2_BUCKET_NAME=...                 # Cloudflare R2 file storage\n```\n\n4. **Start the frontend:**\n\n```bash\nnpm run dev\n```\n\n5. **Complete setup:**\n\nVisit http://localhost:5173 and complete the setup wizard. This creates your agent configuration.\n\n6. **Open in browser:**\n\n- Landing Page: http://localhost:5173\n- Chat: http://localhost:5173/chat\n- SyncBoard: http://localhost:5173/syncboard\n\n## Deployment\n\n### Deploy to Production\n\n```bash\n# Deploy everything (backend + frontend)\nnpm run deploy\n\n# Or deploy static files only\nnpm run deploy:static\n```\n\nYour app will be available at `https://your-project.convex.site`.\n\n### Deployment Options\n\n| Mode                    | Description                      | Best For                   |\n| ----------------------- | -------------------------------- | -------------------------- |\n| Convex Storage          | Files in Convex, served via HTTP | Simple apps, development   |\n| Convex + Cloudflare CDN | Files in Convex, cached at edge  | Custom domains, production |\n\nSee [@convex-dev/self-static-hosting](https://github.com/get-convex/self-static-hosting) for advanced options.\n\n## Authentication\n\n### SyncBoard Password Protection\n\nProtect your admin dashboard with a password:\n\n1. Generate a password hash:\n\n```bash\nnode -e \"console.log(require('crypto').createHash('sha256').update('your-password').digest('hex'))\"\n```\n\n2. Set `SYNCBOARD_PASSWORD_HASH` in Convex Dashboard \u003e Settings \u003e Environment Variables.\n\n3. Restart your app. SyncBoard will now require login.\n\n### WorkOS AuthKit (Coming Soon)\n\nEnterprise SSO support via WorkOS AuthKit is planned. The codebase is prepared for this integration:\n\n- `convex/auth.config.ts` - JWT validation configuration (placeholder)\n- `src/main.tsx` - Comments for AuthKit provider setup\n- `src/App.tsx` - SyncBoardAuthGuard ready for WorkOS\n\nSee [Convex AuthKit docs](https://docs.convex.dev/auth/authkit/) when ready to enable.\n\n## X (Twitter) Integration\n\nConnect your agent to X (Twitter) to read tweets, reply to mentions, and post updates.\n\n### Setup\n\n1. Create a project at [X Developer Portal](https://developer.x.com/en/portal/dashboard)\n2. Get your API credentials (OAuth 1.0a for posting, Bearer Token for reading)\n3. Set environment variables in Convex Dashboard:\n\n```\nX_BEARER_TOKEN=...          # For reading tweets\nX_API_KEY=...               # OAuth 1.0a Consumer Key\nX_API_SECRET=...            # OAuth 1.0a Consumer Secret\nX_ACCESS_TOKEN=...          # OAuth 1.0a Access Token\nX_ACCESS_TOKEN_SECRET=...   # OAuth 1.0a Access Token Secret\n```\n\n4. Enable in SyncBoard \u003e X (Twitter)\n5. Configure options:\n   - **Show on Landing** - Display agent tweets on your landing page\n   - **Auto-Reply** - Automatically reply to mentions\n   - **Post from Agent** - Allow the agent to post tweets\n\n### Features\n\n- Read tweets and thread conversations\n- Reply to mentions automatically\n- Post tweets from the agent\n- Display selected tweets on landing page\n- Activity logging for all X interactions\n\n## xAI (Grok) Models\n\nClawSync supports xAI's Grok models alongside Claude, GPT, and others.\n\n### Setup\n\n1. Get an API key from [xAI Console](https://console.x.ai/)\n2. Set `XAI_API_KEY` in Convex Dashboard\n3. Select Grok models in SyncBoard \u003e Models or during setup\n\n### Available Models\n\n| Model       | Description                        |\n| ----------- | ---------------------------------- |\n| grok-3      | xAI flagship model                 |\n| grok-3-fast | Fast variant for quicker responses |\n\n## Project Structure\n\n```\nclawsync/\n├── convex/                    # Convex backend\n│   ├── agent/                 # Agent core\n│   │   ├── clawsync.ts       # Agent definition with multi-agent factory\n│   │   ├── security.ts       # Security checker\n│   │   ├── toolLoader.ts     # Per-agent tool loading with ask_agent tools\n│   │   └── modelRouter.ts    # Per-agent model routing\n│   ├── agents.ts              # Multi-agent CRUD\n│   ├── souls.ts               # Shared soul document CRUD\n│   ├── agentAssignments.ts    # Per-agent skill/MCP assignments\n│   ├── agentInteractions.ts   # Agent-to-agent interaction log\n│   ├── auth.config.ts         # WorkOS config (placeholder)\n│   ├── xTwitter.ts            # X/Twitter integration\n│   ├── staticHosting.ts       # Self-static-hosting API\n│   ├── media.ts               # Convex native file storage\n│   ├── r2Storage.ts           # Cloudflare R2 storage (optional)\n│   ├── stagehand.ts           # Stagehand job storage\n│   ├── stagehandActions.ts    # Browser automation actions\n│   ├── firecrawl.ts           # Web scraping via Firecrawl\n│   ├── analytics.ts           # Metrics snapshot aggregation\n│   ├── analyticsReport.ts     # AI analytics report CRUD\n│   ├── analyticsReportAction.ts # AI report generation (Node.js)\n│   ├── analyticsCron.ts       # Weekly analytics cron\n│   ├── research.ts            # Research projects and findings\n│   ├── researchActions.ts     # Research execution actions\n│   ├── skillsMarketplace.ts   # Skills marketplace management\n│   ├── skillsMarketplaceActions.ts # Skills sync from registries\n│   ├── supermemory.ts         # Supermemory config\n│   ├── supermemoryActions.ts  # Persistent memory actions\n│   ├── schema.ts              # Database schema\n│   ├── convex.config.ts       # Component registration\n│   └── http.ts                # HTTP endpoints\n├── src/                       # React frontend\n│   ├── pages/\n│   │   ├── LandingPage.tsx    # Public landing with tweets + activity\n│   │   ├── ChatPage.tsx       # Chat UI with agent selector\n│   │   ├── SetupWizard.tsx    # First-run setup\n│   │   ├── SyncBoardAgents.tsx    # Multi-agent management\n│   │   ├── SyncBoardAgentDetail.tsx # Agent configuration\n│   │   ├── SyncBoardSouls.tsx     # Shared soul documents\n│   │   ├── SyncBoardAgentFeed.tsx # Unified agent activity feed\n│   │   ├── SyncBoardX.tsx     # X/Twitter config\n│   │   ├── SyncBoardMedia.tsx # File manager\n│   │   ├── SyncBoardStagehand.tsx # Browser automation\n│   │   ├── SyncBoardFirecrawl.tsx # Web scraping\n│   │   ├── SyncBoardAnalytics.tsx # AI analytics reports\n│   │   ├── SyncBoardResearch.tsx  # Research projects\n│   │   ├── SyncBoardMemory.tsx    # Supermemory config\n│   │   ├── SyncBoard*.tsx     # Other admin pages\n│   │   └── SyncBoardLogin.tsx # Password login\n│   ├── components/\n│   │   ├── agents/            # Multi-agent UI components\n│   │   │   ├── AgentCard.tsx  # Agent summary card\n│   │   │   ├── AgentControls.tsx # Run/pause/restart controls\n│   │   │   ├── AgentSelector.tsx # Chat agent picker\n│   │   │   └── AgentFeedItem.tsx # Activity feed entry\n│   │   ├── chat/              # Chat components\n│   │   └── syncboard/         # SyncBoard layout\n│   └── styles/\n│       ├── tokens.css         # Design tokens (Geist fonts)\n│       └── global.css\n├── features.html              # Standalone features page\n├── content/\n│   └── soul.md                # Default soul document\n├── AGENTS.md                  # For AI coding agents\n└── CLAUDE.md                  # For Claude Code\n```\n\n## Design System\n\nClawSync uses a custom design system with Geist fonts from Vercel.\n\n| Token            | Value      | Usage            |\n| ---------------- | ---------- | ---------------- |\n| `--bg-primary`   | #f3f3f3    | Page backgrounds |\n| `--bg-secondary` | #ececec    | Cards, inputs    |\n| `--interactive`  | #ea5b26    | Buttons, links   |\n| `--text-primary` | #232323    | Body text        |\n| `--font-sans`    | Geist      | UI text          |\n| `--font-mono`    | Geist Mono | Code             |\n\nAll tokens are in `src/styles/tokens.css`. Never hardcode colors.\n\n## Commands\n\n```bash\nnpm install          # Install dependencies\nnpx convex dev       # Start Convex backend\nnpm run dev          # Start Vite frontend\nnpm run build        # Production build\nnpm run deploy       # Deploy to Convex\nnpm run lint         # ESLint\nnpm run typecheck    # TypeScript check\n```\n\n## Adding Skills\n\n### Template Skill\n\n1. SyncBoard \u003e Skills \u003e Add Skill\n2. Select \"Template Skill\"\n3. Choose a template and configure\n4. Approve the skill\n\n### Webhook Skill\n\n1. SyncBoard \u003e Skills \u003e Add Skill\n2. Select \"Webhook Skill\"\n3. Enter the API endpoint URL\n4. Add domain to allowlist\n5. Approve the skill\n\n### Code Skill\n\nAdd a file in `convex/agent/skills/` and register it in the skill registry.\n\n## Security\n\nSee [CLAUDE.md](./CLAUDE.md) for security rules:\n\n- Never store secrets in code\n- Never modify `security.ts` without review\n- All skills start unapproved\n- Webhook handlers verify signatures\n- No `.collect()` without `.take(n)`\n\n## Contributing\n\n1. Fork the repo\n2. Create a feature branch\n3. Make changes following CLAUDE.md guidelines\n4. Submit a pull request\n\n## License\n\nMIT License. Fork it, own it.\n\n---\n\nBuilt with [Convex](https://convex.dev), [WorkOS](https://workos.com) (coming soon), [xAI](https://x.ai), [Supermemory](https://supermemory.ai), and [Geist](https://vercel.com/font).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwaynesutton%2Fclawsync","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwaynesutton%2Fclawsync","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwaynesutton%2Fclawsync/lists"}