Об этом проекте

claude-print представляет собой обертку командной строки для интерактивного терминального интерфейса (TUI) Claude Code. Его цель узка и конкретна: Anthropic направляет headless-режим (`claude -p`, путь SDK/pipe) через отдельный пул кредитов Agent SDK, в то время как интерактивный TUI тарифицируется по безлимитной подписке. В README указано, что путь тарификации определяется проверкой `isatty` внутри бинарного файла `claude`: вывод TTY помечает сессию как `cc_entrypoint=cli`, а pipe — как `cc_entrypoint=sdk-cli`. claude-print выделяет PTY, управляет TUI через него и стремится сохранить совместимость с выводом `claude -p`, при этом используя тарификацию по подписке. Принцип работы согласно README: - Запускает `claude` под PTY, чтобы `isatty` возвращал true. - Отслеживает одноразовый диалог доверия к проекту и автоматически отправляет клавишу подтверждения. - Внедряет промпт с помощью escape-последовательностей bracketed-paste, чтобы TUI воспринимал его как ввод пользователя без интерпретации оболочкой. - Устанавливает временный хук Claude Code Stop, который пишет в FIFO; процесс блокируется при чтении из него. - Читает транскрипт сессии в формате JSONL, извлекает ответ ассистента и выводит его в запрошенном формате. Ввод может поступать из позиционного аргумента, `--input-file` или non-TTY stdin; эти варианты взаимоисключающие. Форматы вывода: `text` (по умолчанию), `json` (однострочный объект с такими полями, как result, session_id, num_turns, duration_ms, cost_usd, claude_version и объект usage с количеством токенов ввода/вывода/кэша) и `stream-json` (воспроизведение событий транскрипта в реальном времени в формате JSONL). Документированные флаги включают `--model`, `--max-turns`, `--allowedTools`/`--disallowedTools`, `--dangerously-skip-permissions`, несколько настроек тайм-аута (общее время, первый вывод, stream-json, Stop hook), `--claude-binary`, `--config`, `--no-inherit-hooks`, `--verbose`, `--check`, `--version` и `--help`. Коды выхода: успех (0), ошибка ассистента (1), внутренняя ошибка (2), ошибка ввода (4), тайм-аут (124) и SIGINT (130). Конфигурация представляет собой необязательный TOML-файл по пути `$XDG_CONFIG_HOME/claude-print/config.toml` или `~/.config/claude-print/config.toml`, который можно переопределить с помощью `--config`. Документированные ключи: `model`, `inherit_hooks`, `max_turns` и `timeout_secs`. Каждый из них необязателен и проходит валидацию: при отсутствии файла используются значения по умолчанию, но нечитаемый, некорректный или выходящий за пределы диапазона конфиг приводит к выходу со статусом 2 вместо предупреждения. Установка выполняется командой `sh install.sh`, которая загружает предварительно собранный статический musl-бинарный файл из GitHub Releases, запускает `--check` и опционально копирует адаптер YAML в `~/.needle/agents/` для диспетчеризации флота NEEDLE. Также документирована сборка из исходников с помощью Cargo. Поддерживается только x86_64 Linux; aarch64/ARM и Windows ConPTY явно исключены. В README также описаны скрипты проверки тарификации, которые проверяют поле `entrypoint` в последнем транскрипте, и ежедневный canary-сервис/таймер. Заявленные ограничения: выделение PTY только в Linux, бинарный файл `claude` должен быть предварительно установлен и аутентифицирован, один промпт за один вызов без режима многоходовой сессии и задержка запуска примерно 2–5 секунд по сравнению с прямым HTTP-вызовом. Важным операционным требованием является то, что переменная `HOME` должна быть установлена на существующий, доступный для записи и непустой каталог; инструмент намеренно не пытается угадать `/root` или обратиться к базе данных passwd, и текущие сборки проверяют соблюдение этого условия перед запуском сессии, `--check` и `--version`. Заметки по устранению неполадок касаются отсутствия `/dev/ptmx`, несрабатывания Stop-хуков и состояний гонки транскриптов.