

画面を録って、AIの記憶にする — Activity Chronicle × Hindsight
画面の活動ログをAIの長期記憶に流し込み、何も言わなくても文脈を知っているAIアシスタントを作る仕組み
AIアシスタントに「いまこれやってる」「この前あれがあった」って毎回説明するの、面倒じゃないですか。
ChatGPTもClaudeも、セッションを閉じたら前の会話を忘れます。なので次のセッションでは、また一から状況を説明し直すことになる。1回ならまだしも、これが毎日続くと考えると、結構な手間です。
「何も言わなくても、さっきまで何をやってたか知っててほしい」
このぼやきから始まったのが、Activity Chronicleという仕組みです。
画面を録って、テキストにする#
Activity Chronicleの仕組みはシンプルです。
macOSが定期的に画面をキャプチャします。その画像をVision APIに投げて、画面に写っているテキストを抽出する。OCRですね。抽出したテキストはNotionのデータベース(Activity Logs)にJSONL形式で蓄積されていきます。
具体的な流れはこうなります。
- macOSが1分おきにスクリーンショットを撮る
- 画像をVision APIに送ってテキストを抽出
- 「いつ・何のアプリで・どんな画面だったか」をJSONLにまとめる
- NotionのDB_activity_logsに保存
特別なことはしていない。画面を撮って、文字にして、記録する。ただそれだけです。
でも、これが思いのほか使えるんです。
記憶に流し込む#
Activity Logsに蓄積されたテキストログは、そのままではただのログです。検索はできるけど、AIが「文脈」として扱うには不向き。
ここでHindsightの出番です。
HindsightはAIエージェントの長期記憶システムです。エピソード記憶、要するに「何があったか」をベクトル化して保存し、いつでも検索・参照できるようにします。
Activity LogsからHindsightへの同期は、定期的なバッチ処理で動いています。新しいログが溜まったら、それを要約してHindsightに流し込む。要約されたログはベクトル化されて記憶に格納されるので、エージェントが「昨日何をやってたっけ」と思ったときに、サッと引き出せる。
アーキテクチャの話は前に書いた記事で触れています。今回は「記憶に何を流し込むか」に焦点を当てたいと思います。
何が変わるか#
実際に動かしてみると、エージェントの振る舞いが変わります。
例えば、朝会話を始めたとき。
こう聞かれるようになります。自分で言わなくても、画面に写っていたNotionの編集画面から「DBのスキーマ変更をしていた」ことを把握している。
別の日には、こういうこともありました。
画面に映っていたブックマーク画面をOCRで読み取って、記憶に残っている。だから「いま何に興味があるか」を推測できる。
1週間程度の活動ログが記憶に溜まると、エージェントは「この人は最近、〇〇のテーマに集中している」という傾向も把握できるようになります。プロジェクトの進捗状況も、ログから自動的に追跡できる。
いちいち「いまこれやってる」って言わなくていい。画面が全部語ってくれるから。
実装の肝と課題#
仕組み自体はシンプルですが、運用にはいくつか考慮点があります。
キャプチャ頻度とストレージ
スクリーンショットの撮りすぎはストレージを圧迫しますし、API呼び出しコストもかさみます。逆に撮らなすぎると、活動の隙間が大きくなって記憶が途切れる。今のところ1分間隔で設定していますが、使っているアプリや作業内容に応じて動的に変えられたらいいなと思っています。
プライバシー
画面に映っているものは全部記録されます。パスワードや見られたくないメッセージも。マスキングで対応したいところですが、完璧には難しい。今は「機密情報が映り込むアプリは記録対象から外す」でカバーしています。
OCRの精度
文字が小さい画面や画像が多いページだと、OCRが苦手になります。特にコードエディタは文字化けしやすい。先日も、VS Codeの画面でクラス名が「P'oduction」と読まれていて、どこを開発中かの判断を間違えられたことがありました。ログの粒度と精度のバランスを探る日々です。
今後の改善
今は「テキストを抽出して記憶に流す」までが自動化されています。次は、ログから「やるべきこと」を自動で抽出してタスクに追加したり、「似たような作業を繰り返している」ことに気づいて提案したりするところまで持っていきたいです。
画面の活動ログをAIの記憶に流し込む。次は、ログから「やるべきこと」を自動で抽出してタスクに追加するところまでやりたい。地味だけど、一番効く手だと思っている。
