본문으로 건너뛰기

© 2026 Molayo

Qiita헤드라인2026. 06. 23. 12:16

Claude Code가 계속 멈췄던 이유 — Opus 4.8의 malformed 버그를 GitHub에서 특정하기까지

요약

Claude Code 사용 중 Opus 4.8 모델에서 발생하는 'malformed' 에러의 원인이 모델 자체의 도구 호출(tool call) 마크업 버그임을 규명했습니다. 특정 조건에서 네임스페이스 접두사가 누락되어 파싱 오류가 발생하며, 모델 전환을 통해 해결 가능합니다.

핵심 포인트

  • Opus 4.8 모델의 도구 호출 마크업 내 네임스페이스 누락 버그 확인
  • 에러 발생 시 /model 명령어로 Sonnet 4.6 등으로 전환하여 즉시 해결 가능
  • 도구 호출 전 서문(preamble)을 작성하지 않는 것이 발생 빈도를 줄이는 방법
  • 컨텍스트 압축(/compact) 이후나 복잡한 Bash 명령 사용 시 발생 가능성 높음

Opus 4.8 (claude-opus-4-8) 고유의 버그. 도구 호출 (tool call)의 내부 마크업에서 네임스페이스 접두사 (namespace prefix)가 누락되어, 파서 (parser)가 이를 거부하며 대화가 중단됨. GitHub에 여러 개의 issue가 올라와 있으며, 모델을 Sonnet 4.6으로 전환하면 즉시 해결됨.

상태대처
Claude Code가 「malformed」 에러로 멈춤/model로 Sonnet 4.6으로 전환
4.8을 유지하면서 빈도를 줄이고 싶음도구 호출 전의 서문(preamble)을 작성하지 않음
환경이나 설정 문제인지 의심됨그렇지 않음. 모델 레벨의 버그

나의 환경:

  • Claude Code (CLI), macOS
  • /compact로 압축한 긴 세션 - 복잡한 Bash 명령 (파이프, 정규 표현식, 일본어 혼재)을 다용

증상은 「도구 호출을 실행하려는 순간 대화가 굳어버리며 에러 메시지가 나오는 것」이다. 한 세션에서 여러 번 반복해서 발생했다.

이전 작업에서 큰 HTML 파일을 생성했었기에, 「컨텍스트가 너무 무거워졌다」고 의심했다. → 오답. 작은 명령에서도 동일한 에러가 발생했다.

글로벌 설정에서 커맨드 래퍼 (command wrapper)를 사용하고 있어, 「훅 (hook)이 간섭하고 있다」고 의심했다. → 오답. 훅은 명령 출력 후에 동작하므로, 도구 호출 전의 붕괴와는 무관하다.

다른 문제 (sleep 명령을 전경 실행하면 하네스 (harness)가 굳는 현상)와 혼동했다. → 오답. 별개의 현상이다. sleep 없이도 발생하고 있었다.

/compact 직후에도 발생했으므로 부정.

작은 echo 명령만 실행하려고 했을 때도 동일한 에러가 발생했다. 이로써 「환경 측면」의 설명이 모두 무너졌다.

에러 형식:

Your tool call was malformed and could not be parsed.

내부적으로 무슨 일이 일어나고 있는가: Opus 4.8이 stop_reason=tool_use를 반환함에도 불구하고, 응답의 content 배열에 도구 호출 블록이 들어있지 않은 경우가 있다. 파서가 이를 거부하여 텍스트 출력으로 처리되고, 대화가 중단된다.

정상적이라면 내부 마크업에 존재해야 할 네임스페이스 접두사가 간헐적으로 누락된다.

해외 포럼을 포함하여 조사한 결과, 여러 개의 독립적인 보고를 발견했다.

Issue #67295 (나의 상황과 완전히 일치): 「/compact 완료된 긴 세션에서 malformed stall이 다수 발생, claude-opus-4-8, macOS」

Issue #68510: 「Opus 4.8에서 빈번하게 malformed 에러 발생. 회피책: 4.7로 전환」

Issue #63604: 「Opus 4.8은 malformed tool_use를 반복함. 4.7에서는 재현되지 않음」

Issue #66400: 「도구 호출이 실패하고, 마크업이 채팅 문자로 묘사됨」

여러 사용자가 「4.7 또는 Sonnet으로 전환했더니 멈추지 않았다」고 확인하고 있다.

위의 GitHub issue는 내가 실제로 검색하여 확인한 1차 정보이다. Anthropic의 공식 발표가 아니라, 사용자 보고로서 받아들여 주길 바란다.

보고를 종합해 보면, 다음 조건이 겹칠 때 빈번하게 발생하기 쉽다:

  • /compact (압축으로 컨텍스트 구조가 변함) 이후의 긴 세션
  • 도구 호출 전에 서문(preamble)을 작성함 ("그럼 실행하겠습니다" 등의 설명을 한 뒤 도구를 호출하는 패턴)
  • 복잡한 Bash (파이프, 이스케이프, 일본어 혼재)

반대로 말하면, 단순한 세션이나 새로운 세션 시작 직후에는 잘 나타나지 않는다.

Claude Code의 입력창에서 /model을 입력하고, Sonnet 4.6 (또는 Opus 4.7)을 선택한다. 이렇게 하면 문제는 발생하지 않는다.

Sonnet 4.6은 파일 편집, 코드 생성, Bash 실행과 같은 일상적인 코딩 작업에 충분한 품질을 가지고 있다. Opus 4.8의 정지 문제로 인한 비용이 더 크다.

4.8을 계속 사용하는 경우, 「도구 호출 전에 설명문을 작성하는」 패턴을 피하면 빈도가 줄어든다. 다만 완전히 근절되지는 않는다.

/compact 이후에 발생하기 쉬우므로, 무거운 작업을 하기 전에 새로운 세션을 연다.

버그를 조사하는 동안, 나는 처음에는 "내 환경 문제"라고만 생각했다. 설정을 의심하고, 훅 (hook)을 의심하고, 컨텍스트 크기 (context size)를 의심했다.

하지만 실제로는 **모델 레벨의 알려진 버그 (known bug)**였다. GitHub를 찾아보니 5분 만에 알 수 있었다.

AI 도구를 비즈니스나 업무에 도입하고 있다면, 문제가 "나의 설정 실수"인지 "도구 측의 버그"인지를 구분하는 것이 중요하다. 가장 빠른 구분 방법은 다음과 같다:

  • 최소한의 조작으로 재현되는지 시도하기 (이번에는 echo만으로 확인할 수 있었다)
  • 다른 환경이나 설정에서 시도하기 (모델을 전환하니 사라졌다)
  • 공개된 이슈 (issue) 검색하기 (거의 확실하게 앞서 경험한 사람이 있다)

이 순서대로 움직인다면 1시간 이내에 근본 원인 (root cause)에 도달할 수 있다.

  • Claude Code에서 멈추는 현상이 나타나면 /model로 Sonnet 4.6으로 전환한다
  • 긴 세션을 시작하기 전에 /compact → 새 세션 시작을 습관화한다
  • 문제가 발생하면 "나의 설정"보다 먼저 "도구의 알려진 버그"를 의심한다

AI 도구를 업무에 도입하는 설계에 관한 실험 로그를 작성하고 있습니다.

AI 자동 생성 콘텐츠

본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0