CLI AI

SAFE, CAUTION, DANGER: как CliAI классифицирует команду перед запуском

2026-03-09

Каждая команда, которую возвращает CliAI, помечается одним из трёх бейджей до того, как доберётся до вашей shell. Понимать бейджи — это разница между настороженным и уверенным использованием. Этот пост — про систему: что она ловит и, честно, что не ловит.

Три уровня

SAFE. Только чтение или почти. ls, pwd, cat, grep, find -printf. Нажали Enter — поехали, без дополнительных трений.

CAUTION. Меняет состояние ограниченно. rm конкретных файлов, mv, chmod одного файла, kill -9 известного PID, git reset --hard на не-расшаренной ветке. Бейдж жёлтый, пауза для подтверждения.

DANGER. Меняет состояние широко или необратимо: rm -rf поддерева, пересекающего корни ФС, dd на блочное устройство, chmod -R на /, git push --force в main, всё, что трогает * на верхнем уровне. Бейдж красный, требует напечатать yes целиком — Enter не работает.

clai
┌─ Task ───────────────────────────────────────────────┐│ снеси мою домашнюю директорию полностью              │├─ Command ────────────────────────────────────────────┤│ rm -rf -- ~/                                         │├─ Safety: DANGER ─────────────────────────────────────┤│ Рекурсивное удаление, пересекающее корень $HOME.     ││ Введите "yes" для подтверждения.                     │└──────────────────────────────────────────────────────┘

Как происходит классификация

Через regex, на сервере, после того как LLM выдала кандидата. Паттерны не секрет — это курируемый список структурных форм, исторически приводивших к ущербу:

  • рекурсивное удаление, пересекающее корни (/, $HOME, /etc, /var, /usr);
  • сырые записи на блочные устройства (dd of=/dev/sd*);
  • форсные деструктивные git-операции на защищённых ветках;
  • цепочки пайпов, заканчивающиеся деструктивом (tar | … && rm -rf …).

Команда, попавшая в danger-набор, получает DANGER. Меняет состояние без пересечения порогов — CAUTION. Остальное — SAFE.

Что ловит, а вы не ожидали

Команда, которая выглядит нормально на первый взгляд, может быть DANGER, если читать пайп целиком. Классификатор читает всю строку, не только первую стадию:

clai
┌─ Task ───────────────────────────────────────────────┐│ заархивируй папку, залей и почисти за собой          │├─ Command ────────────────────────────────────────────┤│ tar -czf - . | aws s3 cp - s3://b/k && rm -rf -- .   │├─ Safety: DANGER ─────────────────────────────────────┤│ Хвостовое рекурсивное удаление $PWD.                 │└──────────────────────────────────────────────────────┘

Что пропускает — честно

  • Экзотические glob-раскрытия, которые резолвятся в опасное в рантайме (rm -rf $UNSET_VAR/*) — статический текст не всегда выдаёт вред.
  • Пользовательские скрипты. Если команда — ./deploy.sh, классификатор не видит, что внутри.
  • Косвенное разрушение — dd if=/dev/zero of=/path/to/important/file ловится редко, потому что не статистически «опасный паттерн».

Бейдж — подсказка, не гарантия. Inspect-then-run — это и есть реальный механизм безопасности. Вы читаете команду, вы жмёте Enter.

См. также