celesto
AI 에이전트를 위한 안전하고 영구적인 컴퓨터
다른 기기에서 Claude Code와 Codex 세션, 그리고 휴대폰 Claude 앱을 연결해 메시지를 주고받는 자체 호스팅 MCP 서버입니다
A self-hosted MCP server for messaging between Claude Code and Codex sessions on different machines, and the Claude app on your phone. Watch Claude Code on a laptop and Codex on a NAS work together: o
개발 도구GitHub @jztan온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
저장소 정보는 아직 수집하지 않았습니다.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
Claude Code and Codex can wake each other and hand off work across machines. Give them a task from your phone and check their replies in the Claude app. Self-hosted over MCP.
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Self-hosted messaging between coding agents on different machines, over MCP. See it work at kampung-mcp.jztan.com.
A Claude Code session on your laptop can ask a Codex session on your desktop a question, and the answer turns up at the end of its next turn. Kampung is one small server you run in Docker, plus a client on each machine that wires it into Claude Code and Codex.
mcp-name: io.github.jztan/kampung-mcp
The name comes from the kampung (Malay for village) and its spirit of gotong-royong: neighbours helping each other. Here the neighbours are your agents, each in its own machine and repo, lending each other a hand.
Status: beta. The MCP tools and
/v1can still change before v1.0. The client is on PyPI askampung-mcpand in the MCP Registry asio.github.jztan/kampung-mcp. The server image isghcr.io/jztan/kampung-mcp(amd64 and arm64).
| Without Kampung | With Kampung | |
|---|---|---|
| Agents on different machines | You copy and paste between terminals | send to desktop/api, read with inbox |
| Claude Code and Codex together | No shared channel | Same MCP tools for both |
| An agent finishes its turn | Mail sits unread until you look | The Stop hook keeps it going to read the mail |
| An agent is idle | Nothing happens until you type | Claude Code (2.1.321 or later) and Codex on macOS and Linux wake within seconds, with no flag to launch |
| Two agents reply to each other forever | Runaway loop | A loop guard gives each pair of mailboxes a few wakes that come back slowly, and each mailbox a budget that typing refills (so do the dashboard and a message from you in the Claude app) |
| Who can talk to whom | Anything that has the URL | Only machines you have paired |
| Seeing what happened | Logs, if any | An audit log and a dashboard |
Each agent talks to a local stdio adapter, which adds the machine's key and the session's identity and forwards to the server. The key never passes through the model's tool calls, and the server stamps the sender from it, so an agent cannot pretend to be another machine. Mail waits in a per-repo mailbox until a session reads it.
Run the server (on a machine every other machine can reach):
git clone --branch master https://github.com/jztan/kampung-mcp.git
cd kampung-mcp
docker compose up -d --wait
It runs the latest release and listens on 127.0.0.1:8803. For HTTPS, pinning a release and backups, see docs/server.md.
Create a key for each machine and pair them:
docker compose exec kampung kampung key add laptop # prints the key once
docker compose exec kampung kampung key add desktop
docker compose exec kampung kampung pair laptop desktop
Connect each machine with its own key (with uv):
uv tool install kampung-mcp
kampung-mcp setup --server https://kampung.example.com
Setup asks for the key without showing it. Add --agent codex or --agent both for Codex; see docs/clients.md. On Claude Code 2.1.321 or later, setup also turns on idle wake; Channels is an optional fallback. Restart Claude Code, and ask it to list_peers.
Setup records the hook's full path, which includes the Python version. If the uv tool install moves to another Python minor version, rerun kampung-mcp setup: the hooks fail open, so otherwise they just stop working, with no error.
For a step-by-step deployment on AWS, see Deploy on Amazon Lightsail.
Why this exists, and how it came together: How I Let AI Agents on Different Machines Work Together
여기까지가 README 앞부분입니다. 나머지는 원문에서 읽을 수 있습니다. README 전문 보기 ↗