ANTIGRAVITY LABEN
記事一覧/AIツール
AIツール/2026-08-28中級

ステータスラインでコストを追えるようにするまでに、3か所でつまずきました

Antigravity CLI のステータスラインに自分のセッションコストを出そうとして詰まった3か所を、実測しながら順に直していきます。stdin の読み方・フィールドの有無の確かめ方・利用量台帳の作り方をまとめました。

antigravity447antigravity-cli13statuslinecost2個人開発97

プレミアム記事

月末に届く請求の数字は分かるのに、「先週いちばん高くついた作業は何でしたか」と聞かれると答えられませんでした。個人開発で複数のリポジトリを行き来していると、一日に走るセッションは短いものばかりが積み上がります。大きな設計依頼は数えるほどで、あとは補完と検索と小さな確認です。

CLI 1.1.21 で、ステータスラインのデータモデルに丸めなしのセッションコストが入りました。これで手元に貯められる、と思って自作のステータスラインを書き始めたのですが、実際に動かすまでに3か所でつまずきました。順に書いていきます。

まず、自分の CLI が何を渡してくるのかを1回だけ書き出す

ステータスラインの仕組みは単純です。~/.gemini/antigravity-cli/settings.jsonstatusLine ブロックを置くと、エージェントの状態が変わるたびに CLI がそのコマンドを実行し、状態の JSON を標準入力へ流し込み、標準出力に返ってきた文字列を画面下部に描画します。

{
  "statusLine": {
    "type": "command",
    "command": "~/.gemini/antigravity-cli/statusline.sh"
  }
}

公式のステータスライン設定ドキュメントには、渡ってくるフィールドの一覧表が載っています。ただし後で触れるとおり、この表と手元のバージョンが一致しているとは限りません。ですから最初にやるべきことは、表を読むことではなく、自分の環境が実際に何を渡してくるかを1回だけファイルへ落とすことです。

#!/usr/bin/env bash
# ~/.gemini/antigravity-cli/statusline.sh (調査用・使い捨て)
# 目的: 手元のバージョンが実際に渡してくるペイロードを1回だけ保存する
DUMP="$HOME/.gemini/antigravity-cli/payload-sample.json"
 
payload="$(timeout 2 cat)"
 
# すでに採取済みなら上書きしない(毎回の状態変化で書き換わると調査にならない)
if [ -n "$payload" ] && [ ! -s "$DUMP" ]; then
  printf '%s\n' "$payload" > "$DUMP"
fi
 
echo "sampling..."

これを仕込んで CLI を一度起動し、payload-sample.json を開けば話が早いです。私はこの一手間を飛ばしてドキュメントの表だけを見て書き始めたので、後述する回り道をしました。

timeout 2 cat になっている理由は次の節です。

素朴に標準入力を読むと、スクリプトが時間内に戻らないことがある

最初に書いたのは、こういう1行でした。

payload="$(cat)"

普段のシェルスクリプトなら何の問題もない書き方です。ところがステータスラインのスクリプトには実行時間の予算があり、その中で標準出力を返して終了しなければなりません。そして認証トークンの更新中や会話の再開中には、CLI 側が標準入力のパイプを開いたまま、何も書かず閉じもしない状態が起こり得ます。cat は入力の終端を待ち続けるので、この状態に当たると戻ってきません。

手元で再現して、2つの書き方の挙動を測りました。親プロセスがパイプを保持したまま書き込みをしない状況を作り、スクリプト自身の所要時間と終了コードを記録した結果です。

標準入力の読み方親が書いて閉じる(正常系)親が開いたまま書かない終了コード
payload="$(cat)"4 ms で読み取り予算を超えても戻らず、外側から強制終了124
payload="$(timeout 2 cat)"4 ms で読み取り2,004 ms で空文字を返して終了0

終了コード 124 は、時間切れで殺されたことを示します。画面上は「ステータスラインが更新されない」「入力が一瞬もたつく」といった曖昧な症状として現れるので、原因がスクリプトの読み取り方にあると気づくまでに時間がかかります。

直し方は、必ず時間内に戻ることを保証したうえで、読めなかったときの逃げ道を用意しておくことです。

#!/usr/bin/env bash
# 必ず予算内に戻るステータスライン
CACHE="$HOME/.gemini/antigravity-cli/.statusline-last"
 
payload="$(timeout 2 cat)"
 
if [ -z "$payload" ]; then
  # 読めなかったときは前回の表示を出して静かに終わる。
  # ここで exit 1 にすると、画面にエラーが出続けて余計に読みにくくなる。
  cat "$CACHE" 2>/dev/null || echo "agy"
  exit 0
fi
 
line="$(printf '%s' "$payload" | python3 -c '
import sys, json
p = json.load(sys.stdin)
cw = p.get("context_window") or {}
vcs = p.get("vcs") or {}
print("{} | {} | ctx {:.0f}%".format(
    (p.get("model") or {}).get("display_name", "?"),
    vcs.get("branch", "-"),
    cw.get("used_percentage") or 0,
))
')"
 
printf '%s' "$line" | tee "$CACHE"

read -r -t 2 で1行だけ読む書き方も試しましたが、ペイロードが整形されて複数行で届く場合に先頭行しか取れません。timeout 2 cat なら複数行でもそのまま読めて、時間切れの保証も残ります。

もう一点、意外だったところを添えておきます。( sleep 20 ) | timeout 8 ./statusline.sh のような形で手元検証をすると、スクリプト自体は2秒で戻っているのに、シェルはパイプラインの左側が終わるまで待つため、体感では20秒待たされます。スクリプトが遅いのか検証の書き方が悪いのかを取り違えやすい場面でした。所要時間はスクリプトの内側で測るのが確実です。

# スクリプトの内側で測る(外側の time はパイプライン全体を計ってしまう)
S=$(date +%s%N)
payload="$(timeout 2 cat)"
E=$(date +%s%N)
echo "took=$(( (E - S) / 1000000 ))ms" >&2

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
自作のステータスラインが CLI ごと固まる書き方を避けて、必ず時間内に戻るスクリプトを組めるようになる
手元の CLI が実際に何を渡してくるかを1回で確かめ、ドキュメントに載っていないフィールドの有無を自分で判断できるようになる
セッションの利用量を二重計上せずに貯めて、どの作業に費用が寄っているかを自分の台帳から答えられるようになる
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Antigravity Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥2,480 の永久アクセス
メンバーシップを見る →

関連記事

AIツール2026-06-17
Antigravity の LLM アプリは、ダッシュボードが緑のまま請求と品質がずれていく — 観測の計装メモ
ダッシュボードは緑なのに請求が見積もりの1.6倍になっていた LLM アプリの観測を立て直した計装メモです。評価モデル費用の分離、既定モデルの変更による品質の静かな劣化の検知、テナント単位のコスト台帳、計装を入れる順番までをまとめています。
AIツール2026-08-19
Antigravity の既定モデルが入れ替わっても壊れないのは、出力を先に狭めてある仕事です
Gemini 3.7 Flash が Antigravity のエージェント既定モデルになりました。設定を触っていない箇所ほど静かに影響を受けます。既定に依存している場所を機械的に洗い出し、乗せる仕事と据え置く仕事を出力の自由度で切り分ける手順を、3つの検査スクリプトとともに記します。
AIツール2026-08-14
速いはずのモデルが遅いとき、疑うのはモデルではなく推論強度です
Antigravity でモデルごとに選べるようになった推論強度(Low / Medium / High)を、作業の性質からどう決めるかをまとめました。段階を変えても速くならないときに疑う箇所と、自分の判断を記録で直す方法も添えています。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →