AIエージェントの自動化と一口に言っても、hooks・定期実行・常駐プロセス・自動復旧では発火条件も寿命も別物です。本記事は4層の役割分担と着手順序を、公式ドキュメントと自社launchdの実測(2026-07-28)から整理します。

01結論:AIエージェントの自動化は4層に役割分担して設計する

結論は3点です。

  1. 4層は「何がきっかけで動くか」で分かれます。同じ処理を違う層に置くと、想定した頻度や寿命で動きません。
  2. hooksは1回のイベントで完結し、定期実行は時刻で起動して終了し、常駐プロセスは生き続け、自動復旧は中断を検知して人間ゲート手前まで進めます。
  3. 着手順は取り消せない操作を止めるhooksが最優先です。常駐と自動復旧は後回しにしても即座には壊れません。

設定ファイルを書いた事実と、いま動いている事実は別に数えます。WEBMARKSは常駐ジョブの稼働をlaunchctl listで毎回実測しています。2026-07-28時点で、定義しているlaunchdジョブ8本のうち稼働中は1本だと把握しています。設計した層の数と、実際に動いている層の数は、書いた設定を信じず毎回数え直してください。

発火条件生存期間落ちても気づけるかWEBMARKSでの位置づけ(2026-07-28実測)
hooksツール呼び出し等のイベント発生時1回のイベント処理が終わると終了発火しなければClaude Code自体の動作に現れるPreToolUseでCLAUDE.md等の書き込みを判定
定期実行指定した時刻・間隔実行して結果を返すと終了ロードされているかは別途確認が要るchatwork-morning-fetch等7本が未ロード
常駐プロセス起動後は常に生きている想定KeepAliveがあれば落ちても再起動10秒未満で終了を繰り返すとlaunchdが再起動を止めるロード済みはcom.webmarks.computer-use-input-guardの1本のみ
自動復旧中断・エラー・再起動の検知時人間ゲート手前まで進めると停止監視の仕組み自体が止まっても症状が出ない自動再開パトロールの最終実行は2026-07-13(15日前)
AIエージェントの自動化4層を継続時間で比較し、人間ゲートの停止位置を層ごとに示す図 AIエージェントの自動化4層を、発火してから終わるまでの継続時間を横軸にとって比較する図。hooksは4つの点として離散的に描かれ、そのうち1点には人間ゲートの判定位置を示す輪を重ねる。定期実行は起動して終了するまでの3つの短い区間として描かれ、区間と区間の間の空白に人間ゲートで止められる位置を旗印で示す。常駐プロセスは端から端まで途切れずに続く1本の太い帯として描き、帯の途中に人間ゲートで一時停止できる位置を縦線で示す。自動復旧は帯のすぐ下に破線で重ねて描かれ、途中に途切れを表す×印があり、そこから帯へ向かう矢印の先端が、自動復旧における人間ゲート直前の停止位置を示す。 TIMELINE 自動化4層は、いつ動いていつ止まるか 発火してから終わるまでの継続時間 hooks(瞬間) 点:1回で完結 定期実行(周期) 起動→終了を反復 常駐プロセス(継続) 生き続ける(想定) 自動復旧(重ねて監視) × 検知して再開 coral=人間ゲート手前で止まれる位置(層ごとに輪・旗・線・矢印で形を変える)
AIエージェントの自動化4層(hooks・定期実行・常駐プロセス・自動復旧)を、横軸に「発火してから終わるまでの継続時間」を取った時間軸上に並べる図

AIエージェントそのものの定義は『AIエージェントとは|そう呼べる3条件と、呼べない境界』で扱っています。本記事は、任せると決めた後の自動化の組み方だけに絞ります。

02hooksが担う自動化|イベント駆動で1回だけ動く層

hooksは、Claude Codeのセッション内で起きる出来事に反応して1回だけ動く層です。Claude Code公式ドキュメントはhookイベントを30種類定義しています。出典はClaude Code公式ドキュメントのHook lifecycle表で、2026-07-29に確認しました。代表例はSessionStart・PreToolUse・PostToolUse・Stop・SessionEndです。

イベント発火タイミング制御できること
SessionStartセッションの開始・再開時追加コンテキストの注入、読み込むスキルの指定
PreToolUseツール呼び出しの直前allow・deny・ask・deferで実行可否を決める
PostToolUseツール呼び出しの成功後結果のブロック、出力の差し替え
StopClaudeが応答を終えた時応答のブロック、追加コンテキストの提示
SessionEndセッション終了時制御なし(記録用途)

