Масштабирование действий на границе harness: когда отбор одной bash-команды обходит семь перезапусков траектории

Три счёта за один успешный прогон терминального агента: перезапустить контейнер и гонять цикл заново, накопить траектории и проголосовать, или на каждом шаге оставить в оболочке одну проверенную команду. Платите за токены на каждый run в CLI — в разборе Reid Marlow разводит масштабирование траекторий и отбор действий у границы harness; узкое место чаще в ранжировании кандидатов, а не в «силе» модели.
Когда ломается shell, а не рассуждение агента
Терминальные агенты часто сходят с рельсов из‑за накопленного состояния оболочки, а не из‑за слабого chain-of-thought. Модель предлагает pip install yaml вместо pip install pyyaml, shell фиксирует ошибку, дальше идут обходные пути, и к двадцатому ходу среда уже «грязная», хотя корректная команда могла быть среди сгенерированных вариантов. Для vibe-coding цикла в терминале отладку смещают с переписывания system prompt на контроль harness: что реально ушло в bash и что осталось в истории после неудачного шага.
pip install yaml # ошибка: пакет не тот
pip install pyyaml # нужный вариант мог быть в пуле кандидатов
Один неверный пакет в истории shell дороже, чем очередная правка промпта.
Граница harness, верификация и таблица на N=8
Harness boundary — слой между policy-моделью и execution harness: на каждом шаге policy выдаёт N кандидатов из истории, верификатор выбирает победителя, в оболочку уходит одна команда, остальные отбрасываются.
Trajectory scaling платит за Best-of-N целых сессий с перезапуском контейнера, а не за отбор на одном ходу. Mid-Harness («Scaling Actions Between Model and Harness for Terminal Agents», arXiv:2609.39982; соавторство NVIDIA и KAIST) как раз про фильтрацию кандидатов на втором ходу и далее, до параллельных контейнеров и multi-trajectory voting. На TerminalBench-Lite с TMAX-9B базовый Pass@1 50,00% при стандартном исполнении; восьмерку кандидатов (zero-shot, N=8) сравнивали listwise, pointwise, pairwise и distilled pairwise.
| Схема | Pass@1 |
|---|---|
| Listwise (все кандидаты в одном промпте) | 51,02% |
| Pointwise (оценка 0–10 по отдельности, 8 вызовов) | 52,38% |
| Pairwise + ring-duel | 54,76% |
| Pairwise после distillation предпочтений от сильного верификатора | 57,14% |
Single-token verifier (logit A vs B, без CoT) дал 59,18% Pass@1 против 57,14% у верификатора с rationale порядка 42 токенов и минус 24,1% end-to-end token cost в абляции.
Правильная bash-команда часто уже в пуле генератора; задача в ранжировании, а не в дообучении модели.
Inference: один Pass@1, разный чек за run
Коэффициент 5,8× у Reid Marlow считают по оценочной стоимости токенов на один запуск TerminalBench-Lite, а не по абстрактному «ещё одному re-run».
- Mid-Harness с N=8 и distilled pairwise verification: 59,18% Pass@1 при ориентировочно $0,16 за run (ставки «standard 9B rates» в публикации).
- Best-of-7 trajectory scaling на том же бенчмарке: 59,18% Pass@1 при ориентировочно $0,91 за run.
Отношение $0,91 / $0,16 ≈ 5,8×: снижение inference spend при идентичном успехе на бенчмарке. Комбинация Mid-Harness + Best-of-3 даёт 65,31% Pass@1 при $0,61/run против 59,18% при $0,91 у Best-of-7 без boundary verification. Соло-агент в CLI выигрывает от turn-level фильтрации кандидатов, пока не раздули число полных сессий; особенно когда биллинг привязан к токенам на каждый запуск.
Ошибки верификатора и телеметрия отклонённого пула
Teacher disagreement дал 1810 verifier-induced failures: 39,0% семантика кандидата, 28,4% feasibility исполнения; остальное goal drift и преждевременные выходы. В benchmark harness пулы кандидатов и duel logits сохраняются в run artifacts; в production при single-token verifier остаётся trace «B beat A 0,62 to 0,38» без reasoning tokens, и без внешнего telemetry sink rejected pool не виден.
Без готового пост-мортема бенчмарка заранее решите, куда складывать отклонённые команды.
Иначе в shell виден только победитель, а причина каскада workaround остаётся вне логов.
Источники
- Reid Marlow, «Action Scaling at the Harness Boundary Beats Trajectory Re-Runs», Dev.to (доступ: 2026-10-02, UTC)
- Mid-Harness / arXiv:2609.39982 (доступ: 2026-10-02, UTC)