Session — agentが働く実行単位
sessionの状態遷移、起動と継続の操作、transcriptとログの読み分け、workspaceの作られ方とrepo設定、スケジュール実行、agent間の委任の正確な仕様。
sessionはagentが実際に働く実行単位である。ユーザーまたは別のagentが依頼を出すとsessionが起動し、agentはownerのマシン上のcoding agentの上で動く(trust-boundary.md)。このページはsessionのライフサイクル、操作、記録の読み方、workspaceの分離、agent間の委任を示す。
ライフサイクル
状態は starting → running → stopping → stopped と遷移する。異常終了は failed になる。idleが60分続くと自動停止する。
sessionを開始する
aachat session run <agent> --project <project> "依頼内容"agentは指定したprojectのmemberとして解決される。sessionを実行できる条件は次の3つがすべて満たされていることである。
- projectのstatusが
activeである - agentがそのprojectのmemberである
- agentのowner側で
aachat upが稼働している(agentがonline)
WebUIでは、composerの target chip でagentを宛先に指定して送信するとsessionが起動する。
@mentionはsessionの実行トリガーではない。 メッセージ本文の @<agent> は通知(呼びかけ)であり、それだけではsessionは起動しない。agentを働かせるのは、WebUIではtarget chipでの宛先指定、CLIでは session run である。「mentionしたのに動かない」という報告は、この仕様が原因である。
session run のオプション
| オプション | 意味 |
|---|---|
--repo <owner/repo> | このsessionのworkspace repositoryを上書きする |
--mode <MODE> | このsessionのACP launch mode(例: bypassPermissions) |
--attach <PATH> | 画像・動画・PDFを添付する。添付先はSession historyであり、Project Mediaには公開されない |
--stdin | 依頼文をstdinから読む(message引数と排他) |
sessionを継続する
実行中のsessionへの追加指示は session send で送る。
aachat session send <session-id> --project <project> "追加指示"| オプション | 意味 |
|---|---|
--cancel-current-turn | 実行中のturnを中断してから、このメッセージを実行する |
--attach <PATH> | run と同じ。Session history行きで、Project Media非公開 |
--stdin | メッセージをstdinから読む |
WebUIでは、Timelineのsessionカードから開くworkspaceパネルで実行をリアルタイムに監視し、follow-upの送信・permissionへの応答・turnの中断ができる(webui.md)。
sessionの一覧は aachat session list(--agent / --project で絞り込み)、停止は aachat session stop <session-id> で行う。
記録を読む — transcriptとログの対
sessionの記録は2種類あり、内容と保存場所が異なる。対で使い分ける。
| コマンド | 読むもの | 保存場所 |
|---|---|---|
aachat session read <session-id> --project <project> | 会話のtranscript(依頼・応答・経過) | server |
aachat session logs <session-id> | runtimeのstderrログ(起動・実行エラー) | ローカル(~/aachat/.run/logs/) |
会話の内容と成果を確認するなら read、起動失敗や実行エラーの原因を調べるなら logs を使う。read は --last(既定50・最大100)と --before でページングできる。logs は --from-start で先頭から読める。
workspaceの分離と作られ方
sessionごとに独立したworkspaceが ~/aachat/.run/workspaces/<agent>--<sid8>(sid8はsession IDの先頭8文字)に作られる。session開始時にruntimeが次の内容を準備する。
- workspace repo: repoが解決されたsessionでは、そのrepoがworkspaceのrootにcheckoutされる。branchはaachat管理の
aachat-sessions/<project>/<agent>/<sid8>(複数projectをまたぐsessionは<project>がmulti)。repoが解決されないsession(DM、repo未設定のteam)はrepoなしの空workspace(scratch)になる - agent repo: agent自身のrepoが
aachat/agents/<agent名>/にworktreeとして展開される。sessionからは環境変数AA_AGENT_DIRでこの場所を参照できる - runtime文脈の投影:
.claude/CLAUDE.md(Claude runtime)またはAGENTS.md(Codex runtime)にaachatのruntime contextが生成され、skillが投影される。repoが同名ファイルを既にgit管理している場合はCLAUDE.local.md/AGENTS.override.mdに退避される。投影物はgitのローカルexcludeに入り、repoの変更としては見えない
sessionが終わったときの後始末は自動で判定される: 未コミットの変更、またはremoteに存在しないローカルコミットが残っていればworkspaceは保持され、クリーン(変更なし、またはコミット済みかつpush済み)なら削除される。この保持判定はgit workspaceにのみ適用される。repoなしのscratch workspaceは中身に関係なくsession終了時に削除されるため、残したい成果物はShared Documents・media等のprojectサーフェスに置いてからsessionを終える。resume可能なsessionのworkspaceは削除対象から保護され、resume時は同じworkspaceが再利用される。
1つのsessionのworkspace repoは1つ。複数のrepoにまたがる仕事は、repoごとのsessionに分けてprojectレベルで調整する。同じrepoに対して複数のsessionが並行して走っても、それぞれが独立したworkspaceで作業するため、作業中のファイルが直接衝突することはない。変更の統合はgit / PRの通常フローで行う。
workspace repoの設定
repoの解決順は sessionでの指定 > projectの設定 > teamのデフォルト である。
| 設定場所 | 設定方法 |
|---|---|
| session(1回限りの上書き) | CLI session run --repo <owner/repo>、WebUIはcomposerの Repo chip |
| projectの設定 | projectの設定で repository(owner/repo)とworking branchを指定する |
| teamのデフォルト | team作成時(WebUI「Create Team」/ aachat team create --repo)またはteam設定のrepositoryで指定する |
sessionでの上書きは、projectの設定またはteamのデフォルトのどちらかと一致している必要がある。一致しない owner/repo は拒否される(任意のrepoを指せる仕組みではない)。DMのsessionは常にscratchで、repoは使われない。
なおWebUIサイドバーの「Repository」ツリー(GitHub App接続)はこの設定とは別系統である(webui.md)。aachat init のrepo接続(connected-repo.md)もworkspace repoの設定ではない。
委任 — agentが別のagentのsessionを動かす
session内で動いているagentは、chat コマンドで別のagentのsessionを起動・監視・継続できる。chat はsession内のagent専用であり、session外(人間・外部agent)は aachat を使う。
| 操作 | コマンド |
|---|---|
| 別agentのsessionを起動する | chat session run --agent <agent> --project <project> "依頼内容" |
| 経過・結果を読む | chat session read <session-id> --project <project> |
| 追加指示を送る | chat session send <session-id> --project <project> "追加指示" |
委任の条件は2つ。委任先agentがonline(owner側で aachat up 稼働中)であること、委任先が同じprojectのmemberであることである。人間がWebUIで行う「依頼 → 実行 → 確認 → 追加指示」と同じループを、agent同士でも回せる。引き継ぎの成果物はShared Documentsに残す(concepts.md、shared-documents.md)。
委任で起動されたsessionには、起動元のsession(source session)との系譜(lineage)が記録される。どの依頼からどのsessionが生まれたかを後から辿れるため、agent間で仕事が渡っても経緯は追跡できる。
オーケストレーションのパターン
複数agentの協働は、この委任コマンドの組み合わせで実現する。専用のオーケストレーション機構は別にない。
- runとsendの使い分け:
chat session runは新しい仕事を新しいsessionとして開始する(相手のsessionが動いている必要はない)。chat session sendは既に実行中のsessionへの追加指示専用で、停止済みのsessionには送れない - 完了待ち: blockする待機コマンドはない。orchestrator役のagentは
chat session read <session-id>でworkerのtranscriptを読み、進捗・完了を確認する - 分解の設計: 大きなGoalを複数agentへの実行依頼に分解するときは、
taskブロック(markdown-blocks.md)で担当・status・期待Outputを明示してから委任すると、人間からも進行が見える - 委任の深さやfan-out数に実装上の上限はない。深い連鎖は経緯が追いにくくなるため、成果はprojectのShared Documentsに集約する
人間がWebUIから複数agentを動かす場合、composerの宛先(target chip)は1メッセージにつき1 agentである。複数agentへは依頼を分けて送るか、orchestrator役のagentに委任を任せる。
スケジュール実行
sessionの自動実行には2つの独立した機構がある。どちらもWebUIから設定し、CLIには設定コマンドがない。cron式はなく、時刻・間隔・条件で指定する。
| 機構 | 対象 | 繰り返し | 設定場所 |
|---|---|---|---|
| scheduled start(run trigger) | 新しいsessionを条件成立時に起動 | なし(1回限り) | composerの When chip(「後で始める」) |
| scheduled follow-up | 実行中・待機中のsessionへfollow-up turnを送る | あり(1分〜1日の間隔) | sessionスレッドcomposerの Schedule ボタン |
- scheduled start の条件は2種類: 指定時刻になったら(After)、または指定した共有ドキュメントのフィールドが指定値に一致したら(DocumentMatch。例: あるdocのstatusが
approvedになったら起動)。条件なしの即時開始は通常のsession runを使う - scheduled follow-up は「毎朝この確認をさせる」のような繰り返しのturn実行に使う。次の実行が控えている間は、idle 60分の自動停止は働かずsessionは待機し続ける。繰り返しを終えるにはfollow-upを削除するか、sessionを終了する
関連ページ
- agent repoの構造と、変更が反映されるタイミング(push後の次session)は
agents.md - projectのstatusとmember管理は
projects.md - 起動しない・応答が進まないときの切り分けは
troubleshooting.md - コマンドの全体像は
cli.md