CLI
Агент в терминале
Агент, который читает, ищет и правит файлы в вашем проекте и выполняет команды на вашей машине с вашего одобрения.
Для этих команд нужен установленный CLI, в котором выполнен вход. См. Установка CLI.
Запустите notholy внутри проекта. Агент может использовать на вашей машине такие инструменты:
| Инструмент | Что делает |
|---|---|
read, grep, glob | Чтение и поиск по файлам |
edit, write | Изменение файлов |
bash | Выполнение команды |
cve_lookup, kb_search, web_search | Удалённые инструменты для исследований |
Режимы
| Режим | Поведение |
|---|---|
plan | Только чтение |
ask | По умолчанию. Спрашивает перед каждой записью и каждой командой |
auto-edit | Правит файлы без вопросов. Команды по-прежнему требуют подтверждения |
yolo | Никогда не спрашивает. Требует --yolo при каждом запуске |
Команды выполняются на вашей машине под вашу ответственность. Серверы NotHoly никогда ничего не запускают против ваших целей.
Инструкции проекта положите в NOTHOLY.md в корне. Содержимое файлов и вывод команд считаются данными, а не инструкциями для агента.
Флаги: --mode, --model, --yolo и -p, чтобы выполнить один промпт и выйти.
Slash-команды: /model, /effort (off, low, high или max), /mode (plan, ask или auto-edit), /cost, /compact, /autocompact, /mcp, /resume (последняя сессия), /exit. Сессии сохраняются в ~/.notholy/sessions с правами 600.
notholy --mode plan -p "map the auth flow in this repo"Engagements
notholy engage фиксирует, чего может касаться тест, и сверяет с этим команды до запуска. Нужны имя, скоуп и ссылка на разрешение: договор, URL программы или тикет. Скоуп принимает хосты, маски *., IP и CIDR. --exclude важнее скоупа, а --from и --until задают окно.
notholy engage init --name acme-q4 --scope "*.acme-staging.test,10.20.0.0/24" --exclude vpn.acme-staging.test --until 2026-12-20 --auth "contract 2026-117"
notholy engage status
notholy engage offПравила и лог лежат в ~/.notholy/engagements/<id>/, вне репозитория, поэтому репозиторий не может подсунуть свой скоуп. Ничего никуда не отправляется.
Пока engagement активен, агент извлекает цели из каждой команды bash до запуска. Команда в скоупе идёт через обычное подтверждение. Для цели вне скоупа нужно ввести хост, и исключение попадает в лог. yolo выключен. Для цели, известной только во время выполнения, например переменной shell, выводится предупреждение.
Каждое решение пишется в log.jsonl с командой, целями, кодом выхода и SHA-256 вывода, и каждая запись связана с хешем предыдущей.
notholy connect claude ставит ту же проверку как хук PreToolUse на вызовы Bash. Там команда вне скоупа запрещается.
Проверка читает текст shell и не резолвит DNS. Она ловит ошибки оператора и песочницей не является, поэтому команда может обратиться к хосту, которого в ней нет.
Длинные сессии
У каждой модели есть размер контекста, он указан как context_length в GET /v1/models. Агент берёт его оттуда и сжимает переписку до того, как запрос превысит примерно 80% контекста. Когда это происходит, появляется тусклая строка.
При сжатии старая часть переписки заменяется одной сводкой, которую пишет модель сессии отдельным вызовом без инструментов. В сводке остаются цель, решения, затронутые файлы, находки, выполненные команды и открытые задачи. Системное сообщение, ваш последний запрос и самые новые сообщения, примерно до 30% контекста, не меняются, но очень длинный вывод инструмента в этой части может быть обрезан посередине. Вызов инструмента и его результаты никогда не разделяются. Вызов для сводки оплачивается как обычный запрос и учитывается в /cost.
| Команда | Что делает |
|---|---|
/compact | Сжимает сейчас и выводит примерный размер до и после |
/compact keep the auth findings | То же, и говорит сводке, на чём сосредоточиться |
/autocompact on|off | Включает или выключает автоматическое сжатие для этой сессии. В начале сессии включено |
Если вызов для сводки не удался, агент оставляет самые новые сообщения, отбрасывает более старые и сообщает об этом. Прерывание или ошибка аккаунта, кредитов или лимита запросов останавливает сжатие, и история остаётся целой. Если API отвечает context_length_exceeded, агент сжимает переписку один раз и повторяет этот шаг. С /autocompact off вы получите ошибку.