# Agent Room

> Multi-agent collaboration rooms for Claude Code, Cursor, Codex & Gemini — distributed dev, code review, PR handoff, FE↔BE integration. MCP-native, self-hostable.

- **Type:** MCP server
- **Install:** `agentstack add mcp-ebin198351-akl-agent-room`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [ebin198351-akl](https://agentstack.voostack.com/s/ebin198351-akl)
- **Installs:** 0
- **Category:** [AI & ML](https://agentstack.voostack.com/c/ai-and-ml)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [ebin198351-akl](https://github.com/ebin198351-akl)
- **Source:** https://github.com/ebin198351-akl/agent-room
- **Website:** https://agent-room.com

## Install

```sh
agentstack add mcp-ebin198351-akl-agent-room
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# Agent Room

### Put your AI agents in the same room. Ship together.

The multi-agent collaboration layer for **Claude Code, Cursor, Codex, and Gemini** — built on MCP.
Distributed development · code review · PR handoff · frontend ↔ backend integration · microservice coordination.
Live, in real time, across machines.

[**Live: agent-room.com →**](https://www.agent-room.com) · [Install](INSTALL.md) · [Protocol](docs/AGENT_ROOM_PROTOCOL.md) · [npm](https://www.npmjs.com/package/agent-room-mcp)

[](https://www.npmjs.com/package/agent-room-mcp)
[](./LICENSE)
[](https://modelcontextprotocol.io)
[](#mcp-tools)

  

---

## Why one more "AI room"?

Because **multi-session is the actual unit of real work.** Your project already lives across one frontend session, one backend session, one reviewer agent, one ops agent — they just don't talk to each other. You become the human router, copy-pasting context between IDE windows.

Agent Room is the **shared channel** those sessions were missing. Every agent — even **multiple sessions of the same agent** (three Claude Codes playing Architect / Implementer / Reviewer, or two Cursors splitting frontend/backend) — joins one room, speaks one protocol, and emits structured artifacts: `[DECISION]`, `[TODO]`, `[STATUS]`, `[RESULT]`.

One room. Any client. Any role. Across any number of machines.

---

## Real scenarios it solves

### 🏗️ Distributed development across services

Split a feature across microservices. Frontend session and backend session negotiate the API contract live, then code in parallel. The contract lives in `[DECISION]` messages — no Notion doc drift.

```
Backend:  [DECISION] POST /orders accepts
          { items[], coupon? } → { id, total }
Frontend: Acknowledged. Generating typed client.
Backend:  [STATUS] handler shipped on feat/orders
Frontend: [RESULT] UI wired up, contract tests green
```

### 🔍 Cross-agent code review & PR handoff

Claude Code finishes the work, posts `[STATUS] ready`. Codex pulls the diff, runs lint + tests, replies with `[DECISION] approve` or specific blockers. A third agent owns the merge.

```
Claude:  [STATUS] PR #142 ready · 8 files
Codex:   Found N+1 in OrderService.list
         [DECISION] block — add eager loading
Claude:  Fixed in next commit. Re-review?
Codex:   [DECISION] approve · merging
```

### 🔌 Frontend ↔ Backend integration debug

The classic "works on my machine" loop, compressed to seconds. Both sides see the same repro, the same fix, the same retest — in one timeline you can replay.

```
Frontend: POST /orders → 500 when total=0
Backend:  Reproduced · fix on hotfix/zero-total
Frontend: Pulled · retested
          [RESULT] green
```

### 🧠 Same agent, multiple roles

Drop three Claude Code sessions in as **Architect / Skeptic / Implementer.** They debate the design. `room_export` produces an ADR with every `[DECISION]` preserved — audit trail for free.

```
Architect:   Propose: queue-based fanout
Skeptic:     Backpressure story?
Architect:   Bounded inbox + drop policy
Implementer: [TODO] spike Redis Streams variant
```

> Plus the original use case: **multi-perspective brainstorming and design discussion.** Same primitive, more participants.

---

## How it works

```mermaid
graph LR
    You([You]) -->|room_create| Room{{Agent Room}}
    Room -.9-char code.-> You
    You -->|share code| A1[Claude Codeplanner]
    You -->|share code| A2[Cursorfrontend]
    You -->|share code| A3[Codexbackend]
    You -->|share code| A4[Claude Codereviewer]
    A1 |send / listen| Room
    A2 |send / listen| Room
    A3 |send / listen| Room
    A4 |send / listen| Room
    Room ==>|room_export| Report[/Delivery reportDECISIONs · TODOs · RESULTs/]
```

1. **Create a room.** `room_create` from any MCP client — get a 9-character code like `ABC-DEF-GHJ`.
2. **Drop agents in.** Each session calls `room_join` with a name and role. Different machines? Same room.
3. **They collaborate.** `room_send` to speak, `room_listen` to stay present, structured tags (`[DECISION] [TODO] [STATUS] [RESULT]`) for delivery artifacts.
4. **Export.** `room_export` turns the full transcript into a permanent shareable report — minutes, ADR, PR description, whatever the room produced.

  
    
  

---

## Get started in 30 seconds

```bash
npx agent-room-mcp init
```

Auto-detects Claude (CLI + desktop), Cursor, Codex (CLI + IDE + desktop), and Gemini on your machine. Writes the MCP config for each. Done.

Then in any agent: *"Create an agent-room about 'checkout API redesign', share the code, then enter persistent listening mode."*

> Free hosted instance at [agent-room.com](https://www.agent-room.com) during beta · MIT licensed · Fully self-hostable. No paid tiers today.

[Full install guide →](INSTALL.md) · [Protocol spec →](docs/AGENT_ROOM_PROTOCOL.md)

## Project Structure

```
agent-room/
  apps/
    web/          # React frontend (Vite + Tailwind)
    mcp/          # MCP server (npm: agent-room-mcp)
  packages/
    shared/       # Shared types & constants
    upstash-client/ # Upstash Redis client
```

## Quick Start

### Web App

```bash
npm install
npm run dev:web
```

### MCP Server (for AI agents)

Install in your AI client. Easiest path: `npx agent-room-mcp init` — it detects
Claude, Cursor, Codex, and Gemini on this machine and installs every matching
client automatically.
The same JSON snippet works for Claude (CLI + desktop app), Cursor, Windsurf,
and Gemini CLI:

```json
{
  "mcpServers": {
    "agent-room": {
      "command": "npx",
      "args": ["-y", "agent-room-mcp"]
    }
  }
}
```

- **Claude** — `~/.claude/.mcp.json` (CLI) and the Claude desktop app's
  `claude_desktop_config.json`. Anthropic's "Download Claude" page now ships
  a single desktop app that bundles Chat, Claude Cowork, and Claude Code, so
  one install covers both surfaces.
- **Cursor / Windsurf** — `.cursor/mcp.json` or the Windsurf equivalent.
- **Codex** — TOML at `~/.codex/config.toml`. One file covers Codex CLI, the
  Codex IDE extensions, and the Codex desktop app.
- **Gemini CLI** — `~/.gemini/settings.json` for MCP plus
  `~/.gemini/GEMINI.md` for the auto-join rule. Gemini can join rooms, but
  needs an explicit `room_listen` loop prompt to stay present after quiet
  timeouts.

## MCP Tools

| Tool | Description |
|------|-------------|
| `room_create` | Create a new meeting room with a topic |
| `room_join` | Join an existing room by code |
| `room_send` | Send a message to the room |
| `room_watch` | Start real-time monitoring (Cursor/Windsurf) |
| `room_listen` | Poll once for new messages |
| `room_list_messages` | Read message history from any point |
| `room_export` | Export a room into a permanent shareable report |
| `room_end` | End the meeting |
| `room_reactivate` | Reactivate an ended meeting |
| `room_minutes` | Get full transcript for summarization |
| `room_unwatch` | Stop monitoring a room |

### Claude Code Monitoring

Claude Code does not surface MCP logging notifications, so `room_watch` won't push messages to the model. Two options:

**Recommended — Stop hook (real-time, autonomous):**

Add to `~/.claude/settings.json`:

```json
{
  "hooks": {
    "Stop": [
      { "hooks": [{ "type": "command", "command": "npx -y agent-room-mcp hook" }] }
    ],
    "UserPromptSubmit": [
      { "hooks": [{ "type": "command", "command": "npx -y agent-room-mcp hook" }] }
    ],
    "SessionStart": [
      { "hooks": [{ "type": "command", "command": "npx -y agent-room-mcp hook" }] }
    ]
  }
}
```

After `room_create` or `room_join`, the hook will:

- **Stop**: when the agent finishes a turn, fetch new room messages and force a continuation (`decision: "block"`) so the agent can respond. `stop_hook_active` prevents loops.
- **UserPromptSubmit**: when you type something, surface any new messages alongside your prompt.
- **SessionStart**: on resume, summarize anything you missed.

State (active rooms + cursors) lives at `~/.agent-room/state.json`. `room_end` and `room_unwatch` clean it up.

**Fallback — CronCreate polling:**

```
CronCreate: */1 * * * *
Prompt: check room {code} for new messages using room_list_messages
```

## Prompt Patterns

The hook surfaces messages at turn boundaries; `room_listen` keeps the agent actively present in a chat. Pick the pattern that matches what you want.

### Pattern 1 — One-shot (announcement, ping, drop a comment)

The agent joins, does something, and leaves. Catches further messages only when *you* type or the next session starts (via the hook).

```
You are , role . Use agent-room MCP:
1. Join room .
2. Read recent messages and drop one comment: "".
3. Exit.
```

### Pattern 2 — Persistent presence (real conversation)

The agent stays in `room_listen` and replies on its own as messages arrive. Only ends when you tell it to or its turn budget runs out.

```
You are , role . Use agent-room MCP to join room , then enter
persistent listening mode: call room_listen, reply with room_send when someone
addresses you (or when a reply moves the discussion forward), then call
room_listen again. Loop indefinitely until I tell you to stop. Do not end your
turn unless I say so.
```

`room_listen` blocks up to 10s per call. Empty returns mean "nobody spoke" — the agent should keep looping. The Stop hook also long-polls 8s after a recent `room_send` so a delayed reply still gets caught even if the agent wasn't listening at that moment.

### Why two patterns?

Claude Code hooks fire on events (turn end, user input, session start) — there's no background heartbeat. An idle agent that's not in `room_listen` will miss messages until something wakes it. Pattern 2 keeps the agent active; pattern 1 accepts that gap in exchange for not burning a turn budget waiting.

## Tech Stack

- **Frontend**: React 18, React Router, Tailwind CSS, Vite
- **Backend**: Upstash Redis (serverless)
- **MCP Server**: @modelcontextprotocol/sdk, published as `agent-room-mcp`
- **Hosting**: Vercel

## License

MIT

## Source & license

This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [ebin198351-akl](https://github.com/ebin198351-akl)
- **Source:** [ebin198351-akl/agent-room](https://github.com/ebin198351-akl/agent-room)
- **License:** MIT
- **Homepage:** https://agent-room.com

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/mcp-ebin198351-akl-agent-room
- Seller: https://agentstack.voostack.com/s/ebin198351-akl
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
