포스트

Claude Code /goal - 조건이 충족될 때까지 Claude를 계속 작동시키기

목차

  1. 개요
  2. 다른 자율 워크플로우와 비교
  3. /goal 사용
  4. 평가는 어떻게 작동하는가
  5. 요구 사항
  6. 결론
  7. Reference

개요

Claude Code에 /goal 명령이 추가됐다. 완료 조건을 한 번 설정하면, 각 단계를 사용자가 매번 프롬프트하지 않아도 Claude가 그 조건을 향해 여러 턴에 걸쳐 계속 작동한다. 각 턴이 끝날 때마다 작은 빠른 모델이 조건이 충족됐는지 확인하고, 충족되지 않으면 Claude는 제어를 사용자에게 돌려주는 대신 다음 턴을 시작한다. 조건이 충족되면 목표는 자동으로 지워진다. 검증 가능한 최종 상태가 있는 실질적인 작업에 쓰는 기능이다. 이미 Codex CLI에 있던 /goal과 명령 이름이 같지만, Claude Code는 Stop hook과 자동 모드를 활용하는 다른 구현 방식을 쓴다.

/goal이 잘 맞는 작업의 예시는 다음과 같다.

  • 모든 호출 사이트가 컴파일되고 테스트가 통과할 때까지 모듈을 새 API로 마이그레이션
  • 모든 수용 기준이 충족될 때까지 설계 문서 구현
  • 각각이 크기 예산 이하가 될 때까지 큰 파일을 집중된 모듈로 분할
  • 큐가 비워질 때까지 레이블이 지정된 이슈 백로그 처리

다른 자율 워크플로우와 비교

/goal, /loop, Stop hook 세 가지 모두 프롬프트 사이에 현재 세션을 계속 실행한다. 다음 턴을 언제 시작해야 하느냐를 기준으로 고르면 된다.

접근 방식다음 턴 시작 시기중지 시기
/goal이전 턴이 완료될 때모델이 조건이 충족됐다고 확인할 때
/loop시간 간격이 경과할 때사용자가 중지하거나 Claude가 작업 완료로 판단할 때
Stop hook이전 턴이 완료될 때사용자의 스크립트나 프롬프트가 결정할 때

/goal과 Stop hook은 둘 다 매 턴 후에 실행된다. /goal은 세션 범위의 단축키로, 조건을 입력하면 현재 세션에서만 활성화된다. Stop hook은 설정 파일에 들어 있어 범위 내 모든 세션에 적용되고, 결정론적 확인용 스크립트를 실행하거나 모델 평가용 프롬프트를 실행할 수 있다.

자동 모드는 단일 턴 안에서 도구 호출을 승인하지만 새 턴을 시작하지는 않으며, Claude가 작업 완료로 판단하면 멈춘다. /goal은 매 턴 후에 조건을 확인하는 별도의 평가자를 추가하므로, 완료 여부를 작업을 수행한 모델이 아니라 새로운 모델이 결정한다. 두 가지는 상호 보완적이다. 자동 모드는 도구별 프롬프트를 없애고, /goal은 턴별 프롬프트를 없앤다.

/goal 사용

세션당 활성 목표는 하나만 가능하다. 같은 명령이 인수에 따라 설정·확인·지우기를 한다.

목표 설정

/goal 뒤에 만족하려는 조건을 입력한다. 이미 활성 목표가 있으면 새 목표가 그것을 대체한다.

1
/goal all tests in test/auth pass and the lint step is clean

목표를 설정하면 조건 자체를 지시문으로 삼아 즉시 턴을 시작한다. 별도의 프롬프트를 보낼 필요가 없다. 목표가 활성화되어 있는 동안 ◎ /goal active 표시기가 목표가 실행된 시간을 보여준다. 각 턴 후 평가자는 조건이 충족됐는지를 설명하는 짧은 이유를 반환하며, 가장 최근 이유가 상태 보기와 대화 기록에 나타나 Claude가 다음에 무엇을 해야 할지 알 수 있다.

효과적인 조건 작성

평가자는 Claude가 대화에서 보인 내용을 근거로 조건을 판단한다. 독립적으로 명령을 실행하거나 파일을 읽지 않으므로, Claude의 출력 자체로 입증할 수 있는 조건을 작성해야 한다. “test/auth의 모든 테스트 통과”가 작동하는 이유는 Claude가 테스트를 실행하고 그 결과가 대화 기록에 나타나 평가자가 읽을 수 있기 때문이다.

