{"id":46189979,"url":"https://github.com/ofershap/clawgether","last_synced_at":"2026-03-09T06:01:08.435Z","repository":{"id":341534337,"uuid":"1170502745","full_name":"ofershap/clawgether","owner":"ofershap","description":"Multiplayer coding rooms with Claude. Multiple developers, one AI agent, real-time collaboration.","archived":false,"fork":false,"pushed_at":"2026-03-07T19:56:38.000Z","size":1250,"stargazers_count":7,"open_issues_count":2,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-08T07:53:36.984Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/ofershap.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"ofershap"}},"created_at":"2026-03-02T07:37:10.000Z","updated_at":"2026-03-07T19:56:41.000Z","dependencies_parsed_at":"2026-03-05T02:01:02.692Z","dependency_job_id":null,"html_url":"https://github.com/ofershap/clawgether","commit_stats":null,"previous_names":["ofershap/clawgether"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ofershap/clawgether","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ofershap%2Fclawgether","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ofershap%2Fclawgether/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ofershap%2Fclawgether/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ofershap%2Fclawgether/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ofershap","download_url":"https://codeload.github.com/ofershap/clawgether/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ofershap%2Fclawgether/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30284628,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-09T02:57:19.223Z","status":"ssl_error","status_checked_at":"2026-03-09T02:56:26.373Z","response_time":61,"last_error":"SSL_read: 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-03-03T00:11:58.745Z","updated_at":"2026-03-09T06:01:08.357Z","avatar_url":"https://github.com/ofershap.png","language":"TypeScript","funding_links":["https://github.com/sponsors/ofershap"],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003eclawgether\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eMultiple developers. One AI agent. Same conversation.\u003c/strong\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  Your teammate is talking to Claude. You're talking to Claude.\u003cbr\u003e\n  Same project. Neither of you knows what the other asked.\u003cbr\u003e\n  clawgether puts everyone in the same room.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#quick-start\"\u003e\u003cimg src=\"https://img.shields.io/badge/Quick_Start-grey?style=for-the-badge\" alt=\"Quick Start\" /\u003e\u003c/a\u003e\n  \u0026nbsp;\n  \u003ca href=\"#what-you-actually-get\"\u003e\u003cimg src=\"https://img.shields.io/badge/Features-grey?style=for-the-badge\" alt=\"Features\" /\u003e\u003c/a\u003e\n  \u0026nbsp;\n  \u003ca href=\"#self-hosting\"\u003e\u003cimg src=\"https://img.shields.io/badge/Self_Host-grey?style=for-the-badge\" alt=\"Self-Host\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/ofershap/clawgether/actions/workflows/ci.yml\"\u003e\u003cimg src=\"https://github.com/ofershap/clawgether/actions/workflows/ci.yml/badge.svg\" alt=\"CI\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://opensource.org/licenses/MIT\"\u003e\u003cimg src=\"https://img.shields.io/badge/License-MIT-yellow.svg\" alt=\"License: MIT\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.typescriptlang.org/\"\u003e\u003cimg src=\"https://img.shields.io/badge/TypeScript-strict-blue\" alt=\"TypeScript\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n![Demo](assets/demo.gif)\n\n---\n\n## One Agent, Multiple Devs\n\nEvery tool in this space runs multiple AI agents in parallel. More agents, more tokens, more cost, more conflict.\n\nclawgether does the opposite. Two or more developers open a browser, join the same room, and talk to Claude together. Everyone sees every message. Responses stream in real-time. When Claude edits a file, everyone sees the diff. When it runs a command, everyone sees the output. Claude knows who said what and tracks context per person.\n\nA shared AI session. Google Docs for coding conversations.\n\n```\nDev A (browser) ──┐\nDev B (browser) ──┤\nDev C (browser) ──┤── WebSocket ──► Server ──► Claude Agent SDK\n      ...         ┘                              │\n                                                 ▼\n                                         Your project folder\n                                         (read, write, terminal)\n```\n\nThe server runs on your machine. Claude operates on a real project folder with full filesystem access. Not a chat wrapper.\n\n---\n\n\u003ch2\u003e⚡ Quick Start\u003c/h2\u003e\n\n```bash\ngit clone https://github.com/ofershap/clawgether.git\ncd clawgether\nnpm install\nnpm run dev\n```\n\nOpen `http://localhost:3847`. Create a room, share the link.\n\nTeammate is remote? One more line:\n\n```bash\nnpx ngrok http 3847\n# Share the https://abc123.ngrok-free.app URL\n```\n\nThey open the link, type their name, they're in.\n\n---\n\n## What You Actually Get\n\n### The Chat\n\n| | |\n|---|---|\n| **Live streaming** | Claude's responses stream to everyone simultaneously |\n| **Message queue** | Send a message while Claude is mid-thought. It gets queued, not lost |\n| **Typing indicators** | See who's composing. The bouncing dots |\n| **@mentions** | Tag a teammate. Autocomplete kicks in after `@` |\n| **Reactions** | Quick emoji on any message. The small things matter |\n| **Notifications** | Tab title changes, browser notifications when you're alt-tabbed |\n| **Markdown** | Full rendering with syntax highlighting. Code blocks look good |\n\n### The Agent\n\nThe Claude Agent SDK with full capabilities, not a REST wrapper.\n\n| | |\n|---|---|\n| **File operations** | Read, write, create, delete. Your project, live |\n| **Terminal** | Runs shell commands, you see the output |\n| **Git awareness** | Branch, uncommitted changes, one-click undo |\n| **Code / Ask modes** | Full agent or discussion-only. Toggle in the sidebar |\n| **Auto-lint** | Runs your linter after changes |\n| **Repo map** | Extracted symbols from your codebase. Claude sees structure |\n\n### The Sidebar\n\n| | |\n|---|---|\n| **Participants** | Who's online, who's offline |\n| **Git status** | Branch, ahead count, last commit |\n| **File context** | Which files Claude touched, color-coded by action |\n| **Cost tracking** | Per-message estimates. Know what you're spending |\n| **Session export** | Download the full conversation as JSON |\n| **Claude Code import** | Had a session in Claude Code? Import it into the room |\n| **Auto-summary** | One click to summarize the conversation so far |\n\n### Authentication\n\n| Method | How |\n|--------|-----|\n| **OpenRouter** | One-click OAuth login. Free account, access Claude |\n| **API Key** | Paste `sk-ant-...` or `sk-or-...` directly |\n\nKeys live in server memory. Never touch disk.\n\n---\n\n## Why Not Just Share a Screen?\n\nYou've tried the alternatives:\n\n- **Screen share** while one person drives. Everyone else watches, gets bored, checks Slack\n- **Take turns**. Lose context every handoff. \"Wait, what did you ask it?\"\n- **Separate sessions**. Everyone talking to Claude about the same project. Duplicate work, contradicting instructions, wasted tokens\n\nclawgether fixes this because the conversation is the collaboration. Everyone contributes. Everyone sees what's happening. One agent, no conflict, no duplication.\n\n---\n\n## Architecture\n\n| Component | Purpose |\n|-----------|---------|\n| `server.ts` | HTTP + Socket.io server on top of Next.js |\n| `src/server/room-manager.ts` | Room lifecycle, participants, message queue |\n| `src/server/agent-session.ts` | Claude Agent SDK, streaming, tool calls |\n| `src/server/git-service.ts` | Git status, diff, undo |\n| `src/server/cc-sessions.ts` | Parse Claude Code session history |\n| `src/components/` | React UI: chat, sidebar, modals |\n| `src/lib/store.ts` | Zustand client state |\n\n**Stack:** Next.js 16 · Socket.io · Claude Agent SDK · Zustand · Tailwind · TypeScript (strict)\n\n---\n\n## Self-Hosting\n\nThe agent spawns a long-lived process and needs filesystem access. Serverless won't work.\n\n| Platform | Notes |\n|----------|-------|\n| **Your laptop + ngrok** | Fastest. Zero setup |\n| **Railway** | Persistent containers. $5/mo free credit |\n| **Fly.io** | Long-running VMs, persistent volumes |\n| **Any VPS** | Full control |\n\n```bash\nnpm run build\nnpm start\n```\n\n---\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md).\n\n## Security\n\nSee [SECURITY.md](SECURITY.md).\n\n## Author\n\n[![Made by ofershap](https://gitshow.dev/api/card/ofershap)](https://gitshow.dev/ofershap)\n\n[![LinkedIn](https://img.shields.io/badge/LinkedIn-Connect-0A66C2?style=flat\u0026logo=linkedin\u0026logoColor=white)](https://linkedin.com/in/ofershap)\n[![GitHub](https://img.shields.io/badge/GitHub-Follow-181717?style=flat\u0026logo=github\u0026logoColor=white)](https://github.com/ofershap)\n\n## License\n\n[MIT](LICENSE) \u0026copy; [Ofer Shapira](https://github.com/ofershap)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fofershap%2Fclawgether","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fofershap%2Fclawgether","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fofershap%2Fclawgether/lists"}