Инженер под ником SkyAngels20 разобрал на Хабре кейс: LLM-агент собирает команду для терминала, теряет закрывающую кавычку — и рантайм встаёт. Bash, а по словам автора и PowerShell, решает, что ввод многострочный, печатает >> и ждёт закрывающую кавычку из stdin. Агент читает процесс синхронно через пайп, EOF не приходит, таймаут сессии выгорает, процесс падает.
Решение автор назвал Quote Guard. Это конечный автомат на хуке PreToolUse: строка проверяется до того, как уйдёт в ОС. Лексер ведёт её через состояния NORMAL, IN_DOUBLE_QUOTES, IN_SINGLE_QUOTES, ESCAPE и держит три изолированные грамматики — posix, powershell, cmd. Регулярки выброшены.
Почему не считать кавычки через count % 2 == 0? Автор показывает матрицу изоморфности. Строка dir "C:\" в PowerShell безопасна: обратный слэш там обычный разделитель пути. В Bash тот же \ экранирует закрывающую кавычку — и шелл ждёт вечно. Второй пример: echo "a"b"` — в PowerShell бэктик экранирует, в Bash запускает command substitution. Угадывать шелл по хостовой ОС бесполезно: в контейнерах Windows крутится Bash, в WSL — PowerShell.
Для неизвестных инструментов автор сделал Strict Intersect, «двойной замок». Команда гоняется сразу по posix и powershell. safe + safe — пропуск, unsafe + unsafe — блок. Расхождение — самый интересный случай: Exit 2 и машиночитаемая подсказка модели вроде [quote-guard BLOCKED]:... Строка безопасна в PowerShell, но вешает POSIX. Лечение: задайте QUOTE_GUARD_MAP=MyTool=powershell. Отдельно автор рассказывает, как закрыл дыру с heredoc, которая молча пропускала незакрытые кавычки, и зачем 122 состязательных теста на Python и Node.js.
Агенты всё чаще дёргают терминал сами, а не сидят в чате. Пока агент один и под присмотром, зависание — досада. Когда их десяток в CI, это уже простой. Наша оценка: новость не про кавычки, а про то, что доверие к выводу модели переезжает из промпта в инфраструктуру, в хук перед исполнением. Просьба «пожалуйста, проверяй кавычки» гарантий не даёт. Автомат даёт.
Для тех, кто строит агентов, это готовый паттерн: валидировать не текст, а грамматику целевой среды. И отказывать структурированно, чтобы модель исправилась со второй попытки. Мы считаем, что главное здесь — формат ошибки. Не «invalid input», а инструкция с переменной окружения, которую агент реально прочитает.
Выигрывают те, кто катит агентов в прод. Проигрывают наивные валидаторы на регулярках: их либо обходят ложным срабатыванием, либо они не ловят настоящий дедлок. Логика автора проста — инженер отключает защиту после первого false positive. Это и есть цена плохой проверки.
В поводе нет ссылки на репозиторий — только описание архитектуры. Нет цифр по накладным расходам лексера, нет данных, как часто агенты реально теряют кавычки в проде. Утверждение, что PowerShell тоже уходит в многострочный режим, я бы проверил руками: поведение зависит от версии и режима запуска. И это один голос, кейс из песочницы, а не независимая проверка.
Прогноз: в течение квартала похожие грамматические валидаторы появятся в готовых агентных фреймворках — при условии, что кейс подхватят и откроют код.
Дисклеймер: официально не подтверждено, один источник — разбор инженера на Хабре, независимых проверок нет.
Источник: Хабр
Источник: habr.com · пост в Telegram