{"slug": "ctnicholas-multiplayer-coding-agents", "title": "CTNicholas Multiplayer-Coding-Agents", "summary": "Developer CTNicholas published a demo showing how to build a multiplayer coding agent using Liveblocks, in which each chat is a Liveblocks Feed and messages sent while the agent is busy are queued and handled as a follow-up. The tool routes each message through TypeSafe AI triage that decides whether to answer with read-only repository tools or hand the request to a Cursor agent that commits, pushes, and opens a pull request, with diffs rendered via @pierre/diffs. Access is restricted to members of a configured GitHub organization or an allow-list, and setup requires Liveblocks, Cursor, GitHub OAuth, and Vercel AI gateway keys.", "body_md": "## jev-coding-agent-better.mp4\n\nThis demo shows you how to implement a multiplayer coding agent tool, with [Liveblocks](https://liveblocks.io/).\n\n- **Shared chats** : Each chat is a multiplayer Liveblocks Feed.\n- **Queue and merge** : Messages posted while the agent is busy are queued and handled as a follow-up.\n- **Jev triage** : TypeSafe AI chooses whether a response to each message is needed—a coding agent, or just a regular AI.\n- **Quick answers** : Questions are answered with read-only tools to browse the repository.\n- **Coding sessions** : A Cursor agent commits, pushes, and opens a pull request of requested changes.\n- **Changes and PR tabs** : Side panel shows the PR's diff rendered with`@pierre/diffs` .\n- **Multiplayer documents** : Write Markdown documents as well as code, and edit them in a multiplayer markdown editor.\n- **Skills** : Place skils into the`/skills` folder, load them with`/` .\n- **Notifications** : Participants receieve a notification when the agent has completed coding.\n- **Access control** : Members of your GitHub organization, and users on the allow-list, can talk to the agent.\n\n- Install all dependencies with `npm install`\n- Create an account on [liveblocks.io](https://liveblocks.io/dashboard)\n- Copy your **secret** key from the[dashboard](https://liveblocks.io/dashboard/apikeys)\n- Create an `.env.local` file at the root (see`.env.example` ) and add your**secret** key as the`LIVEBLOCKS_SECRET_KEY` environment variable\n- Create a Cursor API key in the\n[Cursor dashboard](https://cursor.com/dashboard) and add it as`CURSOR_API_KEY` (use a team**service account** key so runs aren't tied to\none person)\n- In the Cursor dashboard, connect GitHub under **Integrations** and grant the\nCursor GitHub App access to the repositories your team will work on\n- Create a [GitHub OAuth App](https://github.com/settings/developers) with the\ncallback URL`http://localhost:3000/api/auth/callback/github` , and add its\nclient id and secret as`AUTH_GITHUB_ID` and`AUTH_GITHUB_SECRET`\n- Set `AUTH_SECRET` to a random string (`openssl rand -base64 32` )\n- Set `GITHUB_ALLOWED_ORG` to your GitHub organization, or list logins in`GITHUB_ALLOWED_USERS` ; leave both empty locally to let anyone who signs in\ntake part\n- Create an account on [vercel.com](https://vercel.com)\n- Copy your **AI gateway key** from the[dashboard](https://vercel.com/ai-gateway) into the`AI_GATEWAY_API_KEY` environment variable (this enables Jev triage and quick answers; without it,\nevery message goes to the coding agent)\n- Optionally set `GITHUB_TOKEN` to a read-only fine-grained token so private\nrepositories' branches and files can be read,`CURSOR_MODEL` to change the\ndefault model, or`NEXT_PUBLIC_LOCKED_REPO` to pin every chat to one\nrepository\n- Run `npm run dev` and go to[http://localhost:3000](http://localhost:3000)", "url": "https://wpnews.pro/news/ctnicholas-multiplayer-coding-agents", "canonical_source": "https://github.com/CTNicholas/multiplayer-coding-agents", "published_at": "2026-09-24 23:05:46+00:00", "updated_at": "2026-09-24 23:30:47.842385+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "developer-tools", "large-language-models"], "entities": ["CTNicholas", "Liveblocks", "Cursor", "TypeSafe AI", "@pierre/diffs", "GitHub", "Vercel"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/ctnicholas-multiplayer-coding-agents", "markdown": "https://wpnews.pro/news/ctnicholas-multiplayer-coding-agents.md", "text": "https://wpnews.pro/news/ctnicholas-multiplayer-coding-agents.txt", "jsonld": "https://wpnews.pro/news/ctnicholas-multiplayer-coding-agents.jsonld"}}