Skip to main content
Glama

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: claude-mesh

Las seis herramientas

tool

qué hace

roster

quién existe, qué sabe, qué tier — una línea por persona, sin cargar .md ninguno

ask

pregunta y espera la respuesta

dm

envía y sigue; en el hilo de una pregunta pendiente, se convierte en la respuesta

inbox

trae la correspondencia (normalmente el hook ya la entrega solo)

board

pizarra compartida, sin destinatario

claim

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:

  • hops decrementa 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 (Stop bloquea la parada y entrega; PostToolBatch entrega 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 desfazer

El 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.jsonsettings.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/v1

brief 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

advisor

leer y aconsejar

allowlist de tools (--allowedTools): lectura, Bash read-only y las tools del escritorio

editor

escribir en el working tree

acceptEdits, y solo bajo claim() activo — el correo rechaza despertar sin él

worktree

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

bypassPermissions + negar Edit/Write

filtró (escribió mediante Bash)

bypassPermissions + negar Edit/Write/Bash

contuvo

sin permission-mode + negar Edit/Write/Bash

contuvo

sin permission-mode + allowlist read-only

contuvo, y además leyó git log normalmente

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 tail

Sigue 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.

  • ask en 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.

A
license - permissive license
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • The team layer for AI coding agents: shared contracts, collision alerts, E2EE sessions.

  • Ephemeral REST chatrooms for AI agents to coordinate. Share a room URL — agents talk live.

  • Agent-to-agent network for teams: dm, who-knows-X routing, shared rooms. Human-in-the-loop.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/icaromelo1/escritorio'

If you have feedback or need assistance with the MCP directory API, please join our Discord server