CLI

nodd コマンドで通知を送り、応答を待ちます。終了コードで判定できるので、シェルにそのまま組み込めます。

インストール

brew install blipdrop/tap/nodd

Releases からバイナリを入手することもできます。

ログイン

nodd login

QR コードが出るので、アプリの「設定 → CLI にログイン」で読み取り、Face ID で許可します。10 分以内に許可してください。送信キーは ~/.config/nodd/config.json(XDG_CONFIG_HOME があればその下)に保存します。キーの名前は --name で指定でき、既定はホスト名です。

CI ではログインせず、環境変数を使います。

NODD_KEY送信キー。設定ファイルより優先します
NODD_API_URLAPI の URL。既定は https://api.nodd.blipdrop.net
NODD_PROFILE, --profile設定のプロファイル名。チャンネルごとに分けるときに使います。既定は default

コマンド

nodd loginQR で送信キーを受け取ります
nodd logoutこの PC からキーを消します。キーの失効はアプリで行います
nodd whoamiプロファイル、キーの末尾 4 桁、API の状態を出します
nodd send TITLE通知を送り、ID を出します
nodd ask TITLE承認か選択を求めて、応答を待ちます
nodd wait ID送った通知の応答を待ちます。--json が使えます
nodd status ID通知の状態を JSON で出します
nodd cancel ID応答待ちを取り下げます
nodd done ID処理の結果を報告します。--status succeeded|failed(既定は succeeded)、--summary
nodd resolve ALERT_KEYアラートを解消します。--note
nodd heartbeat NAME --every SECONDS定期ジョブの生存を報告し、次の期限を出します。--every は 60 から 2,678,400。--grace の既定は --every の 10%
nodd mcpstdio の MCP サーバーを動かします。MCP とフックをご覧ください
nodd hookClaude Code の PreToolUse フックです

send と ask の共通の指定

--body TEXT本文。- で標準入力から読みます
--level low|normal|high重要度
--field LABEL=VALUE項目。6 回まで
--link LABEL=URLリンク。2 回まで
--sensitiveロック画面に本文を出しません
--markdown本文を Markdown として整形します。4,000 文字まで書けます
--image FILE40 KB までの JPEG か PNG を添えます。--image-alt で説明を付けます
--json結果を JSON で出します

nodd send にはほかに --kind notice|alert と --alert-key があります。

nodd ask

--option ID=LABEL選択肢。2 から 4 回。指定すると承認ではなく選択になります
--expires-in SECONDS応答期限。既定は 3600
--input PROMPT入力欄を出します。回答は標準エラーか --json で受け取ります。--input-required で必須にします
--secretパスワードなどの秘密の値を伏せた入力欄で求めます。値はこの実行だけの鍵で暗号化して届き、標準出力へ値だけを出します。端末へそのまま表示はしないので、パイプするか --env を使います
--env NAME -- COMMAND値を標準出力へ出さず、環境変数に入れて COMMAND を実行します。AI エージェントには値が見えないこの形を使います
--approvals N承認に必要な人数。1 から 3。2 人以上は Team だけです
--escalate-after SECONDSこの秒数のあいだ応答がなければ、別の担当へ知らせます。Team だけです
--no-wait待たずに送信の結果を出します

--input と --secret への回答には Nodd 1.1 以降のアプリが必要です。--secret は MCP にはありません。値がモデルに渡らないよう、エージェントには --env を使わせます。

nodd ask "本番へ反映しますか" --approvals 2 --escalate-after 600 --expires-in 3600 && ./deploy.sh
nodd ask "どこへ反映しますか" --option staging=Staging --option prod=Production
nodd ask "本番 DB のパスワード" --secret --env PGPASSWORD -- psql -h db.example.com app

標準出力には approved、rejected、選んだ選択肢の ID、または expired などの状態を出します。却下の理由があれば標準エラー出力へ Note: 理由 と出します。標準出力は判定に使えるよう、理由を混ぜません。

終了コード

nodd ask と nodd wait の値です。

0承認された、または選択肢が選ばれた
10却下された
11応答なしで終わった(期限切れ、取り下げ、失敗)
12待っているあいだに時間切れになった
1そのほかの失敗

待つのは応答期限の 15 分後までです。通信の失敗では諦めず、確定した応答だけを結果にします。

定期ジョブの見張り

0 3 * * * /usr/local/bin/backup.sh && nodd heartbeat nightly.backup --every 86400

次の報告が --every と --grace の秒数のうちに来なければ、チャンネルへ知らせます。