agent-manager

ドキュメント · セッションとグループ

セッションとグループ

このページは英語版の翻訳です。内容が異なる場合は英語版が正となります。

各エージェントは、それぞれ専用のディレクトリ、コマンド、環境を持つ本物の tmux セッションです。マネージャーを終了してもエージェントは動き続け、ノート PC の蓋を閉じても残っています。

モデル、推論の強さ、プロファイル

n フォームには model と effort の行が tool の下にあり、プロファイルを持つツールではその上に profile の行があります。クイックプロンプトモードでは同じ選択肢を ctrl+l、ctrl+x、ctrl+y で選べ、agent-manager spawn は --model、--effort、--profile を受け付けます。値はすべて CLI 自身から、CLI がプログラム向けに提供するインターフェースを通じて取得します。そのため来週リリースされたモデルも、Agent Manager のリリースを待たずにリストに表示されます。

何も選ばなければ、各行は CLI 自身のデフォルト(その CLI で設定した内容)のままです。各 CLI ごとに最後に選んだモデル、推論の強さ、プロファイルが記憶され、その CLI の次のセッションはそこから始まります。モデルのリストは入力に応じて絞り込まれ、最近選んだものが先頭に並び、リストにあるモデルだけを選べます。推論の強さの行には、選んだモデルが受け付けるレベルが表示されます。選択はセッションに保存されるので、再起動(R)、復帰(v)、分岐(f)のいずれもその設定で動きます。

CLI取得方法モデル推論の強さプロファイル
Claude CodeAgent SDK の initialize リクエスト対応モデルごと·
Codexcodex app-server対応モデルごと、デフォルト付きnot supported
Grok Buildgrok agent stdio 上の ACP対応モデルごと·
Pipi --mode rpc対応モデルごと·
Oh My Piomp --mode rpc対応モデルごと·
Muse Codemuse serve対応モデルごと·
OpenCodeopencode models対応not supported·
Gemini CLIgemini --acp 上の ACP対応not supported·
Hermes Agenthermes serveプロファイルごと、プロバイダー付き手入力対応
Antigravity CLIまだ取得していないnot supportednot supported·
Command Codeプログラムから取得する手段がないnot supportednot supported·
Cursor CLIcursor-agent acp 上の ACP対応モデル ID に含まれる·

CLI が値を返せない行には "not supported"(非対応)と表示されます。OpenCode と Gemini CLI は起動時に推論の強さを受け付けません。Cursor CLI は推論の強さをモデル ID に含めるので、フォームに推論の強さの個別の項目はありません。Hermes はどのモデルが推論するかは返しますがレベルは返さないため、推論の強さは手入力になり、推論するモデルでだけその行が表示されます。Pi のリストには Pi 0.84.3 以降が必要で、それより古い Pi では代わりにアップデートダイアログが開きます。CLI がそれ以外の理由で応答しなかった場合は、モデルの行にその理由が表示され、セッションは CLI のデフォルトで起動し、30 秒経過した後の次のフォームで再度問い合わせます。応答は設定ディレクトリの catalogs に 6 時間保存され、CLI をアップグレードするとすぐに再度問い合わせます。

セッションごとの専用 git worktree

同じリポジトリで並行して動くエージェントに、それぞれ専用のチェックアウトを持たせられます。n フォームにはディレクトリとプロンプトの間に worktree 欄があり、クイックプロンプトモードではグループに起動するときに ctrl+t で同じことができます。どちらも、マネージャーが動いている間は前回選んだツールと worktree の選択から始まり、それ以前の初期値は設定で決めます。

