| name | using-claude-p |
| description | Run Claude Code non-interactively with claude -p for headless automation, JSON parsing, SSH execution, or CLI flag troubleshooting. Use when requests mention `claude -p` or `๋น๋ํํ/headless claude`. Use using-codex-exec for Codex subprocesses. |
Claude Code ๋น๋ํํ ๋ชจ๋ (claude -p) ์ฌ์ฉ
์์ธ flagยทgotcha์ SSOT๋ flag-matrix.md์
gotchas.md์ด๋ฉฐ, ๋ณธ๋ฌธ์ ์ ํ ๊ธฐ์ค๊ณผ ์ฑ๊ณต ๊ณ์ฝ๋ง ์์ฝํ๋ค.
์์ฑ ๊ธฐ์ค
- ํ์ธ ๋ ์ง: 2026-07-10
- ํ์ธ ๋ฒ์ : Claude Code v2.1.206
- ์ฌ๊ฒ์ฆ:
claude --version && claude --help && claude -p --help
print ๋ชจ๋๋ workspace trust dialog๋ฅผ ์๋ตํ๊ณ invalid settings๋ฅผ ์กฐ์ฉํ ๋ฌด์ํ ์ ์๋ค
(2.1.206 help). ์๋ํ ์ ์๋ settings๋ฅผ ๋ณ๋ ๊ฒ์ฆํ๋ค.
๋ฒ์
| ํฌํจ | ์ ์ธ |
|---|
claude -p ๋น๋ํํ ์คํ | ๋ํํ TUI ์ฌ์ฉ๋ฒ |
--output-format json ํ์ฑ | Claude Code hooks/plugins ์ค์ |
| harness ์
ํํ
์คํธ (T1~T8) | Codex CLI ์คํ โ using-codex-exec |
| SSH ๊ฒฝ์ ํฌ๋ก์ค๋จธ์ ์คํ | Codex settings/skill projection (repo ์ ์ฑ
/๊ฒ์ฆ ์คํฌ๋ฆฝํธ ์ฐธ์กฐ) |
| ์จ๊ฒจ์ง ๋์ | Python/TS SDK (๋ณ๋ ์คํฌ ๋ถ๋ฆฌ ๋์) |
์ธ์
์ฒด์ด๋ (--resume) | |
์์ฌ๊ฒฐ์ ํธ๋ฆฌ
claude -p ์คํ์ด ํ์ํ๊ฐ?
โ
โโ ๋๊ตฌ ์คํ์ด ํ์ํ๊ฐ?
โ โโ YES
โ โ ๋๊ตฌ๋ฅผ ์ ํํ ํ์๊ฐ ์๋?
โ โ โโ YES โ --allowed-tools "Bash,Read" (stdin ํ์!)
โ โ โ โ ๏ธ --dangerously-skip-permissions์ ํจ๊ป ์ฐ๋ฉด ์ ํ ๋ฌดํจ
โ โ โโ NO โ --dangerously-skip-permissions ์ถ๊ฐ
โ โโ NO โ ๊ธฐ๋ณธ ์คํ (๊ถํ ํ๋๊ทธ ๋ถํ์)
โ
โโ ์ถ๋ ฅ์ ํ๋ก๊ทธ๋๋ฐ์ ์ผ๋ก ํ์ฑํ ํ์๊ฐ ์๋?
โ โโ YES โ --output-format json (top-level ์ด๋ฒคํธ ๋ฐฐ์ด, 2.1.206 ์ฑ๊ณต ๊ฒฝ๋ก ์ค์ธก)
โ โ ๋ฐฐ์ด/๊ฐ์ฒด๋ฅผ ์ ๊ทํํ ๋ค type=result ํ์
โ โ ๋๋ --output-format stream-json (JSONL; wire shape ์ฌ๊ฒ์ฆ ๋ฏธ์ํ)
โ โโ NO โ ๊ธฐ๋ณธ text ์ถ๋ ฅ
โ
โโ harness ์ธ๋ฒคํ ๋ฆฌ๋ฅผ ๊ฒ์ฆํ๊ณ ์ถ๋ค๋ฉด?
โ โโ --output-format json โ init ์ด๋ฒคํธ ํ์ฑ
โ โ references/harness-testing.md T1 ์ฐธ์กฐ
โ
โโ ์๊ฒฉ ๋จธ์ ์์ ์คํํด์ผ ํ๋ค๋ฉด?
โ โโ echo "prompt" | ssh host 'claude -p ...'
โ โ ๏ธ alias ์ฌ์ฉ ๋ถ๊ฐ, stdin pipe ํ์
โ โ references/patterns.md ํจํด 5 ์ฐธ์กฐ
โ
โโ ์ด์ ์ธ์
์ ์ด์ด๊ฐ์ผ ํ๋ค๋ฉด?
โ โโ --resume SESSION_ID
โ โ references/patterns.md ํจํด 4 ์ฐธ์กฐ
โ
โโ ๊ฒฐ๊ณผ๋ฅผ ํ์ผ์ ์ ์ฅํด์ผ ํ๋ค๋ฉด?
โโ shell redirect: > result.txt
โ ๏ธ --output-file / -o ํ๋๊ทธ ์กด์ฌํ์ง ์์
๋น ๋ฅธ ์ฐธ์กฐ
| ์ํฉ | ๋ช
๋ น |
|---|
| ๋จ์ ์ง์ | echo "prompt" | claude -p |
| ๋๊ตฌ ์คํ | echo "prompt" | claude -p --dangerously-skip-permissions |
| harness ์ธ๋ฒคํ ๋ฆฌ | echo "ok" | claude -p --output-format json โ init ํ์ฑ |
| ์ธ์
์ด์ด๊ฐ๊ธฐ | echo "prompt" | claude -p --resume SESSION_ID |
| ์๊ฒฉ ์คํ | echo "prompt" | ssh host 'claude -p ...' |
| ๊ฒฐ๊ณผ ์ ์ฅ | echo "prompt" | claude -p > result.txt |
| ๋ชจ๋ธ ์ ํ | echo "prompt" | claude -p --model sonnet |
| ์์คํ
ํ๋กฌํํธ ์ถ๊ฐ | echo "prompt" | claude -p --append-system-prompt "..." |
ํต์ฌ Gotchas
<values...> variadic flag ๋ค ์ธ๋ผ์ธ ํ๋กฌํํธ๊ฐ flag ๊ฐ์ผ๋ก ์๋น๋จ: --allowed-tools, --disallowed-tools ๋ฑ์ stdin์ผ๋ก prompt ์ ๋ฌ
--max-turns 1์ ๋๊ตฌ ์คํ ๋ถ๊ฐ โ ์ต์ 2ํด ํ์ (v2.1.202 ์ค์ธก; 2.1.206 ์ฌ๊ฒ์ฆ ๋ฏธ์ํ โ help์๋ ์์ง๋ง parser ์์ฉ ํ์ธ)
- exit code๋
subtype=success ํ๋๋ง์ผ๋ก ์ฑ๊ณต ํ์ ๊ธ์ง: exit + subtype/is_error + ๊ธฐ๋ ์ฐ์ถ๋ฌผ + ์ง์ฒ delta ํ์ธ
--cwd, --output-file ํ๋๊ทธ ์์: cd dir && claude -p, shell redirect > file ์ฌ์ฉ
- SSH alias ๋ฏธ๋ก๋: non-login shell์์
c alias ์ฌ์ฉ ๋ถ๊ฐ โ claude full path ํ์
--append-system-prompt๋ append โ ๊ธฐ์กด ์์คํ
ํ๋กฌํํธ๋ฅผ overrideํ์ง ๋ชปํจ (v2.1.202 ์ค์ธก; 2.1.206 ์ฌ๊ฒ์ฆ ๋ฏธ์ํ)
--tools ""๋ก ๋นํธ์ธ์ ๋นํ์ฑํํด๋ MCP๋ ๋จ์ โ MCP ๋นํ์ฑํ๋ ๋ณ๋ ์กฐ์น ํ์ (v2.1.202 ์ค์ธก; 2.1.206 ์ฌ๊ฒ์ฆ ๋ฏธ์ํ)
- ํ๋ฌ๊ทธ์ธ ์คํฌ ์ธ์์ ์ค์น ์์ ์ ๊ณ ์ โ ์บ์ ์์ ยทsymlinkยท๋ธ๋์น ๋ณ๊ฒฝ ๋์ stdin ์ฃผ์
๋๋ ์ฌ์ค์น (v2.1.202 ์ค์ธก; 2.1.206 ์ฌ๊ฒ์ฆ ๋ฏธ์ํ)
- ์ปค์คํ
ํ๊ฒฝ๋ณ์๋ ๋ช
์์ ์ผ๋ก ์ ๋ฌ โ
.env๋ ์๋ ๋ก๋๋์ง ์์ผ๋ฏ๋ก VAR=val claude -p ์ฌ์ฉ (v2.1.202 ์ค์ธก; 2.1.206 ์ฌ๊ฒ์ฆ ๋ฏธ์ํ)
- ๋์ฉ๋ stdin์ ์ ์ ๋์ โ ๊ทน๋จ์ ์ํ์ ๋ฏธํ์ธํ๋ฏ๋ก ํ๋ก๋์
์์๋ ์ฒญํน ๋ณํ (v2.1.202 ์ค์ธก; 2.1.206 ์ฌ๊ฒ์ฆ ๋ฏธ์ํ)
์ ์ฒด ๋ชฉ๋ก: references/gotchas.md
์
ธ transport ๊ณ์ฝ
- stdout, stderr, ์
๋ฌด ์ฐ์ถ๋ฌผ์ ๋ถ๋ฆฌ ๋ณด๊ดํ๋ค. JSON parser ์
2>&1์ stderr๋ฅผ ์์ด ํ์ฑ์ ๊นจ๋จ๋ฆฐ๋ค.
- pipeline์
set -o pipefail์ ์ฌ์ฉํ๋ค. zsh์์ Claude ์์ฒด exit๊ฐ ํ์ํ๋ฉด pipeline ์งํ
claude_rc=$pipestatus[2]๋ก ๋ณด์กดํ๋ค.
| head, | tail, ๋ค์ด์ ; echo $?๋ ์๋ exit๋ฅผ ๊ฐ๋ฆด ์ ์์ผ๋ฏ๋ก ํ์ ๊ฒฝ๋ก์์ ์ ์ธํ๋ค.
์ฑ๊ณต ๊ณ์ฝ
claude -p --output-format json ์๋ฃ๋ ๋ค์ ์กฐ๊ฑด์ ๋ชจ๋ ๋ง์กฑํด์ผ ํ๋ค.
- process exit๊ฐ 0์ด๋ค.
type=result ์ด๋ฒคํธ๊ฐ ์๊ณ subtype=success, is_error=false๋ค.
- ํ์ผ ์์ฑ์ ์๊ตฌํ ์์
์
test -s "$RESULT"๋ฅผ ํต๊ณผํ๊ณ ๊ธฐ๋ ์๋ฃ ํ์์ด ์๋ค.
- ๋ฐ๋ณต pass๋ ์ง์ ๊ฒฐ๊ณผ ๋๋น ์ findingยท์์ ยทํ์ ๊ฐ์ ์ง์ฒ delta๊ฐ ์๋ค.
2.1.206 ์ฑ๊ณต ๊ฒฝ๋ก๋ 4-event ๋ฐฐ์ด๊ณผ result/success, is_error:false, exit 0์ ๋๋ค. ๋ฐ๋๋ก
auth ์คํจ ๊ฒฝ๋ก๋ subtype:success, is_error:true, exit 1๋ ๊ฐ๋ฅํ๋ค. ์ฐ์ถ๋ฌผ 0๊ฐ์ธ๋ฐ success์ธ
์ค์ ์ฌ๋ก๊ฐ ์์ผ๋ฏ๋ก ์ง์ฒ ์๋ pass๊ฐ ์ฐ์๋๋ฉด circuit breaker๋ก ์ค๋จํ๋ค. child์๊ฒ ๊ฐ์
collector/fan-out์ ๋ค์ ์์ฑ์ํค์ง ์๋๋ค.
SSH ํฌ๋ก์ค๋จธ์ ์์ฝ
echo "hostname ์คํ ๊ฒฐ๊ณผ๋ง ์ถ๋ ฅํด" | ssh minipc 'claude -p --dangerously-skip-permissions'
ssh minipc 'zsh -li -c "c -p \"...\""'
- SSH non-login shell์์ alias ๋ฏธ๋ก๋ โ
claude full path ํ์
- 3์ค ์ค์ฒฉ quote ์ง์ฅ โ ํ์ผ ๊ธฐ๋ฐ stdin pipe๊ฐ ์ ์ผํ ์์ ํจํด
- ๋ฌด์ถ๋ ฅ ์ฝ 10๋ถ ๋ค ์๋ฃ๋ ์ค์ธก์ด ์๋ค. ๋ฌด์ถ๋ ฅ๋ง์ผ๋ก ์ค๋จ, ํ๋ก์ธ์ค ์์กด๋ง์ผ๋ก ์ ์์ด๋ผ ํ์ ํ์ง ์๋๋ค.
- outer timeout๊ณผ
ServerAliveInterval์ ์ ์ฉํ๊ณ ์ข
๋ฃ ๋ค test -s๋ก ์ฐ์ถ๋ฌผ์ ํ์ธํ๋ค.
์์ธ: references/patterns.md ํจํด 5
Harness ์
ํํ
์คํธ ์์ฝ
--output-format json์ init ์ด๋ฒคํธ๋ก harness ๊ตฌ์ฑ์์๋ฅผ ์๋ ๊ฒ์ฆํ๋ค.
| ํ
์คํธ | ๋ชฉ์ | ๋น์ฉ |
|---|
| T1 | init ์ธ๋ฒคํ ๋ฆฌ (skills/tools/MCP/plugins ์) | ~$0.07 |
| T2 | ์คํฌ ํธ๋ฆฌ๊ฑฐ spot check | ~$0 (T1 ์ฌ์ฌ์ฉ) |
| T3 | hooks ํ์ผ ์กด์ฌ/์คํ ๊ฐ๋ฅ ์ฌ๋ถ | $0 |
| T4 | MCP ์๋ฒ init ๋ฑ๋ก ํ์ธ | ~$0 (T1 ์ฌ์ฌ์ฉ) |
| T5 | ๊ถํ ๋ชจ๋ธ (์ฐจ๋จ/ํ์ฉ) | ~$0.14 |
| T6 | SSH ํฌ๋ก์ค๋จธ์ ์คํ | ~$0.07 |
| T7 | ์ธ์
์ฒด์ด๋ (--resume) | ~$0.14 |
| T8 | ๋์ ์คํ ์์ ์ฑ | ~$0.14 |
์์ธ ์ฝ๋ ๋ฐ ํ์ ๋ก์ง: references/harness-testing.md
๋น์ฉ ์์น๋ ์ฌ๊ฒ์ฆ ๋ฏธ์ํ (v2.1.202 ๊ธฐ์ค ์์ ์ ์ง).
ํ์ง ๋ง์์ผ ํ ํจํด
| ๊ธ์ง ํจํด | ๋ฐ์ ์๋ฌ | ์ฌ๋ฐ๋ฅธ ๋์ |
|---|
--allowed-tools "Bash" "prompt" | ํ๋กฌํํธ๊ฐ ๋๊ตฌ ์ด๋ฆ์ผ๋ก ํ์ฑ | stdin pipe ์ฌ์ฉ |
--dangerously-skip-permissions + --allowed-tools | allowlist ๊ตฌ์กฐ์ ๋ฌดํจ | ์ ํ ํ์: allowed-tools + stdin / ์ ํ ๋ถํ์: skip ๋จ๋
|
--max-turns 1 + ๋๊ตฌ ์คํ ๊ธฐ๋ | Reached max turns | --max-turns 2 ์ด์ (v2.1.202 ์ค์ธก) |
exit ๋๋ subtype=success ํ๋๋ก ์ฑ๊ณต ํ์ | ๋ฌด์ฐ์ถ๋ฌผยทauth ์คํจ ์คํ | ์ฑ๊ณต ๊ณ์ฝ ๋ค ์กฐ๊ฑด ํ์ธ |
JSON parser ์ 2>&1 | stderr ํผ์
์ผ๋ก ํ์ฑ ์คํจ | stdout/stderr/์ฐ์ถ๋ฌผ ๋ถ๋ฆฌ |
ํ์ pipeline ๋์ head/tail/; echo $? | ์ exit ์ํ | pipefail๊ณผ ์ฆ์ exit ๋ณด์กด |
SSH์์ c -p alias | command not found | claude -p full path |
| 3์ค ์ค์ฒฉ quote (SSH) | unmatched quote | stdin pipe ํจํด |
--verbose/--debug๋ก ๋๋ฒ๊ทธ | stderr ์ถ๋ ฅ ์์ | --debug-file ์ฌ์ฉ |
| ํ๋ฌ๊ทธ์ธ ์บ์ ๋๋ ํ ๋ฆฌ ์๋ ์์ | ์ธ์ ์ ๋จ (์ค์น ์์ ์ธ๋ฑ์ฑ) | SKILL.md stdin ์ฃผ์
(ํจํด 9) |
| child๊ฐ ๊ฐ์ collector๋ฅผ ๋ค์ ์์ฑ | ๋ฌดํ ์๊ธฐ์ฆ์ | ์ค์ผ์คํธ๋ ์ด์
์ ๋ถ๋ชจ 1๊ณ์ธต์์๋ง ์ํ |
์ฐธ์กฐ
๋ฌธ์์ CLI ๋์์ด ๋ค๋ฅผ ๋๋ CLAUDE.md์ "์คํฌ ๋ฌธ์ ๋ถ์ผ์น ์ ํ๋ ์์น"์ ๋ฐ๋ฅธ๋ค.
help๋ ๊ณต๊ฐ surface์ SSOT๋ค. help์ ์๋ hidden flag์ ์ ๊ฑฐ ์ฌ๋ถ๋ ์คํ smoke๋ก๋ง ํ์ ํ๋ค.