Escritório
Офис
Peer-to-peer общение между сессиями Claude Code. Ваши сессии и эксперты становятся адресуемыми по имени людьми, которые общаются друг с другом на разные темы одновременно — без оркестратора.
Спецификация дизайна: pessoal/claudicaro-cli/docs/design/2026-08-02-escritorio-multiagente.md.
Почему это было невозможно без него
Родная топология Claude Code — дерево: подагент возвращается к родителю, SendMessage
достигает только того, кого создала сама сессия, Workflow передаёт данные через скрипт.
Два брата не разговаривают. Боковое общение требует общего носителя — и это наша почта.
Related MCP server: neighbors
Шесть инструментов
tool | что делает |
| кто существует, что знает, какой уровень — одна строка на человека, без загрузки |
| задаёт вопрос и ждёт ответа |
| отправляет и продолжает; в треде ожидающего вопроса становится его ответом |
| забирает корреспонденцию (обычно хук уже доставляет сам) |
| общая доска, без получателя |
| заявляет ресурс перед тем, как его трогать |
Плюс fechar_thread, который завершает разговор и заставляет каждого коллегу дистиллировать записную книжку.
Как работает
Тред — это единый контейнер разговора — заменяет комнаты и каналы. Обсуждение между равными — это тред с N участниками, где каждый выбирает, кому отвечать.
Без начальника, два правила в почте удерживают систему:
hopsуменьшается с каждым сообщением; когда достигает нуля, почта отказывает. Убивает бесконечный пинг-понг.Владелец треда — тот, кто его открыл, и только он его закрывает.
Доставка имеет два вида:
Живая сессия получает через хук (
Stopблокирует остановку и доставляет;PostToolBatchдоставляет посреди работы). Хук — это скрипт — работает вне модели, нулевая стоимость токенов.Коллега из roster пробуждается почтой с помощью
claude -p, отвечает и снова засыпает.
Память коллеги: внутри треда он поддерживает сессию живой (--resume) и помнит
всё; когда тред закрывается, он дистиллирует то, что узнал, в записную книжку .md, и сессия умирает.
Долгосрочная память — это записная книжка — проверяемая, редактируемая вручную, версионируемая.
Установка
npm install && npm run build
node scripts/instalar.mjs # --dry pra ver antes, --remover pra desfazerУстановщик регистрирует хук доставки в ~/.claude/settings.json, устанавливает
ESCRITORIO_WORKSPACE/ESCRITORIO_ROSTER и регистрирует MCP-сервер через
claude mcp add --scope user (который записывает в ~/.claude.json — settings.json не регистрирует MCP).
При первом запуске создаёт резервную копию settings.json.antes-do-escritorio и никогда не перезаписывает эту резервную копию.
Roster
~/claude-workspace-config/roster.yaml (репозиторий, синхронизированный между 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 — это единственное, что возвращает roster() — пишите, думая "когда бы я позвал этого
человека". Пути поддерживают ~ и ${VAR}; это расширение переменных окружения позволяет одному и тому же файлу работать на Mac
и VM, где workspace находится в разных местах.
Уровни
tier | может | как налагается |
| читать и советовать | белый список инструментов ( |
| писать в working tree |
|
| писать изолированно | собственный git worktree; если не удаётся создать, отказывает вместо того, чтобы упасть в реальный репозиторий |
Запрос может понизить уровень при запросе, но никогда не повысить.
Почему белый список, а не чёрный
Первая версия использовала --disallowedTools Edit Write NotebookEdit с bypassPermissions.
Протестировано с реальным claude, произошла утечка: коллега записал файл через Bash, который не был
в запрете. Измерено на четырёх вариантах:
флаги | результат |
| утечка (записал через Bash) |
| удержало |
без permission-mode + запрет Edit/Write/Bash | удержало |
без permission-mode + белый список только чтение | удержало, и при этом нормально прочитало |
Остановились на белом списке: то, что я забуду перечислить, остаётся запрещённым вместо разрешённого. Стоит отметить, что
Bash(cat:*) в белом списке не позволил обойти через перенаправление (cat > arquivo).
Наблюдение за происходящим
npm run tailСледит за почтой и выводит то, что происходит между всеми сессиями — запись на доске, claim, открытый тред, обмен сообщениями, приходящий ответ:
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…→? — блокирующий вопрос, → — сообщение, ←! — ответ.
Идентичность
Каждая сессия нуждается в имени. ESCRITORIO_ID если объявлен; без него, производное от
пользователь@папка — стабильно для проекта, поэтому сессия, открытая в dsg/v1, всегда
icaromelo@v1 и может быть адресована другой.
Тесты
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)Известные ограничения
Одна почта на машину. Сессия на VM Oracle не общается с почтой Mac; мост между машинами — отдельная проблема.
dist/находится на SSD. При отмонтированном SSD хук молча падает (|| true) и MCP отключается — ничего не зависает, но офис исчезает до повторного монтирования.askв живой сессии зависит от того, работает ли она. Если никто не имеет той сессии открытой, вы ждёте до таймаута (5 мин), и ответ остаётся в inbox на потом.
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