Skip to content

セッションとTaint

セッションはTriggerfishshの会話状態の基本単位です。すべてのセッションは独立して taintレベルを追跡します — セッション中にアクセスされたデータの最高感度を記録する 分類の透かしです。Taintはポリシーエンジンの出力決定を駆動します:セッションが CONFIDENTIALにtaintされている場合、そのセッションのデータはCONFIDENTIAL以下に 分類されたチャンネルに流れることができません。

セッションTaintモデル

Taintの仕組み

セッションが分類レベルのデータにアクセスすると、セッション全体がそのレベルで taintされます。Taintは3つのルールに従います:

  1. 会話ごと: 各セッションは独自の独立したtaintレベルを持ちます
  2. エスカレートのみ: Taintはセッション内で増加することはできますが、低下することはありません
  3. 完全リセットですべてをクリア: Taintと会話履歴は一緒にクリアされます
Taintエスカレーション: PUBLIC → INTERNAL → CONFIDENTIAL → RESTRICTED。Taintはエスカレートのみ、低下しません。

セキュリティ Taintは選択的に低下させることができません。会話履歴全体を

クリアせずにセッションを「アンtaint」するメカニズムはありません。これはコンテキスト 漏洩を防ぎます — セッションが機密データを見たことを記憶している場合、taintはそれを 反映する必要があります。 :::

Taintが低下できない理由

分類されたデータがもはや表示されていなくても、LLMのコンテキストウィンドウにはまだ それが含まれています。モデルは将来のレスポンスで分類された情報を参照・要約・エコー する可能性があります。Taintを安全に下げる唯一の方法はコンテキストを完全に排除する ことです — それが完全リセットの実行内容です。

セッションタイプ

Triggerfishshはいくつかのセッションタイプを管理しており、それぞれが独立したtaint追跡を持ちます:

セッションタイプ説明初期Taint再起動後も永続
メインオーナーとのプライマリな直接会話PUBLICはい
チャンネル接続チャンネルごとに1つ(Telegram、Slackなど)PUBLICはい
バックグラウンド自律タスク用に生成(cron、webhook)PUBLICタスクの期間
エージェントマルチエージェントルーティング用のエージェントごとのセッションPUBLICはい
グループグループチャットセッションPUBLICはい

バックグラウンドセッションは、親セッションのtaintレベルに関係なく、常に

PUBLIC taintで開始します。これは設計によるものです — cronジョブとwebhookトリガー タスクはそれらを生成したセッションのtaintを継承すべきではありません。 :::

Taintエスカレーションの例

taintエスカレーションと結果的なポリシーブロックを示す完全なフローです:

Taintエスカレーションの例: セッションはPUBLICで開始し、Salesforceアクセス後CONFIDENTIALにエスカレートし、PUBLICのWhatsAppチャンネルへの出力をBLOCKします

完全リセットメカニズム

セッションリセットはtaintを下げる唯一の方法です。意図的で破壊的な操作です:

  1. 系譜レコードをアーカイブ — セッションのすべての系譜データが監査ストレージに 保存されます
  2. 会話履歴をクリア — コンテキストウィンドウ全体が消去されます
  3. taintをPUBLICにリセット — セッションが新鮮に開始されます
  4. ユーザーの確認を要求SESSION_RESET hookは実行前に明示的な確認を要求します

リセット後、セッションは新しいセッションと区別がつきません。エージェントは以前の 会話の記憶を持ちません。これが分類されたデータがLLMのコンテキストを通じて漏洩できない ことを保証する唯一の方法です。

セッション間通信

エージェントがsessions_sendを使用してセッション間でデータを送信する場合、同じ ライトダウンルールが適用されます:

ソースセッションTaintターゲットセッションチャンネル決定
PUBLICPUBLICチャンネル許可
CONFIDENTIALCONFIDENTIALチャンネル許可
CONFIDENTIALPUBLICチャンネルブロック
RESTRICTEDCONFIDENTIALチャンネルブロック

エージェントが使用できるセッションツール:

