jaysnote
4분

쉽게 배우는 Claude Code ⑫ claude -p (헤드리스 모드) — 스크립트·자동화에서 Claude 쓰기

대화형 화면 없이 '명령 한 번 → 결과 받기'로 동작하는 claude -p(헤드리스/print 모드)를, 셸 파이프·CI·자동화 예제와 함께 쉽게 풀어봅니다.

지금까지 우리는 Claude Code를 켜 놓고 마주 앉아 대화하듯 써 왔습니다. 그런데 가끔은 사람이 화면 앞에 앉아 있을 수 없는 상황이 있습니다. 예를 들어 CI 파이프라인이 한밤중에 돌아갈 때, 혹은 로그 파일이 쌓일 때마다 자동으로 요약을 받아 보고 싶을 때처럼요.

이럴 때 쓰는 게 claude -p, 헤드리스(headless) 모드입니다. 대화 화면을 띄우지 않고, 질문을 한 번 처리한 다음 결과만 출력하고 바로 종료합니다. 이번 편에서 그 사용법을 쉽게 정리해 보겠습니다.


한 줄로

claude -p "..."대화형 화면 없이, 질문을 한 번 처리하고 결과를 출력한 뒤 끝내는 비대화형(헤드리스) 모드입니다.

-p--print의 줄임말입니다. 셸 파이프(|)와 궁합이 좋아서, 스크립트·CI·자동화에 잘 맞습니다.


언제 쓰나

핵심은 “사람이 앉아서 대화하는 게 아니라, 명령 한 번 → 결과 받기를 자동화할 때”입니다. 몇 가지 예를 보겠습니다.

★ 예제 1 — 로그 파일을 파이프로 넘겨 원인 요약 받기

에러 로그를 그냥 사람이 읽으면 시간이 오래 걸리죠. 파일 내용을 파이프로 넘기면 한 줄 명령으로 원인 요약을 받을 수 있습니다.

cat error.log | claude -p "이 에러 원인 요약해줘"

여기에 슬랙으로 올리는 명령까지 붙이면, 로그가 생길 때마다 요약을 자동으로 채널에 올리는 스크립트가 됩니다.

★ 예제 2 — CI에서 변경된 파일 요약 자동 생성

PR이 올라올 때마다 변경 내용을 사람이 매번 정리하긴 번거롭습니다. CI 단계에서 변경 파일 목록(diff)을 넘겨 요약을 자동으로 만들어 둘 수 있습니다.

git diff --name-only main | claude -p "이번 변경에서 바뀐 파일들의 핵심을 요약해줘"

CI는 사람이 지켜보지 않는 환경이라, 화면을 띄우지 않는 헤드리스 모드가 딱 맞습니다.

★ 예제 3 — 여러 파일에 같은 작업을 반복문으로 적용

같은 종류의 변환을 파일 여러 개에 똑같이 적용해야 할 때, 셸 반복문과 함께 쓰면 편합니다.

for f in src/*.md; do
  cat "$f" | claude -p "이 문서의 첫 문단을 한 문장 요약으로 바꿔줘"
done

파일마다 사람이 일일이 명령을 입력하지 않아도, 한 번에 죽 돌릴 수 있습니다.


어떻게

기본형은 아주 단순합니다. 질문을 따옴표로 감싸 넘기면 됩니다.

claude -p "이 프로젝트의 README를 세 줄로 요약해줘"

표준 입력(stdin)으로 내용을 함께 넘기고 싶으면 파이프를 씁니다.

cat report.txt | claude -p "핵심만 불릿 3개로 정리해줘"

출력 형식 지정 — --output-format

스크립트에서 결과를 프로그램으로 다루려면, 출력 형식을 지정하는 게 좋습니다.

cat error.log | claude -p "원인을 요약해줘" --output-format json
설명언제
text사람이 읽기 좋은 일반 텍스트 (기본)그냥 결과만 보면 될 때
json기계가 파싱하기 좋은 JSON결과를 프로그램에서 다룰 때
stream-json이벤트를 JSON으로 스트리밍진행 과정을 실시간으로 받아야 할 때

json으로 받으면 jq 같은 도구로 필요한 값만 뽑아 쓰기 좋습니다. 길게 도는 작업의 진행 상황을 실시간으로 보고 싶다면 stream-json을 쓰면 됩니다.


팁 & 함정

  • 호출 사이에 맥락이 누적되지 않습니다. -p 모드는 호출 사이에 프롬프트 캐시가 유지되지 않아, 대화형처럼 앞 대화가 이어지지 않습니다. 매 호출이 독립적이라고 생각하면 됩니다. “방금 보여준 코드 말이야…” 같은 식으로 이어 말하면 통하지 않습니다.
  • 맥락을 이어가야 한다면 대화형 모드를 쓰거나, --continue와 조합해서 이전 대화를 이어가도록 하세요.
  • 자동화에는 json / stream-json을 권합니다. 사람 눈으로 읽을 게 아니라 프로그램이 결과를 다룰 거라면, 텍스트보다 구조화된 출력이 훨씬 안전합니다.
  • 질문은 따옴표로 명확히 감싸세요. 셸에서 공백이나 특수문자 때문에 명령이 엉키는 일을 줄일 수 있습니다.

한 장 정리

항목내용
무엇대화 화면 없이 한 번 처리하고 끝내는 비대화형(헤드리스) 모드
명령claude -p "..." (= claude --print)
기본 사용cat error.log | claude -p "이 에러 원인 요약해줘"
출력 형식--output-format <text|json|stream-json>
언제명령 한 번 → 결과 받기를 자동화할 때 (스크립트·CI)
주의호출마다 맥락 독립적. 이어가려면 --continue

다음 편: /mcp — 외부 도구(GitHub·DB 등) 연결하기.

관련 글

← 목록으로