hooksの本質は、常に動いているプロセスではないという点です。標準入力でJSONを受け取り、標準出力に判定結果を返した時点で役目を終えます。判定は終了コードでも表現でき、コード0はJSON出力を解釈、コード2はその場でブロックという扱いです(出典: Claude Code公式ドキュメント)。

#!/bin/bash
# PreToolUseフックの最小構成
DECISION=$(judge_command "$1")
if [ "$DECISION" = "deny" ]; then
  echo '{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"deny"}}'
  exit 0
fi
exit 0

このスクリプトはイベントが来るたびに新規プロセスとして起動し、判定を返して終了します。裏で待ち受け続けるデーモンではありません。だからこそ、hooksに「毎晩0時にレポートを送る」ような時刻起点の処理を書いても動きません。イベントが来ない限り、そもそも呼ばれないためです。

危険なコマンドを遮断する実装の詳細は『Claude CodeのPreToolUseフック|危険コマンド遮断のコード例』にまとめています。ここでは「hooksは時刻では動かない」という一点だけ押さえてください。この制約が、次に説明する定期実行という別の層が要る理由です。

03定期実行が担う自動化|時刻と間隔で起動し、動き終えたら閉じる層

定期実行は、hooksが反応できない「時刻」や「一定間隔」をきっかけに、外側からプロセスを新規に起動する層です。macOSではlaunchdが標準の仕組みです。Appleはcronを旧来の方式として扱い、共有のcrontabファイルをプログラムから直接書き換えることを避けるよう案内しています(出典: Apple公式ドキュメント)。

launchdの起動条件は、StartInterval(秒単位の間隔)とStartCalendarInterval(曜日・時・分などの指定時刻)の2種類に分かれます。スリープ中に予定が来た場合の扱いが異なる点は、実装前に確認しておく価値があります。

方式管理方法スリープ中に来た予定電源オフ時
cron共有のcrontabファイルを直接編集実行されない(スキップ)実行されない
launchd StartInterval個別のplistファイル実行されない実行されない
launchd StartCalendarInterval個別のplistファイル起床時に1回分を実行する実行されない(次の予定を待つ)

StartCalendarIntervalで組んだジョブだけが、スリープからの復帰時に取りこぼした1回を追いかけて実行します(出典: Apple公式ドキュメント)。StartIntervalcronはどちらも、スリープ・電源オフ中の予定をそのまま切り捨てます。

WEBMARKSはlaunchdジョブを8本定義しています。名称にはchatwork-morning-fetch・downloads-auto-import・offsite-backupなど、時刻起点の処理を想起させるものが含まれます。書いた設定を信じずlaunchctl listで毎回確認しています。2026-07-28の実測では、このうち7本がplistとして存在するだけでロードされていないと把握しています。

定期実行の失敗は静かです。予定が飛んでも、エラー画面は出ません。次のセクションで扱う「落ちても復帰するか」「監視できているか」という論点は、定期実行にもそのまま関わります。

04常駐プロセスという自動化レイヤーは、なぜ落ちたら復帰するのか

常駐プロセスは、起動後にプロセスとして生き続けることを前提にした層です。launchdではKeepAliveキーで表現し、値をtrueにするとジョブが終了するたびにlaunchdが再起動します(出典: Apple公式ドキュメント)。

<key>Label</key>
<string>com.example.watcher</string>
<key>ProgramArguments</key>
<array>
  <string>/usr/bin/python3</string>
  <string>/path/to/watcher.py</string>
</array>
<key>KeepAlive</key>
<true/>

上の構成はあくまで典型的な形で、WEBMARKSの実ファイルそのものではありません。ここで押さえたいのは1点です。KeepAliveと定期実行の起動キー(StartIntervalStartCalendarInterval)は、launchd内で別物として扱われます。

キー意味Apple公式の位置づけ
KeepAlive=true終了するたびlaunchdが再起動するオンデマンド起動での設計を基本として案内
RunAtLoad=trueロード時に1回だけ起動するKeepAliveとは別の起動条件(本記事が参照した一次情報源に単体の運用指針の記載なし)
StartInterval / StartCalendarInterval時刻・間隔で起動し、終わったら終了する定期実行に使うキー

KeepAliveには、Apple公式ドキュメントが明記する落とし穴があります。起動から10秒未満で終了する状態が続くと、launchdは常駐プロセスを「クラッシュしている」と判定します。以後は再起動しなくなると明記されています(出典: Apple公式ドキュメント)。常駐のつもりで設定しても、実装のバグで即終了を繰り返せば、静かに動かなくなります。

