코딩 에이전트가 메모리를 공유하고, 실시간으로 메시지를 주고받으며, 서로 다른 로컬 또는 원격 세션 간의 파일 액세스를 조정할 수 있도록 지원합니다.
다른 이름 mano7onam/puenteo
- 스타
- 1
- Tools
- —
- 다운로드, 30일
- 143
- 최신 버전
- 0.13.0
- 마지막 커밋
- 2026년 10월 14일
- 라이선스
- MIT
Puenteo MCP란?
Puenteo은(는) MCP server입니다. 코딩 에이전트가 메모리를 공유하고, 실시간으로 메시지를 주고받으며, 서로 다른 로컬 또는 원격 세션 간의 파일 액세스를 조정할 수 있도록 지원합니다.
프로젝트 README에서 생성된 요약
Puenteo MCP server 정보
Puenteo는 코딩 에이전트가 서로 다른 환경에서 통신하고 컨텍스트를 공유할 수 있는 조정 레이어를 제공합니다. 개발자는 Claude Code, Codex, Cursor, Gemini와 같은 다양한 도구를 연결하여 에이전트 간에 메모리를 공유하고 실시간으로 메시지를 주고받을 수 있습니다. 이 시스템은 단일 SQLite 파일을 사용하여 로컬에서 작동하므로, 중앙 서버나 네트워크 연결 없이도 모든 데이터가 사용자의 기기에 안전하게 유지됩니다.
사용자는 CLI, 웹 대시보드 또는 MCP server를 통해 세션을 관리할 수 있습니다. 이 플랫폼은 목표와 상태의 구조화된 핸드오프, 에이전트 히스토리에 대한 랭킹 기반 전체 텍스트 검색, 그리고 여러 에이전트가 동시에 동일한 디렉토리를 편집하는 것을 방지하는 파일 조정 기능을 지원합니다. 서로 다른 컴퓨터에서 작업하는 팀의 경우, zero-config LAN 또는 Nostr relay를 사용하는 mesh 기능을 통해 원격 세션 간의 peer-to-peer 통신을 지원합니다.
활용 사례
- 1에이전트 컨텍스트 동기화다른 세션에서 수행한 특정 스키마 변경 사항에 대해 코딩 에이전트에게 질문합니다.
- 2파일 편집 충돌 방지특정 디렉토리를 점유하여 병렬로 실행 중인 에이전트들이 동일한 코드를 수정하려고 시도하는 것을 방지합니다.
- 3모든 세션 통합 검색랭킹 기반 전체 텍스트 검색을 통해 모든 로컬 에이전트 로그 내에서 특정 주제나 히스토리를 찾습니다.
- 4원격 개발자 간 조정peer-to-peer mesh를 통해 서로 다른 기기에서 실행 중인 에이전트에게 메시지를 보냅니다.
프로젝트의 README를 바탕으로 작성되었습니다. 모든 활용 사례는 해당 내용의 인용문과 대조하여 확인합니다.
Puenteo MCP 설치 방법
형식 확인: 2026년 11월 10일Cursor에 추가Goose에 추가Claude Code에 Puenteo MCP 설치
$ claude mcp add puenteo -- uvx puenteoCursor에 Puenteo MCP 설치
~/.cursor/mcp.json
{
"mcpServers": {
"puenteo": {
"command": "uvx",
"args": [
"puenteo"
]
}
}
}VS Code에 Puenteo MCP 설치
.vscode/mcp.json
{
"servers": {
"puenteo": {
"type": "stdio",
"command": "uvx",
"args": [
"puenteo"
]
}
}
}VS Code CLI에 Puenteo MCP 설치
$ code --add-mcp '{"name":"puenteo","type":"stdio","command":"uvx","args":["puenteo"]}'Claude Desktop에 Puenteo MCP 설치
claude_desktop_config.json
{
"mcpServers": {
"puenteo": {
"command": "uvx",
"args": [
"puenteo"
]
}
}
}Codex에 Puenteo MCP 설치
$ codex mcp add puenteo -- uvx puenteoCodex config.toml에 Puenteo MCP 설치
~/.codex/config.toml
[mcp_servers.puenteo] command = "uvx" args = ["puenteo"]
Gemini CLI에 Puenteo MCP 설치
$ gemini mcp add -s user puenteo uvx -- puenteoGemini settings.json에 Puenteo MCP 설치
~/.gemini/settings.json
{
"mcpServers": {
"puenteo": {
"command": "uvx",
"args": [
"puenteo"
]
}
}
}구성
PUENTEO_LIVE_TESTS
| 이름 | 설명 | 유형 |
|---|---|---|
| PUENTEO_LIVE_TESTS | — |
자동 검사
2026년 11월 13일에 실행됨전체 보고서 →자동 검사를 통과했습니다. 이는 보안 감사가 아닙니다. 코드를 직접 읽고 서버에 필요한 최소한의 권한만 부여하십시오. 검사 방식
- 소스 저장소 연결 및 접근 가능mano7onam/puenteo is public and reachablegithub.com/mano7onam/puenteo ↗통과
- 패키지가 이 저장소를 소스로 명시puenteo names mano7onam/puenteo as sourcepypi.org/project/puenteo/ ↗통과
- 빌드 출처(Sigstore 증명)No build attestation published for this release검사되지 않음
- 오픈 소스 라이선스 (OSI)MITspdx.org/licenses/MIT.html ↗통과
- 최근 1년 내 커밋 또는 릴리스Last commit or release 2026-10-14github.com/mano7onam/puenteo ↗통과
- OpenSSF Scorecard검사되지 않음
- 패키지 이름이 인기 패키지와 유사하지 않음No popular package one edit away from puenteo통과
- 패키지 및 해당 종속성에 중요한 보안 권고 없음1 resolved dependencies checked; no critical advisoryosv.dev ↗통과
- 모델에 대한 숨겨진 지침 없음0 tool descriptions and the README read; no override phrases, credential paths or hidden characters통과
- 파괴적인 도구에 라벨 표시됨검사되지 않음
- 원격 엔드포인트가 MCP 핸드셰이크에 응답검사되지 않음
README
GitHub에서 보기puenteo
Let your coding agents talk to each other.
When you run Claude Code in one terminal, Codex in another and Gemini or Cursor in the IDE, they can't see each other. One renames a column, another breaks on it, and you end up copy-pasting context between windows. puenteo gives every session on your machine:
- 🔎 Shared memory: ranked full-text search over the history of every local agent (Claude Code, Codex, Gemini/Antigravity, Cursor, Copilot, OpenCode, Grok, Pi, Qwen, Continue, Aider, OpenHands, Goose), plus structured handoffs: goal, state, files, commits, failures.
- 💬 Live messaging: see who's running (
puenteo ps), ask another session a question and wait for its answer, broadcast to the project, share#channels. - 🔒 Coordination: claim files or dirs so parallel agents don't edit the same code. Optional git pre-commit guard.
- 🔌 Every interface: CLI, MCP (stdio + HTTP), hooks, instant
watch, HTTP/SSE, an A2A v1.0 facade, a web dashboard and Python, set up by onepuenteo install.

