logo
Back

Claude Code Deep Dive - 5(CLI Reference)

0 views

1. Chapter 5의 핵심

Chapter 1~4가 사람이 Claude Code와 대화하면서 작업하는 방법을 다뤘다면, Chapter 5는 Claude Code를 스크립트와 CI/CD 안에서 실행하는 방법을 다룬다.

회사에서, 해당 CI/CD 파이프라인에 적용해 보면 좋을 것 같다는 생각이 든다.

Claude Code를 사람이 조작하는 개발 도구에서, 결과를 판정하고 비용과 권한을 통제할 수 있는 자동화 실행기로 확장하는 과정이다.

전체 흐름은 다음과 같다.

  1. CLI 명령과 플래그를 분류한다.
  2. -p로 Headless 작업을 실행한다.
  3. JSON과 exit code로 결과를 판정한다.
  4. 기존 세션을 재개하거나 분기한다.
  5. cron, Routines, CI에 자동화를 배치한다.
  6. 이슈 트리아지, 로그 분석, 보고서 등의 패턴을 적용한다.
  7. 환경변수와 디버깅 절차로 운영한다.

2. CLI 기본 구조

bash
claude [플래그] [프롬프트]

기본 실행 형태

bash
# 대화형 세션
claude
 
# 초기 요청과 함께 대화형 세션 시작
claude "explain this project"
 
# 실행 후 종료하는 Headless 모드
claude -p "query"
 
# 파이프 입력
cat logs.txt | claude -p "explain"
 
# 현재 디렉터리의 최근 대화 재개
claude -c
 
# 이름이나 ID로 특정 대화 재개
claude -r "auth-refactor" "Finish this PR"
형태설명
claude대화형 세션
claude "prompt"초기 프롬프트로 대화형 세션 시작
claude -p "prompt"작업 후 종료되는 비대화형 실행

주요 관리 명령

명령용도
claude auth login/logout로그인과 로그아웃
claude auth status로그인 상태 및 exit code 확인
claude setup-tokenCI용 장기 OAuth 토큰 발급
claude update/install업데이트 또는 지정 버전 설치
claude doctor환경과 설정 진단
claude project purge프로젝트 로컬 상태 정리
claude agents/logs/attach백그라운드 에이전트 조회, 로그 확인, 접속
claude stop/respawn에이전트 중지와 재기동
claude mcp login/logoutMCP OAuth 인증

3. 플래그를 여섯 종류로 분류하기

분류주요 플래그역할
동작 모드-p, --bg, --remote, --worktree, --bare, --safe-mode실행 방식 결정
세션-c, -r, --from-pr, --fork-session, -n기존 맥락 재사용
모델과 사고--model, --effort, --fallback-model모델과 추론 수준 선택
권한과 도구--permission-mode, --tools, --allowed-tools실행 능력 제한
구성과 확장--settings, --agents, --mcp-config설정과 확장 주입
출력과 진단--output-format, --json-schema, --debug결과 계약과 문제 분석

모델과 사고 수준

bash
claude --model opus
claude --effort high
claude --fallback-model sonnet,haiku
claude --advisor opus

자료에서 설명하는 일반적인 우선순위는 다음과 같다.

text
CLI 플래그 > 환경변수 > 파일 설정

조직의 managed 설정은 이보다 높은 강제 계층으로 적용될 수 있다.

권한과 도구 제한

bash
# Plan 모드
claude --permission-mode plan
 
# 특정 도구와 명령만 허용
claude -p \
  --allowed-tools "Read" "Bash(git log *)" \
  "최근 변경 사항을 분석해줘"
 
# Edit 도구 제거
claude --disallowedTools "Edit"
 
# rm 계열 호출 거부
claude --disallowedTools "Bash(rm *)"
 
# 모든 MCP 도구 제거
claude --disallowedTools "mcp__*"
 
# 사용할 내장 도구 제한
claude --tools "Bash,Edit,Read"

실행별 설정 오버레이

