포스트

Claude Code + Codex CLI 에이전트로 “터미널에서 끝나는” 자동화 코딩 워크플로 만들기 (2026년 5월 기준)

Claude Code + Codex CLI 에이전트로 “터미널에서 끝나는” 자동화 코딩 워크플로 만들기 (2026년 5월 기준)

들어가며

CLI 기반 AI 코딩 에이전트가 진짜로 가치가 나는 지점은 “IDE에서 한 번 질문하고 끝”이 아니라, 반복되는 엔지니어링 업무를 파이프라인/스크립트로 굳히는 순간입니다. 예를 들면:

  • PR 들어올 때마다: 변경 영향 범위 분석 → 테스트 보강 → 릴리즈 노트 초안 생성
  • 매일/매주: 의존성 업데이트 → 빌드/테스트 → 실패 원인 triage → 이슈 생성
  • 장애 대응: 로그/메트릭 요약 → 재현 시나리오 구성 → 수정 PR 초안

2026년 5월 시점에서 흥미로운 변화는, Claude Code가 “대화형 CLI”를 넘어 “Headless/Agent SDK(= claude -p)”로 자동화 워크플로에 더 직접 들어온다는 점입니다. 특히 --bare, --allowedTools, --output-format, --bg 같은 플래그 조합이 “CI에서 안정적으로 굴릴 수 있는 에이전트” 쪽으로 기능을 정리해주고 있어요. (code.claude.com)

반대로, 다음 상황이면 당장 도입을 말립니다.

  • 요구사항이 자주 바뀌는 핵심 비즈니스 로직을 에이전트가 마음대로 수정하게 두는 경우(회귀/규정 위반 비용이 큼)
  • 권한/보안 경계가 불명확한 저장소(토큰/키가 섞여 있고, 어떤 커맨드가 실행될지 통제 불가)
  • “한 번에 대규모 리팩터링”처럼 세션이 길어지고 산출물이 커지는 작업(길어질수록 instruction adherence가 떨어진다는 실험 결과도 있음) (arxiv.org)

🔧 핵심 개념

1) Claude Code의 “CLI 에이전트 루프”를 자동화로 끌어오는 방법: claude -p(Headless)

Claude Code 문서에서 명시적으로, Agent SDK가 Claude Code를 구동하는 동일한 도구/agent loop/context management를 제공한다고 설명합니다. 즉, 대화형 CLI에서 하던 “읽기→수정→커맨드 실행→검증” 루프를 비대화형 실행으로 가져오는 게 핵심입니다. (code.claude.com)

  • claude -p "..." : non-interactive(출력만 받고 끝)
  • --allowedTools "Read,Edit,Bash(...)" : “허용된 행동만” 자동 승인(중요)
  • --output-format : 구조화 출력(파이프라인에 붙이기 좋음)
  • --continue : 동일 디렉터리 컨텍스트에서 대화 이어가기
  • --bg : background agent로 돌리고 세션 ID를 받아 추적 (code.claude.com)

여기서 중요한 관점은: CLI 에이전트를 ‘똑똑한 사람’으로 쓰지 말고 ‘권한이 제한된 자동화 작업자’로 써야 CI/CD에서 사고가 안 납니다.

2) 재현성과 속도를 만드는 --bare

자동화에서 제일 자주 터지는 문제가 “내 노트북에서는 됐는데 CI에서 다르게 동작”입니다. Claude Code는 기본적으로 훅/스킬/플러그인/MCP 서버/메모리/CLAUDE.md 등 프로젝트+사용자 환경을 읽어 컨텍스트를 구성하는데, 이게 머신마다 달라질 수 있는 요인입니다.

--bare는 그걸 통째로 스킵해서 항상 같은 시작 조건으로 만듭니다(대신 훅/MCP/메모리/CLAUDE.md 기반의 편의 기능도 꺼짐). CI에는 보통 이 모드가 더 맞습니다. (code.claude.com)

3) “Claude Code vs OpenAI Codex CLI”를 같이 보는 이유

요구 주제에 “Claude Code + Codex CLI 에이전트 활용”이 같이 들어간 건, 2026년에는 많은 팀이 단일 벤더 에이전트가 아니라 “오케스트레이터 + 전문 에이전트” 형태로 갑니다.

  • Codex CLI: 로컬 터미널에서 읽고/고치고/실행하는 OpenAI 코딩 에이전트. “오픈소스, Rust 기반”을 강점으로 전면에 내세웁니다. (codex-console.com)
  • Claude Code(Agent SDK 포함): claude -p, --bare, --bg 같은 자동화 지향 플래그가 정리되어 있고, “permission 통제”를 워크플로 설계의 중심에 둡니다. (code.claude.com)