worktree はリポジトリの隣の <repo>-worktrees/<name> に作られ、新しいブランチ am/<name> 上にあります。起点は、リポジトリの作業がマージされる先のブランチです。upstream リモートがあればそのデフォルトブランチ、次に origin のデフォルトブランチ、次にローカルの main または master、最後に HEAD の順で選ばれます。グループは base 行(g フォームまたはその編集カード)で起点を自分で指定でき、auto のままのグループは親グループの設定を使います。フォームやクイックプロンプトモードが worktree を起動する設定になっている間、マネージャーはそのブランチ 1 つだけをリモートから取得します。同じディレクトリに対しては最大で 1 分に 1 回で、設定の fetch on spawn 行でこれを無効にできます。worktree の作成に失敗すると、エラーとなり起動は止まります。git リポジトリでないパスには worktree を作れないため、欄は unavailable と表示され、セッションはそこで通常のセッションとして起動します。

upstream から始まったブランチはそのリモートを追跡し続けるので、git pull で親リポジトリの変更を取り込み、git push でブランチを origin(自分のフォーク)に送ります。すでに remote.pushDefault を設定している場合は、git push はそれを使います。

セッション名を変更するとブランチ名も am/<new name> に変わりますが、worktree ディレクトリは作成時のパスのままなので、動作中のエージェントの作業パスは有効なままです。セッションを削除すると、クリーンな worktree とそのブランチも削除されます。クリーンとは、未コミットの変更がなく、その worktree にしか存在しないコミットもない状態です。ベースにすでに含まれるブランチは、squash の後でも git 2.38 以降ならマージ済みとみなされます。プッシュ済みのコミットだけなら worktree は削除できますが、そのコミットに到達できるようにローカルブランチは残ります。変更のある worktree はディスクに残り、ステータス行にそのパスが表示されます。クリーンかどうかは git status に従うので、.env のような gitignore 対象のファイルはディレクトリと一緒に削除されます。終了、アーカイブ、復帰では worktree には一切触れません。

ターミナルタブ

T はシェルのタブを開きます。ほかと同じセッションですが、ペインにはエージェントではなくシェルが入ります。エージェント上で押すと、新しいシェルはそのセッションの下に、そのエージェントのグループとディレクトリでネストされます。グループ上で押すと、ネストされない兄弟としてそのグループに入ります。ネストされたシェルには、生成された ID ではなく、ぶら下がるセッションにちなんだ名前(terminal-review-done など)が付きます。シェルは所属するエージェントと一緒にツリーに並び、エージェントのステータスドットの位置に ❯ が表示されます。ターミナル上で m を押すと、エージェントやグループの下に移動できます。

ペインに書き込むキーはシェルでは使えません。space とレビュー画面の C はどちらもテキストを貼り付けて Enter を押すため、シェル上だとエージェント向けの文章がコマンドとして実行されてしまうからです。シェルに入力するには、セッションに入ってください。

行を残したまま終了する

x は、取り戻したい RAM を抱えているセッションを終了します。グループの行で押すと、その下の稼働中のセッションをすべて終了します。X は表示中の稼働中セッションをすべて終了します。どちらも先に確認を求め、終了するのは tmux セッションであってレコードではありません。行はツリーに残り、dead と表示され、名前、グループ、会話 ID はそのまま保たれます。

あるグループのエージェントが今夜の作業を終えたとします。グループ上で x を押すと RAM が解放され、行は残ります。翌朝そのグループで v を押すと、同じ会話が戻ってきます。

同じ会話に復帰する

v は終了したセッションを元の ID で起動し直し、名前、グループ、履歴を保ちます。マネージャーがそのセッション自身の会話 ID を持っている場合、復帰はまさにその会話を、ツールの resume_by_id_command を通じて再開します。エージェントが /clear、/new、/resume、/fork で別の会話に切り替えると行もそれに追従するので、v はセッション開始時の会話ではなく、その会話を開きます。行を動かすのは起動時に始まったエージェントだけです。ツールとして実行される CLI や、ペインに手で入力して起動した CLI では行は動きません。Cursor CLI は起動時に取得したチャットのままです。コマンドは次のとおりです。

resume_by_id_command
claude --resume {id}
codex resume {id}
opencode --session {id}
grok --resume {id}
gemini --resume {id}
pi --session {id}
cmd --session {id}
hermes --cli --resume {id}
muse resume {id}
agy --conversation {id}
omp --resume {id}
cursor-agent --resume {id}

ID は次の 2 通りのどちらかで得られます。

フィールドID の取得方法
session_id_flagマネージャーが発行した ID でツールを起動します。
session_storeツールが自分で ID を発行し、キャプチャ処理がそれを読み取ります(codex、opencode、gemini、hermes、command-code、muse、antigravity、omp、cursor)。
ID がない場合 復帰は revive_command(claude --continue)にフォールバックします。これはそのディレクトリの最新の会話を再開するもので、マネージャーはそのことをステータス行に表示します。同じディレクトリを共有するセッションが別の会話に入ってしまう可能性があるためです。

グループの行で v を押すとその下の終了済みセッションをすべて復帰し、V は表示中の終了済みセッションをすべて復帰します。対象が複数のセッションの場合は、どちらも先に確認を求めます。どちらも復帰できるものはすべて復帰し、失敗があっても続行して、最初に失敗したものを表示します。

会話を分岐する

カーソル下のセッションがあるアプローチを試したとします。f で 2 つ目のセッションに名前を付けると、同じ履歴から同じグループとディレクトリで続きを始めるので、別のアプローチを横で並行して試せます。これはツールの fork_command を実行し、元のセッションを {id} または {session_file} で参照します。そのため分岐には、そのコマンドと取得済みの会話 ID の両方が必要です。会話 ID がないセッションやシェルでは、分岐せずにその旨を表示します。Claude Code、OpenCode、Codex、Grok Build、Gemini CLI、Pi、Command Code、Muse Code は分岐コマンドを備えています。Hermes Agent、Antigravity CLI、Oh My Pi、Cursor CLI には分岐がありません。Muse は動作中の元セッションの中からしか分岐できないため、f はそのセッションに /fork と入力し、分岐を新しいペインで開きます。元セッションは落ち着いた状態で、プロンプトに何も入力されていない必要があります。

空のコンテキストで再起動する

R は行を残してコンテキストを捨てます。名前、グループ、ツール、ディレクトリは同じまま、エージェントが見たことのない会話で起動します。もう不要なコンテキストが溜まったセッションに向いています。復帰では履歴を読み直すために予算を使ってしまうからです。先に確認を求め、稼働中のセッションでも使えます。その場合は動作中のエージェントを終了してから新しいエージェントを起動します。古い会話は再開されず、ディスクには残りますが、行はもうそれを指しません。行が切り替わるのは新しいエージェントが起動してからなので、起動に失敗した場合、セッションは元の会話のままです。

フルスクリーン

sessions layout 行は設定(s)にあり、セッションリストにターミナル全体を使わせます。← または → でフルスクリーンに切り替わり、プレビュー列が退いて、すべての行が全幅を使います。マシンのメーターはキー一覧の上の 1 行にまとまり、行の上で → を押すとそのセッションが本体全体でフォーカスされます。未読のメッセージがある間は、View フッターに M unread が塗りつぶしのチップとして表示され、クリックするとメッセージが開きます。同じキーで分割レイアウトに戻り、この選択は分割比率と同じく保存されます。

図 1sessions layout · フルスクリーン
アニメーションデモ:設定で sessions layout をフルスクリーンに切り替えると、リストがターミナル全体を使い、マシンの統計が最下行に表示され、あるセッションをフルスクリーンでフォーカスしてから離れます。

list density 行は、どちらのレイアウトでも行の詰め具合を選びます。Compact はセッションを 1 行に収め、名前の横にエージェントの最後のメッセージを表示します。Comfortable は各セッションを 3 行に広げ、名前、❯ の後ろに自分の最後のメッセージ、その下にエージェントの最後のメッセージを表示します。

図 2フルスクリーン · comfortable 密度
アニメーションデモ:同じフルスクリーンのリストを comfortable 密度で表示したもの。各セッションが 3 行になり、名前の下にタスクとエージェントの最後のメッセージが並びます。

別のマシン上のセッション