bash
claude --settings ./ci-settings.json
claude --settings '{"model":"haiku"}'
claude --setting-sources user,project
claude --mcp-config ./mcp.json --strict-mcp-config

CI처럼 재현성이 중요한 환경에서는 설정 소스를 고정하고 별도의 설정 파일을 주입하면 로컬과 CI의 차이를 줄일 수 있다.

시스템 프롬프트

플래그동작적합한 상황
--append-system-prompt기본 프롬프트 뒤에 규칙 추가Claude Code의 정체성 유지
--append-system-prompt-file파일의 규칙 추가긴 규칙을 버전 관리
--system-prompt기본 프롬프트 전체 대체별도 비코딩 에이전트
--system-prompt-file파일로 전체 대체완전한 프롬프트 교체

기본 동작을 유지하려면 append 계열을 사용하는 것이 기본이다. 전체 대체는 기본 안전 지침까지 사라지므로 실행 책임도 함께 가져가야 한다.


4. --bare와 --safe-mode

항목--bare--safe-mode
목적반복 스크립트 기동 가속문제 원인 진단
훅, 스킬, 플러그인탐색하지 않음비활성화
MCP, CLAUDE.md탐색하지 않음비활성화
기본 도구Bash, 읽기, 편집 가능인증과 기본 권한은 정상
managed 정책최소 실행계속 적용

정리하면 다음과 같다.

  • 빠른 파일 단위 배치: --bare
  • 훅, MCP, 스킬, CLAUDE.md 중 무엇이 문제인지 확인: --safe-mode
bash
claude --bare -p --model haiku "이 파일의 복잡도를 분석해줘"
claude --safe-mode -p "문제가 발생하는 작업"

5. Headless 실행

-p의 의미

-p는 단순히 답변만 출력하는 옵션이 아니다. 자료 기준으로 Agent SDK 경로를 이용하는 단발 에이전트 실행이다.

다음 기능도 유지된다.

  • 도구 실행
  • 훅
  • MCP
  • 설정
  • 권한 모델

차이는 사람이 대화를 이어가는 대신 결과를 stdout에 남기고 종료한다는 점이다.

채널역할
stdout작업 결과
stderr오류와 진단 정보
exit code성공과 실패 판정

입력 전달 방법

bash
# 직접 인자
claude -p "직접 인자"
 
# 파이프
cat error.log | claude -p "원인 분석"
 
# 명령 치환
claude -p "$(cat prompt.txt)"
 
# 리다이렉트
claude -p "요약해줘" < notes.md
 
# Here Document
claude -p <<'EOF'
여러 줄 지시문
EOF
 
# 기존 세션 이어받기
claude -c -p "이어서 리팩터링해줘"

파이프나 리다이렉트에는 데이터를, 명령 인자에는 데이터를 어떻게 처리할지를 적는 방식이 이해하기 쉽다.

Exit Code

bash
claude -p "테스트 실패 원인을 찾아 수정해줘" \
  --max-turns 15
 
case $? in
  0) echo "OK" ;;
  *) echo "FAIL"; exit 1 ;;
esac
  • 0: 정상 완료
  • 0이 아닌 값: 실행 오류 또는 상한 도달

CI에서는 자연어 응답보다 exit code가 Job 성공 여부를 결정한다.


6. 출력 형식과 구조화 출력

출력 형식

형식설명용도
text최종 본문 출력사람이 읽는 간단한 스크립트
json결과와 비용, 세션 메타데이터 출력배치, 비용 집계, 세션 재개
stream-json진행 이벤트를 줄 단위 JSON으로 출력실시간 UI, 장기 작업 관측
bash
claude -p "고위험 파일 3개를 찾아줘" \
  --output-format json

대표적인 JSON 필드:

  • .result: 최종 본문
  • .total_cost_usd: 호출 비용
  • .num_turns: 사용한 턴 수
  • .session_id: 재개에 사용할 세션 ID
bash
OUT=$(claude -p "작업 요청" --output-format json)
 