WEBMARKSは常駐プロセスの稼働も2026-07-28にlaunchctl listで実測し、把握しています。launchdジョブ8本のうち、ロードされていたのはcom.webmarks.computer-use-input-guardの1本だけでした。残る7本はplistとして存在しますが、ロードされていない状態です。ロードされていない状態と、ロード後に再起動を繰り返してスローされた状態は、原因も対処もまったく別の障害です。

05自動復旧という自動化レイヤーは、中断を人間ゲート手前まで進める

自動復旧は、作業がクラッシュ・再起動・レート制限などで途中停止したことを検知し、送信・公開・削除のような取り消せない操作の手前まで、人手を介さずに作業を進め直す層です。

Anthropicは、エージェントが処理の途中で立ち止まり、チェックポイントで人からのフィードバックを待つ設計を紹介しています(出典: Anthropic公式)。自動復旧は、この「立ち止まる場所」を再起動後にも保つための仕組みです。作業状態を記録した台帳がなければ、どこまで進んでいたかをAI自身も思い出せません。

自動復旧は、他の3層より「壊れていることに気づきにくい」という性質を持ちます。正常に動いているときは何も表示せず、止まっているときも同じく何も表示しないためです。

WEBMARKSは自動再開パトロールという仕組みを、レート制限解除後にタスク台帳の未完了項目を自動で再開する目的で運用してきました。実行記録ファイルの最終更新日を毎回実測しています。2026-07-28時点では最終更新が2026-07-13で止まっており、記事執筆時点から15日が経過していると把握しています。

監視の指標を誤ると、動いていないことにさえ気づけません。WEBMARKSは過去に、ファイルの更新時刻だけを根拠に「動いている・壊れていない」と判定し、3日間で233回の誤爆を起こした事例を持っています。原因の切り分け手順は『AI運用の障害切り分け|更新時刻を犯人にしない4段の手順』にまとめています。自動復旧を組むときは、動いた証拠を推測ではなく記録として残す設計が要ります。

06AIエージェントの自動化をどこから始めるか|4層を導入する順序

4層を同時に整える必要はありません。取り消せない操作のリスクが高い層から着手し、後の層は前の層の土台の上に積みます。

  1. 対象操作を洗い出し、hooksでdenyする:入力は禁止したい操作の一覧、確認方法は該当コマンドを実際に打ってdenyされるかどうかです。
  2. 手作業で回している定型処理を定期実行へ移す:入力は毎回人が起動している作業、確認方法はlaunchctl listでジョブがロードされているかです。
  3. 止まると業務が止まる処理だけを常駐プロセス化する:入力は落ちて困る処理の一覧、確認方法はプロセスを強制終了して自動的に復帰するかです。
  4. 作業状態を残す台帳が定着してから自動復旧を組む:入力は案件ごとの進捗記録、確認方法はセッションを強制終了し、次回起動時に自動で再開されるかです。
  5. 月次で「定義した本数」と「ロードされている本数」を数える:入力はlaunchctl listの出力です。確認方法は、数が一致しているか、一致しなければどの層で止まっているかです。

止める場所を先に決めてから自動化を足す順序は『AIエージェントの承認ゲート|送信・公開・削除で止める仕組み』の設計思想と同じです。自動復旧が取り消せない操作を無人のまま押し進める設計になっていないか、着手前に確認してください。

自動化のどこから着手するか、3つの分岐と後回しにした場合の失敗を示す決定木 AIエージェントの自動化をどこから始めるべきかを判定する決定木の図。最初の問い「取り消せない操作を含むか」にYesならhooksへ進み、後回しにすると許可なく実行される。Noなら次の問い「時刻や間隔で確実に動かしたいか」に進み、Yesなら定期実行へ進み、後回しにすると実行し忘れる。Noなら次の問い「常に生きていないと業務が止まるか」に進み、Yesなら常駐プロセスへ進み、後回しにすると落ちても気づかない。Noなら自動復旧へ進み、後回しにすると中断が放置される。3つの問いは上から下へ順に並び、Yesの答えは右の層へ、Noの答えは次の問いへ下に進む。 DECISION 自動化着手の判定木|後回しで起きる失敗 後回しにすると 取り消せない操作を含むか Yes hooks 許可なく実行される No 時刻や間隔で確実に動かしたいか Yes 定期実行 実行し忘れる No 常に生きていないと業務が止まるか Yes 常駐プロセス 落ちても気づかない No 自動復旧 中断が放置される 上から順にYes/Noで判定する。後回しにした層ほど気づかれにくい失敗が起こる。
AIエージェントの自動化をどこから着手すべきかを判定する分岐フロー図

07自動化でつまずきやすい点|設計と稼働がずれる3つの落とし穴

落とし穴1:plistを書いただけでロードしていない。 設定ファイルを作成しても、launchctl load(またはbootstrap)を実行しなければ何も起動しません。WEBMARKSの実測(2026-07-28)では、定義した8本のうち7本がこの状態でした。

落とし穴2:KeepAliveと定期実行を混同する。 秒単位で動かしたいだけなのにKeepAliveを選ぶと、処理が終わるたびに即再起動を繰り返します。10秒未満での終了が続くと、launchdに再起動を止められます(出典: Apple公式ドキュメント)。「常に生きていてほしいか」「時刻で動けば十分か」を先に切り分けてください。

落とし穴3:自動復旧の監視自体が止まっていることに気づかない。 自動再開パトロールの最終実行が2026-07-13で止まっていたケースは、まさにこの落とし穴です。監視対象が正常でも異常でも画面に何も出ない設計は、定期的に人が実測しない限り気づけません。

3つに共通するのは、「設定を書いた」と「実際に動いている」を同一視した点です。層を1つ導入するたびに、実際の稼働を数値で確認する手順を差し込んでください。

launchdジョブは定義8本中ロード1本、パトロールは15日停止したまま launchdジョブは2026-07-28時点で定義8本のうち1本のみロードされており、稼働率は1÷8で12.5%。上部の目盛り軸はこの12.5%の位置を示す。下部は自動再開パトロールの経過日数を0〜30日の軸に取り、最終実行2026-07-13から本記事執筆時点2026-07-28までの15日を軸上のマーカーで示す。15日は月次点検1サイクル30日のちょうど折り返しにあたる。 TIMELINE 定義8本・ロード1本、パトロール停止から15日 ① launchdジョブの本数と稼働率 12.5% 稼働率=ロード1本÷定義8本 0% 50% 100% 1÷8 定義 8本 実際にロードされている 1本 ② パトロール経過日数(0〜30日の目盛り) 月次点検1サイクル(30日)の折り返し 経過 15日 残り 15日 0日 15日 30日 2026-07-13 → 2026-07-28(15日経過) 定義8本のうちロードは1本、稼働率は12.5%パトロールは15/30日目(折り返し)で停止。出典:WEBMARKS社内実測(2026-07-28)
WEBMARKSの2026-07-28実測値だけを使い、数値そのものを読ませる図

08自動化を整えるチェックリスト

  • 送信・公開・削除・決済に関わる操作を、hooksのdeny対象として先に洗い出したか
  • 定期実行に回す処理と、常駐プロセス化する処理を、寿命の必要性で区別したか
  • KeepAliveStartIntervalStartCalendarIntervalのどちらを使うべきか、処理の性質で選んだか
  • スリープ中・電源オフ中に予定が飛んでよい処理かどうかを確認したか
  • 自動復旧を組む前に、作業状態を記録する台帳がすでに運用されているか確認したか
  • launchctl list等で、定義した本数と実際にロードされている本数を数えたか
  • 自動復旧の監視そのものが止まっていないかを、定期的に実測しているか
  • 自動化した処理が、人間ゲートの手前で止まる設計になっているか確認したか

09FAQ

hooksと定期実行、どちらから自動化すればいいですか

hooksからです。取り消せない操作を止める設計は、他のどの自動化よりも導入の優先度が高いためです。定期実行は業務効率化の要素が強く、後回しにしても即座に事故にはつながりません。

常駐プロセスはKeepAliveにすべきですか

いいえ。Apple公式ドキュメントは、オンデマンド起動を基本の設計として案内しています。常時起動させる必要がある処理だけを絞り込み、それ以外は定期実行やイベント起動で足りないかを先に検討してください。

自動復旧はどんな業務からでも導入できますか

作業状態を記録する台帳が先に要ります。台帳がない状態で自動復旧だけを組むと、どこまで進んでいたかをAI自身も判定できません。まずは進捗を記録する運用を定着させてから組んでください。

cronはもう使わない方がいいのですか

macOSではlaunchdが標準の後継です。Appleは共有のcrontabファイルをプログラムから書き換えることを避けるよう案内しています。新規に組む定期実行は、個別のplistファイルで管理できるlaunchdを基本にしてください。

自動化の稼働確認はどのくらいの頻度で行うべきですか

決まった正解はありませんが、月次では最低限行ってください。WEBMARKSの実例のように、定義した本数とロード済みの本数がずれたまま何日も気づかない状態は、自動化を導入した意味を失わせます。