Восемь ошибок наших агентов в shell и git и правило на каждую
Агенты пишут команды shell быстро и уверенно, и часть сбоев повторяется. Вот восемь реальных ошибок октября 2026: что каждая сломала и какое одно правило мы написали после неё. Перенесите правила в инструкции своих агентов.
🎯 Для Любой, кто разрешает агенту запускать shell, cron или git на общей машине
- Восемь конкретных сбоев в shell и git и правило, которое предотвращает каждый
- Как превратить инцидент в одну проверяемую строку
- Где хранить эти правила, чтобы агенты их читали
📓 Зачем вести список собственных ошибок
Общих советов по безопасности shell много, и их легко игнорировать. Правило с датой, командой и последствием читается иначе. У нас один короткий список в файле, который каждый агент загружает при старте, и каждая запись — реальный сбой. Случается новый — добавляется одна строка: что сломалось и правило.
🔟 Восемь случаев
- Целиком заменили crontab. 12 октября 2026 crontab пользователя root перезаписали тремя строками, и пропали 59 заданий, включая резервные копии и дампы баз. Заметили через сутки. Правило: не переписывать crontab. Новое задание — отдельный файл в каталоге cron, плюс сторож, который сверяет список заданий.
sshвнутри цикла чтения. Вwhile read ... < fileкомандаsshчитает остаток файла из стандартного ввода. Из пяти писателей запустился один. Правило: сначала прочитать список в массив или вызыватьssh -n.- Убить самого себя по шаблону.
pkill -fиpgrep -fсовпадают с командной строкой вашей же оболочки, если шаблон в ней есть. Агент убил собственную оболочку, а наблюдатель ждал сам себя. Правило: убивать по номеру процесса и проверять, что шаблон не встречается в запускающей строке. - Пустой список — это всё.
git reset HEAD --pathspec-from-file=с пустым файлом сбросил весь общий индекс. Правило: перед любой командой, берущей список из файла илиxargs, проверять, что список не пуст. - Зарезервированные имена shell. Присваивание
GROUPS,RANDOM,SECONDS,UIDилиHOSTNAMEмолча игнорируется. Правило: давать своим переменным префикс. &&иset -e.cmd && echo okне останавливает скрипт при сбоеcmdподset -e, а в нашем инструменте агентаset -eне работал вообще: команда обёрнута. Коммит ушёл при десяти красных тестах. Правило: проверять код возврата явно:if ! cmd; then exit 1; fi.- Код возврата забирает конвейер.
pytest | tail -1 && git commitкоммитит на красном, потому что код возврата конвейера принадлежит его последней команде. Правило: запускать тесты без конвейера или включатьpipefail. - Команда, которая не выполнилась.
chmod +xвнутри заблокированной команды не сработал, и никто не проверил. Правило: проверять режим файла перед коммитом.
🛠️ Практика: заведите свой список
- Откройте последние пять инцидентов, вызванных агентом или скриптом. По одной строке: дата, команда, последствие.
- Для каждого напишите одно правило, которое можно проверить скриптом. Если проверить нельзя, переформулируйте.
- Положите список в файл, который агенты читают первым, и держите его короче тридцати строк.
- Добавьте проверку для тех правил, что поддаются тесту: например, скрипт, который отказывает в коммите при пустом списке путей или неверном режиме файла.
- После каждого нового инцидента добавляйте строку в тот же день.
- Раз в квартал удаляйте правила, которые уже обеспечивает инструмент.
✅ Проверьте себя
- Выберите любое правило. Вы можете назвать инцидент, за которым оно стоит.
- Запустите цикл с
sshвнутри на двух хостах. Оба хоста достигнуты. - Заставьте тест упасть под конвейером и убедитесь, что коммит отклонён.
- Агент, который никогда не видел вашей системы, читает список и избегает минимум трёх из восьми на первой же задаче.
🚧 Когда это не работает
- Список, который никто не загружает. Если файла нет в стартовом контексте агента, правил как будто нет.
- Правила без триггера. «Осторожнее с cron» — не правило. «Добавляй задания файлами, crontab не правь» — правило.
- Слишком много правил. После тридцати строк важное теряется. Убирайте то, что уже обеспечивает инструмент.
- Разные оболочки. Часть случаев в других оболочках ведёт себя иначе. Указывайте, о какой оболочке правило.
- Правила вместо прав. Агент, которому нельзя трогать прод, не должен иметь прод-доступа, что бы ни говорил список.
📊 Доказательства
| Что измерено | Инциденты, записанные в нашем файле правил для агентов с 12 по 14 октября 2026 |
| Когда | Записи прочитаны 3 ноября 2026, 22:06 UTC |
| Артефакт | Раздел «ошибки из собственной работы» нашего файла правил для агентов в закрытом репозитории |
| Ограничение | Восемь случаев, одна команда. Это форма сбоев, а не их частота |
➡️ Дальше
Настройте восстановление по материалу Восстановление после сбойного, зависшего или неопределённого запуска и прочитайте, как писать инструкции для агентов, в AGENTS.md и файлы правил.
Источники
- AGENTS.md и файлы правил: где живёт список.
- Восстановление после сбойного, зависшего или неопределённого запуска: шаги восстановления.
- План реагирования для небольшой команды: что делать, когда агент ошибся.
- Права и потоки данных: что агент может затрагивать.
🔗 Связи статьи
Открыть полный граф знаний ↗Связи опубликованных статей. Выберите узел, чтобы открыть статью у заголовка.
Связи статей · клавиатура / текст
Та же тема
- Векторная база — это карта, а не источник: чему нас научил поиск
- Когда неизвестно, сколько стоил вызов модели: заморозка, затем сверка
- Как разбить большую задачу для дешёвой модели: урок 24 000 байт
- Навыки, MCP-инструменты и правила: три способа дать агенту возможности
- Несколько агентов, один репозиторий: правила владения из реальных инцидентов
- Ключи провайдера — вне агента: один шлюз и один токен на задачу
Следующие шаги
Связанные материалы
Векторная база — это карта, а не источник: чему нас научил поиск
Векторная база находит фрагменты, близкие по смыслу к вашему вопросу. Она не знает, какие из них верны или актуальны. Считайте каждое попадание указателем: откройте названный файл, сверьте хэш, а числа берите из артефакта, а не из найденного абзаца.
ИИ-агенты и MCP простыми словамиКогда неизвестно, сколько стоил вызов модели: заморозка, затем сверка
Иногда вызов модели обрывается по таймауту, и вы не знаете, списал ли провайдер деньги. Никогда не записывайте это как ноль. Пометьте как неопределённое, остановите новые платные вызовы и пусть названный человек сверит это с выпиской провайдера. Отказы до генерации — исключение.
ИИ-агенты и MCP простыми словамиКак разбить большую задачу для дешёвой модели: урок 24 000 байт
Дешёвая модель хорошо справляется с одной небольшой чёткой задачей и плохо — с большой кучей. Мы ограничиваем задачу 24 000 байт и отклоняем большие до вызова любой модели. Режьте по единицам — один файл или одна страна на задачу — и проверяйте размер до запуска.
ИИ-агенты и MCP простыми словамиНавыки, MCP-инструменты и правила: три способа дать агенту возможности
Агенты получают способности по-разному. Правило ограничивает, что они делают, навык говорит, как делать работу, а MCP-инструмент позволяет вызывать функцию. У каждого свой риск, поэтому объявляйте все три в реестре и проверяйте тестом, что ничего не существует вне списка.
💬 Комментарии