echo "$OUT" | jq -r '.result'
echo "$OUT" | jq -r '.total_cost_usd'
echo "$OUT" | jq -r '.session_id'

stream-json의 주요 이벤트는 system, assistant, tool_result, result다. --include-partial-messages와 --include-hook-events로 부분 응답과 훅 이벤트도 받을 수 있다.

JSON Schema

bash
claude -p "이 diff의 위험도를 평가해줘" \
  --json-schema '{
    "type": "object",
    "properties": {
      "risk": {
        "enum": ["low", "medium", "high"]
      },
      "reasons": {
        "type": "array",
        "items": {"type": "string"}
      },
      "block": {
        "type": "boolean"
      }
    },
    "required": ["risk", "block"]
  }'

결과를 CI 게이트에 바로 연결할 수 있다.

bash
RISK=$(
  claude -p "git diff의 위험도를 평가해줘" \
    --json-schema "$SCHEMA" |
  jq -r '.risk'
)
 
[ "$RISK" = "high" ] && exit 1

프롬프트에서 “JSON으로 답해줘”라고 요청하는 것은 형식 요청이다. --json-schema는 후속 파이프라인이 기대하는 출력 계약이다.


7. 무인 실행의 안전장치

bash
claude -p "의존성 취약점을 분석하고 패치 PR 초안을 작성해줘" \
  --max-turns 20 \
  --max-budget-usd 3.00
옵션역할
--max-turns에이전틱 턴 수 상한
--max-budget-usd호출당 비용 상한
--allowed-tools사용 가능한 도구와 명령 제한
--fallback-model모델 과부하 시 폴백

자료 기준 --max-turns는 기본 무제한이므로, 사람이 지켜보지 않는 실행에서는 반드시 상한을 설정해야 한다.

상한 산정 방법:

  1. 실제 작업을 파일럿으로 실행한다.
  2. 턴 수와 비용의 p95를 측정한다.
  3. 처음에는 p95의 약 1.5배로 설정한다.
  4. 상한 도달을 작업 분할이나 상한 재조정 신호로 본다.

재시도

모든 실패를 재시도하지 않는다. Rate limit이나 일시적 과부하처럼 다시 실행할 가치가 있는 오류만 골라야 한다.

bash
run_claude() {
  local attempt=1
 
  while [ "$attempt" -le 3 ]; do
    OUT=$(claude -p "$1" \
      --output-format json \
      --max-turns 15 \
      2>err.log) && {
        echo "$OUT"
        return 0
      }
 
    grep -qiE 'rate|overloaded|529' err.log || break
 
    sleep $((attempt * 20))
    attempt=$((attempt + 1))
  done
 
  return 1
}

모델 과부하에는 재시도 전에 --fallback-model을 사용하는 방법도 있다.


8. 세션 제어

세션 트랜스크립트는 프로젝트별 JSONL로 저장된다.

text
~/.claude/projects/

자료 기준 기본 정리 기간은 30일이며 cleanupPeriodDays로 조정한다. claude project purge로 프로젝트 로컬 상태를 정리할 수 있다.

Continue와 Resume

명령동작
claude -c현재 디렉터리의 가장 최근 세션으로 이동
claude -r선택기에서 세션 선택
claude -r <ID>특정 세션 ID 재개
claude -r <name>이름으로 재개
bash
claude -c
claude -r "payments-refactor"
claude -c -p "이어서 리팩터링해줘"

세션 ID는 프로젝트와 Worktree 범위에서 검색된다. 세션을 찾지 못하면 실행 디렉터리부터 확인한다.

PR 세션 복원

bash
claude --from-pr 123
claude --from-pr https://github.com/org/repo/pull/123

--from-pr은 PR과 연결된 대화 맥락을 복원한다. claude -w '#123'은 PR 코드를 별도 Worktree로 분기한다는 차이가 있다.

세션 분기

bash
claude \
  --resume auth-refactor \
  --fork-session

