Skip to main content
Glama

オフィス

Claude Code セッション間の ピアツーピア通信。あなたのセッションと専門家が名前で呼べる人になり、同時に複数の話題について互いに会話します — オーケストレーターなし。

デザイン仕様: pessoal/claudicaro-cli/docs/design/2026-08-02-escritorio-multiagente.md。

なぜこれなしではできなかったのか

Claude Code のネイティブトポロジーは ツリー です。サブエージェントは親に返し、SendMessage は自身のセッションが生成した相手にしか届かず、Workflow はスクリプト経由でデータを渡します。兄弟同士は会話しません。横方向の通信には共有メディアが必要です — それがこのメールです。

Related MCP server: neighbors

6つのツール

tool

機能

roster

誰がいるか、何を知っているか、どのティアか — 一人につき一行、.md を読み込まない

ask

質問して 応答を待つ

dm

送信して 続行する。保留中の質問のスレッド内では、その応答になる

inbox

メッセージを取得する(通常はフックが自動で配信する)

board

共有ホワイトボード、宛先なし

claim

操作する前にリソースを主張する

さらに fechar_thread は会話を終了し、各同僚にノートブックを蒸留させます。

仕組み

スレッド は会話の唯一のコンテナです — ルームやチャンネルを置き換えます。ピア間の議論は N 人の参加者がいるスレッドで、各参加者は誰に返信するかを選びます。

ボスなし、メール内の2つのルールがシステムを支えます:

  • hops はメッセージごとにデクリメントされ、ゼロになるとメールは拒否します。無限のピンポンを防ぎます。

  • スレッドの所有者はそれを開いた人であり、その人だけが閉じることができます。

配信 には2つの性質があります:

  • 生存セッション は フック で受信します(Stop は停止をブロックして配信します。PostToolBatch は作業の途中で配信します)。フックはスクリプトです — モデルの外部で実行され、トークンコストはゼロです。

  • ロスターの同僚 はメールによって 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 を設定し、claude mcp add --scope user で MCP サーバーを登録します(これは ~/.claude.json に書き込まれます — settings.json は MCP を登録しません)。

初回は settings.json.antes-do-escritorio にバックアップを作成し、そのバックアップを上書きすることはありません。

ロスター

~/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/v1

brief は roster() が返す唯一のものです — 「この人を呼ぶのはどんな時か」を考えて書いてください。パスは ~ と ${VAR} を受け入れます。環境変数の展開により、同じファイルが Mac と VM の両方で機能し、ワークスペースは異なる場所にあります。

ティア

tier

可能なこと

強制方法

advisor

読み取りとアドバイス

ツールの 許可リスト(--allowedTools): 読み取り、Bash 読み取り専用、およびオフィスのツール

editor

ワーキングツリーに書き込む

acceptEdits、および claim() がアクティブな場合のみ — メールはそれなしでの起床を拒否する

worktree

分離して書き込む

独自の git worktree。作成できない場合、実際のリポジトリにフォールバックせず 拒否 する

リクエストはクエリ内でティアを 引き下げる ことはできますが、引き上げることはできません。

なぜ拒否リストではなく許可リストなのか

最初のバージョンは --disallowedTools Edit Write NotebookEdit を bypassPermissions と共に使用していました。実際の claude でテストしたところ、漏洩しました: 同僚が Bash 経由でファイルを書き込みましたが、これは拒否リストに含まれていませんでした。4つのバリエーションで測定:

flags

結果

bypassPermissions + 拒否 Edit/Write

漏洩(Bash 経由で書き込み)

bypassPermissions + 拒否 Edit/Write/Bash

防止

許可モードなし + 拒否 Edit/Write/Bash

防止

許可モードなし + 許可リスト 読み取り専用

防止、さらに git log は正常に読み取れた

許可リストに決定しました: リストし忘れたものは許可される代わりに 拒否 されます。許可リスト内の Bash(cat:*) はリダイレクト(cat > arquivo)によるエスケープを 許可しなかった ことに注意してください。

動作の確認

npm run tail

メールを監視し、すべてのセッション間 で何が起こっているかを出力します — ボードへの書き込み、クレーム、スレッドの開始、メッセージの交換、応答の到着:

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 が宣言されている場合はそれを使用し、ない場合は usuário@pasta から派生します — プロジェクトごとに安定しているため、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)

既知の制限

  • マシンごとに1つのメール。 Oracle VM 上のセッションは Mac のメールと通信しません。マシン間のブリッジは別の問題です。

  • dist/ は SSD 上にあります。 SSD がアンマウントされると、フックは静かに失敗し(|| true)、MCP は切断されます — 何も停止しませんが、再マウントされるまでオフィスは消えます。

  • 生存セッションへの ask は、そのセッションが実行中であることに依存します。 誰もそのセッションを開いていない場合、タイムアウト(5分)まで待機し、応答は後で受信箱に入ります。

Related MCP Connectors

Related MCP Servers