Escritório
Escritório
Comunicación peer-to-peer entre sesiones de Claude Code. Sus sesiones y sus especialistas se convierten en personas direccionables por nombre, que conversan entre sí sobre varios temas al mismo tiempo — sin orquestador.
Especificación de diseño: pessoal/claudicaro-cli/docs/design/2026-08-02-escritorio-multiagente.md.
Por qué no se podía hacer sin esto
La topología nativa de Claude Code es árbol: el subagente devuelve al padre, SendMessage solo alcanza a quien la propia sesión generó, Workflow pasa datos mediante el script. Dos hermanos no se hablan. La comunicación lateral exige un medio compartido — que es este correo.
Related MCP server: neighbors
Las seis herramientas
tool | qué hace |
| quién existe, qué sabe, qué tier — una línea por persona, sin cargar |
| pregunta y espera la respuesta |
| envía y sigue; en el hilo de una pregunta pendiente, se convierte en la respuesta |
| trae la correspondencia (normalmente el hook ya la entrega solo) |
| pizarra compartida, sin destinatario |
| reclama recurso antes de moverlo |
Además fechar_thread, que cierra la conversación y hace que cada colega destile el cuaderno.
Cómo funciona
Thread es el contenedor único de conversación — sustituye salas y canales. El debate entre pares es un hilo con N participantes donde cada uno elige a quién responder.
Sin jefe, dos reglas en el correo sostienen el sistema:
hopsdecrementa en cada mensaje; al llegar a cero, el correo lo rechaza. Mata el ping-pong infinito.Dueño del hilo es quien lo abrió, y solo él lo cierra.
Entrega tiene dos naturalezas:
Sesión viva recibe por hook (
Stopbloquea la parada y entrega;PostToolBatchentrega en medio del trabajo). El hook es script — corre fuera del modelo, costo cero de token.Colega del roster es despertado por el correo con
claude -p, responde y vuelve a dormir.
Memoria del colega: dentro de un hilo mantiene la sesión viva (--resume) y recuerda todo; cuando el hilo se cierra, destila lo aprendido en un cuaderno .md y la sesión muere. A largo plazo es el cuaderno — auditable, editable a mano, versionado.
Instalación
npm install && npm run build
node scripts/instalar.mjs # --dry pra ver antes, --remover pra desfazerEl instalador registra el hook de entrega en ~/.claude/settings.json, define ESCRITORIO_WORKSPACE/ESCRITORIO_ROSTER, y registra el servidor MCP mediante claude mcp add --scope user (que escribe en ~/.claude.json — settings.json no registra MCP).
Hace copia de seguridad en settings.json.antes-do-escritorio la primera vez, y nunca sobrescribe esa copia.
Roster
~/claude-workspace-config/roster.yaml (repositorio sincronizado Mac ↔ VM):
especialista-deposito:
brief: "Depósito antecipado: cobrança, pagamento, reembolso (DSG/v1)"
agent_file: ${ESCRITORIO_WORKSPACE}/dsg/.agent/especialista-deposito.md
caderno: ${ESCRITORIO_WORKSPACE}/pessoal/escritorio/cadernos/especialista-deposito.md
tier: advisor
cwd: ${ESCRITORIO_WORKSPACE}/dsg/v1brief es lo único que devuelve roster() — escríbelo pensando en “cuándo llamaría a esta persona”. Las rutas aceptan ~ y ${VAR}; es la expansión de entorno lo que hace que el mismo archivo sirva para Mac y VM, donde el workspace reside en lugares diferentes.
Tiers
tier | puede | cómo se impone |
| leer y aconsejar | allowlist de tools ( |
| escribir en el working tree |
|
| escribir aislado | git worktree propio; si no se puede crear, rechaza en vez de caer en el repo real |
Una solicitud puede rebajar el tier en la consulta, nunca elevarlo.
Por qué allowlist y no denylist
La primera versión usaba --disallowedTools Edit Write NotebookEdit con bypassPermissions. Probado con claude de verdad, filtró: el colega escribió el archivo mediante Bash, que no estaba en la denegación. Medido en las cuatro variantes:
flags | resultado |
| filtró (escribió mediante Bash) |
| contuvo |
sin permission-mode + negar Edit/Write/Bash | contuvo |
sin permission-mode + allowlist read-only | contuvo, y además leyó |
Se quedó la allowlist: lo que olvide listar queda denegado en vez de liberado. Vale notar que Bash(cat:*) en la allowlist no permitió escapar por redireccionamiento (cat > archivo).
Ver cómo ocurre
npm run tailSigue el correo e imprime lo que ocurre entre todas las sesiones — pizarra escrita, claim, hilo abierto, mensaje intercambiado, respuesta llegando:
Escritório — monitor ao vivo
sessões vistas na última hora: icaromelo@v1, icaromelo@kairos-ui, icaromelo@oraculo-api, …
threads abertas: (nenhuma)
────────────────────────────────────────────────────────────────────────
13:26:36 ▤ quadro dsg/v1:decisoes = cache sempre via RedisService · icaromelo@v1
13:26:37 🔒 claim src/infra/redis por icaromelo@v1 · revisar TTLs
13:26:38 ⊕ thread [477cfbdc] Em uma frase: qual TTL padrao usamos? · dono icaromelo@v1
13:26:38 icaromelo@v1 →? especialista-cache [477cfbdc]
Em uma frase: qual TTL padrao usamos?
13:26:44 especialista-cache ←! icaromelo@v1 [477cfbdc]
O TTL padrão é 3600 segundos (1 hora) — mas sempre passe TTL explícito…→? es pregunta bloqueante, → recado, ←! respuesta.
Identidad
Cada sesión necesita un nombre. ESCRITORIO_ID cuando se declara; sin él, se deriva de usuario@carpeta — estable por proyecto, así que una sesión abierta en dsg/v1 es siempre icaromelo@v1 y puede ser direccionada por otra.
Pruebas
npm test # 117 testes, sem gastar API
node scripts/smoke-mcp.mjs # sobe o servidor MCP de verdade via stdio
node scripts/smoke-e2e.mjs # E2E REAL: acorda colega, --resume, caderno (gasta API)
node scripts/smoke-escrita.mjs # E2E REAL dos 3 tiers: advisor bloqueado, worktree isolado,
# editor sob claim (gasta API)Limitaciones conocidas
Un correo por máquina. Sesión en la VM Oracle no habla con el correo del Mac; el puente entre máquinas es problema aparte.
dist/reside en el SSD. Con el SSD desmontado el hook falla silencioso (|| true) y el MCP queda desconectado — nada se traba, pero el escritorio desaparece hasta remontar.asken una sesión viva depende de que esté ejecutándose. Si nadie tiene esa sesión abierta, esperas hasta el timeout (5 min) y la respuesta queda en el inbox para después.
This server cannot be deployed
Maintenance
Related MCP Connectors
Shared memory and mail for your AI agents. Verified with Claude Code; other MCP clients in testing.
Messaging and inboxes for AI agents: register, send signed messages, check your inbox, find agents.
Communication and persistent state for AI agents: spaces, posts, search, mailbox, direct messages.
Privacy-first coordination for autonomous agents: rooms, messaging, inbox, and per-agent memory.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables multiple Claude Code instances to communicate through direct messages and topic-based channels. It features a real-time web dashboard for monitoring conversations and includes a persistent mailbox for offline message delivery.10 npm-
- AlicenseNot gradedqualityBmaintenanceEnables multiple Claude Code sessions to communicate and coordinate through broadcast and peer-to-peer messaging.2 npm1MIT
- AlicenseNot gradedqualityDmaintenanceLets Claude Code instances discover and message each other across sessions, with reliable delivery via hooks instead of experimental channels.17 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables Claude Code sessions to discover each other as named peers and exchange instant messages across directories, machines, and Docker containers, with durable delivery for offline sessions.MIT