Postgres へのコピー¶
Interlatch はアーカイブを、コンピューター上の自前の SQLite データベース(~/.interlatch/chronicle.db)に保存します。
そのコピーを、選んだ Postgres データベース(このコンピューター、Docker、クラウドのいずれか)に置くこともできます。コピーは SQL や
BI ツール(Metabase、Grafana、Power BI、ノートブックなど)で問い合わせたり、別の場所のコピーとして持っておいたりするのに使えます。
コピーは一方向です。Interlatch はバックグラウンド実行のたびに書き込み、読み戻すことはありません。ダッシュボード、検索、MCP サーバー、 セッション開始時のメモは引き続きコンピューター上のデータベースを使うので、Postgres が止まっていても動きは変わりません。
設定する¶
Postgres のデータベースと、そこにテーブルを作れるユーザーが必要です。Postgres のドライバーは postgres エクストラに含まれています:
uv tool install --reinstall 'interlatch[postgres]'
インストールしたらダッシュボードを再起動してください(アプリを終了して開き直すか、interlatch ui をもう一度実行)。
ダッシュボードで¶
Settings › Storage(保存場所)を開き、Copy in Postgres(Postgres へのコピー)を Postgres に切り替えて、サーバーのアドレス、
ポート、データベース、ユーザー、パスワード、SSL モードを入力します。What it holds(入れる内容)でどこまで入れるかを選びます
(入れる内容)。Everything(すべて)を選ぶとトランスクリプトに含まれるものについての警告が出て、トランスクリプトを送り始める前に保存で確認を求めます。接続をテストで設定を確かめ、保存するともう一度確かめてから保存し、すぐにコピーを書き込みます。
接続できない設定は保存しません。パスワードは Interlatch のフォルダーの mirror.env(自分のユーザーだけが読めるファイル)に入り、
ダッシュボードに再び表示されることはありません。
このページには、コピーの中身、最後に書き込んだ日時、エラーがあればそれが表示されます。Write now(今すぐ書き込む)を押すと、次の バックグラウンド実行を待たずに最新にします。利用者がいるハブでは、このページを開けるのは管理者だけです。
コマンドラインで¶
# PGHOST、PGPORT、PGDATABASE、PGUSER、PGPASSWORD(と PGSSLMODE、既定は require)を 1 行に 1 つ:
$EDITOR ~/.interlatch/mirror.env && chmod 600 ~/.interlatch/mirror.env
interlatch config set mirror.to postgres
interlatch mirror sync # 今すぐ書き込み、何を書いたかを表示
interlatch mirror # 書き込み先、テーブルごとの行数、最後の書き込み
このコンピューターの Docker で Postgres を動かす¶
docker run -d --name interlatch-pg --restart unless-stopped \
-e POSTGRES_USER=interlatch -e POSTGRES_DB=interlatch -e POSTGRES_PASSWORD=<パスワード> \
-p 127.0.0.1:5432:5432 -v interlatch-pg:/var/lib/postgresql/data postgres:17
設定には、サーバーのアドレス 127.0.0.1、ポート 5432、データベースとユーザーに interlatch、決めたパスワード、SSL モード
disable を使います。Docker の Postgres には TLS 証明書がなく、ポートはこのコンピューターからしか開いていません。データは
interlatch-pg ボリュームにあるので、コンテナーを作り直しても残ります。
クラウドのデータベース¶
マネージドの Postgres ならどれでも使えます(Azure Database for PostgreSQL、Amazon RDS、Google Cloud SQL、Supabase、Neon など)。
SSL モードは require(既定)のままにするか、プロバイダーの CA 証明書があれば verify-full にします。データベースのファイアウォールで
このコンピューターのアドレスを許可してください。Interlatch には、データベースを所有するか、そこにスキーマを作れる専用のユーザーを用意します。
入れる内容¶
[mirror] include でどこまで入れるかを決めます。別のものを選ばない限り knowledge です:
knowledge(既定) |
everything |
|
|---|---|---|
| セッション:エージェント、プロジェクト、時刻、モデル、トークン数、費用、結果、要約と分析 | ✓ | ✓ |
教訓(knowledge)、ナレッジベース(project_kb)、週次の振り返り、用語集 |
✓ | ✓ |
| 成果物、各セッションが触ったファイル、API 呼び出しごとのトークン使用量、サブエージェント、分析の記録 | ✓ | ✓ |
| 各セッションの最初と最後のプロンプト、サブエージェントのタスクの説明 | ✓ | |
トランスクリプト:すべてのメッセージ(events)とツール呼び出し(tool_calls) |
✓ |
- 秘密情報。
everythingでは、プロンプトとトランスクリプトの秘密情報を、分析の前と同じように伏せ字にしてから送ります (伏せ字にされるもの)。伏せ字はパターンで判定するため、特徴のない秘密情報は見逃すことがあります。everythingは、トランスクリプトを預けてよいデータベースにだけ選んでください。 - タイトル。
knowledgeでは、最初のプロンプトの書き出ししかタイトルがないセッションは、タイトルなしで送ります。 - 除外したプロジェクト。 除外したプロジェクト(
[sources] exclude_projects)のセッションとその教訓は送りません。あとから除外した プロジェクトは、次の書き込みでコピーから消えます。 - 取り込んだチャット。 取り込んだ claude.ai と ChatGPT のチャットもアーカイブの一部なので送ります。本文を送るのは
everythingのときだけです。 - 送らないもの。 Interlatch 自身の管理情報(トランスクリプトのディスク上の場所、再試行の回数、ハブの鍵や利用者)は送りません。
everything から knowledge に戻すと、次の書き込みでトランスクリプトのテーブルとプロンプトの列をコピーから消します。その領域は、
Postgres が次にテーブルをバキュームしたときに解放されます。
テーブル名は Interlatch のデータベースと同じで、スキーマ chronicle([mirror] schema)に入ります。時刻は timestamptz、*_json の列は
jsonb で、各テーブルにはいつものキーがあります。キーのあるテーブルには、次の書き込みで比べる _hash 列と _synced_at 列もあります。
_mirror テーブルには、どのコンピューターがどの include で書き込み、最後にいつ書いたかが入ります。
最新に保つ仕組み¶
- バックグラウンド実行のたびに(15 分ごと)、コピーとデータベースを比べて、変わったものだけを書きます。分析されたり続きが あったりしたセッションは、そのセッションの行(使用量、ファイル、成果物、トランスクリプト)ごと書き直します。こちらで消えた行は 向こうでも消えます。新しいものがなければ、書き込みは 1 秒ほどで終わります。
- 最初の書き込みではすべてをコピーします。約 4,000 セッションのアーカイブを同じコンピューターのデータベースに書く場合、
knowledgeで数秒、everythingで 1 分ほどです。インターネット越しではもっとかかります。 - Postgres につながらないときも、コンピューター上のものには影響しません。エラーは Storage ページと
interlatch mirrorに出て、 次の実行で追いつきます。 interlatch mirror sync --fullは、コピーの中身にかかわらず、すべての行を書き直します。- オフにする(Storage ページで Off、または
interlatch config set mirror.to "")と書き込みが止まります。コピーと設定は残るので、 もう一度オンにするときにパスワードは要りません。
スキーマは 1 台に 1 つ¶
コンピューターはそれぞれ自分のスキーマに書きます。Interlatch は、ほかのコンピューターが書いているスキーマを使いません。2 台が互いの
コピーを上書きすることはありません。複数のコンピューターを 1 つのデータベースにコピーするときは、それぞれ別の [mirror] schema
(例:chronicle_laptop と chronicle_desktop)を指定します。複数のコンピューターのセッションを 1 つのアーカイブにまとめたいときは、
ハブを使い(スマートフォンとほかのコンピューター)、ハブのミラーを Postgres に向けます。
書き込むスキーマは Interlatch が管理します。Interlatch が作っていない列はテーブルから消すので、自分のビューやテーブルは別のスキーマに置いてください。
問い合わせる¶
-- エージェントごと・月ごとの費用
SELECT agent, date_trunc('month', started_at)::date AS month, count(*) AS sessions,
round(sum(est_cost_usd)::numeric, 2) AS usd
FROM chronicle.sessions GROUP BY 1, 2 ORDER BY 2 DESC, 4 DESC;
-- あるプロジェクトの教訓、新しい順
SELECT kind, title, body FROM chronicle.knowledge
WHERE project_name = 'my-app' AND status = 'active' ORDER BY updated_at DESC;
-- モデルごと・日ごとのトークン数
SELECT ts::date AS day, model, sum(input_tokens + output_tokens) AS tokens
FROM chronicle.api_calls GROUP BY 1, 2 ORDER BY 1 DESC, 3 DESC;
-- postgres タグの付いた教訓と、そのプロジェクト
SELECT s.project_name, k.title FROM chronicle.knowledge k JOIN chronicle.sessions s ON s.id = k.session_id
WHERE k.tags_json ? 'postgres';
BI ツールには読み取り専用のロールを使います。あとから Interlatch が作るテーブル(everything に切り替えたときのトランスクリプトの
テーブル)も読めるように、Interlatch のユーザーで実行してください:
CREATE ROLE bi LOGIN PASSWORD '…';
GRANT USAGE ON SCHEMA chronicle TO bi;
GRANT SELECT ON ALL TABLES IN SCHEMA chronicle TO bi;
ALTER DEFAULT PRIVILEGES IN SCHEMA chronicle GRANT SELECT ON TABLES TO bi;