コンテンツにスキップ
Zanei
日本語
Esc
↑↓移動↵開く⌘Jプレビュー
このページの内容

フィルタ

どのアプリ・サイトを記録するかを決める許可/不許可リスト。ストアに書き込まれる前に適用されます。

フィルタは、どのアプリ・サイトを記録するかを決めます。capture-time scope は、全 event、入力・clipboard 本文、content snapshot の 3 つです。帰属不能な clipboard 変化はアプリと照合できないため、app.name: "Unknown" かつ帰属と本文が null の clipboard.copy として残り得ます。

capture-time と query-time

「アプリで絞る」方法は 2 種類あり、役割が異なります。

capture-time フィルタ(このページ) query-time フィルタ(--app 等)
効く場所 ストアの手前。該当イベントは破棄 読み出し時のみ
目的 機微アプリをストアに入れない 結果の絞り込み
設定手段 zanei filter コマンド / config.toml の [filter] 各コマンドの --app --types 等
MCP から 変更不可(read-only) query_events の引数として利用可

リストの管理

zanei filter show                                          # 3 scope と mode を表示
zanei filter exclude-app add 1Password                     # 全 event
zanei filter text-content exclude-app add Slack             # 本文のみ除外。事実は残る
zanei filter text-content only-site add github.com           # Chrome/Safari の入力・clipboard 本文をこの site だけに限定
zanei filter content-snapshot only-app add Terminal          # snapshot をこの app だけに限定
zanei filter content-snapshot exclude-site add mail.google.com

コマンドの形は zanei filter [<scope>] <list> add|remove [VALUE] です。<scope> を省略すると [filter]、text-content は [filter.text_content]、content-snapshot は [filter.content_snapshot] を操作します。4 つの list はすべての scope で同じ意味です。

list config key suffix 意味
exclude-app exclude_apps 指定 app を除外
only-app include_only_apps 非空なら指定 app だけを含める
exclude-site exclude_websites 指定した browser URL host を除外
only-site include_only_websites 非空なら指定した browser URL host だけを含める

app / site の各軸で include_only_* が非空なら only mode、空なら exclude mode です。exclude_* はどちらの mode でも常に優先します。デーモンは 3 scope を約 2 秒間隔で reload するため、変更は数秒以内に再起動なしで反映されます。

各 scope が除外するもの

評価順は固定です。

  1. 組み込みの app 除外。
  2. [filter] の app rule。対象外 app に帰属するすべての event を破棄。
  3. [filter] の website rule。一致する browser URL event を破棄し、その window の入力・clipboard 本文と snapshot を抑止。
  4. [filter.text_content] の app / website rule。scope 外では input.key.text・ui.value.data.text・clipboard の text / size_bytes・element.value を null にし、event と内容以外の事実は残す。その window だけ capture.text_content = false と同じ形。
  5. [filter.content_snapshot] の app / website rule。scope 外では content.snapshot event を生成しない。

サイトルールはChromeとSafariに適用し、単体利用と組み込み利用で同じscopeを使います。他のbrowserはapp ruleで制御します。Safariのプライベート閲覧の除外は保証せず、本文の既定除外は維持します。

filter reloadで対応browserを対象に加えると、recorderの再起動なしでそのbrowserの追跡が始まり、再び除外すると停止します。macOSのAutomation確認は、そのbrowserを初めて対象に加え、権限が必要になった時点で表示されます。

アプリを選ぶ

zanei apps                 # installed / running / recent app
zanei apps slack           # name または bundle ID を大文字小文字無視で検索
zanei apps slack --json    # 機械可読の候補

全 app list の add は表示名または bundle ID を受け付け、同じ候補群に対して解決し、bundle ID があればそれを保存します。正常時は Added com.apple.Terminal (Terminal) のように正規化結果を表示します。解決できない値は保存せず code 2 で終了し、近い候補があれば提示します。まだ installed でない app を意図的に保存する場合だけ --unverified を使います。Zanei は検証できなかったことを warning します。

値を省略した add は、recent 順の番号選択を開きます。非 TTY または --quiet では値が必須で、省略すると code 2 です。remove は現在の list 内で解決するため、uninstall 済みの entry も削除できます。zanei filter show は解決済み entry に表示名を付け、手編集した未解決値には (not installed) を付けます。

zanei apps [QUERY] [--json] は TCC 権限が不要で、daemon 停止中も動きます。table は name・bundle ID・installed/running/recent source・last use を表示します。JSON は { "apps": [...], "recent_unavailable": null, "installed_unreadable": 0 } です。store から recent app を取得できない場合も installed / running は残り、recent_unavailable に理由が入ります。installed_unreadable は metadata を読めなかった app bundle の件数です。

Browser の既定除外

private window を確実に判定できないため、両方の content scope は次の browser を既定で除外します。

browser bundle ID
Safari com.apple.Safari
Firefox org.mozilla.firefox
Brave com.brave.Browser
Edge com.microsoft.edgemac
Vivaldi com.vivaldi.Vivaldi
Arc company.thebrowser.Browser

これらを only-app に追加する場合、または exclude-app から外す場合は、--quiet 未指定なら warning を表示します。固定 block ではなく編集可能な既定値です。0.3.0 では既存の capture.text_content = true 利用者にも適用され、これらの browser の本文は既定で null になりますが、event と内容以外の事実は残ります。

マッチング

  • アプリ — bundle_id で照合します(推奨。表示名は変わり得ます)。bundle_id を持つアプリは bundle_id だけで照合され、表示名のエントリは bundle_id を持たないイベントにのみ効きます。大文字小文字は区別しません。
  • サイト — browser URL host のドット境界サフィックスで一致します。example.com は api.example.com にも一致しますが、evil-example.com には一致しません。Public Suffix List は扱わないため、com のような指定は全 .com ホストに一致します。完全なドメイン名を指定してください。
  • 優先順位 — include_only_* が非空なら「そのリストにあり、かつ exclude_* にない」ものだけ捕捉。空なら「exclude_* にない」ものすべてを捕捉します。
  • 帰属できたイベントに対するアプリ単位の除外は全面的 — そのアプリに帰属できたすべてのイベント型(ui.*・input.*・window.*・…)を落とします。帰属不能な clipboard 変化は app.name: "Unknown" として残り得ます。

常時有効の除外

リスト設定に関係なく、次の除外は常に効きます。

  • プライベートブラウジング — Chrome incognito は URL イベントを生成せず、本文も null のままです。タイトルと操作メタデータは残り得ます。
  • Secure Input — Secure Input 中は content snapshot を取りません。
  • 組み込みの除外 — パスワードマネージャ・資格情報ストア(1Password・Keychain Access 等)は、include_only_apps でも解除できない固定の層で除外されます。config.toml の exclude_apps に見える既定エントリとは別の層で、そちらを編集しても影響しません。filter show は組み込み分をユーザー設定と分けて表示します。

フィルタと MCP

capture-time フィルタは MCP から変更できません。MCP サーバは read-only です。フィルタの管理は CLI と config.toml のみです。MCP サーバ参照。

このページは役に立ちましたか?