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

CLI リファレンス

zanei の全コマンド・フラグ・共通規約・終了コード。

すべての機能は単一バイナリ zanei に入っています — デーモン管理、権限診断、データ取得、フィルタ管理、agent セットアップ、MCP サーバまで。CLI と MCP サーバは同一コア・同一ストアの薄いラッパーであり、このページの規約を共有します。

  • 署名・notarize 済みの単一 Rust バイナリ。外部ランタイム依存なし。
  • 完全ローカル:CLI はいかなる外部送信も行いません。
  • 破壊的操作(stoppurge)以外は副作用が小さく、agent から安全に呼べます。

コマンド一覧

コマンド 概要
doctor 必要な macOS 権限の診断と付与誘導
start バックグラウンド記録の開始(launchd)
stop 記録停止と登録解除(データは保持)
pause / resume 記録の一時停止 / 再開
status 稼働状態・イベント件数・ストア情報
record 前面での捕捉を stdout/ファイルへ(デバッグ・パイプ用)
query 条件付きで生イベントを取得
timeline LLM-ready・token budget 付きタイムライン
export 生イベントの一括ダンプ
purge 保存イベントの手動削除(破壊的)
filter capture-time 許可/不許可リストの管理
config 設定の初期化・表示・パス・編集
mcp stdio MCP サーバの起動
setup agent 向け指示と MCP 連携の設定

グローバルオプション

すべてのサブコマンドで有効です。

