Sobre o projeto

claude-print é um wrapper de linha de comando para a interface de usuário de terminal (TUI) interativa do Claude Code. Seu propósito é estreito e explícito: a Anthropic roteia o modo headless (`claude -p`, o caminho do SDK/pipe) através de um pool de créditos separado do Agent SDK, enquanto apenas a TUI interativa é faturada contra uma assinatura ilimitada. O README afirma que o caminho de faturamento é decidido por uma verificação `isatty` dentro do binário `claude` — a saída TTY marca a sessão como `cc_entrypoint=cli`, enquanto um pipe a marca como `cc_entrypoint=sdk-cli`. O claude-print aloca um PTY, opera a TUI através dele e visa manter a compatibilidade de saída com `claude -p`, enquanto fatura contra a assinatura. Como funciona, segundo o README: - Inicia o `claude` sob um PTY para que `isatty` retorne verdadeiro. - Monitora o diálogo de confiança do projeto (ocorrência única) e envia a tecla de confirmação automaticamente. - Injeta o prompt usando sequências de escape de colagem entre colchetes (bracketed-paste), para que a TUI o trate como entrada do usuário sem interpretação do shell. - Instala um hook temporário de Stop do Claude Code que escreve em um FIFO; o processo bloqueia nessa leitura. - Lê a transcrição da sessão em JSONL, extrai o turno do assistente e o emite no formato solicitado. A entrada pode vir de um argumento posicional, `--input-file` ou stdin não-TTY; estes são mutuamente exclusivos. Os formatos de saída são `text` (padrão), `json` (um objeto de linha única com campos como result, session_id, num_turns, duration_ms, cost_usd, claude_version e um objeto de uso com contagens de tokens de entrada/saída/cache) e `stream-json` (reprodução JSONL em tempo real de eventos da transcrição). As flags documentadas incluem `--model`, `--max-turns`, `--allowedTools`/`--disallowedTools`, `--dangerously-skip-permissions`, vários controles de timeout (wall-clock, first-output, stream-json, Stop hook), `--claude-binary`, `--config`, `--no-inherit-hooks`, `--verbose`, `--check`, `--version` e `--help`. Os códigos de saída são documentados para sucesso (0), erro do assistente (1), erro interno (2), erro de entrada (4), timeout (124) e SIGINT (130). A configuração é um TOML opcional em `$XDG_CONFIG_HOME/claude-print/config.toml` ou `~/.config/claude-print/config.toml`, substituível com `--config`. As chaves documentadas são `model`, `inherit_hooks`, `max_turns` e `timeout_secs`, cada uma opcional, com validação: a ausência do arquivo recorre aos padrões, mas uma configuração ilegível, malformada ou fora de intervalo encerra com status 2 em vez de emitir um aviso e continuar. A instalação é feita via `sh install.sh`, que baixa um binário estático musl pré-compilado do GitHub Releases, executa `--check` e, opcionalmente, copia um YAML de adaptador para `~/.needle/agents/` para despacho de frota NEEDLE. A compilação a partir do código-fonte com Cargo também é documentada. Apenas Linux x86_64 é suportado; aarch64/ARM e Windows ConPTY estão explicitamente fora de escopo. O README também documenta scripts de verificação de faturamento que inspecionam o campo `entrypoint` na transcrição mais recente e um serviço/timer de canário diário. Limitações declaradas: alocação de PTY apenas para Linux, o binário `claude` deve estar previamente instalado e autenticado, um prompt por invocação sem modo de sessão de múltiplos turnos, e aproximadamente 2 a 5 segundos de latência de inicialização em comparação com uma chamada HTTP direta. Um requisito operacional proeminente é que `HOME` deve estar definido para um diretório existente, gravável e não vazio; a ferramenta deliberadamente não tenta adivinhar `/root` nem consulta o banco de dados passwd, e as builds atuais impõem este contrato antes da inicialização da sessão, `--check` e `--version`. Notas de solução de problemas cobrem a ausência de `/dev/ptmx`, hooks de Stop que não disparam e condições de corrida de transcrição.