같은 지점에서 구현 방향 A와 B를 각각 실험할 때 사용할 수 있다.

bash
SID=$(uuidgen)
 
claude -p \
  --session-id "$SID" \
  "1단계: 프로젝트 스캔"
 
claude -p \
  --resume "$SID" \
  "2단계: 스캔 결과를 바탕으로 수정"

이처럼 스크립트가 세션 ID를 소유하면 다단계 파이프라인에서도 맥락을 이어갈 수 있다.

이름, 내보내기, 되돌리기

bash
claude -n "payments-refactor"

세션 내부 명령:

  • /rename auth-hotfix: 이름 변경
  • /export: 대화 기록 내보내기
  • /rewind: 코드와 대화를 이전 체크포인트로 복구

/rewind는 Bash 명령의 외부 부수효과, 원격 API 변경, 데이터베이스 작업까지 되돌리지는 않는다. 세션 안의 시행착오는 /rewind, 장기 이력과 협업은 Git이 담당한다.

웹과 로컬 이동

bash
claude --remote "로그인 버그를 수정해줘"
claude --teleport

--remote는 웹 클라우드 세션에 작업을 위임하고, --teleport는 해당 세션을 로컬로 가져온다. Remote Control은 로컬에서 실행 중인 세션을 웹이나 모바일에서 조작하는 반대 방향의 기능이다.


9. 자동화 실행 위치

자동화 표면실행 위치적합한 상황주의점
/loop, /goal현재 세션조건 달성까지 반복세션 종료 시 함께 종료
Desktop 예약개인 PCGUI 기반 개인 정기 작업기계 필요
Routines관리형 클라우드스케줄, API, GitHub 이벤트관리형 실행 환경
CI 파이프라인GitHub Actions, GitLab CIPR, push, 이슈 이벤트권한과 비용 설계
cron + Headless자체 서버 또는 PC완전한 실행 통제PATH, 인증 수명, 로그

/loop와 /goal

text
/loop 테스트가 전부 통과할 때까지 실패를 고쳐

/loop는 같은 작업을 반복한다.

text
/goal 전체 테스트 통과 + 린트 0 경고 상태 도달

/goal은 최종 상태를 계약하고, Claude가 방법을 바꿔가며 조건을 달성한다.

구분/loop/goal
중심작업 반복상태 도달
방식같은 요청 반복수단을 바꾸며 지속
종료반복 조건 종료완료 조건 충족

Routines

Routines는 개인 기계 없이 관리형 환경에서 Claude Code를 실행한다.

지원 트리거:

  • 스케줄
  • API 호출
  • GitHub 이벤트
text
claude-cli://open?path=~/work/payments&prompt=결제 지연 알람 원인을 조사해

런북, 알림, 대시보드에 Deep Link를 넣으면 지정된 저장소와 프롬프트로 Claude Code 세션을 열 수 있다.

백그라운드 실행

bash
claude --bg "flaky 테스트 원인 조사"
claude logs <session-id>
claude attach <session-id>
claude --bg --exec 'pytest -x'

--bg는 세션을 유지한 채 터미널만 돌려받는다. 자료 기준 -p와 함께 사용할 수 없다.

cron

cron
SHELL=/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin:/home/dev/.local/bin
 
0 7 * * 1-5 cd /home/dev/payments && \
  ./scripts/nightly-deps-audit.sh >> ~/logs/deps.log 2>&1

cron에서는 다음을 확인해야 한다.

  1. PATH를 명시한다.
  2. Bedrock SSO나 토큰 만료를 고려한다.
  3. stdout과 stderr를 로그로 보존한다.

10. CI/CD 통합

세 가지 원칙

묻지 않고, 넘치지 않고, 흔적을 남긴다.

원칙구현
묻지 않는다-p, 명확한 --allowed-tools
넘치지 않는다--max-turns, --max-budget-usd, 저비용 모델
흔적을 남긴다JSON, stderr, 아티팩트, PR 코멘트

인증