ツール説明Taintへの影響
sessions_listフィルター付きでアクティブセッションをリスト表示Taint変更なし
sessions_historyセッションのトランスクリプトを取得参照されたセッションからTaintを継承
sessions_send別のセッションにメッセージを送信ライトダウンチェックの対象
sessions_spawnバックグラウンドタスクセッションを作成新しいセッションはPUBLICで開始
session_status現在のセッション状態とメタデータを確認Taint変更なし

データ系譜

Triggerfishshが処理するすべてのデータ要素はプロベナンスメタデータを持ちます — データがどこから来て、どのように変換され、どこに行ったかの完全な記録です。系譜は 分類決定を検証可能にする監査証跡です。

系譜レコードの構造

json
{
  "lineage_id": "lin_789xyz",
  "content_hash": "sha256:a1b2c3d4...",
  "origin": {
    "source_type": "integration",
    "source_name": "salesforce",
    "record_id": "opp_00123ABC",
    "record_type": "Opportunity",
    "accessed_at": "2025-01-29T10:23:45Z",
    "accessed_by": "user_456",
    "access_method": "plugin_query"
  },
  "classification": {
    "level": "CONFIDENTIAL",
    "reason": "source_system_default",
    "assigned_at": "2025-01-29T10:23:45Z",
    "can_be_downgraded": false
  },
  "transformations": [
    {
      "type": "extraction",
      "description": "選択されたフィールド: name、amount、stage",
      "timestamp": "2025-01-29T10:23:46Z",
      "agent_id": "agent_123"
    },
    {
      "type": "summarization",
      "description": "LLMが3つのレコードをパイプライン概要に要約",
      "timestamp": "2025-01-29T10:23:47Z",
      "input_lineage_ids": ["lin_789xyz", "lin_790xyz", "lin_791xyz"],
      "agent_id": "agent_123"
    }
  ],
  "current_location": {
    "session_id": "sess_456",
    "context_position": "assistant_response_3"
  }
}

系譜追跡ルール

イベント系譜アクション
統合からデータを読み取り起点付きの系譜レコードを作成
LLMによるデータ変換変換を追加し、入力系譜をリンク
複数のソースからデータを集約系譜をマージ、分類 = max(入力)
チャンネルにデータを送信宛先を記録し、分類を確認
セッションリセット系譜レコードをアーカイブし、コンテキストから削除

集約分類

複数のソースからのデータが結合された場合(例:異なる統合からのレコードのLLMサマリー)、 集約された結果はすべての入力の最高分類を継承します:

入力1: INTERNAL    (内部wiki)
入力2: CONFIDENTIAL (Salesforceレコード)
入力3: PUBLIC      (天気API)

集約出力の分類: CONFIDENTIAL (入力の最大値)

エンタープライズデプロイメントでは、統計的集計(10+レコードの平均、カウント、

合計)または認証された匿名化データに対するオプションのダウングレードルールを設定 できます。すべてのダウングレードは明示的なポリシールールを必要とし、完全な正当化と ともにログ記録され、監査レビューの対象となります。 :::

監査機能

系譜は4つのカテゴリの監査クエリを可能にします:

  • フォワードトレース: 「Salesforceレコード X のデータに何が起こりましたか?」— 起点からすべての宛先へデータを追跡
  • バックワードトレース: 「この出力にどのソースが貢献しましたか?」— 出力を すべてのソースレコードに遡る
  • 分類の正当化: 「なぜこれはCONFIDENTIALとマークされているのですか?」— 分類理由のチェーンを表示
  • コンプライアンスエクスポート: 法的または規制上のレビュー用の完全な監護連鎖

Taintの永続性

セッションtaintはtaint:名前空間のStorageProviderを通じて永続化されます。これは taintがデーモンの再起動後も存続することを意味します — 再起動前にCONFIDENTIALだった セッションは再起動後もCONFIDENTIALです。

系譜レコードはlineage:名前空間の下に保存され、コンプライアンス主導の保持期間 (デフォルト90日)があります。