실무에서는 “PR 리뷰/테스트 보강은 Claude Code”, “특정 리포의 반복 수정은 Codex CLI”처럼 작업 특성에 맞춰 붙이는 방식이 점점 자연스러워지고 있습니다(특히 병렬 에이전트 운영이 일반화되는 흐름). (code.claude.com)


💻 실전 코드

아래는 “CI에서 PR 단위로 변경 파일 기반 테스트 보강 + 빠른 안전 리뷰”를 돌리는 현실적인 예시입니다.

전제:

  • repo는 Node/TypeScript 모노레포(예: apps/api, packages/shared)
  • PR에서 바뀐 파일을 기준으로 영향 범위를 요약하고,
  • 테스트가 약한 부분만 추가 테스트를 생성/수정하고,
  • 마지막에 git diff를 사람이 리뷰할 수 있게 만든다.

1) 초기 셋업: 권한/재현성 우선 CLI 래퍼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/usr/bin/env bash
set -euo pipefail

# scripts/ai/claude_pr_guard.sh
# 목적: PR에서 변경된 영역에 대해 테스트 보강 + 안전 리뷰를 "권한 제한" 하에 수행

: "${ANTHROPIC_API_KEY:?ANTHROPIC_API_KEY is required}"

ROOT="$(git rev-parse --show-toplevel)"
cd "$ROOT"

BASE_REF="${1:-origin/main}"

CHANGED_FILES=$(git diff --name-only "$BASE_REF"...HEAD | tr '\n' ' ')
if [[ -z "${CHANGED_FILES// }" ]]; then
  echo "No changed files."
  exit 0
fi

echo "Changed files: $CHANGED_FILES"

# (핵심) bare 모드로 환경 의존성을 제거하고,
# allowedTools로 실행 커맨드를 최소화해 "자동화 사고"를 줄인다.
claude --bare -p \
  --allowedTools "Read,Edit,Bash(git diff *),Bash(git status *),Bash(npm test *),Bash(pnpm test *),Bash(bun test *),Bash(node *),Bash(npm run test *),Bash(pnpm run test *)" \
  --exclude-dynamic-system-prompt-sections \
  "You are a CI coding agent.
Repository: $ROOT
Base ref: $BASE_REF
Changed files: $CHANGED_FILES

Task:
1) Inspect diffs (git diff) and identify the highest-risk changes.
2) Add/modify tests ONLY where coverage is missing or regression risk is high.
3) Run the smallest relevant test command (prefer targeted tests).
4) Do not refactor unrelated code.
5) Output: summarize what you changed and why, and list the exact commands you ran."

예상 출력(요지):

  • 변경 위험 요약(예: auth 로직 변경, edge case 누락)
  • 수정된 테스트 파일 목록
  • 실행한 테스트 커맨드(npm/pnpm/bun 중 1~2개)
  • 남은 리스크(“통합 테스트 환경 없어서 여기까지만 확인”)

여기서 포인트는 “변경 파일만 주고 agent가 repo 전체를 방황하지 않게” 만드는 겁니다. 또한 --bare로 훅/MCP/메모리 영향 제거, --exclude-dynamic-system-prompt-sections로 멀티 유저/멀티 머신에서 프롬프트 캐시 재사용성을 높여 비용/지연을 줄이는 방향입니다. (code.claude.com)

2) 확장: 백그라운드 에이전트로 병렬 실행(긴 작업 분리)

테스트 생성은 짧게 끝나지만, “플레이키 테스트 조사” 같은 건 오래 걸립니다. 이때 --bg로 세션을 분리하면 CI가 타임아웃에 덜 취약해집니다. (code.claude.com)

1
2
3
4
5
6
7
8
9
10
11
12
13
# scripts/ai/claude_flaky_triage.sh
#!/usr/bin/env bash
set -euo pipefail
: "${ANTHROPIC_API_KEY:?}"

cd "$(git rev-parse --show-toplevel)"

claude --bare --bg \
  --allowedTools "Read,Bash(git log *),Bash(git diff *),Bash(pnpm test *),Bash(npm test *),Bash(bun test *)" \
  "Investigate the flaky test failures in CI.
- Identify the most likely root cause
- Propose a minimal fix OR a quarantine strategy
- Provide reproduction steps and commands"

출력으로 세션 ID/관리 커맨드가 나오고, 별도 잡/로컬에서 추적하는 식으로 운영할 수 있습니다. (code.claude.com)

