01/how it works

값싼 필터가 먼저, 비싼 검증은 그다음.

Boxdawn은 트레이스를 그래프로 읽어 2단 캐스케이드로 실행합니다. 구조 패스는 마이크로초 단위로 후보를 걸러내고, 의미 패스는 살아남은 것만 봅니다. 전체를 훑지 않습니다.

  trace.json  ─▶  ┌────────────────────────────┐
                  │  1. STRUCTURAL PASS        │
                  │     (byte-exact, O(n))     │
                  │     provable duplicate     │
                  └──────────┬─────────────────┘
                             │
                  ┌──────────▼─────────────────┐
                  │  2. CONTEXT RESEND         │
                  │     (chunk-level match)    │
                  │     input-side accounting  │
                  └──────────┬─────────────────┘
                             │
                  ┌──────────▼─────────────────┐
                  │  3. REDUNDANT READ         │
                  │     (file re-read events)  │
                  └──────────┬─────────────────┘
                             │
                  ┌──────────▼─────────────────┐
                  │  4. LLM-JUDGE (opt-in)     │
                  │     (semantic paraphrase)  │
                  │     API key required       │
                  └──────────┬─────────────────┘
                             ▼
                        report.md
패턴
repeat_node

같은 에이전트가 같은 입력으로 다시 실행됩니다. 그 사이에 새로 유입된 정보는 없습니다.

패턴
pingpong

두 에이전트가 새로운 상태를 만들지 않고 서로에게 계속 넘깁니다.

구현됨, 실제 트레이스에서는 아직 관측되지 않음

패턴
context_resend

매 API 호출마다 대화 전체가 다시 전송됩니다. 긴 에이전트 세션에서는 input 토큰의 약 97%가 재전송 컨텍스트(byte-exact 청크 매칭)로 누적됩니다.

패턴
redundant_read

같은 파일이 사이에 쓰기 없이 여러 번 Read 됩니다. 컨텍스트에 이미 있는 것을 잊는 코딩 에이전트에서 흔합니다.

패턴
semantic_duplicate

바이트는 다르지만 의미가 같은 두 메시지 청크(paraphrased 재전송). opt-in LLM-judge 층이 감지 · 기본 비활성 · API 키 필요.

Opt-in 전용 · ANTHROPIC_API_KEY 필요

pingpong은 실제 멀티에이전트 트레이스가 있어야 나타납니다. 단일 에이전트 코딩 세션이나 Toolathlon에서는 발생하지 않습니다.

참고: 네 번째 후보 패턴이었던 regen_handoff은(는) 사전 등록 기준을 통과하지 못해 제외되었습니다. Proven / Not Yet 섹션 참조.


02/reference

Boxdawn이 아는 것.

도구 분류
  • read_only
  • side_effect
  • payload_dependent
  • declarative
프레임워크
  • LangChain / LangGraph
  • CrewAI
  • LlamaIndex
  • OpenAI Agents SDK
  • AutoGen
  • Smolagents
탐지기
  • find_repeat_candidates
  • find_pingpong_candidates
  • find_context_resend
  • find_redundant_reads
  • find_llm_judge_semantic_duplicates
입력 형식
  • Boxdawn Trace JSON
  • OTel SDK JSON
  • Claude Code JSONL
  • Toolathlon JSONL
  • OpenInference nested
  • RedundancyBench
Register your tools (clew.yaml)
version: 1
tools:
  search_web:    { category: read_only }
  create_ticket: { category: side_effect, entity_id: response.ticket.id }
  run_python:    { category: payload_dependent }
  finalize:      { category: declarative }

03/report

A real report.

# Boxdawn Waste Report

- **trace_id**: `7f309fce-093f-412d-be64-cbd2860481f3`
- **analyzed**: 2026-08-20T06:56:01Z
- **detector params**: φ=0.514345, N=2, model=paraphrase-multilingual-MiniLM-L12-v2

## Cost summary

- **Total analyzed**: $2.524880
- **Total waste (detected)**: $1.665249 (66.0%)
- **Cost accuracy**: `accurate`

Breakdown by detector:
  - provable_duplicate: $0.000000
  - context_resend: $1.665249
  - redundant_read: $0.000000

## Result

- **Waste detection (tool cascade)**: no waste detected (wasteful=False).
- **Context resend**: 1720 resent chunk(s), 2056739 of 2238628 input tokens (91.9%). See section below.

- **Tool mapping coverage for this trace**: 3 of 8 tools recognized (37.5%).
- **Unrecognized tools in this trace (top 5)**: TaskUpdate, TaskCreate, ScheduleWakeup, ToolSearch, mcp__claude_ai_Hugging_Face__hub_repo_details

## Context resend

Message chunks that appear in the input of two or more LLM calls within this trace, byte-exact by sha256. System-role chunks are exempt.

- **events**: 1720 resent chunk occurrence(s)
- **resent input tokens**: 2056739 of 2238628 (91.9%)
- **resent input cost**: $1.665249 of $1.931955 (86.2%)
- **cost accuracy**: `accurate`

### Top offenders (by LLM call)

- span `msg_01S2rTDtWwK9s5G15AiHu3Zf` — 22 resent chunks, 65715 tokens, $0.253172
- span `msg_01MwTSZsxhZnFzS2DHbWoe7k` — 68 resent chunks, 148485 tokens, $0.206537
- span `msg_01GmBJvkryprm1pCB6tMtdc5` — 123 resent chunks, 162168 tokens, $0.138267
- span `msg_011ZR8iNqiod3YbbDs4UCgUp` — 225 resent chunks, 211788 tokens, $0.133689
- span `msg_01K8wsAnXZ7RqcvVdkrsP3LX` — 117 resent chunks, 130004 tokens, $0.092611

---
_Note: detection thresholds are frozen at synthetic values (phi=0.514345, N=2); real-trace evaluation is ongoing._
_Cost is estimated saving potential, not measured — assumes the wasted output is re-consumed each subsequent turn (structural assumption)._

2026-08-20에 boxdawn 0.5.0으로 분석했고, 0.5.3(2026-08-27)에서 다시 확인해 소수점 여섯 자리까지 같았습니다. 출처: davanstrien/agent-race-traces 의 claude-code.jsonl 에 boxdawn analyze 실행. CC-BY-4.0으로 공개된 claude-opus-4-7 Claude Code 세션($2.524880 분석). 이 모델은 가격표에 있으므로 달러 수치는 대체 요율이 아닙니다. 트레이스가 공개되어 있어 위 수치는 전부 재현할 수 있습니다. Cost summary 와 Context resend 절을 보여줍니다. Redundant read 와 LLM-judge(선택형)는 이 트레이스에서는 빈 결과를 냅니다.


04/open source

오픈소스입니다. 신뢰 자체가 곧 제품이니까요.

Boxdawn은 MIT 라이선스이며 기본값은 결정론입니다. 네 개의 디텍터(provable duplicate, context resend, redundant read, duplicate creation)가 로컬에서 실행됩니다. API 호출 없음, 가입 없음. 다섯 번째 층 semantic-duplicate LLM-judge는 opt-in 전용입니다: 기본 비활성이며, ANTHROPIC_API_KEY와 CLEW_ENABLE_LLM_JUDGE=1을 명시적으로 설정해야 활성화됩니다. 결정론 층은 같은 트레이스가 들어가면 매번 같은 리포트가 나옵니다.

$ pip install "boxdawn[detect]"
$ boxdawn analyze your_trace.json

OpenTelemetry SDK JSON과 OpenInference 트레이스 익스포트를 지원합니다: LangGraph, CrewAI, AutoGen, LlamaIndex. OTLP proto-JSON은 아직 지원하지 않습니다.

MITlocal-first결정론 우선결정론적opt-in LLM-judge702 tests · CI greenOTel / OpenInference

05/roadmap

Where we are on the chain.

Boxdawn is a chain: monitor → detect → alert → auto-fix → auto-optimize + govern. Detection is the link that runs today, as a service and as a library. The rest is being built in that order, and this page is where you can check which is which.

오늘 돌아가는 것
  • 호스팅 분석기, 계정 불필요
  • 결정론적 탐지기 4종
  • 실제 usage 필드에서 뽑은 비용
  • 계정 + 프로젝트별 이력
  • 일별 낭비율, 세션 날짜 기준
  • CI·스크립트용 API 키
  • 오픈소스 CLI, 오프라인 실행
  • 선택형 의미 분석 패스
다음에 만들 것
  • 기준선 알림
  • 실시간 모니터링
  • 루프 탐지
  • 세션 흐름 시각화
  • 비용과 함께 지연시간
  • 자동 수정
  • 자동 최적화
  • 정책·거버넌스
Alerting is specified and pre-registered: the comparison rule, the volume floor and the firing threshold were frozen in writing before any of it was implemented, so the first version cannot be tuned after the fact to look good. It is not implemented yet. Nothing in the right-hand column is available today, and if a capability appears in neither column, we have not planned it.
One capability is missing from both columns deliberately: blocking waste in real time, before the call is made. We built it and measured it against a bar we had written down first. Precision came out at 0.6333 (19 of 30 hand-annotated pairs, drawn from 3,432 candidates, measured 2026-07-25) against a pre-registered threshold of 0.70. Neither automatic blocking nor a confirmation prompt shipped, and neither is planned until that number changes. The kill is recorded in our alert pre-registration, which also states that the alert cannot predict anything. Real-time monitoring and alerting are a different claim, and those are on the list above.

Boxdawn diagnoses; it does not fix. No measured cost savings yet. We report what was found, not what was saved.