C は SSH 接続を追加します。名前、接続先(user@host または ~/.ssh/config のエイリアス)、必要に応じて接続先での agent-manager の場所を指定します。接続先のマシンは Linux か macOS で、ログインシェルの PATH に agent-manager があり、このマシンの ssh にはプロンプトなしで使える鍵が必要です。マネージャーがパスワードを尋ねることはなく、SSH の設定にも一切触れません。ホスト鍵を登録済みにするため、先に一度手動で接続してください(ssh user@host)。一度も接続したことのないホストは unreachable と表示されます。

接続はリストの自分のグループの後ろに、専用の色と ssh ラベル付きで並び、接続先マシンのグループ、エージェント、ターミナルがその下にネストされます。グループと同じように折りたためます。ポーリングのたびにバックグラウンドで更新されます。失敗したホストは最後の行を残したまま理由を示す注記を表示し(unreachable、agent-manager missing、agent-manager too old、agent-manager newer、error)、最大 30 秒まで伸びる間隔を置いて再試行します。最初の更新で接続先にヘッドレスのマネージャー agent-manager serve --background を起動するので、そこのエージェントへのメッセージも配信されます。

キー接続の行での動作
enter / Aこのターミナルで SSH 越しにアタッチします。デタッチするとマネージャーに戻ります。リモートのペインが埋め込まれることはありません。
spaceリモートのエージェントのペインに自分として入力するか、バーに表示されている CLI、モデル、推論の強さ、プロファイルで新しいエージェントをそこで起動します。
nそこでエージェントを起動します。ディレクトリと worktree のデフォルトは、指定しない限り接続先マシンのものです。
T / gそこでターミナルを開くか、グループを作成します。
x / v / a / u終了、復帰、アーカイブ、復元。
r / d接続の行で:編集、または削除。削除は先に確認を求め、そのホスト上のセッションは動き続けます。

名前の変更、移動、削除、再起動、分岐、レビュー、エディター、返信のコピー、並べ替え、アイドル扱い、ターン後の終了の取り消し、一括終了と一括復帰は、リモートの行では使えず、足りない機能を示すメッセージが表示されます。接続先のデータがこのマシンのストアに書き込まれることはありません。エージェントも MCP を通じて接続を使えるので、すべてのエージェントに使わせてもよいホストだけを追加してください。

グループはツリー

グループは backend/api/auth のようなパスで、深さに制限のないツリーを作ります。セッションはルートを含むどのノードにも置けます。

キー動作
gその場でサブグループを作成します。
enterサブツリーを折りたたみます。F ですべてを折りたたむか展開します。
e空のグループを隠すか、再表示します。
rグループの名前、デフォルトパス、worktree のベースを編集します。
K / Jセッションを兄弟の間で、またはグループ全体をグループの間で並べ替えます。順序は保存されます。
mセッションをグループへ、ターミナルをセッションへ、グループを別のグループの下へ移動します。
a / uセッションまたはグループをアーカイブ / 復元します。アーカイブはプロセスを終了して最後のプレビューを残し、復元すると再開します。復元すると、必要な祖先のアーカイブも解除されます。
tアーカイブ表示を切り替えます。

セッションは自分で名前を付ける

名前なしで起動したセッションには claude-a1b2 のような仮の名前が付き、最初のプロンプトの冒頭で、エージェントに agent-manager rename を一度実行するよう求めます。名前は、個々のサブタスクではなく、取り組んでいる大きな機能を表す短いものです。この指示は、頼まれない限り再び名前を変えないようにも伝えます。

最初のプロンプトがこの指示を含められない場合(/slash コマンドの場合や、プロンプトがまったくない場合)、マネージャーはツールの入力欄が表示された時点で、指示を独立したメッセージとして送ります。サブコマンドは名前をセッションごとのファイルに書き込み、マネージャーは次のポーリングでそれを読み取ります。

自分で付けた名前は保たれる 自分で名前を付けたセッションが、エージェントによって改名されることはありません。最初のプロンプトでは、頼めば後で agent-manager rename を使えることだけを伝えます。