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_URL | API の URL。既定は https://api.nodd.blipdrop.net |
NODD_PROFILE, --profile | 設定のプロファイル名。チャンネルごとに分けるときに使います。既定は default |
コマンド
nodd login | QR で送信キーを受け取ります |
|---|---|
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 mcp | stdio の MCP サーバーを動かします。MCP とフックをご覧ください |
nodd hook | Claude Code の PreToolUse フックです |
send と ask の共通の指定
--body TEXT | 本文。- で標準入力から読みます |
|---|---|
--level low|normal|high | 重要度 |
--field LABEL=VALUE | 項目。6 回まで |
--link LABEL=URL | リンク。2 回まで |
--sensitive | ロック画面に本文を出しません |
--markdown | 本文を Markdown として整形します。4,000 文字まで書けます |
--image FILE | 40 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 の秒数のうちに来なければ、チャンネルへ知らせます。