コンテンツにスキップ

OpenAI Codexのstop hookとは:エージェントが自律的に作業を終了する仕組み

概要

OpenAI Codex などの AI コーディングエージェントには「stop hook」と呼ばれる仕組みがある。エージェントが「タスクを完了した」と自律的に判断して作業を停止するトリガーの設計方法。stop hook の条件設計が甘いと、エージェントが途中で止まったり、逆に不必要な作業を続けたりする原因になる。

詳細

stop hook とは

エージェントが実行ループを終了するために評価する条件・関数のこと。以下のような判断基準を組み合わせる。

エージェントの実行ループ:

1. ユーザーのゴールを受け取る
2. ツール(コード実行・ファイル編集・検索)を使って作業
3. stop hook を評価
   ├── 条件を満たす → 作業完了として終了
   └── 条件を満たさない → ステップ2に戻る

stop hook の設計パターン

パターン1: テスト通過による停止

def stop_hook(state: AgentState) -> bool:
    """全テストが通過したら停止"""
    if state.last_tool == "run_tests":
        result = state.last_tool_output
        return result.exit_code == 0 and result.failed == 0
    return False

パターン2: ゴール達成の自己評価

def stop_hook(state: AgentState) -> bool:
    """エージェントが完了を宣言したら停止"""
    last_message = state.messages[-1]
    completion_signals = [
        "タスクが完了しました",
        "実装を終えました",
        "DONE",
        "TASK_COMPLETE",
    ]
    return any(sig in last_message.content for sig in completion_signals)

パターン3: ステップ数による安全停止

def stop_hook(state: AgentState) -> bool:
    """最大ステップ数を超えたら強制停止(無限ループ防止)"""
    MAX_STEPS = 50
    return state.step_count >= MAX_STEPS

パターン4: 複合条件

def stop_hook(state: AgentState) -> bool:
    # エラーが一定回数を超えたら停止
    if state.consecutive_errors >= 3:
        return True

    # ファイルの変更がなければ停止
    if state.step_count > 5 and not state.has_file_changes:
        return True

    # ゴール達成を確認
    if state.goal_achieved:
        return True

    return False

Claude Code での stop hook 設定例

Claude Code では settings.jsonhooks セクションで Stop フックを定義できる。

{
  "hooks": {
    "Stop": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "echo 'Claude stopped. Notify user.' | terminal-notifier -title 'Claude Code'"
          }
        ]
      }
    ]
  }
}

stop hook 設計の注意点

問題 原因 対策
早期停止 判定条件が厳しすぎる 複数の成功シグナルを OR 条件で評価
無限ループ stop 条件が実現不可能 最大ステップ数を必ず設ける
偽陽性停止 部分一致で誤検知 完了メッセージは厳密に定義する

なぜ重要か / いつ使うか

  • AI エージェントを本番ワークフローに組み込む際の設計知識として必須
  • 「エージェントが途中で止まる」「終わらない」バグを調査するときの手がかりに
  • Claude Code や Codex をカスタマイズして自動化パイプラインを構築するときの参考に
  • エージェント設計の面接・レビューで stop condition の話が出たときの知識として