본문으로 건너뛰기

© 2026 Molayo

Qiita헤드라인2026. 06. 03. 10:22

Claude Code에서 병렬 도구 호출이 「Cancelled: parallel tool call … errored」와 함께 연쇄적으로

요약

Claude Code에서 병렬 도구 호출 중 하나가 실패하면 나머지 작업까지 모두 중단되는 연쇄 오류 현상이 보고되었습니다. 이는 독립적인 작업들을 하나의 묶음으로 처리하는 구조적 문제로, 사용자는 묶음 크기를 제한하거나 특정 명령어를 순차 처리하는 방식으로 회피할 수 있습니다.

핵심 포인트

  • 병렬 도구 호출 중 단일 실패 시 전체 작업이 Cancelled 상태로 중단됨
  • git, curl, pkill 등 정상적인 비제로 반환이 오류로 오인되어 발생
  • CLAUDE.md를 통해 병렬 묶음 크기를 3~5개로 제한 권장
  • 오류 가능성이 높은 명령어는 병렬 대신 순차적으로 실행하여 비용 낭비 방지

2026년 6월 초부터 Claude Code에서 병렬로 실행한 도구 호출이, 단 하나의 작은 실패를 계기로 통째로 중단되는 현상이 보고되고 있습니다. Cancelled: parallel tool call ... errored와 같은 표시가 연발되며, 본래는 독립적이어야 할 읽기나 편집 작업까지 일제히 휘말려 중단됩니다.