3) (선택) Codex CLI를 “보조 작업자”로 붙이는 패턴

Codex CLI는 설치/실행 플로우가 단순하고(로그인 후 codex 실행), 로컬에서 빠르게 반복 수정하는 작업에 붙이기 좋습니다. (codex-console.com)

1
2
3
4
5
# 예: 동일 변경사항을 다른 에이전트로 교차검증(“리뷰 전용”)
codex <<'EOF'
Review the current git diff. Focus on security and backward compatibility.
Do not suggest large refactors. Output a checklist of risks.
EOF

실무적으로는 한 에이전트가 만든 diff를 다른 에이전트가 “리뷰 전용”으로 재검증하는 방식이 사고를 많이 줄여줍니다(특히 권한을 분리할수록).


⚡ 실전 팁 & 함정

Best Practice 1) --allowedTools는 “화이트리스트 최소화”가 정답

자동화에서 가장 큰 리스크는 “에이전트가 불필요한 커맨드를 실행”하는 겁니다. Bash(*) 같은 광범위 허용은 금지하고, 위 예시처럼 허용할 커맨드 패턴을 좁혀야 합니다. (code.claude.com)

Best Practice 2) CI는 --bare, 로컬은 컨텍스트 풀옵션(필요 시)

로컬 개발에서는 CLAUDE.md/훅/스킬/MCP가 생산성을 올리지만, CI에서는 변동 요인입니다. CI는 --bare로 고정하고, 로컬은 “팀 표준 훅/스킬”만 제한적으로 쓰는 식으로 경계를 나누세요. (code.claude.com)

Best Practice 3) 긴 세션/큰 산출물은 쪼개라(품질/순응도 이슈)

세션이 길어지고 한 번에 생성하는 코드 단위가 늘수록 instruction adherence가 떨어질 수 있다는 보고가 있습니다. 큰 리팩터링을 “한 방에” 시키기보다,

  • (1) 영향 분석
  • (2) 테스트 보강
  • (3) 최소 수정 처럼 단계별로 끊고 사람 리뷰 포인트를 박아두는 게 안전합니다. (arxiv.org)

흔한 함정) “편해 보이는 자동 권한 스킵”에 의존

--dangerously-skip-permissions 류는 편하지만, 자동화/공유 러너 환경에서 사고 가능성이 큽니다. 권한 스킵이 필요하면 오히려 “무슨 툴을 왜 허용했는지”를 문서화하고 --allowedTools로 통제하는 쪽이 운영 친화적입니다. (code.claude.com)

비용/성능/안정성 트레이드오프

  • 비용: -p로 자주 호출하면 호출량이 늘어 월 비용이 튈 수 있음. 게다가 Claude Code 문서에 따르면 2026-06-15부터 구독 플랜에서 Agent SDK/claude -p 사용이 별도 월간 Agent SDK credit을 사용합니다(인터랙티브와 분리). 자동화를 크게 붙이려면 이 날짜를 기준으로 비용 계획을 다시 잡아야 합니다. (code.claude.com)
  • 성능: --bare는 스타트업 시간을 줄이고 재현성을 올리지만, 프로젝트별 컨텍스트(스킬/MCP/메모리)를 못 써서 “한 번에 똑똑하게”는 덜할 수 있음.
  • 안정성: 병렬(--bg)은 처리량을 올리지만, 결과 동기화/세션 관리(세션 ID 추적, 실패 재시도 설계)가 필요합니다.

🚀 마무리

핵심은 “Claude Code/Codex CLI를 잘 쓰는 법”이 아니라, 내 워크플로에서 ‘에이전트가 맡아도 되는 일’을 권한/재현성/검증 관점으로 재분배하는 겁니다.

도입 판단 기준(현실 체크리스트):

  • CI에서 재현 가능하게 돌릴 수 있는가? (--bare, 입력/출력 고정)
  • 에이전트가 실행할 수 있는 행동이 화이트리스트로 통제되는가? (--allowedTools)
  • 결과물이 항상 diff로 남고, 사람이 승인할 수 있는가?
  • 세션이 길어지기 쉬운 작업은 분할되어 있는가? (품질/순응도 저하 방지)

다음 학습 추천:

  • Claude Code Agent SDK(특히 headless 운용과 CI 연동) 문서와 CLI reference를 정독하고, 팀 표준 “allowedTools 정책”부터 합의하세요. (code.claude.com)
  • Codex CLI는 “오픈소스/로컬 반복 수정” 강점을 살려, Claude Code와 교차 리뷰/교차 실행 구조로 붙이면 실무 안정성이 좋아집니다. (codex-console.com)
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.