💼 エージェントRuntimeHooks
AIエージェントの実行中に、特定の処理の前後
📺 まず動画で見る(YouTube)
▶ 【自動化】AIガチ勢の最新活用術6選がこれ1本で丸分かり!【ClaudeCode・AIエージェント・AI経営・Skills・MCP】 ↗
※ jpskill.com 編集部が参考用に選んだ動画です。動画の内容と Skill の挙動は厳密には一致しないことがあります。
📜 元の英語説明(参考)
Agent runtime lifecycle hooks for observing and intercepting agent execution. Use when adding hooks to agent operations, mocking tool calls, logging step events, handling human intervention, sub-agent calls, context compression, or building eval/tracing integrations. Triggers on 'hooks', 'beforeToolCall', 'afterToolCall', 'beforeStep', 'afterStep', 'onComplete', 'onError', 'tool mock', 'agent lifecycle', 'human intervention', 'callAgent', 'compact'.
🇯🇵 日本人クリエイター向け解説
AIエージェントの実行中に、特定の処理の前後
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-17
- 取得日時
- 2026-05-17
- 同梱ファイル
- 1
💬 こう話しかけるだけ — サンプルプロンプト
- › Agent Runtime Hooks で、私のビジネスを分析して改善案を3つ提案して
- › Agent Runtime Hooks を使って、来週の会議用の資料を作って
- › Agent Runtime Hooks で、現状の課題を整理してアクションプランに落として
これをClaude Code に貼るだけで、このSkillが自動発動します。
📖 Claude が読む原文 SKILL.md(中身を展開)
この本文は AI(Claude)が読むための原文(英語または中国語)です。日本語訳は順次追加中。
Agent Runtime Hooks
Lifecycle hooks for observing and intercepting agent execution. Hooks are registered per-operation via execAgent({ hooks }) and dispatched by HookDispatcher.
Hook Types
16 hook types across 5 categories:
execAgent({ hooks })
│
├─ beforeStep ──────────── Before each step executes
│ │
│ ├─ [call_llm] LLM inference
│ │
│ ├─ [call_tool]
│ │ ├─ beforeToolCall ── Before tool executes (supports mocking)
│ │ ├─ (tool execution)
│ │ ├─ afterToolCall ─── After tool completes (observation only)
│ │ └─ onToolCallError ─ Tool threw an exception
│ │
│ ├─ [request_human_approve]
│ │ ├─ beforeHumanIntervention ── Before agent pauses
│ │ ├─ afterHumanIntervention ─── After approve/reject + resume
│ │ └─ onStopByHumanIntervention ── User rejected, agent halted
│ │
│ ├─ [compress_context]
│ │ ├─ beforeCompact ──── Before compression starts
│ │ ├─ afterCompact ───── After compression completes
│ │ └─ onCompactError ─── Compression failed
│ │
│ ├─ [callAgent] (via execSubAgentTask)
│ │ ├─ beforeCallAgent ── Before sub-agent starts
│ │ ├─ afterCallAgent ─── After sub-agent completes
│ │ └─ onCallAgentError ── Sub-agent failed
│ │
│ └─ afterStep ──────────── After step completes
│
├─ (next step...)
│
├─ onComplete ───────────── Operation reaches terminal state
└─ onError ──────────────── Error during execution
Key Files
| File | Role |
|---|---|
packages/agent-runtime/src/types/hooks.ts |
Type definitions (AgentHookType, all event interfaces) |
src/server/services/agentRuntime/hooks/types.ts |
Server-side types (AgentHook, re-exports) |
src/server/services/agentRuntime/hooks/HookDispatcher.ts |
Registration, dispatch, dispatchBeforeToolCall |
src/server/modules/AgentRuntime/RuntimeExecutors.ts |
Tool/Compact/HumanIntervention hook dispatch |
src/server/services/agentRuntime/AgentRuntimeService.ts |
Step hooks + HumanIntervention resume/reject |
src/server/services/aiAgent/index.ts |
CallAgent hook dispatch |
Registration Flow
const hooks: AgentHook[] = [
{ id: 'my-hook', type: 'afterStep', handler: async (event) => { ... } },
];
await aiAgentService.execAgent({ agentId, prompt, hooks });
// Internally: hookDispatcher.register(operationId, hooks)
// Cleanup: hookDispatcher.unregister(operationId)
Hook Reference
Step Level
beforeStep — Before each step. event: AgentHookEvent
afterStep — After each step. event: AgentHookEvent (content, toolsCalling, totalCost, etc.)
onComplete — Terminal state. event: AgentHookEvent (reason: done/error/interrupted/max_steps/cost_limit)
onError — Error occurred. event: AgentHookEvent (errorMessage, errorDetail)
Tool Call Level
beforeToolCall — Before tool executes. Supports mocking via event.mock().
// event: ToolCallHookEvent
{
(identifier, apiName, args, callIndex, stepIndex, operationId, mock);
}
// Mock example:
event.mock({ content: '{"error":"rate limited"}' });
Dispatch method: hookDispatcher.dispatchBeforeToolCall() (returns mock result or null).
afterToolCall — After tool completes. Observation only.
// event: AfterToolCallHookEvent
{
(identifier, apiName, args, callIndex, content, success, mocked, executionTimeMs, stepIndex);
}
onToolCallError — Tool threw an exception (catch block, not just success=false).
// event: ToolCallErrorHookEvent
{
(identifier, apiName, args, callIndex, error, stepIndex);
}
Human Intervention
beforeHumanIntervention — Before agent pauses for approval.
// event: BeforeHumanInterventionHookEvent
{ operationId, stepIndex, pendingTools: [{ identifier, apiName }] }
afterHumanIntervention — After approve/reject, agent resumes.
// event: AfterHumanInterventionHookEvent
{ operationId, action: 'approve' | 'reject' | 'rejectAndContinue', toolCallId?, rejectionReason? }
onStopByHumanIntervention — User rejected, agent halted.
// event: StopByHumanInterventionHookEvent
{ operationId, toolCallId?, rejectionReason? }
Context Compression
beforeCompact — Before compression starts.
// event: BeforeCompactHookEvent
{
(operationId, stepIndex, messageCount, tokenCount);
}
afterCompact — After compression completes.
// event: AfterCompactHookEvent
{
(operationId, stepIndex, groupId, messagesBefore, messagesAfter, summary);
}
onCompactError — Compression failed.
// event: CompactErrorHookEvent
{
(operationId, stepIndex, tokenCount, error);
}
Sub-Agent (CallAgent)
beforeCallAgent — Before calling sub-agent. Dispatched on parent operation.
// event: BeforeCallAgentHookEvent
{
(operationId, agentId, instruction);
}
afterCallAgent — Sub-agent completed. Dispatched on parent operation.
// event: AfterCallAgentHookEvent
{
(operationId, agentId, subOperationId, threadId, success);
}
onCallAgentError — Sub-agent failed. Dispatched on parent operation.
// event: CallAgentErrorHookEvent
{
(operationId, agentId, error);
}
Note: CallAgent hooks require parentOperationId in ExecSubAgentTaskParams.
Design Notes
- Fire-and-forget: All handlers return
Promise<void>. Errors are non-fatal. - Exception:
beforeToolCallsupports mock viaevent.mock()— usesdispatchBeforeToolCall()which returns the mock result. - Sequential: Same-type hooks run in registration order.
- Local only:
beforeToolCallmock only works in local mode (in-memory hooks). Webhook mode does not support mocking. - Scoped per operation: Auto-cleaned via
hookDispatcher.unregister()on completion. - Sandbox/MCP: No separate hooks — they go through
executeTool, sobeforeToolCall/afterToolCallcover them. Useevent.identifierto filter.
Real-World Example: agent-evals
See devtools/agent-evals/helpers/runner.ts — createEvalHooks() uses afterStep, onComplete, afterToolCall, and beforeToolCall (for mock).