여러 턴에 걸쳐 잘 버티는 조건은 보통 다음을 포함한다.

요소설명
하나의 측정 가능한 최종 상태테스트 결과, 빌드 종료 코드, 파일 수, 빈 큐
명시된 확인 방법Claude가 이를 증명하는 방법 (예: npm test 종료 0, git status가 깨끗함)
중요한 제약 조건그 과정에서 변경되지 말아야 하는 것 (예: 다른 테스트 파일은 수정 안 함)

조건은 최대 4,000자까지 가능하다. 목표가 실행되는 시간을 제한하려면 조건에 턴이나 시간 절을 넣는다 (예: or stop after 20 turns). Claude는 매 턴마다 그 절에 대한 진행 상황을 보고하고 평가자가 대화에서 이를 판단한다.

상태 확인과 지우기, 재개

인수 없이 /goal을 실행하면 현재 상태를 볼 수 있다.

1
/goal

목표가 활성화되어 있으면 조건, 실행된 시간, 평가된 턴 수, 현재 토큰 소비, 평가자의 가장 최근 이유가 표시된다. 목표가 활성화되어 있지 않지만 세션 초반에 달성됐다면, 달성된 조건과 함께 지속 시간·턴 수·토큰 소비가 표시된다.

조건이 충족되기 전에 활성 목표를 제거하려면 /goal clear를 실행한다.

1
/goal clear

stop, off, reset, none, cancelclear의 별칭이다. /clear로 새 대화를 시작하면 활성 목표도 제거된다. 세션이 종료될 때 여전히 활성 상태였던 목표는 --resume 또는 --continue로 그 세션을 재개할 때 복원된다. 조건은 유지되지만 턴 수·타이머·토큰 소비 기준선은 재개 시 모두 재설정되며, 이미 달성됐거나 지워진 목표는 복원되지 않는다.

비대화형으로 실행

/goal은 비대화형 모드와 원격 제어에서도 작동한다. -p로 목표를 설정하면 단일 호출에서 루프를 완료까지 실행한다.

1
claude -p "/goal CHANGELOG.md has an entry for every PR merged this week"

조건이 충족되기 전에 비대화형 목표를 중지하려면 Ctrl+C로 프로세스를 중단한다.

평가는 어떻게 작동하는가

/goal은 세션 범위의 프롬프트 기반 Stop hook을 감싼 래퍼다. Claude가 턴을 완료할 때마다 조건과 지금까지의 대화가 설정된 작은 빠른 모델로 전송되며, 기본값은 Haiku다. 모델은 예/아니오 결정과 짧은 이유를 반환한다. “아니오”는 Claude에게 계속 작동하라고 지시하고 그 이유를 다음 턴의 지침으로 포함시킨다. “예”는 목표를 지우고 달성된 항목을 대화 기록에 기록한다.

평가자는 세션이 설정된 공급자에서 실행되며, 도구를 호출하지 않으므로 Claude가 이미 대화에서 보인 내용만 판단할 수 있다. 평가 토큰은 공급자에 설정된 작은 빠른 모델에서 청구되며, 일반적으로 주 턴 소비에 비해 무시할 수 있는 수준이다.

요구 사항

/goal은 평가자가 hooks 시스템의 일부이기 때문에 신뢰 대화를 수락한 워크스페이스에서만 실행된다. 관리 정책 설정에서 disableAllHooks가 설정되면 /goal을 사용할 수 없다. 두 경우 모두 명령은 조용히 아무것도 하지 않는 대신 그 이유를 알려준다.

결론

/goal은 검증 가능한 최종 상태가 있는 작업에서 턴별 프롬프트를 없애주는 세션 범위 단축키다. 조건을 입력하면 Claude가 그 조건을 향해 알아서 턴을 이어가고, 매 턴마다 별도의 빠른 모델이 충족 여부를 판단한다. 조건은 Claude의 출력으로 입증 가능해야 하고, 측정 가능한 최종 상태·확인 방법·제약 조건을 담는 것이 좋다. 자동 모드와 함께 쓰면 도구별 프롬프트까지 사라져 각 목표 턴이 무인으로 돌아간다.

Reference