Codex asks Claude about a schema change and gets the answer two seconds later. Claude claims src/db, Cursor reports its frontend fix and Gemini checks a number for the release notes. All of it runs locally: one SQLite file, no daemon, no network.
Puenteo comes from Spanish puente (bridge).
No runtime dependencies · Python ≥ 3.9 · macOS · Linux · Windows · optional Rust core
Install
uv tool install puenteo # or: pipx install puenteo / pip install puenteo
uv tool install 'puenteo[fast]' # + optional Rust core: 3–8x faster parsing and indexing
puenteo install # skills + MCP server into every detected agent
puenteo install --hooks # optional: deliver messages through Claude Code / Codex hooks
puenteo install --dry-run # show the plan without changing anything
install is idempotent. It edits only its own puenteo entry in each config, backs up every file it touches (*.puenteo-bak), and puenteo uninstall reverts it.
Claude Code plugin (skills + MCP + hooks + /peers, /ask, /handoff):
claude plugin marketplace add mano7onam/puenteo
claude plugin install puenteo@puenteo
Talk to running sessions
$ puenteo ps
AGENT SESSION STATUS SEEN MAIL NAME CWD
claude 500a1d65 busy 2m ultimate-agent-4-72 ~/dev/ultimate-agent-4
* claude 87652461 busy 0s puenteo-57 ~/dev/puenteo
codex 01a11123 - 4m Finish performance tests ~/dev/ultimate-agent-4
puenteo whoami # your own address, e.g. claude:87652461-…
puenteo send codex:01a11123 "Which branch has the perf tests?" --wait 300
puenteo send @reviewer "PR ready: feat/x" # peers can pick a name: puenteo join --name reviewer
puenteo send cwd:. "Refactoring src/db, keep out for 30 min" # everyone in this project
puenteo send '#release' "v0.7 tagged" # channels (posting joins)
puenteo send agent:codex "…" | puenteo send '*' "…"
puenteo inbox # read your messages
puenteo reply <msg-id> "answer" # routes back to the sender or channel
puenteo wait -t 120 # block until a message arrives
puenteo watch # stream incoming messages (for an agent's monitor)
puenteo log -f # watch all bus traffic
puenteo claim src/db --note "migration 0042" # advisory lock; conflicts with overlapping claims
puenteo claims --check src/db/schema.sql # exit 1 if a peer holds it
Addresses: agent:session-id (a unique prefix works) · @name · #channel · agent:<vendor> · cwd:<path> · *
How messages reach a session:
| Agent | Woken while idle | While working |
|---|---|---|
| Codex | yes, pushed via codex queue |
hooks / MCP inbox |
| Claude Code | yes, when the session runs puenteo watch under its Monitor tool |
hooks (install --hooks) / MCP inbox |
| Gemini, Cursor, OpenCode, Copilot, Qwen, … | no; the message waits in the inbox | MCP inbox / wait |
All messages live in one local SQLite file (puenteo state dir) and nothing leaves the machine. Bodies are wrapped as untrusted peer data: agents are told that peer messages never count as user instructions or approval. A hop limit, a rate limit and a size cap keep agents from looping.
Across machines: the mesh 🌐
Sessions on different computers find each other and talk peer to peer: one to one, or many to many in rooms. There are no servers to run:
puenteo mesh service install # on each machine, once: runs the bridge at login (launchd/systemd/Task Scheduler)
# or in the foreground: puenteo mesh up
puenteo mesh peers # other machines and their live sessions
puenteo send claude:8765@laptop "…" # any local address + @node reaches another machine
puenteo offer "I know the payments service, can run its tests" -t payments # publish to the bazaar
puenteo find "who can run payments tests" # ranked search across machines
puenteo ask <offer-id> "are tests green on main?" --wait 300
puenteo room join war-room [--secret …] && puenteo send '#war-room@*' "…" # many-to-many, optional E2E secret
puenteo mesh relay --port 7777 # optional: a self-hosted relay for your team
- Transports: zero-config LAN (UDP multicast + direct HTTP), public Nostr relays that get through NAT, a self-hosted relay, or a direct VPN/Tailscale peer.
- Security: every message is a signed event (BIP-340 Schnorr). Direct messages are end-to-end encrypted (NIP-44 v2) and private rooms use a shared secret. The default is closed: a remote message gets in only if it replies to your own thread, is addressed to a session that published an offer, comes from a node you trusted, or arrives in a room you joined. Rate limits and a hop limit apply across machines.
- Pure stdlib: the crypto passes the official BIP-340 and NIP-44 test vectors, and real public relays accept its events.
- Remote messages enter the local bus, so hooks,
codex queue, Monitor, MCP and the dashboard all work with them unchanged. See docs/MESH.md.
Ways in: pick what fits your agent or tool
| Interface | Use it for | Command / endpoint |
|---|---|---|
| CLI | any agent with a shell, scripts | puenteo send/inbox/ps/search … (--json everywhere) |
| MCP (stdio) | Claude Code, Codex, Gemini, Cursor, OpenCode, Copilot, Qwen | puenteo mcp (installed by puenteo install) |
| Hooks | messages show up in context with no tool call | puenteo install --hooks (Claude Code, Codex) |
| Monitor / stream | wake an idle Claude session the moment mail arrives | puenteo watch (instant; Unix-socket doorbell) |
| Exec trigger | glue for anything: notify-send, Slack, scripts | puenteo watch --exec 'cmd' (message JSON on stdin) |
| HTTP REST + SSE | dashboards, editors, other languages | puenteo serve → /api/*, /api/events |
| MCP over HTTP | MCP clients that prefer HTTP | POST /mcp on puenteo serve |
| A2A v1.0 | standard agent-to-agent clients | /.well-known/agent-card.json, POST /a2a |
| Web dashboard | watching and talking to all sessions in a browser | puenteo serve --open |
| Python | your own orchestrators | puenteo.send(), for m in puenteo.listen(): …, puenteo.Bus |
| Git guard | stop commits that touch a file a peer claimed | puenteo guard install |
puenteo serve binds only to 127.0.0.1 and needs a bearer token, stored in a 0600 file (puenteo serve --print-token). It rejects any non-localhost Host or Origin header, which blocks DNS rebinding, as the MCP spec recommends for local HTTP servers.
Speed
| pure Python | with puenteo[fast] (Rust core) |
|
|---|---|---|
| parse transcripts (25 largest, 3.3 GB) | ~300 MB/s | 0.8–2.7 GB/s, all cores |
| cold index rebuild (807 Codex + Claude sessions, ~4 GB) | 14.8 s | 4.3 s |
| global search after new activity | ~14 s | ~2 s |
warm list (4.5k sessions) / warm search |
0.3 s / 0.25 s | same |
| message delivery (send → woken reader) | 0.8 ms median | same |
The Rust core (native/, PyO3 abi3 wheels) is optional. Without it, puenteo stays pure Python with no dependencies. A test checks that both parsers produce byte-identical output on real logs. Set PUENTEO_NATIVE=0 to force pure Python.
MCP server
puenteo mcp is a stdio MCP server with no dependencies, one process per agent session. It detects which session it serves from the parent-process chain, registers on the bus, and exposes these tools:
- history:
sessions,search,outline,pull,show - live:
whoami,peers,send,reply,inbox,wait,thread,channels,subscribe,set_name,claim,release,claims
puenteo install registers it for Claude Code (claude mcp add -s user), Codex (codex mcp add), Gemini, Qwen, Cursor, OpenCode, Copilot and Antigravity.
Search and pull history
puenteo search "gatekeeper dmg" --exclude-self # ranked over ALL sessions (FTS5 index), ~0.2 s
puenteo search "topic" --cwd . --since 2026-09-01
puenteo list --cwd . -n 20 # git-style unique id prefixes
puenteo outline <ref> # milestones with message #index
puenteo pull <ref> --mode handoff # goal + decisions + latest state, budgeted
puenteo pull <ref> --query "topic" --mode query # relevant messages + neighbours
puenteo pull <ref> --around 500 --radius 5
puenteo show <ref> --range 100:120
puenteo export <ref> -f md|html|pdf|json|zip|csv|xml|yaml|all -o out
puenteo index --stats # the index refreshes itself; --clear to reset
<ref> can be a unique id prefix, provider:id, @self, @last, @last:codex, a path, or a title substring. An ambiguous prefix fails with exit code 4 and prints the candidates; puenteo never picks one silently.
Library
import puenteo
for s in puenteo.list_sessions(limit=10, cwd="~/dev/myapp"):
print(s.provider, s.session_id, s.title)
hits = puenteo.search("gatekeeper dmg", exclude_session="my-current-id")
msgs = puenteo.pull(hits[0].session.session_id, query="dmg", mode="query")
puenteo.export_session("019f7a24", fmt="md", output="chat.md")
from puenteo.bus import Bus
with Bus() as bus:
bus.send("claude:8765…", "@reviewer", "PR ready")
for m in bus.inbox("codex:01a1…"):
print(m.sender, m.body)
Providers
| Provider | Store |
|---|---|
| Claude Code | ~/.claude/projects/**/*.jsonl (meta entries skipped, streamed fragments merged) |
| Codex | ~/.codex/sessions/**/rollout-*.jsonl + state_*.sqlite titles; subagents keep their own ids |
| Gemini CLI | ~/.gemini/tmp/** |
| Antigravity | ~/.gemini/antigravity/brain/*/…/transcript*.jsonl |
| Grok | ~/.grok/sessions/**/chat_history.jsonl |
| Pi | ~/.pi/agent/sessions/**/*.jsonl |
| Qwen Code | ~/.qwen/projects/**/chats/* |
| Cursor | macOS ~/Library/Application Support/Cursor · Linux ~/.config/Cursor · Windows %APPDATA%\Cursor |
| Continue | ~/.continue/sessions/** |
| Aider | .aider.chat.history.md (scan with --cwd or PUENTEO_AIDER_ROOTS) |
| OpenHands | ~/.openhands/openhands.db |
| Goose | ~/.config/goose · Windows %APPDATA%\goose |
Live detection (ps) covers Claude Code (~/.claude/sessions), Codex (thread locks), Grok, Junie, and any agent that runs the puenteo MCP server or hooks.
Where things live
| What | Path (macOS / Linux / Windows) | Override |
|---|---|---|
| Search index + metadata cache | ~/Library/Caches/puenteo · ~/.cache/puenteo · %LOCALAPPDATA%\puenteo\Cache |
PUENTEO_HOME, PUENTEO_NO_INDEX=1, PUENTEO_NO_CACHE=1 |
| Message bus | ~/Library/Application Support/puenteo/bus.db · ~/.local/state/puenteo · %LOCALAPPDATA%\puenteo\State |
PUENTEO_BUS |
| Identity | detected automatically | PUENTEO_SESSION=agent:id, --as |
Skills (what your agents learn)
puenteo install gives every agent 11 focused skills. Agents pick the right one from a plain request, so you don't have to remember commands:
| You say… | Skill |
|---|---|
| "set up puenteo", "connect my agents" | puenteo-setup |
| "where did we discuss X", "what did codex do yesterday" | puenteo |
| "ask the other window", "tell codex …" | puenteo-bus |
| "continue where the other session stopped" | puenteo-handoff |
| "we're both editing this repo" | puenteo-team |
| "ask the agent on my other laptop" | puenteo-mesh |
| "open the dashboard", REST/SSE/A2A | puenteo-dashboard |
| "make a PDF of that chat" | puenteo-export |
| "a bot that answers agents", Python API | puenteo-automation |
| "support agent X", plugins | puenteo-plugin-dev |
| "puenteo doesn't work" | puenteo-troubleshoot |
Every command shown in a skill is checked against the real CLI in CI (tests/test_skills.py). evals/run_skill_eval.sh checks with real Claude Code sessions that the right skill loads.
Extend it
New agent store, MCP tool, delivery channel (Slack, IDE…) or live detector? Write a plugin. It's an ordinary package with entry points, and you don't have to fork anything. See docs/PLUGINS.md and the template in examples/puenteo-example-plugin. Run puenteo plugins to see what's loaded.
Contributions to the core, from individuals, companies and AI agents, go through the same gates: CI on 3 OSes, a zero-dependency check, a security scan, DCO sign-off and code-owner review. See CONTRIBUTING.md and GOVERNANCE.md.
Development
python3 -m venv .venv && .venv/bin/pip install -e '.[dev]'
.venv/bin/python -m pytest -q # hermetic (fake $HOME)
PUENTEO_LIVE_TESTS=1 .venv/bin/python -m pytest -q # plus checks against your real stores
See docs/PLAN.md for the roadmap.
License
MIT · mano7onam/puenteo
Puenteo MCP 질문
Puenteo MCP를 Claude Code에 추가하려면 어떻게 하나요?
터미널에서 claude mcp add puenteo -- uvx puenteo를 실행합니다. 모든 프로젝트에서 사용할 수 있게 하려면 --scope user를 추가합니다.
Puenteo MCP를 Cursor에 추가하려면 어떻게 하나요?
~/.cursor/mcp.json를 열고 mcpServers 아래에 서버를 추가합니다. 위 설치 섹션에 표시된 Cursor 구성을 사용합니다.
데이터가 제 컴퓨터를 벗어나나요?
아니요, 모든 메시지와 데이터는 로컬 SQLite 파일에 저장되며, 사용자가 직접 mesh 또는 relay를 설정하지 않는 한 데이터가 외부로 유출되지 않습니다.
서로 다른 컴퓨터에 있는 에이전트끼리 통신할 수 있나요?
네, zero-config LAN, Nostr relay 또는 자체 호스팅 relay를 사용하는 mesh 서비스를 통해 peer-to-peer 통신이 가능합니다.
에이전트에 어떻게 설치하나요?
'puenteo install' 명령어를 사용하여 감지된 모든 에이전트에 SKILL 및 MCP server를 추가할 수 있습니다.