ANTIGRAVITY LABEN
記事一覧/連携・プラグイン
連携・プラグイン/2026-06-13上級

Antigravity CLI(agy)を CI で非対話実行する — stdout が消える非TTY問題への対処

agy -p を GitHub Actions や cron で動かすと、ローカルでは見えていた出力が空になり、終了コードだけ 0 が返ることがあります。非TTY検出のしくみと、擬似TTY・テキスト出力の堅牢なパース・APIキー認証で確実に結果を受け取る設計をまとめます。

antigravity-cli9agy3ci-cd15github-actions9automation51

プレミアム記事

ある朝、GitHub Actions のログを開いて固まりました。agy -p "..." を呼ぶステップが緑のチェックで「成功」しているのに、出力が一行も残っていないのです。手元のターミナルでまったく同じコマンドを叩くと、エージェントは饒舌に応答を返します。それなのに、CI のログには空白だけが残り、終了コードは 0。「成功したのに、何もしていない」という、いちばん気づきにくい壊れ方でした。

私はいくつかのサイトの更新を無人で回すために、ターミナルからエージェントを呼ぶ仕組みを個人開発の延長で組んでいます。そこに Antigravity CLI(コマンド名 agy)を組み込もうとして、この罠に半日ほど溶かしました。原因は私のスクリプトのバグではなく、agy の出力モードが「人が見ているターミナルかどうか」で挙動を変えることにありました。

この挙動は公式のチュートリアルにはほとんど書かれていません。けれど無人実行では致命的なので、再現のしくみと、私が最終的に落ち着いた堅牢な構成を順に共有します。

なぜ CI だと agy の出力が消えるのか

agy のような対話的エージェント CLI は、起動時に標準出力が TTY(端末)に繋がっているかどうかを判定します。人が対話しているとき(TTY のとき)は、ストリーミングで色付きの応答を流し、スピナーやプログレスを描画します。一方、出力がパイプやファイル、サブプロセスにリダイレクトされている「非TTY」のとき、CLI はこの端末向けレンダリングを無効化します。

問題は、現行バージョンの agy --print-p が、非TTY で実行されると最終応答の標準出力を取りこぼすことがある点です。これは Antigravity CLI の課題として報告されているもので(後述)、端末描画と「機械可読な stdout」がまだ十分に分離されていないことに起因します。GitHub Actions のステップ、cron、subprocess.run()$(agy -p ...) のコマンド置換 — これらはすべて非TTY なので、どれも同じ症状に当たります。

つまり「ローカルでは動くのに CI だと空になる」のは、環境変数でもネットワークでも権限でもなく、標準出力の接続先が端末でないことが引き金です。ここを最初に疑えるかどうかで、調査時間が大きく変わります。agy の基本的な起動やスラッシュコマンドの読み解きはAntigravity CLI を触る:移行手順とスラッシュコマンドの整理にまとめています。

最小再現:パイプを一枚かませるだけで空になる

手元で再現するのにサーバーは要りません。ターミナルで次を順に試すと、症状がそのまま見えます。

# (1) 直接実行 — 端末に繋がっているので応答が見える
agy -p "現在のディレクトリの README を3行で要約して"
 
# (2) パイプを一枚かませる — 非TTYになり、出力が空になることがある
agy -p "現在のディレクトリの README を3行で要約して" | cat
 
# (3) コマンド置換でも同じ — OUT が空のまま終了コードは 0
OUT="$(agy -p "現在のディレクトリの README を3行で要約して")"
echo "captured length = ${#OUT}"   # → 0 になることがある
echo "exit code = $?"              # → 0(成功扱い)

(1) では応答が見えるのに、(2)(3) では空になる。しかも $?0 を返すので、素朴なスクリプトは「成功した」と判断して次に進みます。これが「成功したのに何もしていない」の正体です。CI のステップは本質的に (2)(3) と同じ状況に置かれています。

補足:この非TTY時の stdout 取りこぼしは Antigravity CLI のリポジトリで Issue として追跡されています(agy --print / -p silently drops stdout when run with a non-TTY)。バージョンによって改善・変化する可能性があるため、自分の agy --version で挙動を必ず確認してください。

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

この記事の続きを読む

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

この記事で得られること
CI や cron で agy -p の出力が突然消える原因(非TTY検出)を理解し、擬似TTYを与えて確実に結果を受け取れるようになる
まだ実装が安定しない --output-format json に頼らず、テキスト出力を壊れにくくパースする実装パターンを習得できる
APIキー認証・終了コード・冪等性を踏まえ、自動投稿のような無人パイプラインに agy を安全に組み込めるようになる
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

連携・プラグイン2026-07-15
無人ランで作業フォルダが突然『別の人の持ち物』になる — 所有者ドリフトを検知して書ける場所へ逃がす
数週間緑だった無人スケジュールが、ある朝 git config を書けずに止まりました。原因は永続作業フォルダの所有者ドリフト。存在チェックでは通り書き込みだけが弾かれる罠を切り分け、書込可否を実測して別の場所へ逃がすプリフライトを実装まで残します。
連携・プラグイン2026-06-18
Antigravity CLI への切り替え当日、出力ではなく副作用の等価性で本番自動化を検証する
Gemini CLI から Antigravity CLI へ切り替える当日に、標準出力の一致ではなく副作用(書き込んだファイル・コミット・ネットワーク呼び出し)の等価性で本番自動化を検証する方法です。サンドボックスでの並走と切り替え可否ゲートを実装の手順で整理しました。
連携・プラグイン2026-06-17
axe-core の検出をエージェントに渡して直す — アクセシビリティ改善を CI に組み込む実装メモ
axe-core で検出したアクセシビリティ違反を Antigravity のエージェントに渡し、検出→トリアージ→修正→再検証のループを CI に組み込む実装メモです。新規違反だけを止める差分ゲートと、エージェントの修正範囲を絞る設計を本番運用の形でまとめました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →