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

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

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

antigravity-cli14agy4ci-cd16github-actions9automation54

✦ プレミアム記事

ある朝、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/月 または ¥2,480 の永久アクセス
メンバーシップを見る →

関連記事

✦ Tips & 活用術2026-08-21
Antigravity CLI の失敗を握りつぶしていたのは呼び出し側のパイプでした
CLI 1.1.14 で言語サーバーの失敗が非ゼロ終了として表に出るようになりました。ところが自動化のラッパー側が終了コードを受け取れていないと、この改善は届きません。bash 5.1 で16通りの呼び出し方を実際に試し、失敗が消える書き方と直し方をまとめました。
⬡ 連携・プラグイン2026-03-23
Antigravity × Terraform で実現する AI 駆動インフラ自動化 — IaC をAIがレビュー・生成するワークフロー
独特の構文を持つ Terraform の HCL を、Antigravity の AI がレビュー・生成するワークフローを構築します。IaC エージェントの設定、Project Context やセキュリティ要件の書き方、コード自動生成の実際までを手順を追って解説します。
▣ アプリ開発2026-10-08
agy CLI をコンテナで動かす前に、擬似 agy で確かめておく 3 つの安全網
Antigravity CLI(agy)を Docker や Cloud Run のジョブから呼ぶ前に、インストーラーの取りこぼし・承認待ちの固まり・終了コード 0 の空振りを、擬似 agy で再現して潰します。公式 docs の記述と、手元で実行した結果だけを根拠に組み立てた手順です。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます