À propos du projet
claude-print est un wrapper en ligne de commande pour l'interface utilisateur terminal (TUI) interactive de Claude Code. Son objectif est précis et explicite : Anthropic route le mode headless (`claude -p`, le chemin SDK/pipe) via un pool de crédits Agent SDK distinct, tandis que seule la TUI interactive est facturée via un abonnement illimité. Le README indique que le chemin de facturation est décidé par une vérification `isatty` à l'intérieur du binaire `claude` — une sortie TTY marque la session `cc_entrypoint=cli`, un pipe la marque `cc_entrypoint=sdk-cli`. claude-print alloue un PTY, pilote la TUI à travers celui-ci, et vise à rester compatible avec la sortie de `claude -p` tout en étant facturé via l'abonnement.
Fonctionnement, selon le README :
- Lance `claude` sous un PTY pour que `isatty` retourne vrai.
- Surveille la boîte de dialogue de confiance du projet (unique) et envoie automatiquement la touche de confirmation.
- Injecte le prompt via des séquences d'échappement bracketed-paste, afin que la TUI le traite comme une entrée utilisateur sans interprétation par le shell.
- Installe un hook Claude Code Stop temporaire qui écrit dans un FIFO ; le processus bloque sur cette lecture.
- Lit la transcription de session JSONL, extrait le tour de l'assistant et l'émet dans le format demandé.
L'entrée peut provenir d'un argument positionnel, de `--input-file` ou d'un stdin non-TTY ; ceux-ci sont mutuellement exclusifs. Les formats de sortie sont `text` (par défaut), `json` (un objet sur une seule ligne avec des champs tels que result, session_id, num_turns, duration_ms, cost_usd, claude_version et un objet usage avec les comptes de tokens d'entrée/sortie/cache) et `stream-json` (reproduction JSONL en temps réel des événements de transcription). Les drapeaux documentés incluent `--model`, `--max-turns`, `--allowedTools`/`--disallowedTools`, `--dangerously-skip-permissions`, plusieurs réglages de timeout (wall-clock, first-output, stream-json, Stop hook), `--claude-binary`, `--config`, `--no-inherit-hooks`, `--verbose`, `--check`, `--version` et `--help`. Les codes de sortie sont documentés pour le succès (0), l'erreur assistant (1), l'erreur interne (2), l'erreur d'entrée (4), le timeout (124) et SIGINT (130).
La configuration est un fichier TOML optionnel situé dans `$XDG_CONFIG_HOME/claude-print/config.toml` ou `~/.config/claude-print/config.toml`, modifiable avec `--config`. Les clés documentées sont `model`, `inherit_hooks`, `max_turns` et `timeout_secs`, chacune optionnelle, avec validation : un fichier manquant revient aux valeurs par défaut, mais une configuration illisible, malformée ou hors plage quitte avec le statut 2 plutôt que d'avertir et de continuer.
L'installation se fait via `sh install.sh`, qui télécharge un binaire statique musl pré-construit depuis GitHub Releases, exécute `--check`, et copie optionnellement un adaptateur YAML dans `~/.needle/agents/` pour le dispatch de la flotte NEEDLE. La compilation depuis les sources avec Cargo est également documentée. Seul Linux x86_64 est supporté ; aarch64/ARM et Windows ConPTY sont explicitement hors portée. Le README documente également des scripts de vérification de facturation qui inspectent le champ `entrypoint` de la dernière transcription ainsi qu'un service/timer canary quotidien.
Limitations énoncées : allocation PTY limitée à Linux, le binaire `claude` doit déjà être installé et authentifié, un seul prompt par invocation sans mode de session multi-tours, et environ 2 à 5 secondes de latence au démarrage par rapport à un appel HTTP direct. Une exigence opérationnelle majeure est que `HOME` doit être défini sur un répertoire non vide, existant et accessible en écriture ; l'outil ne devine délibérément pas `/root` et ne consulte pas la base de données passwd, et les builds actuels imposent ce contrat avant le démarrage de la session, `--check` et `--version`. Les notes de dépannage couvrent l'absence de `/dev/ptmx`, les hooks Stop qui ne se déclenchent pas et les conditions de concurrence de transcription.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.