フラグ 説明
--config <path> 設定ファイルパスの上書き(既定 ~/.config/zanei/config.toml
--store <path> ストアパスの上書き(既定 ~/.local/state/zanei/store.sqlite
--json 診断・状態系コマンドを機械可読 JSON で出力(--format json のショートカット)
-q, --quiet 進捗・注意書きを抑制
-v, --verbose 詳細ログを stderr へ
--version / --help バージョン / ヘルプ

共通規約

時間表現

--since / --until が受け取る値:

形式 意味
相対 15m 2h 1d 1w 現在からの遡り。単位は s m h d w
絶対 2026-08-16T09:00:00Z RFC3339 タイムスタンプ
キーワード now 現在時刻(主に --until 用)

--until の既定は now--since の既定はコマンドごとに timeline = 1hquery = 15mexport = 24h

イベント型

--typesイベント型のカンマ区切りリストを受け取ります。末尾ワイルドカード(browser.*)が使えます。

出力形式

対象コマンド 説明
jsonl queryexportrecord 1 行 1 イベントの生イベント(機械可読)
json queryexporttimeline 単一 JSON。timeline では構造化タイムライン
md timeline LLM-ready Markdown(既定)
table querystatusdoctor 人間可読の整形テーブル

終了コード

コード 意味
0 正常
1 一般エラー
2 使用法エラー(引数不正)
3 権限不足(必要な TCC 権限が未付与)— agent・スクリプトが検出しやすい専用コード
4 デーモン未起動(statusstop 等で対象がない)

doctor

設定中の capture.sources に照らして、必要な TCC 権限(アクセシビリティ / 入力監視 / オートメーション)の付与状況を診断します。

zanei doctor            # 人間可読。不足があれば付与手順と System Settings ペインを案内
zanei doctor --fix      # 不足権限の設定ペインを開く(付与自体はユーザー操作)
zanei doctor --json     # agent 向け機械可読
フラグ 説明
--fix 不足している権限の System Settings ペインを開く
--json 機械可読出力
  • 必要権限がひとつでも欠けていれば終了コード 3
  • input_monitoring が「必須」になるのは input.* を捕捉する設定のときだけ。不要な構成では欠けていても ok です。

--json の出力:

{
  "ok": false,
  "capture_sources": ["app", "window", "ui", "input", "browser"],
  "permissions": {
    "accessibility":     { "status": "granted" },
    "input_monitoring":  { "status": "denied", "required_for": ["input.key", "input.scroll", "ui.click"] },
    "automation":        { "per_app": { "com.google.Chrome": "not_determined" } }
  },
  "missing_required": ["input_monitoring"],
  "settings_pane": "x-apple.systempreferences:com.apple.preference.security?Privacy_ListenEvent"
}

status の値:granted / denied / not_determined

人間向け出力の最終行には、必ず次の操作が表示されます。必要な権限が denied の場合は、 付与手順を順に案内します:zanei start で recorder に権限を要求させ、ペインに zanei の行が 出ていればトグルを ON にし、出ない場合のみ zanei doctor --fix+ ボタン、 Command-Shift-G(または ~ 1 文字)で実行中バイナリの実パスを追加します。 launchd 起動のコマンドラインツールはこれらのペインの一覧に表示されないことがあるため、 一覧ではなく doctor の報告が正である旨も併記されます。Chrome Automation が not_determined の 場合は事前操作不要で、Zanei が初めて Chrome に問い合わせる際に macOS が確認します。 未署名または ad-hoc 署名のビルドでは、再ビルド時に付与済み権限がリセットされる旨も警告します。

start

launchd に登録し、バックグラウンド記録を開始します。

zanei start              # バックグラウンド記録を開始
zanei start --foreground # デーモン化せず前面で実行(開発・デバッグ用)
フラグ 説明
--foreground デーモン化せず前面で実行

権限不足を検出した場合、記録は開始されず終了コード 3 で不足内容を案内します。

バックグラウンド起動に成功すると、Zanei が launchd のバックグラウンド項目として 登録されたことを表示します。macOS の通知や Login Items & Extensions への表示は正常な挙動です。

stop

記録を停止し、launchd から登録解除します。破壊的操作ではありません — データは保持されます。対象デーモンがなければ終了コード 4

zanei stop

pause

デーモンを解除せず、記録だけを一時停止します。

zanei pause --for 30m   # 30 分後に自動再開
zanei pause             # resume まで無期限
フラグ 説明
--for <TIME> 停止期間。省略時は resume まで無期限

resume

一時停止から再開します。

zanei resume

status

デーモンの状態・捕捉設定・ストア統計を表示します。

zanei status
zanei status --json

人間向け出力は、有効時に TEXT CONTENT on (opt-in)、無効時に TEXT CONTENT off (opt-in: zanei config set capture.text_content true) を表示します。 プライバシーに関わる opt-in 状態と明示的な有効化コマンドを JSON なしで確認できます。

{
  "running": true,
  "paused": false,
  "since": "2026-08-16T08:00:00Z",
  "uptime_s": 3600,
  "events_captured": 12345,
  "events_dropped": 2,
  "last_event_ts": "2026-08-16T08:59:58Z",
  "degraded": { "eventtap": "1 degraded collector operation observed" },
  "store": { "path": "~/.local/state/zanei/store.sqlite", "size_bytes": 5242880, "retention_hours": 48, "oldest_event_ts": "2026-08-14T09:00:00Z" },
  "capture": { "sources": ["app", "window", "ui", "input", "browser"], "text_content": false },
  "permissions_ok": true
}
フィールド 意味
events_dropped collector または記録 pipeline が破棄したイベントの累計
degraded component ごとの collector / runtime 劣化状態。既知の劣化がなければ空
permissions_ok heartbeat が新鮮な間は実行中 recorder 自身の権限判定。recorder 不在時はローカル probe の結果

record

前面での捕捉:デーモン化せず、生イベントを NDJSON で stdout(またはファイル)へストリームします。パイプ実験・検証用 — 常用の記録は start を使ってください。

zanei record --stream                 # NDJSON を stdout へ
zanei record --out events.jsonl       # ファイルへ
フラグ 説明
--stream 発生順に stdout へストリーム
--out <FILE> ファイルへ書き出し
--format jsonl 出力形式(NDJSON)

query

条件に合う生イベントを取り出します。構造化された機械可読出力。

zanei query --since 15m --types browser.navigate,app.activate
zanei query --since 2h --app Safari --format json --limit 500
フラグ 説明
--since / --until 対象範囲(既定 --since 15m
--types <TYPE,...> イベント型フィルタ(カンマ区切り。browser.* 可)
--app <NAME> / --bundle-id <ID> アプリ名 / バンドル ID で絞り込み
--limit <N> 最大件数(既定 500)
--format jsonl(既定)/ json / table

これらは query-time フィルタです — 読み出しを絞るだけで、記録対象には影響しません(フィルタ参照)。

timeline

生イベントをセッション分割・重複除去・coalesce し、token budget 内に収めた LLM 向け要約を返します。agent が最もよく叩くコマンドです。

zanei timeline --since 1h --format md --token-budget 4000
zanei timeline --since 30m --format json --granularity fine
フラグ 説明
--since / --until 対象範囲(既定 --since 1h
--format md(既定、LLM-ready Markdown)/ json(構造化)
--token-budget <N> 概算トークン上限(既定 4000)。超過分は粒度を粗くして収める
--granularity coarse(既定、セッション単位)/ fine(操作単位まで)

--format json の構造(要約):

{
  "range": { "since": "2026-08-16T08:00:00Z", "until": "2026-08-16T09:00:00Z" },
  "token_estimate": 3810,
  "truncated": false,
  "sessions": [
    {
      "start": "2026-08-16T08:12:00Z", "end": "2026-08-16T08:31:00Z",
      "app": "Safari", "title_summary": "PR #42 のレビュー",
      "activities": ["GitHub で 3 ファイルを閲覧", "コメントを 2 件記入"],
      "event_ids": ["evt_01J...", "evt_01J..."]
    }
  ]
}

export

範囲内の全生イベントをダンプします(バックアップ / 外部処理用)。

zanei export --since 24h --format jsonl --out dump.jsonl
フラグ 説明
--since / --until 対象範囲(既定 --since 24h
--format jsonl / json
--out <FILE> 出力ファイル

purge

保持期間による自動 purge とは別に、手動で削除します。破壊的操作です。

zanei purge --before 24h   # 24 時間より古いイベントを削除
zanei purge --all          # 全削除(確認プロンプトあり。--quiet で抑制)
フラグ 説明
--before <TIME> これより古いイベントを削除
--all 全削除(確認プロンプトあり)

filter

capture-time の許可/不許可リスト — ストアに書き込まれる前に破棄するアプリ・サイト — を管理します。セマンティクスとマッチングルールはフィルタガイドを参照。config.toml[filter] 編集と等価ですが、キー検証と重複排除を行うぶん安全です。

zanei filter show                                      # 全リストと有効モード
zanei filter exclude-app add com.1password.1password
zanei filter exclude-app remove com.1password.1password
zanei filter only-app add com.apple.Safari
zanei filter exclude-site add example.com
zanei filter only-site add github.com
サブコマンド [filter] キー 意味
exclude-app (add|remove) <BUNDLE_ID か NAME> exclude_apps 不許可リスト(その他は捕捉)
only-app (add|remove) <BUNDLE_ID か NAME> include_only_apps 許可リスト(設定時は列挙分のみ捕捉)
exclude-site (add|remove) <DOMAIN> exclude_websites browser.* の URL host の不許可リスト
only-site (add|remove) <DOMAIN> include_only_websites browser.* の URL host の許可リスト
  • アプリは BUNDLE_ID(推奨)または表示名で指定。filter show は既定の除外リスト(1PasswordKeychain Access 等)も併せて表示します。
  • 変更は次のイベントから反映 — デーモン再起動不要。
  • only-app をひとつでも追加すると許可リストモードに切り替わります。filter show が現在のモードを明示します。

config

zanei config init   # 全設定項目にコメントを付けたテンプレートを生成
zanei config path   # 設定ファイルのパスを表示
zanei config show   # 有効設定(既定値マージ後)を表示
zanei config edit   # $EDITOR で設定を開く
zanei config set capture.text_content true

config init は、対応する全設定項目と現在の既定値を含むコメント付きテンプレートを 生成します。既定の生成先は ~/.config/zanei/config.toml で、グローバル --config <path> で別の生成先を指定できます。親ディレクトリがなければ作成します。 成功時は生成したパスを表示して終了コード 0 で終了します。生成先にファイルが存在する 場合は変更せず、既存ファイルのパスを表示して終了コード 1 で終了します。

config set <DOTTED_KEY> <VALUE> は、スカラー設定を 1 項目検証して保存します。対応するキーと値は次のとおりです。

キー 設定できる値
capture.text_content truefalse
output.mode streambatchboth
output.batch_interval_s 0 より大きい符号なし整数
output.store sqlitejsonl
output.retention_hours 0 より大きい符号なし整数

配列設定には対応しません。filter リストには zanei filter、その他の配列には zanei config edit を使います。不明なキー、配列キー、不正な値は保存せず終了コード 2 で 終了します。記録デーモンの稼働中に capture.* または output.* の変更に成功すると、次の メッセージを表示します。

Restart recording with `zanei stop && zanei start` for this to take effect.

スキーマは設定リファレンスを参照。

mcp

stdio MCP サーバを起動します — stdin/stdout 上の JSON-RPC で、ネットワーク面ゼロ。通常は MCP クライアント(Claude Code・Codex・opencode・Claude Desktop 等)から起動され、手で叩くものではありません。

zanei mcp [--store <PATH>]
  • ストアへのread-only ビュー。記録デーモンとは独立プロセス。
  • 公開ツール:get_timeline / query_events / get_statusMCP リファレンス参照。

setup

対象 agent 向けの Zanei 指示と MCP 連携を設定します。native skill 対応 agent と Claude Desktop は従来どおりファイルへ設定し、opencode と pi は手動設定用の指示を表示するだけで、ファイルは変更しません。

zanei setup --agent claude            # SKILL.md を Claude Code の skill 位置へ + MCP 登録
zanei setup --agent codex --scope user
zanei setup --agent hermes            # skill を ~/.hermes/skills/ へ + ~/.hermes/config.yaml に MCP 登録
zanei setup --agent pi                # 導出した README 向け指示を表示。MCP・ファイル書き込みなし
zanei setup --agent claude-desktop    # claude_desktop_config.json へ MCP 登録
zanei setup --agent opencode          # AGENTS.md スニペット + MCP JSON を表示。ファイル書き込みなし
フラグ 説明
--agent claude / codex / opencode / hermes / pi / claude-desktop
--scope project(既定。カレントリポジトリ)/ user(ユーザー全体)。opencode/pi の手動設定出力には影響しない
--print 書き込み予定のファイル変更を、実際には書き込まず表示する。opencode と pi は、このフラグの有無にかかわらずファイルを書き込まない

agent 別の挙動とセットアップ出力は agent セットアップを参照。

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