환경인증 방식특징
구독 조직claude setup-token장기 토큰을 시크릿에 보관
API 조직ANTHROPIC_API_KEYConsole 발급 키
AWSOIDC 역할 인수 + Bedrock장기 시크릿 제거 가능
게이트웨이BASE_URL + 서비스 자격중앙 정책 활용

자료에서는 AWS 환경에서 OIDC 역할 인수를 권장한다.

보안 원칙:

  • CI Job 권한 최소화
  • 키와 토큰 로그 마스킹
  • 프롬프트와 결과 JSON에 시크릿 미포함
  • 포크 PR에 시크릿 미주입

GitHub Actions 기본 흐름

yaml
jobs:
  deps-audit:
    runs-on: ubuntu-latest
    permissions:
      id-token: write
      contents: read
 
    steps:
      - uses: actions/checkout@v4
      - uses: aws-actions/configure-aws-credentials@v4
        with:
          role-to-assume: CLAUDE_ROLE
          aws-region: ap-northeast-2
      - run: curl -fsSL https://claude.ai/install.sh | bash
      - run: |
          CLAUDE_CODE_USE_BEDROCK=1 \
          ./scripts/nightly-deps-audit.sh

Workflow 안에 Claude 명령을 길게 작성하기보다는, 로컬에서도 실행 가능한 셸 스크립트를 만들고 CI에서 호출하는 구성이 좋다.

PR 리뷰 게이트

bash
git diff "origin/$BASE...HEAD" > pr.diff
 
claude -p "pr.diff를 리뷰하고 차단 여부를 판단해줘" \
  --allowed-tools "Read" "Grep" "Bash(git diff *)" \
  --max-turns 12 \
  --max-budget-usd 1.50 \
  --json-schema "$(cat .ci/review-schema.json)" \
  > review.json
 
jq -e '.block == false' review.json

Claude가 리뷰를 작성하는 데서 끝내지 않고 block 값을 Job의 성공과 실패에 연결한다.

GitLab CI

yaml
claude-review:
  stage: test
  image: ubuntu:24.04
 
  rules:
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
 
  before_script:
    - apt-get update && apt-get install -y curl git jq
    - curl -fsSL https://claude.ai/install.sh | bash
    - export PATH="$HOME/.local/bin:$PATH"
 
  script:
    - ./scripts/mr-review.sh
 
  artifacts:
    paths:
      - review.json
    when: always

문법은 달라도 Headless 실행, 상한, Schema, exit gate라는 원칙은 동일하다.

비용 통제

방법설명
호출 상한턴과 예산 상한 설정
모델 하향분류와 일반 리뷰에 저비용 모델 사용
발동 조건 축소paths, 라벨, 이벤트 조건으로 Job 수 감소
캐시 활용설치 캐시와 프롬프트 캐시 개선
비용 집계total_cost_usd 월별 집계
조직 안전망게이트웨이 한도와 예산 알람

가장 큰 절감은 모델 단가를 낮추는 것보다 불필요한 Job이 발동하지 않게 하는 데서 나온다.

실패와 아티팩트

성공 여부와 상관없이 보존할 항목:

  • 결과 JSON
  • stderr
  • Debug 로그
  • 비용과 턴 수

실패는 다음과 같이 구분한다.

  1. 리뷰 결과에 따른 정상 게이트 실패
  2. Claude Code 실행 오류
  3. 턴 또는 예산 상한 도달

11. 실전 자동화 패턴

공통 구조:

셸 전처리 -> Claude의 구조화된 판정 -> 전용 CLI 액션 -> 실패 큐

이슈 트리아지

입력:

  • 이슈 제목과 본문
  • 재현 정보

판정:

  • 카테고리
  • 우선순위
  • 담당 팀
  • 중복 의심 이슈

액션:

  • 라벨 추가
  • 담당 팀 멘션
  • 요약 코멘트

초기에는 자동 종료나 확정 처리보다 제안 수준으로 권한을 제한한다.

