QuoteBench: How Matched Scores Can Hide Command-Path Failures
AI 코딩 에이전트의 '정답률'은 명령어가 실행 직전에 다시 파싱될 때 무너진다
AI 코딩 에이전트가 생성한 Bash 명령어는 실행되기 전에 한 번 더 감싸지거나 재해석되는 경우가 많은데, 기존 벤치마크는 이 지점에서 벌어지는 손상과 모델 자체의 생성 오류를 구분하지 못했다. QuoteBench는 56개 과제로 이 둘을 실험적으로 분리해, 명령어가 큰따옴표 안에 다시 삽입되는 상황(중첩 전송)에서 성공률이 55.4~73.2점(퍼센트 포인트) 떨어지고, 이 위험을 모델에 미리 알려주면 6개 설정에서 30.4~60.7점이 회복됨을 보였다. GPT-5.6-sol처럼 겉보기 점수 변화는 -3.6점에 불과하지만 실제로는 -64.3점의 손상과 +60.7점의 보완이 서로 상쇄된 경우도 발견됐다.
무엇을 했나
- 문제의식: LLM 에이전트가 만든 Bash 명령어는 원격 접속(ssh), 컨테이너 실행, CI 파이프라인 등을 거치며 큰따옴표 안에 다시 끼워 넣어지는데, 이 과정에서 따옴표나 특수문자가 깨져도 기존 평가 방식(정답 여부만 보는 매칭 점수)으로는 원인을 알 수 없었다.
- 방법: 저자는 14개 실제 장애 사례에서 뽑은 14개 작업군, 56개 과제로 QuoteBench를 만들고, 모델이 명령어를 만드는 방식(생성 계약)과 그 명령어가 실행되는 경로(실행 전송)를 독립적으로 교차시켰다. 같은 모델 응답을 원본 그대로 실행할 때와, 일부러 이스케이프 처리를 하지 않은 파서를 하나 추가해 재실행할 때를 비교해 손상분을 측정하고, 모델에게 '네 답은 큰따옴표 안에 다시 넣어질 것'이라고 미리 알려주는 조건(공개된 경계)을 추가해 회복분을 측정했다.
- 결과: 원본 그대로 실행하면 최상위 모델들은 이미 91.1~100%로 거의 포화 상태였지만, 재파싱 과정을 하나 추가하는 것만으로 성공률이 55.4~73.2점 떨어졌다. 이 위험을 미리 고지하면 8개 설정 중 6개에서 30.4~60.7점이 회복됐고, 나머지 2개는 거의 변화가 없거나 소폭 나빠졌다.
- 의미 있는 발견: 겉보기 점수(매칭 점수)만 보면 GPT-5.6-sol은 거의 변화가 없어 보이지만(-3.6점), 실제로는 큰 손상(-64.3점)과 큰 회복(+60.7점)이 우연히 상쇄된 결과였다. 또한 실행 경로를 바꾸는 것만으로 26개 모델 비교 쌍 중 최소 1개는 순위가 명백히 뒤집혔다.
- 실용적 시사점: 올바른 이스케이프 처리나 임시 스크립트 사용 같은 간단한 해법으로 이 문제를 완전히 없앨 수 있지만, 실제 에이전트 시스템 6곳을 조사한 결과 이런 경계 처리가 모델이 아니라 그 뒤 단계(하네스)에서 이뤄지고 있어 모델 혼자서는 통제할 수 없는 경우가 많았다.
| Instruction | Create a file named out.txt whose content is exactly the text ⟨⟨back\slash and `date` here↩ ’single’ "double" $(pwd) 100%⟩⟩ followed by a single trailing newline. |
|---|---|
| Hazards | backslash, backtick, command substitution, multiline, mixed quotes |
| Naive command | echo "back\slash and `date` here …" > out.txt; the backticks execute date, $(pwd) expands locally, and the payload’s inner double quote terminates the string early |
| Final-state gate | exact bytes of out.txt, including one trailing newline, with no collateral files |
| One passing command | a single-quoted printf with an embedded-quote splice (the machine oracle). Any other correct encoding receives equal credit |

