autoresearch-hooks について
autoresearch-hooksは、autoresearchの各反復の境界で任意のスクリプトを実行するスキルです。前後のフックはセッション情報をJSONで受け取り、標準出力を通じてエージェントに短い指示を渡せます。
主な機能
- 01任意の実行前・実行後スクリプト
- 02実行情報とセッション状態をJSONで受信
- 03標準出力によるエージェントへの指示
- 04タイムアウトとエラーの通知
- 05自動取り消し後もフックを保持
活用シーン
- 01実験実行前に情報を検索
- 02結果記録後に知見を残す
- 03実行結果に応じて通知やエージェントの方針を変更
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ davebcn87/ pi-autoresearch --skill autoresearch-hooksインストール後、Claude Code で/autoresearch-hooksを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
examples/README.mdexamples/after/auto-tag-winners.shlearnings-journal.shmacos-notify.shexamples/before/anti-thrash.shcontext-rotation.shexternal-search.shhypothesis-reflection.shidea-rotator.shqmd-search.sh詳細
autoresearch-hooks
autoresearch セッションの反復境界で実行されるオプションのスクリプトです。2 つのフックがあり、どちらもループを実行するエージェントからは見えません。効果はディスク上のファイル、またはステアメッセージとして現れます。
.auto/hooks/
before.sh # fires before each iteration (prospective)
after.sh # fires after each log_experiment (retrospective)
どちらのファイルも任意です。実行ビットが設定されていないファイルは、通知なしで無視されます。
コントラクト
標準入力 — before.sh
JSON を 1 行で受け取ります。jq で解析します。実際的な例:
{
"event": "before",
"cwd": "/path/to/workdir",
"next_run": 6,
"last_run": {
"run": 5,
"status": "discard",
"metric": 42.1,
"description": "Simplified to sorted(arr) — copy cost dominates",
"asi": {
"hypothesis": "Built-in sort avoids Python overhead",
"next_focus": "list copy avoidance"
}
},
"session": {
"metric_name": "total_ms",
"metric_unit": "ms",
"direction": "lower",
"baseline_metric": 40.7,
"best_metric": 33.5,
"run_count": 5,
"goal": "optimize sort speed"
}
}
| フィールド | 説明 |
|---|---|
last_run | 直近の実行エントリーです。新しいセッションでは null です。 |
session.direction | "lower" または "higher"。尺度のどちら側を優先するかを示します。 |
session.baseline_metric | 現在のセグメントの最初の実行です。実行が 1 回もない間は null です。 |
session.best_metric | 保持された実行のみを対象とした最適なメトリックです。保持された実行がない間は null です。 |
session.goal | init_experiment で設定されたセッション名です。 |
session.run_count | これまでに記録された実行の合計数です(ステータスを問いません)。 |
標準入力 — after.sh
{
"event": "after",
"cwd": "/path/to/workdir",
"run_entry": {
"run": 6,
"status": "discard",
"metric": 38.9,
"description": "Timsort hybrid slower on random",
"asi": {
"hypothesis": "Partial-sort heuristic on input distribution",
"learned": "Overhead dominates on random arrays"
}
},
"session": {
"metric_name": "total_ms",
"metric_unit": "ms",
"direction": "lower",
"baseline_metric": 40.7,
"best_metric": 33.5,
"run_count": 6,
"goal": "optimize sort speed"
}
}
| フィールド | 説明 |
|---|---|
run_entry | 直前に記録された実行です。常に存在します。 |
session | before.sh と同じ形式で、実行後の状態を反映します。 |
出力
- 標準出力(最大 8 KB)— 次のターンにステアメッセージとしてエージェントに渡されます。空の場合は何も通知されません。
- 標準エラー出力 + ゼロ以外の終了コード — エラーステアとして通知されます。
- タイムアウト — 30 秒で強制終了され、可観測性エントリーに記録されます。
保持
.auto/** は自動取り消し後も保持されます。.auto/ フォルダー全体が保存されます。(進行中のセッションのため、従来の autoresearch.* パスも引き続き保持されます。)
例
実行可能なリファレンススクリプトは、このスキルの examples/ ディレクトリにあります。パターンごとに 1 ファイルです。パスはスキルディレクトリ(SKILL.md の親ディレクトリ)を基準に解決されます。参考にご覧ください。これらはポリシーではありません。
examples/before/— 外部検索、qmd ドキュメント検索、過剰な変更の防止、アイデアのローテーション、仮説の振り返り、コンテキストのローテーションexamples/after/— 学びの記録、新しい最良結果が出たときの macOS 通知、勝利したコミットへの自動タグ付け
各例は、名前付き定数、短いヘルパー関数、ガード節、意図が伝わる名前を備えた、完全に自己完結したスクリプトです。目的はヘッダーコメントを読んで確認し、.auto/hooks/<stage>.sh にコピーして調整してください。
フックを追加する手順
-
セッションを把握します。
.auto/prompt.mdを読んで目的とメトリックを確認し、.auto/measure.shに目を通してワークロードを把握します。フックはループを補完するものであり、重複するものではありません。 -
ユーザーの意図を明確にします。 どの境界で何を実行するべきでしょうか? 事前の調査/事後の記録/成功時の通知/過剰な変更への介入などを検討します。
-
examples/にある意図に最も近い例から始めます(スキルディレクトリを基準に解決します)。適切な例がなければ、同じスタイル(名前付き定数、短い関数、ガード節、jqで解析する JSON 標準入力)に従って一から作成します。過去を振り返る処理と将来に備える処理を組み合わせる場合は、片方に詰め込まず、before.shとafter.shの両方を使います。 -
コピーして調整し、実行可能にします。
mkdir -p .auto/hooks cp "<skill-dir>/examples/before/external-search.sh" .auto/hooks/before.sh # ... adapt the script ... chmod +x .auto/hooks/before.sh -
ループで使う前に、パイプでモック入力を渡して動作確認します。
jq -n ' { event: "before", cwd: ".", next_run: 1, last_run: null, session: { metric_name: "total_ms", metric_unit: "ms", direction: "lower", baseline_metric: null, best_metric: null, run_count: 0, goal: "test" } } ' | ./.auto/hooks/before.shafter.shの場合は、last_run: nullをrun_entryオブジェクトに置き換えます(スキーマは上記を参照)。 -
他のセッションファイルと一緒にフックをコミットします。
.auto/配下にあるため、取り消し後も保持されます。
経験則
-
エージェントが自然に書き込むフィールドを読み取ります —
asi.hypothesis、asi.next_focus、asi.learned、description。独自に「フック入力」フィールドを作り、エージェントに入力するよう指示してはいけません。これは透明性の原則に反します。 -
何も出力しないのがデフォルトです。 エージェントにとって有用な情報がある場合にのみ、stdout に出力します。stdout が空なら、誘導はありません。
-
早期終了でガードします。
[ -z "$query" ] && exit 0は、すべてをifで囲むより効率的で明快です。 -
スクリプトごとに扱う関心事は1つにします。 調査と学習内容の両方を扱うなら、別々のファイル(
before.shとafter.sh)に記述します。まとめてはいけません。 -
環境変数は使いません。 すべて stdin から取得します。
jqでcwd(およびその他の値)を取り出します。$AUTORESEARCH_WORK_DIRはありません。