로그 분석

대량 로그를 그대로 Claude에 전달하지 않는다.

bash
grep -E 'ERROR|FATAL' app.log |
  sed -E 's/[0-9a-f-]{36}/<id>/g' |
  sort |
  uniq -c |
  sort -rn |
  head -20 > sigs.txt

처리 과정:

  1. 셸에서 오류 로그만 추출
  2. 변동 값 정규화
  3. 동일 오류 집계
  4. 상위 시그니처만 Claude에 전달
  5. 결과를 jq -s로 합침
  6. 최종 호출에서 인시던트 보고서 작성

셸이 압축하고 Claude가 해석하는 Map-Reduce 구조다.

일일 보고서

bash
SINCE=$(date -d yesterday +%F)
 
{
  git log --since="$SINCE" --oneline
  gh pr list --state all \
    --search "updated:>=$SINCE" \
    --json number,title,state
  gh issue list \
    --search "created:>=$SINCE" \
    --json number,title
} > digest.txt
 
claude -p \
  "digest.txt로 팀 브리핑을 작성해줘" \
  --max-turns 8 \
  --max-budget-usd 0.50 \
  > report.md

역할 분리:

  • git, gh: 데이터 수집
  • Claude: 요약과 서술
  • Markdown, Slack Webhook: 저장과 배달

문서 파이프라인

모든 문서를 다시 만들지 않고 Git diff로 변경된 모듈만 처리한다.