| Model | Best observed setting | Control | Hostile | All 56 (%) | Hostile LOFO range (%) |
|---|---|---|---|---|---|
| GPT-5.5 | xhigh | 14/14 | 42/42 | 100.0 | [100.0, 100.0] |
| Opus-5 | xhigh | 14/14 | 42/42 | 100.0 | [100.0, 100.0] |
| Fable-5 | max | 14/14 | 42/42 | 100.0 | [100.0, 100.0] |
| GPT-5.6-sol | high | 14/14 | 41/42 | 98.2 | [97.4, 100.0] |
| Opus-4.8 | max | 12/14 | 41/42 | 94.6 | [97.4, 100.0] |
| Gemini-3.1-Pro | low | 14/14 | 37/42 | 91.1 | [87.2, 89.7] |
| Sonnet-4.6 | high | 9/14 | 27/42 | 64.3 | [61.5, 69.2] |
| Gemini-3.5-Flash | medium | 10/14 | 26/42 | 64.3 | [59.0, 66.7] |
| Haiku-4.5 | medium | 8/14 | 13/42 | 37.5 | [28.2, 33.3] |
| Qwen3.5-27B | non-think | 8/14 | 9/42 | 30.4 | [15.4, 23.1] |
| Qwen3.5-4B | think | 5/14 | 7/42 | 21.4 | [10.3, 17.9] |
| Qwen3.5-9B | non-think | 5/14 | 5/42 | 17.9 | [5.1, 12.8] |
| Gemini-3.1-Flash-Lite | default | 6/14 | 2/42 | 14.3 | [2.6, 5.1] |
| Model | Attempts | Raw (%) | Native (%) | Δ (pp) |
|---|---|---|---|---|
| Opus-4.8 | 840 | 95.4 | 98.0 | +2.6 |
| Opus-5 | 840 | 98.2 | 97.4 | −0.8 |
| Fable-5 | 840 | 99.3 | 97.1 | −2.1 |
| Gemini-3.1-Pro | 504 | 98.8 | 95.0 | −3.8 |
| GPT-5.6-sol | 672 | 96.9 | 94.3 | −2.5 |
| Gemini-3.5-Flash | 672 | 95.7 | 85.7 | −10.0 |
| Model | RR | RN | NR | NN | Damage | Comp. | Matched gap |
|---|---|---|---|---|---|---|---|
| GPT-5.6-sol | 94.6 | 30.4 | 55.4 | 91.1 | −64.3 | +60.7 | −3.6 |
| GPT-5.5 | 100.0 | 28.6 | 50.0 | 89.3 | −71.4 | +60.7 | −10.7 |
| Opus-5 | 96.4 | 30.4 | 42.9 | 89.3 | −66.1 | +58.9 | −7.1 |
| Gemini-3.1-Pro | 98.2 | 25.0 | 33.9 | 80.4 | −73.2 | +55.4 | −17.9 |
| Gemini-3.5-Flash | 96.4 | 28.6 | 67.9 | 58.9 | −67.9 | +30.4 | −37.5 |
| Opus-4.8 | 91.1 | 26.8 | 62.5 | 57.1 | −64.3 | +30.4 | −33.9 |
| Qwen3.5-27B | 85.7 | 30.4 | 83.9 | 30.4 | −55.4 | 0.0 | −55.4 |
| Gemini-3.1-Flash-Lite | 78.6 | 19.6 | 80.4 | 14.3 | −58.9 | −5.4 | −64.3 |

| Model | RR | RN | NR | NN | Damage | Comp. | Interaction | Matched gap |
|---|---|---|---|---|---|---|---|---|
| GPT-5.6-sol | 92.9 | 19.0 | 50.0 | 97.6 | −73.8 | +78.6 | +121.4 | +4.8 |
| Opus-4.8 | 92.9 | 16.7 | 59.5 | 42.9 | −76.2 | +26.2 | +59.5 | −50.0 |
| Model | Raw | Nested wrapper | Temporary script | Script gain (pp) |
|---|---|---|---|---|
| GPT-5.6-sol | 41/42 | 8/42 | 41/42 | +78.6 |
| Opus-4.8 | 40/42 | 7/42 | 40/42 | +78.6 |
| Qwen3.5-27B | 30/42 | 9/42 | 30/42 | +50.0 |
| Mechanism group | Representative failures | QuoteBench families |
|---|---|---|
| Literal quote and expansion | Apostrophes, double quotes, dollars, backticks, multiline payloads | write-file, JSON writing, Git commit, environment passing, heredoc writing |
| Word splitting and path semantics | Spaces, globs, leading dashes, hostile filenames, argument boundaries | argv passing, hostile filenames, find/glob, bulk rename |
| Embedded-language escaping | Regex versus literal matching, sed replacement, AWK string processing | grep count, sed replace, field lookup, JSON writing |
| Second parser or remote-like expansion | Local expansion before a second shell, argument joining, heredoc transport | SSH-like nested execution, SSH-like heredoc |
| Command-boundary representation | Command string, shell stdin, temporary file, argv, provider tool schema | raw/nested crossover, native-tool study, script bypass, typed pilot |
| System | Contract | Source anchor | Observed boundary |
|---|---|---|---|
| Codex | native | core/src/shell.rs:20--30, commit fa1d4c4 | command string becomes shell -c/-lc R |
| SWE-agent | raw | agents.py:936--967 and swe_env.py:197--222, commit 3ea751c | agent action enters a persistent Bash session |
| LangChain | native | shell_tool.py:217--232,491--515, commit b3a6d9a | structured command: string is written to shell stdin |
| Terminal-Bench | raw | tmux_session.py:26--33,75--173, commit d28711d | command/key strings enter an interactive shell through tmux |
| OpenHands | native | acp-command.ts:11--45,65--147, commit 850bd64 | human-readable command is tokenized to argv, and spawn has no shell |
| AutoGen | native | _docker_code_executor.py:327--363, commit 027ecf0 | generated code is written to a temporary file and invoked by argv |
| Configuration | Raw | ssh | ssh damage | Nested damage |
|---|---|---|---|---|
| GPT-5.6-sol | 94.6 | 30.4 | −64.3 | −64.3 |
| GPT-5.5 | 100.0 | 28.6 | −71.4 | −71.4 |
| Opus-5 | 96.4 | 30.4 | −66.1 | −66.1 |
| Gemini-3.1-Pro | 98.2 | 26.8 | −71.4 | −73.2 |
| Gemini-3.5-Flash | 96.4 | 28.6 | −67.9 | −67.9 |
| Opus-4.8 | 91.1 | 26.8 | −64.3 | −64.3 |
| Qwen3.5-27B | 85.7 | 30.4 | −55.4 | −55.4 |
| Gemini-3.1-Flash-Lite | 78.6 | 19.6 | −58.9 | −58.9 |
| Campaign | Generations | Design | Feeds |
|---|---|---|---|
| Study A same-window sweep | 8 configs × 56 × 2 contracts | one randomized window, effort unset | Tables 4, 15 |
| Study A ladder sweep | 44 rungs, 11 configs | per-provider windows | Tables 2, 12 |
| Study A rung crossover | 30 rungs, 7 configs, 26 crossover pts | replay both transports | Table 14, Fig. 3 |
| Public three-draw repeat | 8 configs × 56 × 2 × 2 draws | same design as the sweep | Appendix E.1.6 |
| Study B native tool | 8,736 generations, 17,472 replays | observational, both userlands | Tables 3, 17, 18 |
| Private-v2 crossover | 2 models × 42 hostile payloads | one serving window | Table 5 |
| Private-v1 replay | 3 models × 42 tasks | earlier generations; script bypass | Table 6 |
| BSD-live legacy | 6 configurations | BSD-elicited, GNU-replayed | Table 16 |
| Real-ssh grounding | 8 configs × 56 | ssh localhost replay | Table 9 |
| Advice arm | 8 configs × 56 × 2 | same-window paired advice contrast | Table 19 |
| Grammar crossover | 8 configs × 56 × 2 disclosed | replay-only wrapper 2×2 | Table 20 |
| Real-ssh full crossover | 6 configs × 56 × 2 | disclosed replies on real ssh | Table 21 |
| JSON boundary | 6 configs × 56 | serializer replay | Table 22 |
| Model | Unset (%) | Nearest rung | Distance to lowest rung |
|---|---|---|---|
| GPT-5.6-sol | 91.1 | low | 0.0 |
| GPT-5.5 | 89.3 | high | −5.4 |
| Opus-5 | 89.3 | medium | +28.6 |
| Gemini-3.1-Pro | 80.4 | none within the ladder | −10.7 |
| Gemini-3.5-Flash | 58.9 | low | +1.8 |
| Opus-4.8 | 57.1 | xhigh | +17.9 |
| Gemini-3.1-Flash-Lite | 14.3 | all four rungs tie | 0.0 |
| Model | Settings (in order) | Success (%) | Mean output tokens |
|---|---|---|---|
| GPT-5.6-sol | low / medium / high / xhigh | 91.1 / 92.9 / 98.2 / 98.2 | 362 / 565 / 773 / 1,073 |
| GPT-5.5 | low / medium / high / xhigh | 94.6 / 92.9 / 91.1 / 100.0 | 507 / 655 / 1,164 / 2,757 |
| Opus-5 | low / medium / high / xhigh / max | 60.7 / 91.1 / 96.4 / 100.0 / 98.2 | 796 / 1,336 / 1,458 / 2,421 / 3,499 |
| Fable-5 | low / medium / high / xhigh / max | 71.4 / 75.0 / 96.4 / 92.9 / 100.0 | 332 / 569 / 843 / 1,212 / 2,396 |
| Opus-4.8 | low / medium / high / xhigh / max | 39.3 / 48.2 / 50.0 / 62.5 / 94.6 | 835 / 1,291 / 1,706 / 3,481 / 6,960 |
| Gemini-3.1-Pro | low / medium / high | 91.1 / 91.1 / 91.1 | 5,267 / 5,753 / 6,308 |
| Sonnet-4.6 | low / medium / high / xhigh | 23.2 / 28.6 / 64.3 / 62.5 | 28 / 1,411 / 4,337 / 4,539 |
| Gemini-3.5-Flash | minimal / low / medium / high | 57.1 / 58.9 / 64.3 / 62.5 | 3,851 / 3,108 / 3,081 / 3,389 |
| Haiku-4.5 | low / medium / high / xhigh | 32.1 / 37.5 / 32.1 / 26.8 | 5,432 / 4,717 / 4,708 / 4,783 |
| Qwen3.5-27B | non-thinking / thinking | 28.6 / 28.6 | 20 / 7,489 |
| Gemini-3.1-Flash-Lite | minimal / low / medium / high | 14.3 / 14.3 / 14.3 / 14.3 | 20 / 20 / 20 / 20 |
| Display name | Model identifier | Effort settings queried | Decoding parameters |
|---|---|---|---|
| GPT-5.6-sol | gpt-5.6-sol | low, medium, high, xhigh | max output tokens 16,000, temperature not sent |
| GPT-5.5 | gpt-5.5 | low, medium, high, xhigh | max output tokens 16,000, temperature not sent |
| Opus-5 | claude-opus-5 | low, medium, high, xhigh, max | provider defaults, no sampling or length control sent |
| Opus-4.8 | claude-opus-4-8 | low, medium, high, xhigh, max | provider defaults, no sampling or length control sent |
| Fable-5 | claude-fable-5 | low, medium, high, xhigh, max | provider defaults, no sampling or length control sent |
| Sonnet-4.6 | claude-sonnet-4-6 | low, medium, high, xhigh | provider defaults, no sampling or length control sent |
| Haiku-4.5 | claude-haiku-4-5 | low, medium, high, xhigh | provider defaults, no sampling or length control sent |
| Gemini-3.1-Pro | gemini-3.1-pro-preview | low, medium, high | temperature 0, max tokens 4,096 in the sweep, omitted in the ladder |
| Gemini-3.5-Flash | gemini-3.5-flash | minimal, low, medium, high | temperature 0, max tokens 4,096 in the sweep, omitted in the ladder |
| Gemini-3.1-Flash-Lite | gemini-3.1-flash-lite-preview | minimal, low, medium, high | temperature 0, max tokens 4,096 in the sweep, omitted in the ladder |
| Qwen3.5-27B | Qwen/Qwen3.5-27B | non-thinking, thinking | temperature 0, max tokens 4,096 non-thinking, omitted thinking |
| Qwen3.5-9B | Qwen/Qwen3.5-9B | non-thinking, thinking | temperature 0, max tokens 4,096 non-thinking, omitted thinking |
| Qwen3.5-4B | Qwen/Qwen3.5-4B | non-thinking, thinking | temperature 0, max tokens 4,096 non-thinking, omitted thinking |
| Configuration | Rung | RR | RN | NR | NN | Damage | Compensation | Matched gap |
|---|---|---|---|---|---|---|---|---|
| GPT-5.6-sol | low | 98.2 | 28.6 | 53.6 | 91.1 | −69.6 | +62.5 | −7.1 |
| GPT-5.6-sol | medium | 94.6 | 30.4 | 48.2 | 92.9 | −64.3 | +62.5 | −1.8∗ |
| GPT-5.6-sol | high | 98.2 | 32.1 | 48.2 | 98.2 | −66.1 | +66.1 | +0.0∗ |
| GPT-5.6-sol | xhigh | 98.2 | 30.4 | 51.8 | 98.2 | −67.9 | +67.9 | +0.0∗ |
| Opus-5 | low | 98.2 | 28.6 | 57.1 | 60.7 | −69.6 | +32.1 | −37.5 |
| Opus-5 | medium | 100.0 | 32.1 | 41.1 | 91.1 | −67.9 | +58.9 | −8.9 |
| Opus-5 | high | 96.4 | 30.4 | 42.9 | 96.4 | −66.1 | +66.1 | +0.0∗ |
| Opus-5 | xhigh | 98.2 | 32.1 | 42.9 | 100.0 | −66.1 | +67.9 | +1.8∗ |
| Opus-5 | max | 100.0 | 32.1 | 46.4 | 98.2 | −67.9 | +66.1 | −1.8∗ |
| Gemini-3.1-Pro | low | 100.0 | 25.0 | 32.1 | 91.1 | −75.0 | +66.1 | −8.9 |
| Gemini-3.1-Pro | medium | 98.2 | 26.8 | 41.1 | 91.1 | −71.4 | +64.3 | −7.1 |
| Gemini-3.1-Pro | high | 98.2 | 26.8 | 35.7 | 91.1 | −71.4 | +64.3 | −7.1 |
| Fable-5 | low | 100.0 | 30.4 | 48.2 | 71.4 | −69.6 | +41.1 | −28.6 |
| Fable-5 | medium | 100.0 | 30.4 | 48.2 | 75.0 | −69.6 | +44.6 | −25.0 |
| Fable-5 | high | 98.2 | 32.1 | 42.9 | 96.4 | −66.1 | +64.3 | −1.8∗ |
| Fable-5 | xhigh | 100.0 | 33.9 | 46.4 | 92.9 | −66.1 | +58.9 | −7.1 |
| Fable-5 | max | 100.0 | 30.4 | 35.7 | 100.0 | −69.6 | +69.6 | +0.0∗ |
| Gemini-3.5-Flash | minimal | 96.4 | 23.2 | 75.0 | 57.1 | −73.2 | +33.9 | −39.3 |
| Gemini-3.5-Flash | low | 92.9 | 25.0 | 67.9 | 58.9 | −67.9 | +33.9 | −33.9 |
| Gemini-3.5-Flash | medium | 96.4 | 23.2 | 76.8 | 64.3 | −73.2 | +41.1 | −32.1 |
| Gemini-3.5-Flash | high | 96.4 | 23.2 | 71.4 | 62.5 | −73.2 | +39.3 | −33.9 |
| Opus-4.8 | low | 87.5 | 28.6 | 69.6 | 39.3 | −58.9 | +10.7 | −48.2 |
| Opus-4.8 | medium | 92.9 | 28.6 | 67.9 | 48.2 | −64.3 | +19.6 | −44.6 |
| Opus-4.8 | high | 96.4 | 33.9 | 64.3 | 50.0 | −62.5 | +16.1 | −46.4 |
| Opus-4.8 | xhigh | 98.2 | 32.1 | 60.7 | 62.5 | −66.1 | +30.4 | −35.7 |
| Opus-4.8 | max | 98.2 | 30.4 | 44.6 | 94.6 | −67.9 | +64.3 | −3.6∗ |
| Gemini-3.1-Flash-Lite | minimal | 78.6 | 19.6 | 80.4 | 14.3 | −58.9 | −5.4 | −64.3 |
| Gemini-3.1-Flash-Lite | low | 78.6 | 19.6 | 80.4 | 14.3 | −58.9 | −5.4 | −64.3 |
| Gemini-3.1-Flash-Lite | medium | 78.6 | 19.6 | 80.4 | 14.3 | −58.9 | −5.4 | −64.3 |
| Gemini-3.1-Flash-Lite | high | 78.6 | 19.6 | 80.4 | 14.3 | −58.9 | −5.4 | −64.3 |
| Fixed-reply transport | Contract-conditioned compensation | |||||
|---|---|---|---|---|---|---|
| Model | Effect [95% CI] | Enum. p | Holm p | Effect [95% CI] | Enum. p | Holm p |
| GPT-5.6-sol | −64.3 [−80.4,−46.4] | .000244 | .001465 | +60.7 [+46.4,+75.0] | .000244 | .001953 |
| GPT-5.5 | −71.4 [−85.7,−55.4] | .000244 | .001465 | +60.7 [+44.6,+75.0] | .000244 | .001953 |
| Opus-5 | −66.1 [−82.1,−50.0] | .000244 | .001465 | +58.9 [+41.1,+75.0] | .000488 | .002930 |
| Gemini-3.1-Pro | −73.2 [−87.5,−58.9] | .000122 | .000977 | +55.4 [+33.9,+73.2] | .001221 | .006104 |
| Gemini-3.5-Flash | −67.9 [−82.1,−51.8] | .000244 | .001465 | +30.4 [+12.5,+48.2] | .013672 | .041016 |
| Opus-4.8 | −64.3 [−80.4,−46.4] | .000244 | .001465 | +30.4 [+14.3,+48.2] | .003906 | .015625 |
| Qwen3.5-27B | −55.4 [−69.6,−41.1] | .000244 | .001465 | 0.0 [0.0,0.0] | 1.000000 | 1.000000 |
| Gemini-3.1-Flash-Lite | −58.9 [−71.4,−48.2] | .000122 | .000977 | −5.4 [−10.7,0.0] | .250000 | .500000 |
| Model | Raw BSD→GNU | Nested BSD→GNU | Transfers better to |
|---|---|---|---|
| Fable-5 | →91.1 | →87.5 | BSD |
| Qwen3.5-27B (non-thinking) | →87.5 | →32.1 | GNU |
| Qwen3.5-27B (thinking) | →82.1 | →50.0 | GNU |
| Gemini-3.1-Pro | →100.0 | →96.4 | GNU |
| Gemini-3.5-Flash | →96.4 | →67.9 | BSD |
| Opus-4.8 | →87.5 | →73.8 | BSD (raw); tie (nested) |
| BSD live | GNU replay | |||||
|---|---|---|---|---|---|---|
| Model | Δ | LOFO | PF/FP | Δ | LOFO | PF/FP |
| Opus-4.8 | +3.10 | [+2.18,+3.46] | 5/31 | +2.62 | [+1.67,+2.95] | 11/33 |
| Opus-5 | −0.36 | [−0.51,0.00] | 12/9 | −0.83 | [−1.03,−0.51] | 16/9 |
| Fable-5 | +0.95 | [0.00,+1.15] | 3/11 | −2.14 | [−2.44,−0.64] | 22/4 |
| GPT-5.6-sol | −1.19 | [−1.92,−0.48] | 25/17 | −2.53 | [−3.37,−0.64] | 26/9 |
| Gemini-3.1-Pro | +1.98 | [−0.64,+3.21] | 8/18 | −3.77 | [−4.91,−0.64] | 23/4 |
| Gemini-3.5-Flash | −4.02 | [−4.33,−3.04] | 37/10 | −9.97 | [−10.74,−6.89] | 77/10 |
| Userland | Contract | Pass | Adherence | Syntax | Nonzero | Exit-0 wrong |
|---|---|---|---|---|---|---|
| BSD | raw | 4230 | 0 | 31 | 59 | 48 |
| BSD | native | 4236 | 20 | 9 | 41 | 62 |
| GNU | raw | 4252 | 0 | 39 | 36 | 41 |
| GNU | native | 4146 | 20 | 22 | 128 | 52 |
| Configuration | Advice-free | With advice | Δ (pp) |
|---|---|---|---|
| GPT-5.6-sol | 54 | 49 | −8.9 |
| GPT-5.5 | 49 | 53 | +7.1 |
| Opus-5 | 52 | 54 | +3.6 |
| Sonnet-4.6 | 32 | 46 | +25.0 |
| Haiku-4.5 | 25 | 32 | +12.5 |
| Opus-4.8 | 30 | 34 | +7.1 |
| Qwen3.5-27B | 17 | 18 | +1.8 |
| Gemini-3.1-Flash-Lite | 7 | 8 | +1.8 |
| Double disclosed | Single disclosed | Diag−anti | |||
|---|---|---|---|---|---|
| Configuration | on double | on single | on single | on double | (pp) |
| GPT-5.6-sol | 54 | 7 | 53 | 10 | +80.4 |
| GPT-5.5 | 49 | 8 | 54 | 8 | +77.7 |
| Opus-5 | 52 | 8 | 45 | 16 | +65.2 |
| Sonnet-4.6 | 32 | 11 | 23 | 16 | +25.0 |
| Opus-4.8 | 30 | 11 | 23 | 18 | +21.4 |
| Haiku-4.5 | 25 | 13 | 20 | 11 | +18.8 |
| Qwen3.5-27B | 17 | 11 | 11 | 17 | +0.0 |
| Gemini-3.1-Flash-Lite | 7 | 19 | 9 | 19 | −19.6 |
| Configuration | RR | RN | NR | NN | ssh comp. | Nested comp. |
|---|---|---|---|---|---|---|
| GPT-5.6-sol | 53 | 17 | 31 | 51 | +60.7 | +60.7 |
| GPT-5.5 | 56 | 16 | 28 | 50 | +60.7 | +60.7 |
| Opus-5 | 54 | 17 | 24 | 50 | +58.9 | +58.9 |
| Opus-4.8 | 51 | 15 | 35 | 32 | +30.4 | +30.4 |
| Qwen3.5-27B | 48 | 17 | 47 | 17 | +0.0 | +0.0 |
| Gemini-3.1-Flash-Lite | 44 | 11 | 45 | 10 | −1.8 | −5.4 |
| Configuration | Raw | Correct | Naive | Naive damage |
|---|---|---|---|---|
| GPT-5.6-sol | 53 | 53 | 21 | −57.1 |
| GPT-5.5 | 56 | 56 | 19 | −66.1 |
| Opus-5 | 54 | 54 | 22 | −57.1 |
| Opus-4.8 | 51 | 51 | 18 | −58.9 |
| Qwen3.5-27B | 48 | 48 | 19 | −51.8 |
| Gemini-3.1-Flash-Lite | 44 | 44 | 8 | −64.3 |
왜 중요한가
에이전트가 실제로 서버에 접속하거나 컨테이너를 다루는 배포 환경에서는 이 논문이 지적한 '재파싱 경계'가 항상 존재하며, 이를 무시한 벤치마크 순위는 실제 배포 성능과 다를 수 있다. 코딩 에이전트를 도입하려는 개발자나 평가자는 모델 점수 하나만 보지 말고 어떤 실행 경로와 계약 조건에서 측정됐는지 함께 확인해야 한다.
이 논문의 용어
- 매칭 점수(matched score) · 모델이 만든 명령어를 곧바로 실행해 얻는, 일반적으로 보고되는 성공률
- 생성 계약(generation contract) · 모델에게 명령어를 어떤 형식·전제로 만들라고 지시하는 방식
- 실행 전송(execution transport) · 모델이 만든 명령어가 실제 셸에 도달하기까지 거치는 경로, 예를 들어 그대로 실행되거나 다시 따옴표로 감싸져 실행되는 방식
- 중첩 전송(nested transport) · 명령어가 ssh나 컨테이너 실행처럼 큰따옴표 안에 한 번 더 삽입되어 재해석되는 실행 경로
- 최종 상태 검증(final-state validation) · 명령어 실행 후 파일, 인자, 깃 기록 등 결과 상태가 정확히 맞는지만 확인하는 채점 방식
논문 원문 초록 (영문)
LLM coding agents issue Bash commands through interfaces that may serialize, wrap, and reparse model output. Matched execution scores alone cannot distinguish command-generation errors from failures introduced after generation. QuoteBench measures this boundary with exact final-state validation on 56 one-shot tasks from 14 incident-derived families, crossing the generation contract with the execution transport around one deliberately unescaped added parser. Escaping at the interpolation point reproduces each replayed reply's raw-path outcome, so any recovery under a disclosed boundary must come from the model changing its generation. Across eight same-window configurations, replaying the same reply through the added parser lowers success by 55.4 to 73.2 percentage points; disclosure recovers 30.4 to 60.7 points for six configurations, and zero or slightly negative for the other two. Raw generation is nearly saturated at the frontier; boundary adaptation is what still separates models. GPT-5.6-sol's matched gap of -3.6 points hides -64.3 points of damage and +60.7 points of compensation. The deployment configuration reorders models: one reversal among 26 comparable pairs is unambiguous and four more sit on single-task margins. Evaluations of command-issuing agents should report the model configuration, generation contract, execution path, operating point, and final-state validator rather than treat a matched score as an intrinsic model property.
arXiv에서 원문 보기최신 논문
- Specification-delta-driven data governance: an empirical study of the {\guillemotleft}spec-delta{\guillemotright} as the unit of change in lakehouse data platforms데이터 플랫폼 변경도 코드처럼 '설계도 조각'을 붙여서 검토하면 어떨까: 실험 설계 논문
- Forking Fast: Efficiently Estimating Uncertainty Dynamics in Text GenerationLLM이 답을 낼 때마다 수백 번 다시 굴려보지 않아도, 통계 모델 하나면 '어디서 결정이 갈리는지'를 훨씬 싸게 알아낼 수 있다
- Robust Incomplete Multimodal Sentiment Analysis via Iterative Proxy Correction텍스트가 빠지거나 망가져도, AI가 그 자리를 대신할 '가짜 텍스트'를 한 번에 만들지 않고 여러 번 고쳐가며 감정을 더 정확히 읽어낸다
- EXIMO: VLM Guided Exploration of VLA Policies로봇 팔에게 사람의 시연 없이 새 일 시키기, 말 잘하는 AI가 대신 가르친다
- Reliable Financial Named Entity Recognition under Domain Shift금융 AI가 서류체 문장에서 배운 자신감은 트위터로 가면 거짓말이 된다
- Stopping and Routing LLM Judge PanelsAI 채점관을 몇 명 불러야 하는지, 언제 멈춰야 하는지 정하는 방법
- FlashPrefill V2: Block-Sparse Prefill Attention for Long-Context LLM Serving논문 속 시연이 아니라 실제 서비스에 넣을 수 있는 희소 어텐션 만들기
- A knowledge-guided agentic framework for mitigating patient-context ambiguity in health queries환자가 증상을 다 말하지 않아 애매한 질문에, AI가 먼저 되물어서 답을 맞히는 방법
METAL LAB 최신 기사
그림 출처: Shangao Li et al., arXiv:2608.13547, CC BY 4.0