claude-code
Toolog ведёт локальный журнал вызовов Claude Code
Claude News
claude-codeToolog пишет каждый вызов инструмента Claude Code в локальную базу SQLite и разбирает его двенадцатью правилами риска. Проект опубликован автором на Github и раздаётся как подписанное приложение для macOS 11 и новее, которое не делает ни одного сетевого запроса за пределы машины.
Коротко
- Сбор идёт двумя линиями: приёмник OTLP на 127.0.0.1:47318 и слежение за транскриптами в ~/.claude/projects через fsevents, записи соединяются по полю tool_use_id, а расхождение фиксируется как находка и не сглаживается.
- OTEL обрезает вход инструмента на 512 знаках, поэтому полный текст команды и диффа берётся из транскриптов, а решение о доступе и время выполнения приходят только по линии OTEL.
- Правила покрывают лишь описанные заранее случаи: у автора 77% хранилища составляли команды Bash без совпадений, и для них предусмотрена отдельная опциональная оценка локальной моделью в формате .gguf.
Журнал действий агента до сих пор существовал в виде прокрученного терминала: после закрытия сессии восстановить, какая команда выполнялась и кто её одобрил, было нечем. Toolog выглядит как попытка закрыть этот разрыв средствами, которые можно проверить: база лежит открытым файлом SQLite, а запрет на сеть подкреплён падением сборки. Для команд, которым нужен разбор инцидента, вероятно, важнее не оценки риска, а сама возможность доказать полноту записи.
Приёмник OTLP слушает только 127.0.0.1:47318, и нарушение этого правила ломает сборку
Обе линии сбора работают внутри одного процесса, который открывает окно с тремя видами: хронологией вызовов, разбором правил риска и состоянием самого захвата. Claude Code шлёт OTLP/HTTP на POST /v1/logs по адресу 127.0.0.1:47318, параллельно наблюдатель на fsevents читает транскрипты в ~/.claude/projects. Ни одна из линий не встаёт на критический путь агента: одна лишь читает файлы, другая отправляет данные без ожидания ответа.
В приложении нет аналитики, отчётов о сбоях, удалённой конфигурации, учётной записи и проверки обновлений; обновление предлагается делать командой brew upgrade --cask toolog. Тест в CI прогоняет полный импорт и все запросы окна, затем спрашивает у системы, какие сокеты держит процесс, и любой адрес вне петлевого интерфейса роняет сборку. Второй тест открывает сокет наружу и проверяет, что первая проверка действительно падает.
Локальная модель на 4,6 млрд параметров весит 3,1 ГБ при хранилище в 166 МБ
Вторая оценка остаётся совещательной: она не становится правилом, не задаёт уровень серьёзности и не попадает в сводные числа, для неё выделены отдельная колонка, отдельный раздел и отдельный блок карточки. Toolog линкует llama.cpp, но загрузчика вместе с ней не получает: файл .gguf скачивается вручную, путь задаётся командой toolog model set, а в поисковой строке оценки модели отбираются запросом @model-risk:>=4, срабатывания правил запросом @risk:high.
Модель квантованная и, по замерам автора на его же хранилище, оценивает безобидный cargo test на 2 балла, а опасность dd по сырому устройству признала только после того, как критерии прописали явно. В релизе дополнительно проверяется, что otool -L на собранном бинарнике не показывает ни libcurl, ни библиотеку TLS.
doctor --fix отказывается работать, если уже настроен эндпоинт OTEL вне петлевого адреса
Установка идёт через brew install --cask zaghaghi/tap/toolog или загрузку .dmg из релизов; сборка универсальная, подписана Developer ID и нотаризована, поэтому предупреждения Gatekeeper не будет. Один и тот же бинарник служит и приложением в строке меню, и командной строкой: toolog doctor --fix настраивает телеметрию Claude Code, toolog backfill импортирует накопленную историю.
doctor --fix пишет только в ~/.claude/settings.json, сливает значения вместо перезаписи и оставляет копию с отметкой времени. Команда toolog uninstall возвращает файл побайтово из этой копии, а если его правили после установки, удаляет только шесть собственных ключей и поясняет, почему не восстановила остальное. Записанная история сохраняется, пока не добавлен --delete-data.
База остаётся обычным файлом SQLite намеренно: в проекте объясняют это тем, что так утверждения из PRIVACY.md проверяются без доверия к самой программе. Шифрование данных на диске рассматривали и отклонили в пользу FileVault, поэтому доступ к диску означает и доступ к журналу вызовов.
Что остаётся вне записи
Решения о доступе и задержки существуют только для сессий, записанных вживую: линия OTEL не воспроизводится, сессия, прошедшая при выключенном toolog, восстанавливается через backfill без слоя одобрений, а toolog verify сообщает, каких именно сессий это касается. Стоимость запросов сохраняется, но нигде не показывается: записи api_request считаются, траты и токены не выводятся. Про Linux сказано, что перенос потребует юнита systemd, сроков нет.
Комментарии
Пока никто не написал. Будьте первым.
Присоединяйтесь к разговору
Войдите через Google, чтобы оставить комментарий. Имя и аватар подставятся из вашего профиля Google, а комментарий появится после модерации.
Из Google мы используем только имя и аватар. Почту не сохраняем.
