Описание
Cross-machine agent messaging for Claude Code and Codex
README
┌─────────────┐ ┌───────────┐
│ Claude Code │ │ Codex CLI │
│ (laptop) │──── Patchcord ────│ (server) │
└─────┬───────┘ └─────┬─────┘
│ "run the migration" │
│────────────────────────────────▶│
│ │
│ "done - 3 tables created" │
│◀────────────────────────────────│
patchcord
Messenger for AI agents.
AI agents live in separate terminals, separate machines, separate platforms. They can't talk to each other. So you copy-paste between them like it's 2003.
Patchcord lets them message each other directly:
You → Claude Code: "Ask backend to run the migration"
Claude Code: send_message("backend_codex", "run the migration")
Codex (other machine): reply("done - 3 tables created, seed data loaded")
Claude Code: "Migration complete. 3 tables created."
Two agents. Two platforms. Two machines. Zero copy-paste.
Works across Claude Code, Codex, Cursor, Windsurf, VS Code, Gemini CLI, Zed, OpenCode, claude.ai, ChatGPT - any MCP client, any machine, any platform.
Setup
npx patchcord@latest
One command. Opens your browser. Pick your tool, project, and agent name. Done.
No tokens to copy. No config to edit. The browser handles everything and pushes the config back to your terminal automatically.
Works on Linux, macOS, and Windows.
Self-hosting
Run your own server instead of patchcord.dev:
git clone https://github.com/ppravdin/patchcord.git && cd patchcord
cp .env.server.example .env.server
# edit: SUPABASE_URL, SUPABASE_KEY, PATCHCORD_PUBLIC_URL
Run the SQL files in migrations/ in your Supabase SQL Editor, then:
python3 -m patchcord.cli.manage_tokens add --namespace myproject frontend
python3 -m patchcord.cli.manage_tokens add --namespace myproject backend
docker compose --env-file .env.server up -d --build
Connect agents with your token and server URL:
npx patchcord@latest --token <your-token> --server https://patchcord.yourdomain.com
Features
Async - agents don't need to be online at the same time. Messages queue.
Multi-recipient - send to multiple agents at once: send_message("frontend, backend", "sync up").
Conversations - back-and-forth, not fire-and-forget. Agents negotiate.
Threads - named threads group related messages: send_message("backend", "...", thread="auth-migration"). reply() auto-inherits the thread. resolve=true closes it.
Deferred - busy agent? Acknowledge now, handle later. Survives context compaction.
Files - send attachments between agents. Presigned uploads, relay URLs.
Namespaces - your agents are isolated. frontend@myproject can't see frontend@yourproject.
Tools
inbox(all_agents=false)
Read pending messages, your identity, and who's online. Call this first.
all_agents=true- include offline agents in the presence list
send_message(to_agent, content, thread="")
Send a message to one or more agents. Comma-separated for multiple recipients.
to_agent- agent name, or"agent1, agent2"for multi-sendcontent- message text (up to 50,000 chars)thread- optional slug to group messages in a named thread:send_message("backend", "...", thread="auth-migration")- Blocked if you have unread inbox messages - read them first
reply(message_id, content, defer=false, resolve=false)
Reply to a message in your inbox. Automatically stays in the thread of the message you're replying to.
message_id- ID from the inbox messagecontent- your reply (optional when usingresolve=true)defer=true- keep original message visible in inbox for laterresolve=true- close the thread when the task is done; notifies sender
wait_for_message(timeout_seconds=300)
Block until a new message arrives. Returns immediately when one comes in.
timeout_seconds- how long to wait (default 5 min, max 1 hour)
attachment(path_or_url, upload, filename, file_data, relay)
Upload, download, or relay files between agents.
- Download:
attachment("namespace/agent/file.md")- fetch a shared file - Upload:
attachment(upload=true, filename="report.md")- get a presigned upload URL - Upload inline:
attachment(upload=true, filename="report.md", file_data="<base64>")- upload directly (web agents) - Relay URL:
attachment(relay=true, path_or_url="https://...", filename="file.md")- fetch external URL and store
recall(limit=10, from_agent="", thread_id="")
View recent message history, including already-read messages.
limit- how many messages to returnfrom_agent- filter to messages from a specific agentthread_id- filter to messages in a specific thread
unsend(message_id)
Take back a message before the recipient reads it. Only works on unread messages.
Client support
| Client | Auth | Setup |
|---|---|---|
| Claude Code | Bearer | npx patchcord@latest |
| Codex CLI | Bearer | npx patchcord@latest |
| Cursor | Bearer | npx patchcord@latest |
| Windsurf | Bearer | npx patchcord@latest |
| Gemini CLI | Bearer | npx patchcord@latest |
| VS Code (Copilot) | Bearer | npx patchcord@latest |
| Zed | Bearer | npx patchcord@latest |
| OpenCode | Bearer | npx patchcord@latest |
| claude.ai | OAuth | Add MCP server URL in settings |
| ChatGPT | OAuth | Add MCP server URL in settings |
Architecture
graph TD
A["Claude Code / Codex / Cursor"] --> S["Patchcord Server"]
B["Windsurf / Gemini / VS Code"] --> S
C["Zed / OpenCode"] --> S
D["claude.ai / ChatGPT"] --> S
S --> DB["Supabase<br/>Postgres + Storage"]
Configuration
| Variable | Default | Description |
|---|---|---|
SUPABASE_URL |
required | Your Supabase project URL |
SUPABASE_KEY |
required | Service role key |
PATCHCORD_PUBLIC_URL |
http://localhost:8000 |
Public-facing base URL |
PATCHCORD_RATE_LIMIT_PER_MINUTE |
100 |
Per-token request limit |
PATCHCORD_CLEANUP_MAX_AGE_DAYS |
7 |
Message retention |
Security
- Bearer tokens are per-agent secrets. Treat like passwords.
- OAuth tokens are issued per-session with expiry and refresh.
- Namespace isolation: agents in one namespace cannot read another's messages.
- Rate limiting with bans. SSRF protection. Path traversal protection.
- Supabase credentials stay on the server. Agents never see them.
See SECURITY.md for the full trust model and disclosure policy.
Contributing
Issues and pull requests are welcome.
For security vulnerabilities, use GitHub's private advisory reporting - do not open public issues.
License
MIT
Установить Patchcord в Claude Desktop, Claude Code, Cursor
unyly install patchcordСтавит в Claude Desktop, Claude Code, Cursor и VS Code — сам разбирается с npx, uvx и сборкой из исходников.
Впервые? Поставь CLI: curl -fsSL https://unyly.org/install | sh
Или настроить вручную
Выполни в терминале:
claude mcp add patchcord -- npx -y patchcordFAQ
Patchcord MCP бесплатный?
Да, Patchcord MCP бесплатный — установка в пару кликов через Unyly без оплаты.
Нужен ли API-ключ для Patchcord?
Нет, Patchcord работает без API-ключей и переменных окружения.
Patchcord — hosted или self-hosted?
Self-hosted: сервер запускается локально на твоей машине командой из раздела установки.
Как установить Patchcord в Claude Desktop, Claude Code или Cursor?
Открой Patchcord на unyly.org, выбери вкладку своего клиента (Claude Desktop, Claude Code, Cursor) и нажми Install — конфиг сгенерируется автоматически, без правки JSON.
Похожие MCP
GitHub
PRs, issues, code search, CI status
автор: GitHubFilesystem
Secure file operations with configurable access controls.
Memory
Knowledge graph-based persistent memory system.
Template MCP Server
A CLI tool to create a new Model Context Protocol server project with TypeScript support, dual transport options, and an extensible structure
автор: mcpdotdirectCompare Patchcord with
Не уверен что выбрать?
Найди свой стек за 60 секунд
Автор?
Embed-бейдж для README
Похожее
Все в категории development
