状態管理と永続化: 長いタスクを中断から生き延びさせる
このコースはエージェントの実行状態を扱います。モデルが「覚えている」ものではなく(それはメモリであり、このシリーズのコース5 とコース8 の領分です)、ハーネス自身が抱えている実行中の場面――messages 配列、ターンと使用量のカウンタ、まだ台帳に書き込まれていないツール呼び出し――のことです。プロセスが死んでもディスク上のファイルはすべて残りますが、この場面は消えてしまい、タスクはゼロからやり直しになります。このコースでは、その場面をディスクに書き出して復元できるものに変える方法を学びます。一歩ごとにチェックポイントを取り、クラッシュ後は中断点からループを再起動し、再開時にどのツールが再実行しても安全でどれがそうでないかを見分け(冪等性)、さらにチェックポイントの二つ目の使い道――以前の場面への巻き戻しと、別の試行のフォーク――に進み、最後にはコース7 で書いたハーネスに完全なチェックポイントと再開をハンズオンで配線します。このシリーズの最初の 8 つのコースを終えた読者向けです。メモリやコンテキストの管理は再度扱いません(コース5 はモデルがセッションをまたいで覚えているもの、コース8 は各ターンがモデルに見せるもの、このコースはハーネス自身が記録するものを扱います)。Temporal のような外部ワークフローエンジンの API も教えず、マルチプロセスの並行性や分散一貫性もカバーしません。Claude Code のチェックポイントはプロダクトの参照としてのみ登場します。ここで作るのは、自分のハーネスのためのものです。
コース構成
- メモリの先にある「状態」
- チェックポイント: 実行中の場面をディスクに書き出す
- チェックポイントからの再開: ループを再起動する
- 副作用と冪等性: 再開時に再実行しても安全なツールはどれか
- 巻き戻しとフォーク: チェックポイントの第二の価値
- ハンズオン: ハーネスにチェックポイントと再開を配線する
学習目標
このコースを終えると、次のことができるようになります:
- エージェントのメモリ(モデルに渡されるコンテキスト)と実行状態(ハーネスが抱えている実行中の場面)を切り分け、「エージェントはステートフルで誤りは累積する」が長いタスクにとってクラッシュをなぜ特別に致命的にするのかを説明する
- ハーネスループのためのチェックポイントを設計する: どのフィールドをスナップショットに入れるべきか、いつ書き出すか、そしてチェックポイントファイル自体を壊さずにどう書くか
- 再開を実装する: チェックポイントから
messagesとカウンタを復元し、ループに再突入し、ツールの実行と台帳への書き込みの間でクラッシュが起きたときに残る宙ぶらりんの呼び出しを正しく処理する - 冪等性で復旧を裏打ちする: 再実行しても無害なツールと二重実行から守らなければならないツールを見極め、影響の大きいツールに冪等キーを取り付ける
- チェックポイントを障害復旧の先でも使う: 以前の場面に巻き戻してやり直し、別の試行をフォークし、チェックポイントとバージョン管理の分担を述べる
- コース7 のハーネスに一式の仕組み――毎ターンの永続化、--resume による復旧、宙ぶらりんの呼び出しの調整、冪等な再実行保護――を配線し、途中で中断された長いタスクを完了まで運ぶところを実演する
前提知識
- このシリーズの最初の 8 つのコースを終えている、または同等の知識がある
stop_reason駆動のハーネスループを手書きでき、tool_useとtool_resultが 1 対 1 で対応しなければならないことを理解している(コース7)- コンテキストウィンドウの管理とコンパクションを知っている(コース8。このコースのチェックポイントはその
tokensUsedカウンタと連携します) - 基本的な JavaScript / Node.js のコードを読み書きできる(レッスン6 では一緒に書き進めます)
想定学習時間
約 3〜4 時間(各レッスンのハンズオン演習を含む)。