極光日記

Antigravity CLIで処理終了時に通知する

Created:

Antigravity CLI で処理完了時に通知

Antigravity CLI(agy cli)でエージェントの処理完了の度にデスクトップに通知を表示させます。
次のような通知が表示されます。

Antigravity CLI notification

Antigravity CLIのバージョンは1.1.12です。
Ubuntu Desktopでの設定例のため、Windows、Macでは読み替えが必要だと思います。
本稿はCLIに関する設定です。Antigravity(デスクトップアプリ)、Antigravity IDEは使っておらず、よくわかりません。

hookの設定

Antigravityには特定のタイミングでコマンドやスクリプトを起動させるHooksの機能があります。これを使います。

HooksはLinuxの場合~/.gemini/config/hooks.jsonで設定します(ファイルがなければ新規作成します)

設定ファイルに以下のように記述します。

{
  "reminder": {
    "Stop": [
      {
        "type": "command",
        "command": "bash /home/YOUR_USER_NAME/agy.sh"
      }
    ]
  }
}

  • reminder: フックの名前です(任意の識別用文字列)。
  • Stop: エージェントの実行が停止・完了したタイミングを指定します。
  • command: 実行するシェルスクリプトのパスを指定します(YOUR_USER_NAME は自身のユーザー名に変更してください)。

通知用スクリプト (agy.sh) の作成

フックから呼び出される agy.sh を作成します。

#!/usr/bin/env bash

INPUT_JSON=$(cat -)

# 入力待ちになった時 (fullyIdle: true)起動
if echo "${INPUT_JSON}" | jq -e '.fullyIdle == true' >/dev/null 2>&1; then
    # デスクトップ通知
    notify-send "Antigravity CLI" "✅ DONE" --urgency=normal -t 5000 2>/dev/null &
    
    # 完了音を鳴らす例:
    paplay /usr/share/sounds/freedesktop/stereo/complete.oga 2>/dev/null || printf '\a'
fi

echo '{"decision": "other"}'

スクリプトのポイント

Hooks は標準入力経由で状態データ(JSON)を渡してくれます。ドキュメントにどのようなJSONが送信されてくるか定義されています。
完全に入力待ちになったときはfullyIdle: trueが入っているようなので、その際にnotify-send, paplayを実行します。
どちらもUbuntu Desktopには最初からインストールされていましたが、なければインストールしてください。 また、JSONのパースにjqも使っています。これもインストールが必要です。

notify-sendの引数は次のとおりです。

  • 第一引数: 要約(通知のタイトルになる)
  • 第二引数: 本文
  • --urgency: レベルでlow, normal, critical(私の環境はlowだとデスクトップに通知されませんでした)
  • -t: 通知が自動で消えるまでの時間(ミリ秒)

paplayは引数にとった音を鳴らします。

最後に{"decision": "other"}を標準出力しています。
ドキュメントによると"continue"だとエージェントが停止しない、とのことです。continueにすると永遠と実行→停止を繰り返すのか、通知が表示され続けてしまいました。
停止(入力待ち)させるために "continue" 以外の文字列("other""stop" など)を返しています。

トラブルシューティング

antigravity cliのログは~/.gemini/antigravity-cli/log/に出力されるようです。
うまくいかない時はこちらも確認してみてください。