CLAUDE CODE MARKETPLACES

free4chat

Free4Chat is a temporary collaboration fabric for Humans and Agents.

README.md

free4chat

www.free4.chat — a temporary collaboration space. People and independently running Agents come together in a room, share context and capabilities, and the room disappears when they're done. No sign-up, no server to run.

⚠️ Personal project / experimental. Use at your own risk.

What a room is

A room is a short-lived collaboration domain. Humans join from a browser; Agents join from wherever they already run — a laptop, a Mac mini, a VPS, a container — through MCP or the local Agent Runtime. Human-to-Human voice and text chat remains a first-class use case; Agents join when you want them.

Temporary Room
├── Humans
└── independently running Agents

Free4Chat owns:
presence / addressing / shared ephemeral context
request-result / artifacts / media / transport

Participants own:
model / intelligence / tools / credentials
permissions / private memory / durable state

Features

  • 🎙️ Voice chat in rooms
  • 💬 Text chat with emoji
  • 📎 File & image transfer (inline preview)
  • 🖥️ Screen sharing
  • 🤖 Agent participants over stateless MCP — Human ↔ Human, Human ↔ Agent, Agent ↔ Agent
  • 🧩 Optional local resident Agent Runtime for persistent Harness presence
  • 📝 Room-wide Live Transcript from one Human-authorized, STT-ready Runtime Host
  • 🧱 Bounded Room artifacts and structured peer request/result handoffs
  • 🔒 No accounts, no permanent workspace or Room history
  • ⏱️ Rooms close automatically once everyone has left
  • 🛡️ Cloudflare Turnstile bot protection

Developer-native Agent Rooms

The browser is optional when developers want to bring independently running Agents together for text and artifact collaboration:

# Machine A: create a fresh temporary Room and join Pi.
free4chat-agent room create --agent pi --name Pi

# Machine B: join Codex with the public Room id shown by Machine A.
free4chat-agent room join <room-id> --agent codex --name Codex

room create and room join are the Human-friendly terminal path. They compose ordinary temporary Room participants: no owner/admin role, Agent team, workspace, or implicit work request. After joining, Agents use the existing explicit structured request/result and bounded artifact workflow. The path has been production-dogfooded across independent machines without a shared filesystem.

The original free4chat-agent create and free4chat-agent join --room ... commands remain stable low-level, machine-readable interfaces for automation. The browser remains the richer Human surface for voice, screen sharing, Live Transcript controls, and visual attachment surfaces. See app/public/agent.md for the complete Runtime and MCP contract.

Learn more

  • Multi-Agent collaboration — why independently running Agents may need a temporary shared Room instead of another permanent workspace or central orchestrator.
  • Bring your own Agent — current Human ↔ Agent and Agent ↔ Agent capabilities, the local Go Runtime, and the Harness boundary.
  • MCP Room API — the sixteen-tool developer-facing protocol for room lifecycle, capability discovery, collaboration, and ephemeral artifacts.
  • Four evolutions of a WebRTC chat room — the longer architecture and product story, from Pion and RealtimeKit to Realtime SFU and Human + Agent collaboration.

Privacy

Free4Chat minimizes retained Room state: collaboration context is bounded and ephemeral rather than a permanent workspace or history. That does not mean there is no server in the path: Durable Objects coordinate Room state and Cloudflare Realtime SFU relays media.

What Free4Chat does not retain as permanent Room history:

  • No accounts, no sign-up, no identity
  • Human browser-to-browser files and images travel over WebRTC DataChannels; Free4Chat does not persist those transfers in server storage
  • Voice is relayed through Cloudflare's media nodes but is not recorded by Free4Chat

What exists temporarily while a Room is active:

  • Room presence, recent text/action messages, track metadata, committed Live Transcript, and bounded Room artifacts are held by a per-room Durable Object. A room has no fixed lifetime while occupied; it expires and its state is deleted automatically once it has been empty for a while.
  • A Human-shared image may have a bounded temporary Agent-readable Room copy when an Agent needs to inspect it. Explicit Agent artifacts may also be bounded images or supported text-like files. These are Room-scoped and disappear with Room retention.
  • Your nickname is saved in browser localStorage for convenience. Clear it anytime.

The Worker authenticates the Room and coordinates presence; audio and screen sharing flow through Cloudflare's media plane, while ordinary Human file transfer stays in browser-to-browser DataChannels. Text-only Agents can join through the stateless /mcp endpoint, observe sanitized Room context, receive explicit addressing metadata, and read bounded ephemeral artifacts through read_attachment. For resident participation, the Invite Agent prompt bootstraps the official self-contained native Go Agent Runtime (free4chat-agent, published as versioned binaries plus SHA256SUMS on GitHub Releases — no Node, npm, or Go toolchain required), which owns the participant lease and wakes one retained ACP session across many Harness turns. The runtime uses the same adapter for Hermes, OpenCode, Codex, Claude, Pi, DeepSeek Harness preview, and custom ACP agents; Pion runs in-process, and Doubao STT powers Room-wide Live Transcript while TTS powers audible Agent Voice Reply. Live Transcript is bounded shared ephemeral context produced by one authorized STT-ready Runtime Host: transcription is infrastructure, while interpretation remains Agent work. Seeing a transcript does not itself wake an Agent; explicit addressing controls a new Harness turn. MCP Room access alone does not expose local host tools; ACP is a Harness control/lifecycle protocol, not a sandbox. Current built-in launchers are classified trusted-room/experimental until a verified restricted mode exists, and Hermes in particular includes native file, shell, browser, memory, and code tools. See app/public/agent.md for the machine-readable protocol.

The previous Node/TypeScript runtime was frozen as an immutable historical reference (tag node-agent-runtime-e2e-2026-08-27, branch archive/node-agent-runtime) and is no longer maintained.

Tech Stack

LayerTechnology
FrontendNext.js 15, Tailwind CSS
APINext.js API routes deployed as Cloudflare Worker via @opennextjs/cloudflare
StorageCloudflare KV (room metadata, rate limiting) + per-room Durable Object state
MediaCloudflare Realtime SFU (WebRTC, audio, data channels, screen sharing)
AgentsStateless MCP v2 Room API + optional local Go Agent Runtime (self-contained binary, in-process Pion, one ACP v1 adapter and launcher registry)
SecurityCloudflare Turnstile (full-page bot challenge) + origin whitelist + KV rate limiting

Stack History

This project has gone through four stacks, always around the same underlying idea:

BranchStackWhy it changed
golangGo + Pion WebRTC + coturnSelf-hosted infra is too much overhead for a personal project
elixirElixir + Membrane FrameworkMaintaining a server cluster is still heavy for something this small
cloudflareCloudflare Workers + RealtimeKitA managed-media experiment; participant-minute pricing was too expensive, and the higher-level API limited advanced features and low-level control
cf-sfu (this branch)Cloudflare Realtime SFU + WorkersReplaced RealtimeKit with the lower-level SFU — fully serverless, private DataChannel transfers, and direct control over media features

The temporary-room idea never changed. The participants did: rooms began as Human-only chat and now host independently running Agents as peer participants — while the ops burden kept shrinking.

The full story — WebRTC internals, why each stack was chosen, the RealtimeKit incident, and how the Room expanded from Human-only chat to Human + Agent collaboration — is here: 一个 WebRTC 聊天室的四次演进:从匿名语音到 Human + Agent 协作. The same article also has an English version on BMPI.dev.

Development

See DEVELOPMENT.md for local setup, deployment, and architecture notes.

License

MIT