2026년 중반 어느 시점부터 Claude Code 세션에서 흥미로운 질문은 "다음에 무엇을 입력할까"가 아니라 "이 일이 끝났다고 누가 판단할까"가 되었습니다. /goal에서 그 답은 의도적으로, 작업을 수행하는 모델이 아닙니다.
왜 Haiku가 종료 판정자가 되는가
Claude가 자기 루프를 스스로 채점하게 믿을 수는 없기 때문에, /goal은 종료 결정을 별도의 더 빠른 모델, Claude API에서는 기본적으로 Haiku에 맡깁니다. 이유는 경험적으로 확인됩니다. LLM 평가자는 자기 선호 편향을 보여, 독립적인 판정자보다 자신의 출력을 더 높게 평가하며, 더 강한 모델일수록 더 강한 편향을 보일 수 있습니다 . 생성자가 동시에 자기 자신의 중단 신호 역할까지 하면 신뢰하기 어렵기 때문에, 검증자는 만드는 쪽과 분리됩니다.
동작 방식상 /goal은 완료 조건을 설정하고, 세션 범위의 프롬프트 기반 Stop 훅으로 감쌉니다 . 각 턴이 끝날 때마다 Haiku 평가자는 현재 대화 기록을 기준으로 사용자의 조건을 확인합니다. 방금 코드를 수정한 주 작업 모델이 판단하는 것이 아닙니다 . 결과는 두 가지로 단순합니다.
- "No" → 평가자의 이유가 다음 턴의 지침으로 Claude에 다시 주입됩니다.
- "Yes" → 목표가 해제되고 달성 조건 항목이 기록됩니다.
이렇게 되면 개발자의 역할도 달라집니다. Claude Code를 만든 Anthropic 엔지니어 Boris Cherny는 2026년 7월에 이렇게 말했습니다. "I no longer prompt Claude directly; my job is to write loops that prompt Claude and decide what to do next" . 이제 핵심 역량은 지시문을 잘 쓰는 것에서, 독립적인 판정자가 확인할 수 있는 중단 조건을 쓰는 것으로 이동합니다.
v2.1.139가 먼저 필요합니다

그 중단 조건을 쓰기 전에 설치된 버전을 확인해야 합니다. /goal은 Claude Code v2.1.139 이상이 필요하며, 변경 로그상 이 빌드는 2026년 5월 11일에 나온 것으로 되어 있습니다 . 이전 빌드에는 /goal 명령 자체가 없으므로, 먼저 claude --version을 실행하고 숫자가 더 낮다면 업데이트하세요. 이 기능은 모든 유료 플랜과 Anthropic API에서 사용할 수 있으며, Amazon Bedrock, Google Cloud의 Agent Platform, Microsoft Foundry에서도 지원됩니다 .
세션이 실행되면 /goal 오버레이는 경과 시간, 턴 수, 토큰 수라는 세 가지 실시간 수치를 보여줍니다 . 첫 실행에서는 턴 수를 지켜본 뒤, 이를 기준으로 "or stop after 20 turns" 같은 안전 조항을 조건에 넣어 멈춘 루프가 토큰을 무기한 태우지 않도록 보정하세요.
주관적 목표를 Haiku가 확인할 수 있는 조건으로 바꾸기

좋은 /goal 조건은 측정 가능한 최종 상태 하나를 명시하고, Haiku가 읽어야 할 증거를 적고, 필요한 제약을 추가하며, 실행 시간을 제한합니다. 평가자는 객관적인 대상에 대해서만 통과 또는 실패를 판정할 수 있기 때문입니다. 조건은 최대 4,000자까지 쓸 수 있지만, 중요한 것은 길이가 아니라 이진 신호입니다. 아무 맥락이 없는 독자도 대화 기록만 보고 확인할 수 있게 검사를 작성하세요.
객관적인 조건은 그런 이진 증거를 만들어 냅니다. 다음 예시는 Haiku에 명확한 예/아니오 판단 기준을 줍니다.
- 테스트: "
test/auth의 모든 테스트가 통과하고 lint가 0으로 종료된다." - 성능: "Lighthouse 성능 점수 ≥ 90."
- 작업 트리: "
git status가 추적되지 않은 파일이 없다고 보고한다."
주관적인 조건은 조용히 종료에 실패합니다. "코드를 더 깔끔하게 만들어라" 또는 "가독성을 개선해라"는 Haiku가 채점할 객관적인 신호를 주지 않으므로, 확신 있는 "yes"를 반환하지 못하고 세션은 그대로 턴 제한까지 갑니다. 그래서 명시적인 "or stop after 20 turns" 조항은 목표가 아니라 하한 안전장치로 중요합니다. Anthropic 자체 지침도 중단 조건을 미적 판단이 아니라 객관적 검사로 다룹니다 .
CI나 헤드리스 실행에서는 claude -p로 목표를 비대화식으로 호출하세요. 한 가지 주의할 점이 있습니다. 기본 출력은 루프가 완료될 때까지 아무것도 출력하지 않으므로, 진행 상황을 보려면 스트리밍 플래그를 추가해야 합니다 :
claude -p "/goal all tests in test/auth pass and lint exits 0, or stop after 20 turns" \
--output-format stream-json --verbose--output-format stream-json --verbose가 없으면 긴 CI 실행은 Haiku가 각 턴을 채점하고 있는 중에도 멈춘 것처럼 보입니다. 스트리밍 플래그와 객관적인 조건을 함께 쓰면, 작업 내용을 보고하면서도 언제 멈춰야 하는지 모호하지 않게 아는 루프가 됩니다.
평가자가 확인할 수 없는 것

