
【AI 에이전트】 Claude Code vs Antigravity CLI! 하룻밤 사이에 200달러를 날리지 않기 위한 「자율 루프 제어」
요약
자율형 AI 코딩 에이전트를 안전하게 운영하기 위한 라이프사이클 제어와 태스크 위임 개념을 다룹니다. 루프 내 '스텝(Tool call)'과 '턴(Turn)'의 차이를 명확히 하여 에이전트의 제어권을 관리하는 방법을 설명합니다.
핵심 포인트
- 툴 콜(Tool call)은 단일 액션이며, 턴(Turn)은 여러 툴 콜을 포함한 에이전트의 한 주기임
- 체크포인트는 툴 콜 단위가 아닌 턴 단위로 실행되어 루프 제어의 핵심이 됨
- 태스크 위임을 통해 서브 에이전트에게 업무를 분담하여 메인 에이전트의 효율성을 높임
- 자율 루프 제어를 통해 예기치 못한 비용 발생 및 오작동을 방지할 수 있음
서론 제 멘토로부터 추천받은 책 소개 연재, 제6회입니다.
※ 본 기사에서는 이후 antigravity CLI의 커맨드 표기를 agy로 통일하여 기술합니다.
이번에는 자율형 AI 코딩 에이전트(AI Coding Agent)를 안전하고 의도한 대로 자동 운전시키기 위한 「라이프사이클 제어(Lifecycle Control)」와 「태스크 위임(Task Delegation)」에 대해 해설한 실용적인 섹션입니다.
도입
- 라이프사이클 제어의 개요 (일반적인 설명)
AI 에이전트가 일련의 작업을 시작하고, 진행하고, 종료할 때까지의 「시간의 흐름이나 처리의 단위」를 관리·제어하는 것. - 태스크 위임이란? (일반적인 설명)
AI 에이전트가 실행하려고 하는 「일반적인 비즈니스나 매니지먼트의 문맥에서, 자신이 가진 업무(태스크)의 실행 책임이나 권한을 부하 직원이나 외부 멤버, 혹은 시스템 등의 적절한 타인에게 맡기는 것」
이 건에 대해 원문을 살펴보겠습니다.
라이프사이클 제어에 대하여
제시해주신 영문 내용을 내용의 생략이나 의역을 완전히 배제하고, 원문의 구조와 기술적인 뉘앙스를 그대로 재현한 엄격한 직역으로서 기술합니다.
(지난번과는 작성 방식이 다릅니다)
라이프사이클 제어 (원문)
When the loop is running, what's a "step"?
루프(Loop)가 실행되고 있을 때, 「스텝(Step)」이란 무엇인가요?
This trips people because there are two units inside a loop and they get used interchangeably, which makes the whole thing fuzzy.
루프 내부에는 두 가지 단위가 존재하며, 그것들이 혼용되어 사용되기 때문에 사람들이 혼란을 느끼게 되고, 이로 인해 전체적인 개념이 모호해집니다.
A tool call is one action: read a file, edit a file, run a command.
툴 콜(Tool call)은 하나의 액션입니다: 파일을 읽기, 파일을 편집하기, 명령어를 실행하기.
A turn is one full pass of the agent doing work, which usually contains several tool calls, ending when the agent stops and hands back.
턴(Turn)은 에이전트가 작업을 수행하는 한 번의 완전한 패스(pass)이며, 보통 여러 개의 툴 콜을 포함하고, 에이전트가 멈추어 제어권을 돌려줄 때 종료됩니다.
The distinction matters enormously for loops, because the checkpoint that decides whether to keep going fires after each turn, not after each tool call.
루프에서 이 구분은 매우 중요합니다. 왜냐하면 계속 진행할지 여부를 결정하는 체크포인트(Checkpoint)는 각 툴 콜 이후가 아니라, 각 턴 이후에 실행되기 때문입니다.
Cook, J. Claude Code Loop Engineering: Build Self-Correcting Agentic Loops That Ship Trusted Code, Not a $200 Overnight Bill (English Edition) (pp. 37-38). (Function). Kindle Edition.
그리고 여러 가지 조사해 보았습니다만, "태스크 위임"에 관한 내용입니다.
태스크 위임 (원문)
Subagents are helpers the main agent spawns to do a chunk of work and report back.
서브 에이전트(Subagents)는 메인 에이전트가 업무의 한 덩어리를 수행하고 보고하게 하기 위해 생성하는 헬퍼(Helper)입니다.
They keep verbose work out of the main context.
그들은 상세한(verbose) 작업이 메인 컨텍스트(Context)에 들어오는 것을 방지해 줍니다.
One rule to remember now: a subagent cannot spawn its own subagents.
지금 기억해야 할 한 가지 규칙: 서브 에이전트는 자신의 서브 에이전트를 생성할 수 없습니다.
여기서 기억해야 할 규칙이 한 가지 있습니다. 그것은 서브 에이전트 (subagent)가 자신만의 서브 에이전트를 생성할 수는 없다는 것입니다.
Cook, J. Claude Code Loop Engineering: Build Self-Correcting Agentic Loops That Ship Trusted Code, Not a $200 Overnight Bill (English Edition) (p. 30). (Function). Kindle Edition.
Code 확인
1: 「라이프사이클 제어 (lifecycle control)」 텍스트 발췌
TURN 1 (1 turn = /goal evaluator가 확인하는 하나의 단위)
├─ tool call: Edit src/auth/token.ts ← turn 내부의 한 액션
├─ tool call: Bash "npm test" ← turn 내부의 또 다른 액션
└─ observe: "1 failing" → evaluator: 조건 미충족 → TURN 2 시작
TURN 2
├─ tool call: Edit src/auth/token.ts
├─ tool call: Bash "npm test"
└─ observe: "0 failing" → evaluator: 조건 충족 → 목표 달성, 루프 종료
Cook, J. Claude Code Loop Engineering: Build Self-Correcting Agentic Loops That Ship Trusted Code, Not a $200 Overnight Bill (English Edition) (p. 38). (Function). Kindle Edition.
2: 「태스크 위임 (task delegation)」 텍스트 발췌
/loop — SCHEDULER. 일정 간격으로 프롬프트를 재실행합니다. 폴링(Polls) 방식이며, 수렴(converge)하지 않습니다.
/goal — CONDITION-LOOP. 체커(checker)가 조건을 확인 할 때까지 계속 작업합니다.
subagents — 에이전트가 생성하여 보고(REPORT BACK)하는 워커 (Agent tool). 서브 에이전트를 생성할 수 없습니다.
agent teams — 서로 메시지를 주고받으며(MESSAGE EACH OTHER) 작업 목록을 공유하는 피어 세션 (experimental, 기본값 off).
workflows — 스크립트(SCRIPT)가 계획을 보유하므로, 단일 컨텍스트가 전체를 보유하지 않습니다 (동시 실행 16개 / 총 1,000개 제한).
ultracode — 설정 (제품이 아닌, 노력 플래그 (effort flag)): 최대의 노력을 기울이고 워크플로우를 오케스트레이션(orchestrate)합니다.
Cook, J. Claude Code Loop Engineering: Build Self-Correcting Agentic Loops That Ship Trusted Code, Not a $200 Overnight Bill (English Edition) (pp. 30-31). (Function). Kindle Edition.
여기서부터 agy로 실행합니다.
라이프사이클 제어와 태스크 위임
텍스트에 기재된 Code를 agy로 번역
[LAUNCH 01] --------------------------------------------------------------------
├─ 🛠️ ENGINE: Altering Core --> edit: src/auth/token.ts
├─ 🔥 THRUST: Ignition --> bash: "npm test"
└─ 🛰️ ORBIT CHECK: Failed...
❌ [Telemetry: 1 Gravitational Drag Detected (1 failing)]
⚠️ 상태: 궤도 탈출 속도에 도달하지 못함. 궤적 재계산 중...
[발사 02] --------------------------------------------------------------------
├─ 🛠️ 엔진: 벡터 조정 (Vector Adjust) --> 수정: src/auth/token.ts
├─ 🔥 추력: 재점화 (Re-ignition) --> bash: "npm test"
└─ 🛰️ 궤도 체크 (ORBIT CHECK): 성공!
✨ [텔레메트리 (Telemetry): 항력 0. 안정적인 궤도 달성 (실패 0)]
✅ 상태: 미션 목표 완료. 시스템 루프 종료.
================================================================================
🛸 순항 모드 (CRUISE MODE) 가동됨. 안전한 비행 되십시오!
실행 결과
▄▀▀▄ Antigravity CLI 1.0.13
▀▀▀▀▀▀ ai-agent@antigravity.io (Google AI Pro)
▀▀▀▀▀▀▀▀ Gemini 3.5 Flash (Medium)
▄▀▀ ▀▀▄ ~/workspace/architecture-test
▄▀▀
▀▀▄────────────────────────────────────────────────────────────>
🛸 명령 실행 중: /poll
🚀 순항 시스템 활성화됨. 텔레메트리 (telemetry) 폴링 중...
📡 [POLL #1] 지표 확인 중... 항력: 안정적. (수렴하지 않음)
📡 [POLL #2] 지표 확인 중... 항력: 안정적. (수렴하지 않음)
🛸 명령 실행 중: /orbit --condition='drag == 0'
🛰️ 궤도 제어 (ORBIT CONTROL) 가동됨. 궤적 고정 중...
[발사 01] --------------------------------------------------------------------
├─ 🛠️ 엔진: 탐사선 배치 (Deploying Probe) --> 드론: 단일 유닛 생성
├─ 🔥 추력: 검증 (Verification) --> 비행 계획 (flight-plan): test.sh
└─ 🛰️ 궤도 체크 (ORBIT CHECK): 실패...
❌ [텔레메트리 (Telemetry): 1개의 중력 항력 감지 (조건 미충족)]
[발사 02] --------------------------------------------------------------------
├─ 🛠️ 엔진: 벡터 조정 (Vector Adjust) --> 플릿 메시 (fleet-mesh): 동기화
├─ 🔥 추력: 재점화 (Re-ignition) --> 비행 계획 (flight-plan): test.sh
└─ 🛰️ 궤도 체크 (ORBIT CHECK): 성공!
✨ [텔레메트리 (Telemetry): 항력 0. 안정적인 궤도 달성 (조건 충족)]
🛸 모드 전환: --hyper-drive (최대 노력)
🧠 16개의 동시 스레드(concurrent threads)를 통해 비행 계획 (flight-plan) 조율 중...
==========================================================================
======
🛸 순항 모드 (CRUISE MODE) 가동됨. 안전한 비행 되십시오!
==================================================================
이 코드에 대한 고찰
아무래도 AI(Gemini)에게 확인해 본 결과, 원문(Claude Code)의 샘플 코드에 문제가 있었고, 이를 AI가 자동으로 수정하여 실행을 계속했을 가능성이 높다고 합니다.
1회차(LAUNCH 01): 그대로 실행(테스트)했기 때문에 당연히 에러가 발생하며 중단됨.
ORBIT CHECK: Failed...
2회차(LAUNCH 02): AI가 "아, 원문의 이 부분이 틀렸잖아!"라고 깨닫고 스스로 코드를 다시 작성하여 수정했기 때문에, 테스트를 통과함.
그렇다고 합니다.
2: 「태스크 제어(Task Control)」를 위한 agy용 코드
/**
-
====================================================================
-
Antigravity CLI 코어 아키텍처 타입 정의 (Architecture Cheat Sheet)
-
====================================================================
*/
// /loop — SCHEDULER (폴링·비수렴)
export interface SchedulerLoop {
type: 'polling';
prompt: string;
intervalMs: number;
converges: false;
}
// /goal — CONDITION-LOOP (조건 달성 시 종료)
export interface ConditionLoop {
type: 'condition_match';
prompt: string;
conditionChecker: (context: any) => boolean;
}
// subagents — WORKERS (메인에 보고하는 워커 / 자식 생성 불가)
export interface Subagent {
id: string;
role: string;
reportBack: (result: any) => void;
canSpawnSubagents: false;
}
// agent teams — PEER SESSIONS (대등한 세션 간의 연계 / 실험적 기능)
export interface AgentTeam {
isExperimental: true;
isEnabled: boolean; // 기본값은 off
peerSessions: string[];
sharedTaskList: string[];
}
// workflows — SCRIPTS (컨텍스트를 분리한 실행 계획)
export interface Workflow {
scriptPlan: string; // 하나의 컨텍스트에 의존시키지 않음
limits: {
concurrentCaps: 16; // 동시 실행 상한
totalCaps: 1000; // 누적 상한
};
}
// ultracode — SETTING (최고 노력 + 오케스트레이션)
export interface UltracodeSetting {
isProduct: false; // 제품이 아님
isEffortFlag: false; // 단순한 노력 플래그도 아님
config: {
sendTopEffort: true;
orchestrateWorkflow: true;
};
}
/**
-
====================================================================
-
실제 이용 이미지 (Usage Example)
-
====================================================================
-
※ 위에서 정의한 타입을 어떻게 CLI에 입력하는지에 대한 이미지
*/
const myAntigravityTask = {
// ultracode 설정을 활성화하여, 최고 효율로 워크플로우를 돌림
setting: {
isProduct: false,
isEffortFlag: false,
config: { sendTopEffort: true, orchestrateWorkflow: true }
} as UltracodeSetting,
// 16개 병렬 / 1000 스텝 제한의 독립 스크립트로 실행
workflow: {
scriptPlan: "./plans/deploy_and_test.sh",
limits: { concurrentCaps: 16, totalCaps: 1000 }
} as Workflow
}
실행 결과
🛸 ANTIGRAVITY CORE AGENT SIMULATOR - Architecture v2026.1
🧠 ORCHESTRATOR CONFIGURATION:
├─ isProduct: false
├─ sendTopEffort: true (최대 추론 노력 배포)
...
execution)
🛸 EXECUTING COMMAND: /loop
📡 [Scheduler Loop] 텔레메트리 폴링: "텔레메트리 지표 확인 중"
📡 [Scheduler Loop] 텔레메트리 폴링: "텔레메트리 지표 확인 중"
...
synchronized. Launch validation 시작.
🛸 EXECUTING COMMAND: /goal --condition="drag == 0"
🛰️ 조건 루프 활성화. 프롬프트: "토큰 검증 오류를 해결하고
안정적인 궤도를 유지하세요"
[LAUNCH 01] --------------------------------------------------------------------
├─ 🛠️ 엔진: 프로브 배포 --> 드론: 단일 유닛 스폰
├─ 🤖 [하위 에이전트: worker-01] 보고:
...
오류가 있지만, 토큰 검증에서 어설션 실패.
├─ 🔥 추력: 검증 --> flight-plan: test.sh
├─ 🤖 [하위 에이전트: worker-02] 보고:
👉 [상위] worker-02로부터 결과 수신: "테스트 실행 실패 (1개
실패 테스트). 'token-for-alice'가 아닌 일반 토큰을 받음."
└─ 🛰️ 궤도 확인: 실패...
❌ [텔레메트리: 중력 항력 감지]
[LAUNCH 02] --------------------------------------------------------------------
├─ 🛠️ 엔진: 벡터 조정 --> fleet-mesh: sync
├─ 🤖 [하위 에이전트: worker-01] 보고:
...
생성 로직. 모든 구조가 검증됨.
├─ 🔥 추력: 재점화 --> flight-plan: test.sh
├─ 🤖 [하위 에이전트: worker-02] 보고:
👉 [상위] worker-02로부터 결과 수신: "테스트 실행 성공 (0개
실패 테스트)."
└─ 🛰️ 궤도 확인: 성공!
✨ [텔레메트리: 항력 0. 안정적인 궤도 달성]
🛸 모드 활성화: --hyper-drive (최대 노력)
🧠 16개 동시 스레드에 걸쳐 비행 계획 오케스트레이션
(concurrencyLimit = 16)...
🛸 순항 모드 활성화. 안전한 비행을 하십시오!
이 결과에 대한 고찰
이것도 실행시킨 프로그램에 에러가 있었던 걸까요??
그것을 agy가 정정한 느낌이네요.
결론
저는 이번에 텍스트에서 Claude의 Code를 가져와서 agy용으로 번역·실행했을 뿐이지만, Code가 자동 수정되고 있다는 것이군요.
이 연재는 계속 이어가겠습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기