Harness Engineering 2026年4月12日

長時間実行エージェントのセッション管理

数時間にわたるAIエージェントのセッションを安定運用するための設計パターン。コンテキスト管理、三層エージェント構成、メモリ永続化の実践手法を解説します。

長時間実行エージェントの課題

2026年、AIエージェントは数時間にわたって自律的にコードを読み書きし、テストし、デプロイまで行います。しかし長時間実行には固有の課題があります。

Anthropicの研究チームはこれを**「シフト制の設計士チーム」**に例えています。各シフトのメンバーは前のシフトの記憶がない。コンテキストウィンドウの制約の中で一貫した成果を出すには、環境側の設計が不可欠です。

主要な課題

課題症状影響
コンテキスト喪失圧縮(compaction)で重要情報が消える同じミスの繰り返し、方針のブレ
早期完了宣言「完了しました」が実際には未完了品質低下、手戻り
コンテキスト不安残り容量を気にして過度に慎重になる速度低下、不必要な分割
方向性の逸脱長時間作業で当初の目標から離れるスコープクリープ

Anthropicの三層エージェント設計

Anthropicの研究チームは、長時間実行のアプリケーション開発においてPlanner-Generator-Evaluatorの三層構成を提案しています。

[Planner] → 仕様書 → [Generator] → 実装 → [Evaluator] → 品質判定
     ↑                                              |
     └──────── フィードバック ←──────────────────────┘

Planner(計画エージェント)

ユーザーの短い指示(1-4文)を包括的なプロダクト仕様に変換します。スコープとハイレベル設計に注力し、実装詳細には踏み込みません。

Generator(生成エージェント)

機能を反復的に開発し、ハンドオフ前に自己評価を行います。

Evaluator(評価エージェント)

具体的な基準を用いて品質評価を行います。研究チームの重要な発見は、エージェントは自分の成果物を「自信を持って褒める」傾向があるということ。たとえ人間から見て明らかに品質が低くても、です。だからこそ、評価を別エージェントに分離する必要があります。

スプリント契約

実装前に、GeneratorとEvaluatorが明示的な「完了条件」を交渉します。

## Sprint Contract: ユーザー認証機能

### Done Criteria
- [ ] メールアドレス/パスワードでのログイン・登録が動作する
- [ ] JWTトークンの発行・検証が実装されている
- [ ] バリデーションエラーが適切にハンドリングされている
- [ ] 全テストがパスする(カバレッジ80%以上)
- [ ] レスポンシブデザインが実装されている

### Out of Scope
- OAuth2連携(次スプリント)
- 2要素認証(バックログ)

コンテキスト管理の実践パターン

パターン1: コンパクション後の情報再注入

コンテキスト圧縮が発生すると重要な情報が失われます。SessionStart フックの compact マッチャーで対処します。

{
  "hooks": {
    "SessionStart": [
      {
        "matcher": "compact",
        "hooks": [
          {
            "type": "command",
            "command": "cat \"$CLAUDE_PROJECT_DIR\"/.claude/compact-context.md && git log --oneline -10"
          }
        ]
      }
    ]
  }
}

.claude/compact-context.md に常に再注入したい情報を記述しておきます。

# Compaction Recovery Context

## 現在のスプリント
- 認証機能のリファクタリング(OAuth2移行)

## 技術的な制約
- Bun を使用(npm ではない)
- テストは vitest で実行
- コミット前に必ず bun test を実行すること

## 最近の決定事項
- セッションストアはRedisではなくCloudflare KVを使用
- JWTの有効期限は15分、リフレッシュトークンは7日

パターン2: メモリツールによるセッション横断の永続化

Claude APIのメモリツールを使うと、セッションを超えて情報を保持できます。

セッション1: 認証機能の設計を決定
  → メモリに「JWT + Cloudflare KV」の決定を保存

セッション2: フロントエンド実装
  → メモリから認証方式を読み込み
  → 一貫した実装が可能

CLAUDE.mdファイルも同様の役割を果たします。エージェントが学んだことをCLAUDE.mdに追記する運用が効果的です。

パターン3: ファイルベースのエージェント間通信

三層エージェント設計では、エージェント間の情報伝達にファイルシステムを使います。

.claude/
  artifacts/
    spec.md          # Plannerが出力 → Generatorが読む
    sprint-contract.md  # Generator/Evaluatorが交渉
    evaluation.md     # Evaluatorが出力 → 次サイクルで参照

コンテキストウィンドウに依存せず、ファイルに状態を永続化することで、セッションの分断に耐えられます。

モデル進化への対応

Anthropicの研究チームが見出した最も重要な知見は、ハーネスの前提はモデルの進化とともに陳腐化するということです。

具体例として、Claude Sonnet 4.5ではコンテキスト不安(残り容量を気にして過度に慎重になる傾向)が見られたため、スプリント区切りでのコンテキストリセットが必要でした。しかしClaude Opus 4.6では、コンテキストリセットなしで長時間の連続ビルドが可能になりました。

Sonnet 4.5時代: スプリント → コンテキストリセット → 次スプリント
Opus 4.6時代:   連続ビルド(コンテキストリセット不要)

実践ポイント: 定期的にハーネスの各制約を「まだ必要か?」と問い直すこと。不要になった制約はオーバーヘッドでしかありません。

Claude Managed Agents

2026年4月、AnthropicはClaude Managed Agentsをパブリックベータとして公開しました。クラウドホスト型のエージェントプラットフォームで、以下を提供します。

  • サンドボックス実行: 隔離された環境でのコード実行
  • セッション永続化: ネットワーク切断後も再接続可能
  • マルチエージェント協調: 複数エージェントの連携
  • 実行トレーシング: 全アクションの記録と可視化

長時間実行エージェントの課題の多くを、インフラレベルで解決するアプローチです。

ベストプラクティス

  1. 状態をファイルに書き出す: コンテキストウィンドウは揮発性。重要な決定・進捗はファイルに記録する
  2. 完了条件を明示する: 曖昧な「いい感じにして」ではなく、テスト可能な完了条件を定義する
  3. 評価を分離する: 自分の成果物を自分で評価させない。別エージェントまたはCIで検証する
  4. 定期的にチェックポイントを作る: 長時間作業では途中経過をコミットまたはファイルに保存する
  5. モデルの進化を追跡する: 新モデルが出たら、既存の制約が不要になっていないか確認する

参考リンク