CLI リファレンス
zanei の全コマンド・フラグ・共通規約・終了コード。
すべての機能は単一バイナリ zanei に入っています — デーモン管理、権限診断、データ取得、フィルタ管理、agent セットアップ、MCP サーバまで。CLI と MCP サーバは同一コア・同一ストアの薄いラッパーであり、このページの規約を共有します。
- 署名・notarize 済みの単一 Rust バイナリ。外部ランタイム依存なし。
- 完全ローカル:CLI はいかなる外部送信も行いません。
- 破壊的操作(
stop・purge)以外は副作用が小さく、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 = 1h、query = 15m、export = 24h。
イベント型
--types はイベント型のカンマ区切りリストを受け取ります。末尾ワイルドカード(browser.*)が使えます。
出力形式
| 値 | 対象コマンド | 説明 |
|---|---|---|
jsonl |
query・export・record |
1 行 1 イベントの生イベント(機械可読) |
json |
query・export・timeline |
単一 JSON。timeline では構造化タイムライン |
md |
timeline |
LLM-ready Markdown(既定) |
table |
query・status・doctor |
人間可読の整形テーブル |
終了コード
| コード | 意味 |
|---|---|
0 |
正常 |
1 |
一般エラー |
2 |
使用法エラー(引数不正) |
3 |
権限不足(必要な TCC 権限が未付与)— agent・スクリプトが検出しやすい専用コード |
4 |
デーモン未起動(status・stop 等で対象がない) |
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は既定の除外リスト(1Password・Keychain 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 |
true、false |
output.mode |
stream、batch、both |
output.batch_interval_s |
0 より大きい符号なし整数 |
output.store |
sqlite、jsonl |
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_status— MCP リファレンス参照。
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 セットアップを参照。