증상
- CTO 에이전트(@cto, Opus 모델) execute 모드(Slack 스레드)에서 Claude CLI가
"Prompt is too long" 에러로 exit code 1 반환
- 실패한 요청인데도 $1.01 과금 발생 (cache_creation + cache_read 토큰 소비)
재현 경로
- 에이전트: @cto (Opus, 200K context window)
- 실행 모드: execute (Slack 스레드에서 호출)
- CrewX 버전: 0.8.0-rc.28
- 로그:
crewx-sowonlabs/.crewx/logs/task_1770701369935_bth301ow1.log
원인 분석
| 항목 |
값 |
| 시스템 프롬프트 크기 |
132,440 chars (~35K+ tokens) |
| Slack 스레드 메시지 |
14개 |
| cache_creation_input_tokens |
144,280 |
| cache_read_input_tokens |
184,370 |
| 추정 합계 |
~328K tokens |
| Opus 컨텍스트 윈도우 |
200K tokens |
| 결과 |
초과 → 실패 |
근본 원인
CrewX CLI가 에이전트 프롬프트를 조립한 후, Claude CLI에 보내기 전에 최종 토큰 수가 모델의 컨텍스트 윈도우를 초과하는지 사전 검증하지 않음.
요청사항 (우선순위순)
P1: 프롬프트 크기 사전 검증
- 프롬프트 조립 후, CLI에 보내기 전에 대략적 토큰 수 추정 (chars / 4 정도)
- 모델별 컨텍스트 윈도우 한도와 비교
- 초과 시 경고 메시지 출력 + 실행 중단 (또는 자동 트리밍 옵션)
- 최소한
"프롬프트가 ~X tokens로 추정되며 모델 한도 Y를 초과합니다" 경고
P2: Slack 스레드 컨텍스트 제한
- Slack 모드에서 스레드 메시지를 프롬프트에 포함할 때 최대 메시지 수 또는 최대 글자 수 제한 옵션
- 예:
max_thread_messages: 10 또는 max_thread_chars: 50000 (crewx.yaml 설정)
P3: 실패 비용 방어
prompt too long 에러 시 재시도하지 않도록 에러 타입 분류
- 가능하면 API 호출 전에 차단하여 불필요한 과금 방지
참고
- 동일 이슈가 프롬프트가 큰 다른 에이전트(CMO 등)에서도 발생 가능
- CTO 프롬프트 다이어트도 별도로 진행 예정이지만, CLI 레벨 가드레일이 필요
증상
"Prompt is too long"에러로 exit code 1 반환재현 경로
crewx-sowonlabs/.crewx/logs/task_1770701369935_bth301ow1.log원인 분석
근본 원인
CrewX CLI가 에이전트 프롬프트를 조립한 후, Claude CLI에 보내기 전에 최종 토큰 수가 모델의 컨텍스트 윈도우를 초과하는지 사전 검증하지 않음.
요청사항 (우선순위순)
P1: 프롬프트 크기 사전 검증
"프롬프트가 ~X tokens로 추정되며 모델 한도 Y를 초과합니다"경고P2: Slack 스레드 컨텍스트 제한
max_thread_messages: 10또는max_thread_chars: 50000(crewx.yaml 설정)P3: 실패 비용 방어
prompt too long에러 시 재시도하지 않도록 에러 타입 분류참고