이 기사는 무엇이 일어나고 있는지, 왜 발생하는지, 그리고 공식 수정(Official Fix)을 기다리는 동안 사용자가 할 수 있는 회피 방법을 정리합니다. 실제로 관측된 이슈 보고(Issue Report)를 근거로 작성되었습니다.

  • 병렬로 던진 여러 도구 호출 중 하나가 실패(비제로 종료)하면, 나머지도 전부 Cancelled 상태가 된다. - 표시가 「사용자가 중단한 경우」와 구분이 되지 않는다 (이슈 #64047).
  • 긴 코딩 세션에서 10개에서 20개 정도의 읽기 또는 탐색 묶음이 일제히 날아간다 (이슈 #64059).
  • 게다가, Opus 4.8에서는 병렬 태스크가 끝나기 전에 「결과는 이랬습니다」라고 먼저 단정 짓는, 즉 완료 전의 날조(Hallucination)가 섞인다는 보고도 있습니다 (이슈 #63884).

핵심 이슈는 #63881, #63576, #64047이며, 일제 중단 동작 자체에 대한 오래된 정리는 #22264입니다. 모두 집필 시점 기준으로 미해결 상태입니다.

현재의 Claude Code는 병렬 도구 호출을 「하나의 묶음 거래」로 취급하고 있습니다. 묶음 안의 한 건이 실패하면 나머지 작업도 되돌리며 중단하는 구조입니다.

하지만 코딩 작업에서 병렬로 던지는 것의 대부분은 서로 독립적인 읽기나 탐색입니다. 한 건의 실패가 다른 작업에 파급될 이유는 없습니다. 그럼에도 불구하고 「한 건이라도 실패하면 전부 그만둔다」라는, 실제 현장의 실패 양상과 맞지 않는 구조로 되어 있는 것이 원인입니다.

특히 휘말리기 쉬운 것은 실패가 「이상 상황」이 아니라 「예상 범위 내」인 호출입니다. 자주 발생하는 세 가지 트리거는 다음과 같습니다.

  • git의 무효한 리비전 지정 (예: 존재하지 않는 범위의 참조)
  • curl의 예상 범위 내 404 (생존 확인 탐색 중 404가 반환되는 것은 정상)
  • pkill의 대상 없음 (삭제할 대상이 없으면 exit 144로 반환. 이 또한 정상)

이것들은 「실패」로 집계될지라도 실제로는 의도한 결과입니다. 이것이 묶음 전체를 연쇄적으로 중단시킵니다.

공식적인 이상향은 「병렬로 확장하더라도 일부가 실패하면 나머지는 계속한다 (호출마다 독립시킨다)」이지만, 수정이 반영되기 전까지 사용자가 할 수 있는 조치가 있습니다.

CLAUDE.md에 병렬 묶음을 3개에서 5개 정도로 제한하도록 지침을 적어둡니다. 10개에서 20개의 큰 묶음은 휘말리는 범위를 넓히는 구조적 증폭기 역할을 합니다. 묶음을 작게 만들면 한 건의 실패로 인해 휘말리는 범위도 작아집니다.

git, curl, pkill과 같이 「예상 범위 내의 비제로(non-zero) 반환」이 일어나기 쉬운 커맨드는 병렬 묶음에 섞지 말고, 순차적으로 하나씩 던집니다. 순차적으로 처리하면 왕복 횟수가 늘어나 토큰 비용은 선불로 지불하게 되지만, 그 비용은 예측 가능합니다. 반면 일제 중단은 묶음 전체의 계산 비용에 더해, 중단된 후 모델이 상황을 다시 읽어들이는 비용까지 낭비하게 만듭니다. 선불 방식이 더 저렴하게 먹힙니다.

체감상으로는 적게 추산하는 경향이 있으므로, 실제 횟수를 세어 봅니다.

grep -c "parallel tool call.*errored" ~/.claude/projects/*/recent.jsonl

이 수치를 보고 나서야 「생각보다 빈번했구나」라고 깨닫는 사람이 많습니다. 회피책을 적용하기 전과 후의 수치를 비교하면 효과를 바로 확인할 수 있습니다.

병렬 태스크가 끝나기 전에 결과를 먼저 단정 짓는 것(#63884)은 일제 중단과는 별개의 모델 측 동작입니다. 이것이 빈번하다면 루틴 작업의 모델을 이전 버전으로 고정합니다.

/model claude-opus-4-7

#64153의 보고자는 직접 4.8과 4.7을 비교하여, 4.7에서는 동일한 「완료 전 단정 짓기」가 나타나지 않았다고 정리했습니다. 확실히 없애고 싶을 때 사용하는 마지막 수단입니다.

병렬 도구 호출의 일제 중단은 「한 건 실패하면 전부 그만둔다」는 구조가 원인이며, git, curl, pkill의 예상 범위 내 비제로 반환이 트리거가 되기 쉽습니다. 공식적으로 「호출마다 독립시키는」 수정이 이루어지기 전까지는 다음 네 가지로 휘말리는 범위를 줄일 수 있습니다. 병렬 묶음을 3~5개로, 실패 가능성이 있는 커맨드는 순차적으로, grep...

빈도를 측정하고, Opus 4.8이 완료되기 전의 단정적인 표현에는 /model claude-opus-4-7을 사용합니다.

이 기사에서 설명한 회피 방법을 자동화하는 hook(훅)을 무료로 배포하고 있습니다. parallel-batch-size-limiter는 큰 병렬 묶음을 던지기 전에 경고를 보냅니다 (회피 방법 1의 자동화). parallel-cascade-detectorCancelled: parallel tool call ... errored로 인한 일제 중단을 감지하여 빈도를 알려줍니다 (회피 방법 3의 자동화). 이를 포함한 Claude Code 사고 예방용 hook 모음은 최근 14일 동안 1,728명 이상이 사용하고 있습니다. MIT 라이선스입니다.

자신이 어떤 실패 패턴에 빠지기 쉬운지는 브라우저만으로 완료할 수 있는 진단 도구로도 측정할 수 있습니다.

토큰 비용 관점에서 일제 중단과 같은 "보이지 않는 곳에서 사라지는 소비"를 절반으로 줄이는 실천법은 별도의 책에 정리해 두었습니다 (2,500엔, 서문과 제1장은 무료로 읽어보실 수 있습니다).

AI 자동 생성 콘텐츠

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

원문 바로가기
0

댓글

0