Canny CLI

Хуки для Claude Code и Codex CLI ведут журнал действий агента и не принимают «готово» без пройденной проверки.

  • 132 ★ репозитория
  • Последний коммит
CLI

Расширенный доступ

Почему такой уровень

  • Хуки встраиваются в каждый вызов инструментов агента и могут запретить или переписать команду.
  • С ключом TypeSafe фрагменты правок и последнее сообщение агента уходят во внешний API.
Все причины и проверки

qkal/canny

Установка

Работает в

Ручная установка

git clone https://github.com/qkal/canny.git ~/.canny/src

Клон лежит в `~/.canny/src`, собирать нечего: скомпилированный CLI закоммичен.

Доступ и проверки

Как мы проверяем

Расширенный доступИнструмент запускает код или ходит в сеть, а внешние данные только читает.

  • Хуки встраиваются в каждый вызов инструментов агента и могут запретить или переписать команду.
  • С ключом TypeSafe фрагменты правок и последнее сообщение агента уходят во внешний API.

Это чужой код. Посмотрите файлы в репозитории перед установкой.

Что делает

Canny — слой контроля над ИИ-агентами для кода. Он подключается к Claude Code и Codex CLI через хуки и пишет журнал фактов сессии: какие файлы изменены, какие команды запущены и с каким кодом выхода завершились. Когда агент пытается закончить работу, а после последней правки кода не прошла ни одна проверка (тесты, сборка, линтер, тип-чек), Canny отклоняет завершение и называет файлы и последнюю команду. Дополнительные проверки по шаблонам: хук запрещает запись секретов (ключи AWS, GitHub, Stripe, OpenAI, Anthropic, приватные ключи), просит подтверждение при удалении тестов и добавлении `.skip`, переписывает `npm test | tail` под `set -o pipefail` и останавливает четвертый повтор упавшей команды. Решения принимает код без сети. Необязательная модель Jev от TypeSafe при заданном `TYPESAFE_API_KEY` добавляет заметки и может только смягчить правило.

Для кого. Разработчикам, которые отдают Claude Code или Codex длинные задачи и хотят видеть запущенные тесты, а не только слово «готово».

Подходит, если

  • Агент пишет «готово», не запустив тесты, и вы узнаете об этом только после сессии.
  • Файл с ключом API, записанный агентом, не должен попасть в коммит.
  • Упавшие тесты удаляют или помечают `.skip` вместо исправления кода.
  • После сессии нужно разобрать журнал: `canny replay` заново выводит вердикты по записанным фактам.

Не подходит, если

  • Работа идет в другом агенте: хуки написаны под формат событий Claude Code и Codex CLI.
  • На машине нет Node.js 22 или новее.
  • Задача без кода и тестов: гейт завершения срабатывает только после правок кода.

Пример запроса к агенту

Добавь функцию в math.js и не заканчивай, пока проверки проекта не пройдут.

Ограничения

Canny не опубликован в npm: репозиторий клонируют в `~/.canny/src` и запускают `node ~/.canny/src/dist/cli.js init`. Нужны git и Node.js 22 или новее. Журнал хранит командные строки, коды выхода и пути правленых файлов, поэтому секрет в аргументе команды попадет в журнал. При заданном `TYPESAFE_API_KEY` фрагменты правок до 4000 знаков и последнее сообщение агента уходят в API TypeSafe и кэшируются в `~/.canny/jev/`. Поля `verify`, `ignore`, `rules` и `allow` в `.canny.json` действуют только после `canny trust`, но агент с доступом к оболочке способен выполнить эту команду сам. Распознаются типовые записи файлов из оболочки, а `find -exec rm` или `python -c` Canny не видит.

Как отключить. Выполните `node ~/.canny/src/dist/cli.js remove` в корне проекта (или с `--global`). Каталог `~/.canny` с журналами удалите отдельно.

Частые вопросы

Как поставить Canny?

Вставьте промпт из раздела установки README в Claude Code или Codex внутри нужного проекта. Агент клонирует репозиторий в `~/.canny/src` и выполнит `init`. Вручную: `git clone https://github.com/qkal/canny.git ~/.canny/src`, затем `node ~/.canny/src/dist/cli.js init`.

Что Canny блокирует, а что только подсказывает?

Блокируют завершение без пройденной проверки, запись секретов и четвертый повтор одной упавшей команды. На удаление тестов Claude Code показывает запрос подтверждения, Codex отказывает. Ответы Jev остаются заметками для агента.

Нужен ли ключ TypeSafe?

Нет. Без `TYPESAFE_API_KEY` журнал, гейт завершения и проверки по шаблонам работают так же, а наружу ничего не уходит.

Как понять, что хуки включились?

Выполните `echo canny-check`, затем `node ~/.canny/src/dist/cli.js status`. Если в выводе есть сессия хотя бы с одним событием, хуки работают.

Какие агенты поддерживаются?

Claude Code и Codex CLI. `init` пишет хуки для найденных агентов, а флаги `--claude` и `--codex` выбирают одного.

Обсуждение

Вопросов и отзывов пока нет.

Проверяет diff и переписку с агентом: ловит ошибки в коде и расхождения между вашей просьбой и тем, что агент сделал. CLI, скилл и GitHub Action

СкиллРасширенный доступ502Звезды репозитория
Нужен VPN

OpenQodex проверяет ваши изменения перед пушем: сначала сканеры без модели, затем отдельный процесс Claude Code или Codex разбирает находки по вашему входу

CLIШирокий доступ1,1 тыс.Звезды репозитория

Шаблон проекта Playwright на TypeScript с правилами и 17 скиллами, чтобы Claude Code, Codex и Cursor писали тесты по стандарту

CLIРасширенный доступ262Звезды репозитория

Поправки, которые вы даете агенту, становятся файлами-правилами в репозитории и проверяются локально и в CI одной командой.

CLIРасширенный доступ179Звезды репозитория
Официальный

CLI Vercel для проверки кодинг-агентов на вашем фреймворке: запускает Claude Code, Codex и другие, считает долю успешных задач

CLIРасширенный доступ277Звезды репозитория

Коротко о README

README открывается примером живого запуска: Claude Code записал файл через heredoc, ничего не запустил и объявил работу законченной. На повторе того же запроса Canny отклонил завершение. Дальше описаны три хука, таблица проверок, порядок гейта завершения, настройка `.canny.json` и отличия Claude Code от Codex.

Бейдж для README

Сообщить о проблеме

Foxx AICanny
Foxx AI

Я Foxx AI и уже разобрал этот инструмент. Спросите про установку, настройку или что угодно еще, отвечу простыми словами.