핵심 원칙:

  • 변경분만 갱신
  • 쓰기 권한을 docs/**로 제한
  • 번역도 변경된 문서만 수행

배치 마이그레이션

파일 한 개를 다음 원자 단위로 취급한다.

text
변환 -> 관련 테스트 -> 성공 시 커밋 -> 실패 시 원복과 기록

상태 파일:

  • targets.txt: 전체 대상
  • done.txt: 완료 목록
  • failed.txt: 사람의 확인이 필요한 실패 목록

장점:

  • 일부 실패가 전체 배치를 중단하지 않음
  • 중단 지점부터 재개 가능
  • 파일별 커밋으로 롤백 단위 명확
  • 실패 목록이 사람의 개입 큐가 됨

12. 환경변수

분류대표 변수
인증과 공급자CLAUDE_CODE_USE_BEDROCK, ANTHROPIC_API_KEY, ANTHROPIC_BASE_URL
네트워크HTTPS_PROXY, NO_PROXY, NODE_EXTRA_CA_CERTS
모델과 사고ANTHROPIC_MODEL, MAX_THINKING_TOKENS
기능 스위치DISABLE_*, CLAUDE_CODE_SIMPLE, CLAUDE_CODE_SAFE_MODE
관측CLAUDE_CODE_ENABLE_TELEMETRY, OTEL_*
디렉터리CLAUDE_PROJECT_DIR, CLAUDE_PLUGIN_ROOT
기록CLAUDE_CODE_SKIP_PROMPT_HISTORY, Debug 로그 경로

Bedrock

bash
export CLAUDE_CODE_USE_BEDROCK=1
export AWS_REGION=ap-northeast-2

네트워크

bash
export HTTPS_PROXY=http://proxy.corp.example:8080
export NO_PROXY=localhost,127.0.0.1,.corp.example
export NODE_EXTRA_CA_CERTS=/etc/ssl/certs/corp-root-ca.pem

TLS 검증을 무력화하는 NODE_TLS_REJECT_UNAUTHORIZED=0은 사용하지 않는다.

OpenTelemetry

bash
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=otlp
export OTEL_LOGS_EXPORTER=otlp
export OTEL_EXPORTER_OTLP_PROTOCOL=grpc
export OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4317
export OTEL_RESOURCE_ATTRIBUTES=department=platform

CI Job 정보를 OTEL_RESOURCE_ATTRIBUTES에 넣으면 파이프라인별 이벤트와 비용을 구분할 수 있다.

점검

bash
env |
  grep -iE 'claude|anthropic|otel|aws_region' |
  sort

최종 적용 구성은 Claude Code의 /status에서 확인한다.

보안 원칙:

  • 키 실값을 셸 rc 파일에 저장하지 않음
  • 가능하면 OIDC와 자격 증명 helper 사용
  • 조직 표준은 managed 설정으로 배포
  • 개인 실험은 현재 셸 세션에만 적용
  • CI와 Debug 로그의 시크릿 마스킹 확인

13. 디버깅

진단 순서

  1. 최소 재현 명령을 만든다.
  2. --verbose로 턴 출력을 확인한다.
  3. --debug로 필요한 로그를 켠다.
  4. claude doctor와 claude auth status를 실행한다.
  5. --safe-mode로 커스터마이징 문제인지 구분한다.
  6. --bare 또는 새 디렉터리에서 최소 환경으로 재현한다.

각 단계에서 가능한 원인 범위를 절반씩 줄이는 것이 목적이다.

Debug 로그

bash
claude --debug "api,hooks" -p "작업 요청"
claude --debug "!statsig,!file" -p "작업 요청"
claude --debug-file /tmp/claude-debug.log -p "작업 요청"

CI에서는 실패했을 때만 Debug 로그를 아티팩트로 보존하는 방식이 적합하다.

Safe Mode 이분법

--safe-mode에서 문제가 사라지면 커스텀 계층에 원인이 있다.

  1. 훅 비활성화
  2. MCP 설정 제한
  3. 스킬과 CLAUDE.md를 나눠 복구
  4. 최근 변경부터 확인

--safe-mode에서도 재현되면 코어 실행, 인증, 네트워크, 버전을 확인한다.

판정형 진단

bash
claude doctor
claude auth status --text
 
claude auth status || {
  echo "auth missing"
  exit 1
}

Headless에서 자주 발생하는 문제

증상가능 원인대응
출력 없이 오래 걸림권한 확인 대기--allowed-tools 보강
결과가 잘림Stream 미수집, 파이프 버퍼JSON 봉투로 수신
턴 상한에 자주 걸림상한 과소p95 재측정, 작업 분할
로컬 성공, CI 실패설정 소스와 환경 차이--setting-sources 고정
세션을 찾지 못함다른 프로젝트 디렉터리같은 경로 또는 이름 재개
훅이 실행되지 않음--bare 사용--bare 제거

문제를 외부에 전달할 때 준비할 재현 번들:

  • Claude Code 버전
  • 최소 재현 명령
  • Debug 로그
  • claude doctor 결과

14. 실무 적용 로드맵

기간적용 범위예시
1~2주개인 자동화일일 보고서 또는 트리아지 한 종류
3~6주팀 CIPR 리뷰 Job, 비용 집계
7~12주확장배치 마이그레이션, Routines 이전

마무리

Chapter 5의 핵심은 Claude Code 명령을 cron이나 CI에 넣는 것만으로 자동화가 완성되지 않는다는 점이다.

운영 가능한 자동화가 되려면 다음 조건이 함께 필요하다.

  1. 입력과 출력 형식이 명확해야 한다.
  2. JSON Schema와 exit code로 결과를 판정해야 한다.
  3. 턴, 예산, 도구 권한에 상한이 있어야 한다.
  4. 실패 결과와 실행 비용을 기록해야 한다.
  5. 사람이 다시 개입할 수 있는 실패 큐가 있어야 한다.

Claude Code 자동화도 일반적인 운영 시스템과 같다. 정상 실행보다 실패했을 때 멈추고, 기록하고, 다시 이어갈 수 있는 구조가 더 중요하다.

logo
이 블로그는 NextJS 14, Strapi를 이용해 만들었습니다
Copyright © 2026 김기찬
문의사항은 admin@devchanki.com 으로 주시면 감사 하겠습니다.

문의 보내기

남겨주면 블로그 주인에게 바로 전달돼요.

답장은 별도도 확인 후 연락 드려요.