/goal 뒤의 Haiku 채점자는 대화 기록만 읽습니다. 도구 접근 권한이 없으므로 명령을 실행하거나, 파일을 열거나, API를 직접 호출할 수 없습니다 . 완료 조건을 작업 모델이 이미 대화에 드러낸 내용과 대조해 판단할 뿐, 그 이상은 보지 못합니다. "모든 테스트가 통과한다" 같은 조건은 테스트 출력이 텍스트로 대화 기록에 남아 있지 않다면 평가자에게 아무 의미가 없습니다.
실무적인 결론은 루프가 닫히기 전에 작업 모델이 증거를 보이게 만들어야 한다는 것입니다. 테스트 출력을 인라인으로 파이프하고, 빌드 종료 코드를 출력하고, git status를 실행해 결과를 에코하거나, 빈 큐를 보여주세요. 채점자는 무언가를 다시 실행해서가 아니라, 그렇게 캡처된 텍스트를 보고 최종 상태를 확인합니다 . 증거가 대화 기록에 도달하지 않으면 실제로 끝난 작업도 무기한 루프에 빠질 수 있습니다.
대화 기록상의 증거만으로 부족할 때는 아직 실험적이지만 에이전트 기반 Stop 훅이 더 강한 검사를 제공합니다. 이 훅은 최대 50턴 동안 Read, Grep, Glob 접근 권한을 가진 검증 서브에이전트를 띄울 수 있어, 표면에 드러난 출력만 믿는 대신 검사자가 저장소를 직접 살펴볼 수 있습니다 . 그 독립성에는 더 많은 토큰이 들기 때문에, 대화 기록을 수동으로 읽는 것만으로는 실제로 중요한 내용을 놓칠 수 있는 경우에만 남겨두세요.
한 번 실행에서 반복 실행으로: /schedule과 능동 루틴
하나의 목표가 검증 가능한 종료 상태에 안정적으로 도달한다면, 다음 단계는 반복입니다. 프롬프트가 아니라 시간이나 이벤트를 기준으로 같은 평가 사이클을 돌리는 방식입니다. Claude Code는 이를 두 가지 트리거로 나눕니다. /loop는 세션 범위에서 동작합니다. 프롬프트, 내장 유지보수 프롬프트, 또는 .claude/loop.md를 분 단위 고정 간격이나 1분에서 1시간 사이의 동적 지연으로 실행하며, 잊고 열어 둔 세션이 무기한 실행되지 않도록 7일 만료가 붙어 있습니다 . 로컬 머신에 열린 세션이 필요합니다. /schedule은 이에 해당하는 클라우드 호스팅 방식입니다. 노트북을 닫은 뒤에도 Anthropic 인프라에서 실행이 계속되므로, CI 폴링, PR 리뷰 댓글 모니터링, 야간 유지보수 실행에 적합합니다 .
| 트리거 | 실행 위치 | 노트북을 닫아도 계속 실행? | 적합한 작업 |
|---|---|---|---|
/goal | 로컬 세션 | 아니요 | 지금 검증 가능한 작업 |
/loop | 로컬 세션 | 아니요(7일 만료) | 작업 중 간격 기반 폴링 |
/schedule | Anthropic 클라우드 | 예 | CI, PR 감시, 야간 실행 |
멀티 에이전트 작업에서는 동적 워크플로(v2.1.154+)를 통해 Claude가 JavaScript 스크립트를 작성하고, 백그라운드 런타임이 이를 실행하게 할 수 있습니다. 이 방식은 동시에 최대 16개의 서브에이전트, 실행당 최대 1,000개의 서브에이전트를 오케스트레이션하며, 중간 결과는 메인 컨텍스트가 아니라 스크립트 변수에 보관됩니다. 에이전트가 25개를 넘거나 예상 토큰이 150만 개를 넘으면 비용 경고가 발생합니다 . Boris Cherny의 “Steps of AI Adoption” 단계표(2026년 7월 17일)는 이 모든 것이 왜 누적 효과를 내는지 설명합니다. /goal만으로는 Step 2에 도달하지만, Step 3에는 루틴과 /loop, /goal, 서브에이전트가 함께 필요합니다 . 핵심은 지속성에 따라 트리거를 고르는 것입니다. 완료 여부를 지금 확인할 수 있으면 /goal, 시간이나 외부 시스템이 트리거를 소유한다면 /schedule을 쓰고, 별도의 채점기가 매 반복을 엄격하게 검증하게 두면 됩니다.
자주 묻는 질문
/goal은 왜 작업 모델이 아니라 Haiku로 종료 조건을 평가하나요?
모델이 자기 결과물을 직접 평가하는 방식은 신뢰하기 어렵기 때문입니다. LLM 평가자는 자기 선호 편향을 보입니다. 독립적인 평가자보다 자신의 응답에 더 높은 점수를 주며, 더 강한 모델일수록 이 편향이 더 강하게 나타날 수 있습니다 . 종료 검사를 엄정하게 유지하기 위해 /goal은 검증을 별도의 빠른 평가자에게 맡깁니다. Claude API에서는 기본적으로 Haiku가 이 역할을 하며, 대화 기록을 읽고 조건이 충족됐는지 답합니다. “no”가 나오면 그 이유가 다음 턴을 위한 지침으로 돌아옵니다 . 만드는 역할과 채점하는 역할을 분리하면 작업 모델이 너무 일찍 완료를 선언하는 일을 막을 수 있습니다.
/goal을 쓰려면 어떤 버전의 Claude Code가 필요한가요?
/goal에는 Claude Code v2.1.139 이상이 필요합니다. 변경 기록에 따르면 해당 빌드는 2026년 5월 11일에 해당합니다 . 이전 빌드에는 /goal 명령이 없습니다. 릴리스마다 모델 기본값과 명령 문법이 바뀔 수 있으므로, 조건을 작성하기 전에 설치된 버전을 확인하세요 .
/goal 조건이 “코드를 더 깔끔하게 만들기”처럼 주관적이면 어떻게 되나요?
Haiku 평가자가 확인할 수 있는 객관적 신호가 없기 때문에 확신을 가지고 “yes”를 반환하기 어렵습니다. 보통 세션은 턴 한도에 도달할 때까지 계속 실행되고, 명확한 종료 없이 토큰만 소모합니다 . 대신 이진적으로 확인 가능한 근거가 있는 조건을 작성하세요. 예를 들어 “test/auth의 모든 테스트가 통과하고 lint가 깨끗함” 또는 “Lighthouse ≥ 90”처럼 쓰고, “또는 20턴 후 중지” 같은 절로 실행 시간을 제한하세요 .
/goal, /loop, /schedule은 무엇이 다른가요?
각각 루프의 서로 다른 부분을 해결합니다. /goal은 종료 조건을 담당합니다. 측정 가능한 기준이 확인되거나 턴 한도에 도달할 때까지 여러 턴에 걸쳐 계속 작업합니다. /loop는 트리거를 담당합니다. 사용자의 머신에서 열린 세션 안에서 고정 간격 또는 동적으로 선택된 간격으로 반복하며, 잊고 둔 루프가 결국 멈추도록 7일 만료가 있습니다 . /schedule은 /loop와 비슷하지만 Anthropic 인프라에서 클라우드 호스팅되므로, 노트북을 닫은 뒤에도 실행이 계속됩니다 .
/goal을 비대화형 CI 파이프라인에서도 사용할 수 있나요?
예, claude -p를 통해 사용할 수 있습니다. 기본적으로 실행이 완료될 때까지 아무것도 출력하지 않을 수 있어 파이프라인 로그에서는 멈춘 것처럼 보일 수 있습니다. 턴별 출력을 실시간으로 스트리밍하려면 --output-format stream-json --verbose를 전달하세요 .
이 글이 도움이 되셨다면, 새 글이 올라올 때마다 이메일로 받아보세요.