agentleFS
bokuwalilybokuwalily/claude-code-skills/skills/hook-latency-wrap/SKILL.md

hook-latency-wrap

Skill0 starsChanged 5 months agoMITView on GitHub

Claude Code の任意 hook (PostToolUse / Stop / UserPromptSubmit 等) の実行時間と失敗率を観測したいとき、bash $EPOCHREALTIME ベースの透過 wrapper で計測する手順。

1 other project uses a version of this.

Adopted by

Most recently taken up by

The file

Files
SKILL.md

Procedure

  1. wrapper script 設置: ~/.claude/scripts/hook-latency-wrap.sh <real_hook_path> "$@" で stdin を保持しつつ実 hook を exec 前後で $EPOCHREALTIME を取得。差分を µs 精度で ~/.claude/logs/hook-latency.jsonl に追記 (ts/hook/duration_ms/exit_code)。
  2. settings.json の配線書き換え: 該当 hook の command を ~/.claude/scripts/hook-latency-wrap.sh ~/.claude/hooks/<real>.sh に差し替え。複数 hook 同時 wrap 可能。
  3. stdin 透過: wrapper は cat | <real_hook> ではなく exec 直前まで stdin を保持し、実 hook に丸ごと渡す (Claude Code hook protocol を壊さない)。
  4. 失敗時 passthrough: 実 hook の exit code をそのまま返す。wrap 自体は失敗しても exit 0 で hook chain を止めない。
  5. レポート集計: ~/.claude/scripts/hook-latency-report.sh で過去 7d を hook 別に p50/p95/max/fail rate に集計。

Pitfalls

  • bash 5+ の $EPOCHREALTIME を使うこと。macOS 標準 bash 3.2 では未定義 → /opt/homebrew/bin/bash shebang を明示する。python3 を spawn すると 30-50ms オーバーヘッドが追加で乗る (本末転倒)。
  • wrap 自体のオーバーヘッドは ~20ms。1ms 単位の精度を求めるなら別途差し引き必要。
  • exec 前に >> で log に追記すると実 hook の stdout/stderr を巻き込む → 計測ログは別 fd (e.g. exec 9>>...) か wrap 終了後に書く。
  • stop_notify.sh のような非同期 hook は wrap の終了タイミングと実完了がズレる場合あり。fire-and-forget なら計測無意味。

Verification

  • bash -n ~/.claude/scripts/hook-latency-wrap.sh で構文 OK。
  • 試験 hook で echo '{}' | ~/.claude/scripts/hook-latency-wrap.sh ~/.claude/hooks/<target>.sh 実行 → log に entry 1 行追加。
  • 通常 hook 発火 (Edit/Stop 等) 後に tail ~/.claude/logs/hook-latency.jsonl で記録確認。
  • hook-latency-report.sh で p95 が想定範囲 (< 500ms 推奨) に収まっている。

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.