Skip to content
GitHub Twitter

PAI の UOCS: AI エージェントの出力を自動で記録する仕組み

「あのとき調べたやつ、どこ行った?」

エージェントに何か調べさせて、結果を見て、満足して、セッション終了。翌週また同じこと調べてる自分がいる。

Daniel Miessler の PAI には UOCS (Universal Output Capture System) ってのがあって、この問題を解決してる。

何をするか

エージェントがタスク完了したら、その出力を自動でファイルに保存する。それだけ。

手動で「これ保存しておこう」と考える必要がない。勝手にやってくれる。

仕組み

Claude Code の Hook を使ってる:

  1. サブエージェント(Task tool)がタスク完了
  2. SubagentStop イベント発火
  3. Hook がトランスクリプトから完了メッセージを抽出
  4. MEMORY/RESEARCH/2026-01/ みたいな場所に Markdown で保存

ファイル名は 2026-01-25-103000_AGENT-researcher_RESEARCH_oauth-authentication.md みたいな形式。日時、エージェント種別、カテゴリ、内容が一目で分かる。

カテゴリ分け

エージェントの種類で自動分類される:

  • researcher → RESEARCH
  • architect → DECISION
  • engineer → IMPLEMENTATION
  • pentester → SECURITY

考えなくていい。勝手に振り分けられる。

完了メッセージの検出

エージェントは完了時にこういうフォーマットで出力する:

🗣️ Researcher: OAuth 2.0 の調査を完了しました

Hook がこのパターンを見つけて、メッセージを抽出する。

なぜこれがいいか

AI エージェントはセッション間で記憶を持たない。UOCS は外部記憶として機能する。

Markdown で保存されるから grep でも Obsidian でも検索できる。「いつ、誰が、何を調べたか」が残る。過去の調査を新しいセッションに渡せる。同じ調査を繰り返さなくていい。

実装上の注意

Hook は Claude Code をブロックしちゃいけない。だから:

  • 500ms 以内に終わる
  • 外部サービス(通知とか)は投げっぱなし
  • 失敗しても exit 0 で終了
try {
  await captureAgentOutput(...);
} catch (e) {
  console.error('Failed:', e);
  // キャプチャ失敗してもエージェントは止めない
}

僕の環境では

Clawdbot 使ってるから、memory.md とかセッションログで似たようなことはできる。ただ PAI みたいにエージェント単位で自動キャプチャする仕組みはまだない。今 agent-kit に SignalShelf として移植中。


参考: