콘텐츠로 이동

debug-walkthrough

다음은 claude --debug 출력에서 한 사용자 요청이 거치는 흐름을 단순화한 예시다 (실제 출력은 더 길다).

[debug] system_prompt: <12,400 tokens, 7 sections>
[debug] tools_available: Read, Write, Edit, Bash, Grep, Glob, WebFetch, TodoWrite, Task
[debug] user: "src/auth/ 모든 파일을 읽고 보안 취약점을 찾아줘"
[debug] -> messages.create
[debug] <- assistant: text("계획: Glob → Read → 분석")
tool_use(Glob, {pattern: "src/auth/**/*.ts"})
[debug] dispatch Glob -> ["src/auth/login.ts", "src/auth/jwt.ts", "src/auth/oauth.ts"]
[debug] -> messages.create
[debug] <- assistant: tool_use(Read, {file: "src/auth/login.ts"})
tool_use(Read, {file: "src/auth/jwt.ts"})
tool_use(Read, {file: "src/auth/oauth.ts"}) ← 병렬
[debug] dispatch Read x3 (parallel)
[debug] -> messages.create
[debug] <- assistant: text("취약점 3개 발견...")
[debug] stop_reason: end_turn

배울 점:

  • 한 사용자 메시지에 messages.create가 3번 호출됐다.
  • 두 번째 턴에서 Read병렬로 3개 발사했다 — 디스패처가 같은 응답 안의 여러 tool_use를 동시에 실행한다.
  • stop_reason: end_turn이 떴을 때만 사용자에게 제어가 돌아온다.

이 패턴이 본 파트 03 챕터(루프와 종료 조건)의 출발점이다.