muse session-message は、セッション間でメッセージをやり取りするためのコマンドです。他のサブコマンドと比べて明らかに毛色が違い、低レベルな引数が並びます。
muse session-message send
--socket <path>
--requester-user-id <id>
--sender-session-id <id>
--sender-token-id <id>
--sender-token-secret-stdin
--command-id <id>
--message-id <id>
--target-session-id <id>
--body <text>
muse session-message serve
--socket <path>
[--max-connections N]
読み取れる設計
Unixドメインソケットで通信する
--socket <path> がある以上、ネットワークポートではなくローカルのソケットファイル経由です。同一マシン上のプロセス間通信を前提にしています。
送信側に認証がある
注目すべきは --sender-token-id と --sender-token-secret-stdin です。セッション間のメッセージ送信に、トークンによる認証がかかっています。しかも秘密の部分は標準入力から読む方式で、他のコマンドと同じくコマンドライン引数には出しません。
単なる内部通信ではなく、送り主を検証する仕組みが入っているということです。任意のプロセスが勝手に他のセッションへ指示を送り込めないようにする意図が読み取れます。
冪等性のためのID
--command-id と --message-id を呼び出し側が指定します。イベントログで見た冪等キーと同じ思想で、再送しても二重処理にならない設計だと考えられます。
受け側は常駐する
serve は待ち受け側です。--max-connections で同時接続数を制限できます。
何のための機能か
ヘルプの一行説明は「Send or serve cross-session messages(セッションをまたぐメッセージの送信・待受)」です。複数のセッションを並行して走らせ、互いに連絡を取らせる用途が想定されます。
サブエージェントの worktree 隔離と合わせて考えると、複数のエージェントを協調させる基盤の一部だと見るのが自然です。
これは低レベルAPIです
引数の並びから分かるとおり、人間が手で叩くことを主眼にした作りではありません。上位の機能から呼ばれる想定と考えられます。通常の利用では直接触る場面は少ないはずです。