«Вайб — не вердикт»: соло-разработчик и CLI, которому разрешено сказать «не знаю»

Соло-разработчик, который собирает утилиты под свою задачу, рано или поздно упирается в инструмент, спешащий подтвердить ваш страх — в эксперименте @copyleftdev показал на KiloCheck другой контракт: честный отказ с confidence: 0.0 вместо «уверенного» ответа. Для тех, кто вайб-кодит обёртки вокруг моделей, это зеркало калибровки: когда «не знаю» полезнее ложной уверенности.
Почему «вайб» не проходит ворота агентных обёрток
Автор проводит жёсткую границу: gut feeling — это vibe, а vibe is not a verdict. KiloCheck не LLM и не агент — детерминированный движок на Rust (~12 МБ, один бинарник), который на этапе check не ходит в сеть. Но метафора из текста попадает в знакомую боль: инструмент, который «guess to please you», и контраст с signed struct, где «нельзя галлюцинировать вердикт» с provenance.
Contracts, not vibes — манифест composable single-purpose tools со stable JSON.
Для обёрток вокруг чатовых API переносимый тезис без подмены фактов: уверенность без evidence — не фича, а дефект дизайна. Copilot, Cursor и терминальные агенты в первоисточнике не названы — переносим только паттерн, который автор сам противопоставляет «чату на всё».
KiloCheck: что собрал соло-разработчик
Продукт называется KiloCheck, CLI — kilo. Репозиторий copyleftdev/kilocheck на GitHub; в примере установки — v0.2.0:
curl -fsSL https://raw.githubusercontent.com/copyleftdev/kilocheck/v0.2.0/scripts/install.sh | sh
Пайплайн данных четырёхстадийный: приём подписанного versioned threat release → normalize typed observations → compile immutable local index → check IP против индекса. Вход cryptographically verified; threat knowledge живёт в signed local snapshot, проверка — lookup без intelligence API.
Модель состояний — не три оттенка пожимания плечами. Различаются пять состояний: missing, unknown, stale, incomplete, unsafe — плюс граница между safe, bad и «не знаю». Обновление снимка — kilo update (в примере вывод содержит Claims 3160); статус — kilo status --json с полями вроде integrity: verified, freshness: fresh.
Утро со спам-рекрутером: цепочка маленьких честных CLI
Сюжет реальный, идентифицирующие детали сняты. Утреннее «холодное» письмо рекрутера с трекинг-ссылкой на вакансию QE в аэрокосмической фирме; подпись с несостыкованным набором профессий. Интуиция кричит scam.
Шаг 1 — dig резолвит хост ссылки в IP. Затем:
kilo check <IP> --json
Ответ: disposition: "unknown", confidence: 0.0, reason_codes: ["NOT_OBSERVED"], recommended_action: "monitor". Инструмент отказывается выдать «страшный» вердикт без evidence.
Контроль автора жёсткий. Известный C2-узел (162.243.103.246 в примере) → critical / block / confidence 0.99 / COMMAND_AND_CONTROL. Публичный резолвер 8.8.8.8 и подозрительный хост — оба NOT_OBSERVED. Движок умеет сказать «плохо», когда данные есть; на подозрительном IP честно фиксирует незнание.
Честный negative не закрыл дело — сместил фокус с инфраструктуры на социальную инженерию. curl (только заголовки) показал редирект через captcha-gate агрегатора; openssl — валидный сертификат легитимного job-traffic агрегатора. Компания из письма реальна, ссылка — affiliate click-tracker. Угроза оказалась спам lead-gen фрилансера в костюме рекрутера, не malware в цепочке.
«Пусть negatives ведут»: урок для цикла vibe-coding
Вывод автора прямой: kilo не поймал scam — его не было, был spam. Ценность — truth about what it knew, line around what it didn't, pointer к месту реального ответа. Отказ 0.0 увёл от «кроличьей норы malware» к сигналу social engineering; если бы инструмент «совпал с настроением», утро ушло бы на разбор job board.
Для соло-цикла с агентами и CLI-обёртками переносимый приём такой:
- один инструмент — одна typed-задача (
dig,kilo,curl,opensslв цепочке расследования); - stable JSON и exit codes вместо прозы, которую оператор дочитывает «как хочет»;
- честный negative как навигация, не как тупик.
Соседи в цепочке — «маленькими честными инструментами». Это близко к практике vibe-coding: не один монолитный «ответь на всё», а composable tools с контрактами — пусть даже без MCP и IDE-rules в исходном посте.
Итог: honesty beats confidence
Материал на Dev.to опубликован 13 июля 2026; оценочное время чтения — 7 минут. У поста на момент публикации — 15 реакций и 9 комментариев; охваты просмотров в открытых метриках не зафиксированы.
Тег на площадке: «Rust CLI for vetting suspicious links». Заголовок держит линию vibe vs verdict; тело — эксперимент, почему honest CLIs beat confident ones. Для ру-соло, который собирает свои утилиты вместо покупки «умного» монолита, это напоминание: калибровка уверенности важнее совпадения с вашим настроением — и в терминале, и в обёртках вокруг моделей, где ложный verdict дороже честного «не знаю».
Источники
- @copyleftdev — A Vibe Is Not a Verdict: I Built a Tool That's Allowed to Say 'I Don't Know' — Dev.to, 2026-07-13; доступ 2026-07-15T09:03:00Z
- Репозиторий copyleftdev/kilocheck — установка и исходники KiloCheck (
kilo)