idle で開始し、イベントを送信すると処理が始まります。
Session の状態ライフサイクル
Session はステートマシンです。Session リソースのstatus フィールドは次のいずれかの値を取ります。
| 状態 | 説明 | 遷移先 |
|---|---|---|
idle | Session はアイドルで、メッセージを受け取る準備ができている | running、rescheduling、terminated |
running | Agent がターンを処理中 | idle、rescheduling、terminated |
rescheduling | 基盤ランタイムが再スケジュール中で、idle に戻るまで Session は利用不可 | idle、terminated |
terminated | Session は終了済み(終端状態) | — |
status フィールド以外に、さらに 2 つのライフサイクルマーカーが現れます。
- アーカイブ済み(Archived): 非 null の
archived_atタイムスタンプで示されます。statusの値自体はarchivedには変わりません — Session は引き続き読み取れますが、新しいイベントは拒否されます。 - cancel レスポンス:
POST /api/v1/cloud/sessions/{id}/cancelエンドポイントは常に固定のリテラル"status": "canceling"を含むボディを返します。これはレスポンスの形であって Session の status ではありません — 永続化されたstatusはターンが中断されるとidleに戻ります。
running → idle(cancel 後)
実行中の Session をキャンセルするとターンが中断され、Session は
idle に戻ります。cancel レスポンスボディは、永続化された status に関わらず固定の "status": "canceling" リテラルを使用します。Session は引き続き再利用できます。Cancel のセマンティクス
idleへの cancel: no-op。HTTP200を返し、status はidleのままです。runningへの cancel: Agent を中断します。HTTP202を返します。Session はcancelingに移行し、ターンが中断されるとidleに戻ります。- cancel 後: Session は引き続き再利用できます — 次の
user.messageを送信すると新しいターンが開始します。
終端状態は
archived と terminated のみです。キャンセルされた Session は常に idle に戻り、メッセージを受け取り続けられます。running 状態の Session へのメッセージ送信(409 エラー)
現在running の Session に user.message を送信すると、API は HTTP 409 を返します。
session.status_idle を待つか、先に現在のターンをキャンセルしてください。
Session を作成する
既存のagent と environment_id を使って Session を作成します。
agent、environment_id、status、resources、vault_ids、deployment_id、outcome_evaluations、stats、environment_variables、archived_at、created_at、updated_at を含みます。
environment、delta_flush_interval_ms、memory_store_ids、vaults などのレガシーリクエストフィールドはサポートされません。environment_variables は再びサポートされています — JSON 文字列のリクエスト形式と検証ルールについては Session の作成を参照してください。
作成時にリソースをアタッチする
resources 配列でファイル、リポジトリ、Memory Store をアタッチします。
POST /api/v1/cloud/sessions/{session_id}/resources を使用します。現在の CAS では、作成後の追加は file リソースのみサポートしています。resource の list/get/update/delete エンドポイントを使って、リソースの確認、GitHub トークンのローテーション、リソースの削除を行えます。
メッセージを送信する
Events API を通じてuser.message イベントを送信します。content は空でない content block の配列でなければなりません。
{"data":[...]} を返します。受け付けるクライアントイベントタイプは次のとおりです: user.message、user.interrupt、user.tool_confirmation、user.tool_result、user.custom_tool_result、user.define_outcome、system.message。
イベントを読み取る
ライブ更新にはイベントストリームを使用します。id、event、data を含む Server-Sent Events を出力します。stream エンドポイントは再接続時のリプレイ用に Last-Event-ID ヘッダーをサポートします。イベントタイプの query filter は現在サポートされていません。
増分ストリーミングイベントを受信するには、Session の作成時に incremental_streaming_enabled: true を設定します。これにより、ストリームは最終的な完全な agent.message の前に agent.message_start、agent.content_block_delta および関連する増分イベントを含めることができます。クイックな検証フローについては Incremental streaming を参照してください。
履歴とページネーションには list エンドポイントを使用します。
data と next_page を使用します。
Session の読み取りと更新
page / next_page ページネーションを使用し、agent_id、agent_version、deployment_id、memory_store_id、statuses、created_at[...] などのフィルターをサポートします。
Threads
Managed-agent Session は、コーディネータースレッドと子スレッドを持つことができます。Thread エンドポイントは公開のsession_thread 形式を使用し、role、name、agent_id、agent_version、stop_reason などのレガシースレッドフィールドは含みません。
POST /api/v1/cloud/sessions/{session_id}/threads/{thread_id}/archive でアーカイブできます。現在の CAS では、コーディネーター/メインスレッドのアーカイブを要求すると 409 を返します。
ライフサイクル
Session を今後使用しない場合はアーカイブします。{"id":"...","type":"session","status":"canceling"} を返します。キャンセル対象のアクティブなターンがある場合は 202 Accepted を、Session がすでに idle の場合は(no-op として)200 OK を返します。
マルチターン対話のワークフロー
Session はマルチターン対話をサポートします。推奨パターンは次のとおりです。user.messageイベントを送信する。- SSE ストリームで更新をリッスンする。
session.status_idleイベントを待つ。- 次の
user.messageを送信する。
次のメッセージを送信する前に必ず
session.status_idle を待ってください。Session がまだ running の間にメッセージを送信すると HTTP 409 を返します。ベストプラクティス
- Agent バージョンを固定する — 本番環境では常に
{"id": ..., "type": "agent", "version": ...}で Session を作成し、Agent の更新によって Session の挙動が予期せず変わらないようにします。 - metadata を活用する — トレーサビリティとデバッグのために、業務コンテキスト(タスク ID、トリガー元など)を
metadataフィールドに記録します。 - 早めにキャンセルする — 不要になった Session はキャンセルして計算リソースを解放します。
よくある質問
Q:running 状態の Session にメッセージを送るとどうなりますか?
A: API は HTTP 409 を返し、type: "invalid_request_error" とメッセージ “Session is currently processing a turn. Cancel the current turn or wait for completion.” が含まれます。現在のターンをキャンセルするか、Session が idle に戻るのを待ってから次のメッセージを送信してください。
Q: キャンセル後も Session を使えますか?
A: 使えます。cancel 後、Session は canceling から idle に戻ります。次の user.message を送信して対話を継続できます。終端状態は archived と terminated のみです。
Q: 完全な対話履歴を取得するには?
A: GET /api/v1/cloud/sessions/{id}/events を使って、ユーザーメッセージと Agent 応答を含む Session のすべてのイベントを取得します。
Q: SSE が切断された後に再接続するには?
A: SSE stream エンドポイントに再接続する際に Last-Event-ID ヘッダーを渡します。サーバーはその ID 以降のイベントをリプレイします。
Q: GET /api/v1/cloud/environments が空配列を返します。
A: Personal Access Token (PAT) が対象ワークスペースに必要な権限を持っているか確認してください。Environment のアクセス範囲は認証ユーザーの権限にスコープされます。