Skip to content

セキュリティと共有

Chronicle は、セッションをスキャンしてシークレットを探し、そもそもコーディングエージェントがそれを読み取れないようブロックでき、さらにセッションをリダクション済みのセルフホスト型リンクとして共有できます。すべてローカルで行われ、元のログが変更されることはありません。

AI コーディングセッションには、漏らしたくないものが山ほどあります。プロンプトに貼り付けた API キー、ツールが読んだ .env、スタックトレース内のデータベース URL などです。Chronicle はこれを 3 層で扱います。検出(セッションをスキャンして何が機密かをプレビューする)、防止(シークレットがそもそもモデルに届くのを止める pre-tool-use ガード)、そして 安全な共有(自分のマシンから配信される、リダクション済みで有効期限付きのリンク)です。3 つとも LLM 呼び出しなしのローカルヒューリスティックで動作し、リダクションは一方向です。Chronicle が生成するコピーはリダクション済みであり、ソースログには決して手を触れません。

Local-first: リダクションは、共有が作成される、またはエクスポートが書き出される瞬間に組み込まれます。後でルールを編集しても、誰かが Chronicle のデータベースを読んでも、すでに共有されたコピーのリダクションを解除することはできません。そもそもオリジナルがあなたのマシンから出ていないからです。

セキュリティチェック

セッションから 🛡 Security Check を開くと、機密コンテンツをスキャンできます。Chronicle は、すべてのメッセージのテキストとツール入力を組み込みルール(server/security.js)と照合し、並列プレビューを表示します。Detected(各検出箇所がハイライトされたオリジナル)が、Redacted output(共有またはエクスポートしたコピーに含まれる内容)の隣に並びます。

組み込みルール(BUILTIN_RULES)は設定不要で、次をカバーします。

ルール検出対象
API キーsk-…anthropic-…、AWS AKIA…、GitHub ghp_ / gho_、Slack xox…、Google AIza…
パスワードpassword / passwd / pwd / secret = 値 の代入
Bearer / JWT トークンBearer … ヘッダーと eyJ… の JWT
DB 接続文字列postgres://mysql://mongodb+srv://redis://amqp://mssql://
メールアドレスname@host.tld
電話番号国際形式およびダッシュ区切り形式
プライベート IP アドレス10.x127.x192.168.x172.16–31.x

シードされたテスト用シークレットに対して、これらのルールは 13 分の 13 を検出します。スキャンは検出総数とルールごとの内訳をまとめるので、セッションで何かをする前に、それが何を含んでいるかを一目で把握できます。

カスタムルール

組み込みルールは、あなたの組織のキー接頭辞を知りません。そこで Rules パネルでは、シンプルなグロブを使って独自のルールを追加できます。* は空白以外の連続文字にマッチし、? は 1 文字にマッチします。

  • KITE-* のような redact ルールは、その形状に一致するものをマスクします。
  • *@company.com のような allow ルールは、一致箇所をリダクションから 保護 します。広範な組み込みルール(例: メールルール)が、残しておきたいものをうっかり消し去るような場合に便利です。

優先順位は決定論的です(scanText())。カスタムルールは組み込みルールより先に実行され、allow ルールはその範囲を保護し、重なりがある場合は 先にマッチしたほうが優先 されます。実務上これは、具体的なもの、カスタムルール、allow ルールが、広範な組み込みリダクションより優先されることを意味します。ルールは有効化・無効化・削除でき、すべてのスキャン、エクスポート、共有に適用されます。

リダクション済みエクスポート

Export redacted copy は、一方向にリダクションされた Markdown トランスクリプトをダウンロードします(GET /api/sessions/:id/export-redacted)。バグレポートに添付したり、ドキュメントに貼り付けたりするのに安全な成果物です。セッションの格納済みメッセージは終始読み取り専用です。エクスポートは編集ではなく、新たにリダクションしてレンダリングしたものです。

リアルタイム保護

事後の検出も有用ですが、より強力な保証は、ツールが実行される にシークレットがモデルへ届くのを止めることです。Chronicle は、まさにこれを行う Claude Code の PreToolUse フック hooks/chronicle-guard.mjs を同梱しています。

これは Security → Real-time protection setup からインストールします。Chronicle はまず ~/.claude/settings.json~/.chronicle/backups/hooks/ へバックアップし、その後 Read | Grep | Bash | WebFetch の各ツールに対してガードを登録します。それ以降、Claude Code がこれらのツールのいずれかを実行する前に、ガードは Chronicle にツールの内容をスキャンするよう依頼します(preToolUseCheck())。

  • ファイルパスを伴う Read 系ツールReadGrepread_fileViewNotebookRead)については、Chronicle は 実際のファイル内容 をスキャンします。そのため、エージェントがまさに開こうとしているファイル内のシークレットも捕捉され、プロンプトに打ち込まれたシークレットだけではありません。
  • その他のツールについては、ツール入力そのもの(Bash コマンド、WebFetch の URL など)をスキャンします。

高リスクの検出 — API キー、パスワード、トークン、DB 接続文字列、そして任意のカスタムルール — は 呼び出しをブロックします(フックが 2 で終了し、その説明がモデルに示されるので、モデルは理由を理解して調整できます)。より低リスクの一致は フラグが立てられ ますが、許可されます。いずれの場合も、そのイベントは Security → Interception records に書き込まれ、どのツールとファイルで何がブロックまたはフラグされたかの記録が残るので、ルールの調整に役立ちます。

Fails open、かつデフォルトはオフ。 ガードは http://localhost:4173 を通じて 3 秒のタイムアウトで Chronicle と通信します。Chronicle が動作していなければ、ガードはクリーンに終了してツール呼び出しは続行されます。あなたのコーディングセッションを 決して 壊しません。これは デフォルトではインストールされません。Security ページからオプトインします。コマンドフックをサポートする他のエージェントは、node hooks/chronicle-guard.mjs を指すことができます(ツールのペイロードを stdin で読み取り、終了コード 2 でブロックします)。

共有リンク

セッションを共有する(チームメイトと、あるいは issue で)には、🛡 Security Check → Create share link を開きます。Chronicle は、ローカル アプリが配信するトークン化された URL を発行します。

http://localhost:4173/share/<token>

これを安全にしているのは、何を 保存するかです。createShare() はセッションをリダクションに通し、ランダムなトークンと有効期限(デフォルト 7 日)とともに、作成時点で凍結されたリダクション済みコピーのみ を保存します。元のメッセージがあなたのマシンから出ることはなく、リダクション済みスナップショットが凍結されているため、後からルールを変更しても遡って何かを露出させることはできません。共有ページは、noindex が付いた自己完結型のダークな HTML ビューで、内容が共有時にリダクションされたことと有効期限を示すバナーが付きます。リンク URL はクリップボードにコピーされ、ボタンは適用されたリダクション数を報告します。

共有の管理

Security → Share management は、作成したすべてのリンクを — 有効なものも期限切れのものも — そのタイトル、作成日と有効期限、閲覧回数とともに一覧表示します。Revoke はリンクを即座に削除します。取り消し済みまたは期限切れのトークンにアクセスすると、シンプルな「expired or been revoked」ページが返ります。全体があなた自身の Chronicle インスタンスによって配信されるため、共有はあなたのアプリが動作している間だけ、そしてあなたが許可する期間だけ到達可能です。

3 つの層の連携

  • Detect — 任意のセッションをスキャンし、検出とリダクションを並べてプレビューし、カスタムグロブルールで調整する。
  • Prevent — pre-tool-use ガードにオプトインして、エージェントがシークレットを読み取る前にブロックし、インターセプトログを確認する。
  • Share — リダクション済みで有効期限付きのセルフホスト型リンクを公開し、いつでも取り消す。

リダクションルールエンジン、インターセプトのデータモデル、そして共有ページがどのようにレンダリングされるかについては、以下のアーキテクチャノートを参照してください。

関連項目

Released under the MIT License.