0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【AIエージェント】Claude Code vs Antigravity CLI!一晩で200ドル溶かさないための「自律ループ制御」超入門(第12回)

0
Posted at

はじめに 僕のメンターからおすすめされた本の紹介連載、第12回です。
※本記事では、以降 antigravity CLI のコマンド表記を agy と統一して記述します。

今回は以下について書いていきます
自律ループを夜間に放置実行(オーバーナイト稼働)させ、人間が眠っている間に仕事を完了させるフェーズへ移行します。

--continue によるセッション復旧」

が今回のテーマです

原文です
Those counters resetting to zero is the detail that bites people: if your only brake was a turn ceiling baked into the goal condition, a resume hands the loop a fresh allowance. Account for it, which is one more reason the durable, terminal-independent options below matter more than babysitting a resume by hand.

So the correct mental model is two separate tools for two separate jobs. Checkpointing is "the agent made a change I want to undo," local, within a session, about file edits. Session resume is "the session went away and I want it back," across interruptions, about the whole conversation and goal. Confusing them is the single most common mistake people make on long runs, and now you won't, because you know which one to reach for: to undo, rewind; to recover, resume. They are not the same word and they are not the same tool.

あのカウンターがゼロにリセットされるという仕様は、人々がはまりやすい落とし穴です。もしあなたの唯一のブレーキが、目標条件に埋め込まれたターン数上限(turn ceiling)だけだった場合、復旧(resume)によってループには新たなターン数の「お小遣い」がまるまる与えられてしまうことになります。これを考慮に入れておく必要があります。これが、手動で復旧を監視するよりも、以下で説明する「ターミナルから独立した永続的な自動化オプション」が重要になるもう一つの理由です。

したがって、正しいメンタルモデルは「2つの異なる仕事のための、2つの独立したツール」です。チェックポイントは「エージェントが行った変更を元に戻したい」という、セッション内部の、ファイル編集に関するものです。セッション復旧(session resume)は「セッションが消えてしまったが、それを取り戻したい」という、接続中断をまたぐ、会話全体と目標に関するものです。これらを混同することは、ロングランを実行する人々が犯す最も一般的な間違いですが、もうあなたはその罠にはまりません。どちらを呼び出すべきか分かっているからです。元に戻すなら rewind、復旧するなら resume。これらは同じ言葉ではなく、同じツールでもありません。

Cook, J. Claude Code Loop Engineering: Build Self-Correcting Agentic Loops That Ship Trusted Code, Not a $200 Overnight Bill (English Edition) (pp. 177-178). (Function). Kindle Edition.

<原文ここまで>
ターン制限は「そのセッション内での安全装置」であり、resumeによって新しいターン数が与えられる場合、停止条件としては不十分になる。
で全く進まないのに課金されるから、その課金分を”お小遣い”といっているわけですね

二段落目はこんな感じです
AIエージェントの「長期実行(ロングラン)」や「夜間放置」を安全に行う上で、開発者が最も混同しやすい2つの概念(巻き戻し vs 復旧)を、記載しているということですね

すみません、うまく説明できないのでgeminiのちから借ります

夜間放置における「チェックポイント(Rewind)」の役割
夜間にエージェントが「あ、コードの生成を失敗したな」と自分で気づいた時に、自動で1ステップ前のチェックポイントに巻き戻してやり直すためのもの。

夜間放置における「セッション復旧(Resume)」の役割
PCの予期せぬ再起動や、ネットワークの瞬断、APIのタイムアウトなどで「プロセスごと死んだ」ときに、朝起きた人間(または自動化スクリプト)が --continue でプロセス自体を蘇らせるためのもの。

両方ありそうなことだな、うん
でも中身は違うな。比較するとよく分かる
ループが回らないにも理由が複数あるってか

某プロ野球で名を馳せた人が、勝ちに不思議の勝ちあり、負けに不思議の負けなし

といったとか。

うまくいかないには理由があるんですね。

原文よりCodeの紹介

claude --permission-mode acceptedits "/goal the test in test/add.test.ts exits 0, or stop after 8 turns"

Cook, J. Claude Code Loop Engineering: Build Self-Correcting Agentic Loops That Ship Trusted Code, Not a $200 Overnight Bill (English Edition) (pp. 56). (Function). Kindle Edition.

agyCLIに読めるように翻訳
claude --permission-mode acceptedits "/goal the test in test/add.test.ts exits 0, or stop after 8 turns"

<実行結果をコピペしました>

 ご指定のゴール「 test/add.test.ts のテストが終了コード 0
で正常終了する」を達成しました。

実施した手順

  1. add.ts の作成
    テスト対象となるシンプルな add 関数を定義しました。
  2. add.test.ts の作成
    Node.js (v24) のネイティブテストランナー ( node:test )
    とアサーションモジュール ( node:assert ) を使用して、 add
    関数の動作を確認するテストを作成しました。
  3. package.json の構成
    ESM (ESモジュール) 警告を解消するために "type": "module" を設定し、
    npm test で TypeScript
    のテストを実行できるようスクリプトを登録しました。
  4. テストの実行
    Node.js の --experimental-strip-types フラグを活用し、TypeScript
    を直接実行してテストがパスすることを確認しました。

実行結果

npm test の実行結果は以下の通りです。

> testcode@1.0.0 test
> node --experimental-strip-types --test test/add.test.ts

✔ adds 1 + 2 to equal 3 (0.9085ms)
ℹ tests 1
ℹ suites 0
ℹ pass 1
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 293.739

テストはエラーなく終了コード 0 で正常終了しました。


考察
その前に、geminiに質問した
この短いCodeに何の意味があるの??

<geminiの回答ですので、そこはご了承願います>
と聞いたら次のように回答(長いので色々省略)

  1. 許可をあらかじめ与える(自動化のアクセル)
    --permission-mode acceptedits
    意味: 「ファイル修正の許可をあらかじめ承認する」
    AIは人間に確認することなく、自分で判断して次々とファイルを書き換え、自律してループを回し続けられます。

  2. 明確なゴール(終わりの条件)
    "/goal the test in test/add.test.ts exits 0..."
    意味: 「test/add.test.ts のテストが(エラーなし)で終わる状態を目指せ」

AIに「「終了コード0(完全勝利)」という明確な着地点を指定しています。AIはこの状態を達成するまで、手段を選ばず自走します。

  1. 絶対的なブレーキ(API破産の防止策)
    "...or stop after 8 turns"
    意味: 「または、8ターン経過したら何が何でも停止しろ」

もしAIが途中でバグの無限ループにハマったり、予期せぬエラーで前に進まなくなったりしても、最大8回ラリー(思考と実行)を繰り返したら強制終了するという安全弁(ターン上限)を設けています。

geminiの回答ここまで

・・・すごい
こんな意味があったのか・・・・

AIに変更権限を与える
明確なゴールを設定する
成功条件をテストで判定する
無限ループ防止のため停止条件を設定する

という、自律実行に必要な要素が詰まっています。

下手にループを組むと、AIは「頑張っているつもり」で永遠に処理を続ける可能性があります。

これを短時間で理解できる人すごいなあ・・・・

正直これだけの短いCodeだけでこれだけの解説になるとは・・・
個人的な意見としては、何かしらのテストはしておいたほうがいいと思う

下手にループを組むと、終わらなくなるよ

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?