Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

QuoteBench

A benchmark that isolates shell quoting/escaping reliability in LLM agents: 14 scenarios × 4 hostility tiers = 56 execution-verified tasks, each solvable by a single bash -c command and scored only by final program state (file bytes, argv a probe receives, git log, parsed JSON) — never by matching the model's command string. Two studies share the task core:

  • Study A — controlled stress test (14 models): text transports raw / manual-json / nested-shell. The nested-shell contract interpolates the reply into bash -c "R" — a deliberately adversarial parsing layer that models nested bash -c/ssh wrappers and string-interpolating integrations, not the default transport of mainstream coding agents. It exposes capability-gated failures that raw generation hides.
  • Study B — deployment-facing evaluation (5 frontier models, 7,056 task–trial records): raw vs native, where native elicits the command through the serving endpoint's structured shell tool (the command-string boundary Codex CLI, Claude Code's Bash tool, and Gemini CLI share), with full reasoning-effort ladders, 3 trials per cell, and every command executed on BSD and replayed verbatim on GNU.

Headline finding: the structured shell-tool boundary is not a neutral serialization channel. Its effect ranges from a stable benefit (Opus-4.8: +3.1 BSD / +2.6 GNU) to a stable tax (Gemini-3.5-flash: −4.0 / −10.0), with near-null (GPT-5.6-sol) and dialect-dependent sign flips (Gemini-3.1-pro, Fable-5) in between — while tool-call adherence stays at 98.2–100%. Schema-valid invocation does not imply executable correctness.

Raw vs native by model and dialect

Study B: native-vs-raw main result

model BSD raw BSD native Δ GNU raw GNU native Δ adherence
Gemini-3.5-flash 97.6 93.6 −4.0* 95.7 85.7 −10.0* 98.2
Gemini-3.1-pro 91.9 93.9 +2.0 98.8 95.0 −3.8† 98.6
GPT-5.6-sol 96.1 94.9 −1.2 96.9 94.3 −2.5 100.0
Opus-4.8 96.0 99.0 +3.1* 95.4 98.0 +2.6* 99.9
Fable-5 98.7 99.6 +1.0 99.3 97.1 −2.1† 100.0

* = cluster-bootstrap CI excludes zero at both the task level (56 clusters) and the scenario level (14 families). † = task level only (directional). Aggregate over all 7,056 records: +0.3 (BSD) / −2.8 (GNU) — a mean that would read as "no effect" while hiding opposite-signed per-model effects.

Study A: contract-collapse leaderboard

Study A: contract-collapse leaderboard (raw vs. nested-shell)

model raw nested-shell Δ
GPT-5.5 100.0% 96.4% -3.6
GPT-5.6-sol 96.4% 96.4% +0.0
Gemini-3.1-pro 100.0% 96.4% -3.6
Sonnet-4.6 92.9% 91.1% -1.8
Fable-5 91.1% 87.5% -3.6
Opus-4.8 87.5% 73.8% -13.7
Gemini-3.5-flash 96.4% 67.9% -28.6
Haiku-4.5 92.9% 58.9% -33.9
Qwen3.5-27B 87.5% 32.1% -55.4
Gemini-3.1-flash-lite 78.6% 14.3% -64.3
Qwen3.5-9B 48.2% 14.3% -33.9
Qwen3.5-4B 32.1% 8.9% -23.2

pass@1 on the 56-task core, GNU/Linux reference toolchain; sorted by nested-shell. Updated 2026-07-24.

nested-shell interpolates the reply into bash -c "R", adding one parsing layer. It is a controlled adversarial stressor, not the default transport of mainstream coding agents. A large drop (e.g. Gemini-3.5-flash 96.4->67.9) means a model that aces one-shot shell questions cannot survive an extra parsing layer.

Study B: native tool-boundary leaderboard (raw vs. native, GNU)

model raw native Δ
Opus-4.8 95.4% 98.0% +2.6*
Fable-5 99.3% 97.1% -2.1†
GPT-5.6-sol 96.9% 94.3% -2.5
Gemini-3.1-pro 98.8% 95.0% -3.8†
Gemini-3.5-flash 95.7% 85.7% -10.0*

aggregate over the effort ladder, 3 trials, GNU replay. native = the structured tool-call API real agents use. * = effect robust at both task- and scenario-cluster level, = task level only. Updated 2026-07-24.

The tool boundary is not neutral: Opus-4.8 gains, Gemini-3.5-flash loses, and tool-call adherence stays 98-100% throughout, so schema-valid invocation does not imply executable correctness.

This file is a map; facts live in docs/:

  • design & metrics → docs/SPEC.md
  • novelty & prior art → docs/relatedwork.md
  • dataset card → docs/paper/datasheet.md
  • license → LICENSE
  • citation metadata → CITATION.cff

The public repository and project site are synchronized from the private release source by GitHub Actions.

Results preview

QuoteBench exposes failures that are easy to miss in broad coding benchmarks:

  • The tool interface is a model-visible intervention: it changes which command, utility, and dialect the model emits. On sed-replace, Gemini-3.1-pro's native tool calls pass 38.9% vs raw's 2.8% on BSD — and 55.6% vs 100% when the same commands are replayed on GNU. The measured benefit of a tool boundary can reverse across execution dialects.
  • The interface effect interacts with reasoning effort: Opus-4.8's native benefit is largest at low (+7.1 BSD / +8.9 GNU) and vanishes near saturation; Gemini-3.5-flash's native tax grows with effort (−14.3 GNU at high). More reasoning does not immunize a model against an incompatible tool profile.
  • Some models are strong under direct shell execution but collapse when the same command is transported through an extra parsing layer (Gemini-3.5-flash 96.4% raw → 67.9% nested-shell, GNU).
  • Reasoning budget is not a universal fix: saturated models spend more tokens without improving accuracy; effort labels are vendor-calibrated aliases for a budget, not comparable units.
  • pass@1 overstates reliability for tail-risk skills. Every Study B cell runs 3 trials; the interface shifts repeatable competence in both directions (pass³ tasks: Opus-4.8 +15, Gemini-3.5-flash −36, GNU).

Native effect vs effort ladder

Raw vs nested-shell contract collapse

Accuracy vs generated-token cost

Quickstart

python3 -m quotebench list                 # enumerate 56 frozen-core tasks
python3 -m quotebench show ssh-heredoc/t3-gnarly
python3 -m quotebench validate             # oracle 56/56 + discrimination proof
python3 -m quotebench run --adapter naive --out results/naive.jsonl
OPENAI_BASE_URL=http://localhost:8000/v1 OPENAI_API_KEY=... \
    python3 -m quotebench run --adapter openai --model qwen3.5-9b \
    --contract nested-shell --executor docker --out results/qwen.jsonl
OPENAI_BASE_URL=... OPENAI_API_KEY=... \
    python3 -m quotebench run --adapter openai --model MODEL \
    --contract native --executor docker --out results/native.jsonl
python3 -m quotebench score results/qwen.jsonl

Contract names: raw / manual-json / nested-shell / native (legacy spellings json/wrapped remain accepted aliases). No dependencies for the core benchmark (Python 3 stdlib). All benchmark jobs are python3 -m quotebench subcommands (see quotebench/cli.py). For untrusted model output use --executor docker (build with docker build -t quotebench-runner .).

License and citation

QuoteBench is released under the Apache License 2.0. Redistribution must retain the copyright, license, and NOTICE attribution. If you use QuoteBench in research, reporting, evaluation, derivative benchmarks, or public comparisons, please cite the repository metadata in CITATION.cff.

About

QuoteBench isolates shell quoting and escaping failures in LLM agents across raw, JSON, and wrapped command-transport contracts.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages