このプロジェクトについて

claude-printは、Claude CodeのインタラクティブなターミナルUI(TUI)をラップするコマンドラインツールです。その目的は明確で、Anthropicがヘッドレスモード(`claude -p`やSDK/パイプ経由)を個別のAgent SDKクレジットプールで課金し、インタラクティブTUIのみを無制限サブスクリプションで課金している点に対応することです。READMEによると、課金パスは`claude`バイナリ内部の`isatty`チェックによって決定されており、TTY出力の場合はセッションに`cc_entrypoint=cli`が、パイプの場合は`cc_entrypoint=sdk-cli`がタグ付けされます。claude-printはPTYを割り当ててTUIを駆動させることで、`claude -p`の出力との互換性を維持しつつ、サブスクリプションでの課金を目指しています。 READMEに記載されている動作原理は以下の通りです: - `claude`をPTYの下で起動し、`isatty`がtrueを返すようにします。 - 1回限りのプロジェクト信頼ダイアログを監視し、確認キー入力を自動的に送信します。 - ブラケットペースト(bracketed-paste)エスケープシーケンスを使用してプロンプトを注入し、TUIがシェルによる解釈なしにユーザー入力として処理するようにします。 - FIFOに書き込む一時的なClaude Code Stopフックをインストールし、プロセスはその読み取りでブロックされます。 - JSONL形式のセッション・トランスクリプトを読み取り、アシスタントのターンを抽出して要求された形式で出力します。 入力は、位置引数、`--input-file`、または非TTYの標準入力から受け取ることができ、これらは相互に排他的です。出力形式は`text`(デフォルト)、`json`(result、session_id、num_turns、duration_ms、cost_usd、claude_version、および入力/出力/キャッシュトークン数を含むusageオブジェクトなどのフィールドを持つ1行のオブジェクト)、および`stream-json`(トランスクリプトイベントのリアルタイムJSONLリプレイ)があります。ドキュメント化されているフラグには、`--model`、`--max-turns`、`--allowedTools`/`--disallowedTools`、`--dangerously-skip-permissions`、いくつかのタイムアウト設定(wall-clock、first-output、stream-json、Stop hook)、`--claude-binary`、`--config`、`--no-inherit-hooks`、`--verbose`、`--check`、`--version`、`--help`が含まれます。終了コードは、成功(0)、アシスタントエラー(1)、内部エラー(2)、入力エラー(4)、タイムアウト(124)、SIGINT(130)として定義されています。 設定は、`$XDG_CONFIG_HOME/claude-print/config.toml`または`~/.config/claude-print/config.toml`に配置するオプションのTOMLファイルで、`--config`で上書き可能です。定義されているキーは`model`、`inherit_hooks`、`max_turns`、`timeout_secs`で、それぞれオプションです。検証ルールとして、ファイルが存在しない場合はデフォルト値が使用されますが、読み取り不能、形式不正、または範囲外の設定がある場合は、警告して続行するのではなくステータス2で終了します。 インストールは`sh install.sh`で行い、GitHub Releasesからビルド済みの静的muslバイナリをダウンロードして`--check`を実行し、オプションでNEEDLEフリートディスパッチ用のアダプターYAMLを`~/.needle/agents/`にコピーします。Cargoを使用したソースからのビルド方法も記載されています。サポートされているのはx86_64 Linuxのみで、aarch64/ARMおよびWindows ConPTYは明示的に対象外となっています。また、READMEには、最新のトランスクリプトの`entrypoint`フィールドを検査する課金検証スクリプトと、日次カナリアサービス/タイマーについても記載されています。 明記されている制限事項は、LinuxのみのPTY割り当てであること、`claude`バイナリが既にインストールされ認証済みである必要があること、1回の起動につき1つのプロンプトのみでマルチターンセッションモードはないこと、および直接的なHTTPコールと比較して約2〜5秒の起動レイテンシが発生することです。重要な運用要件として、`HOME`環境変数が空ではなく、実在し、書き込み可能なディレクトリに設定されている必要があります。本ツールは意図的に`/root`を推測したりpasswdデータベースを参照したりせず、現在のビルドではセッション開始前、`--check`および`--version`の実行前にこの契約を強制します。トラブルシューティングノートには、`/dev/ptmx`の欠如、Stopフックが作動しない問題、およびトランスクリプトのレースコンディションについて記載されています。