इस प्रोजेक्ट के बारे में
claude-print, Claude Code के इंटरैक्टिव टर्मिनल UI के चारों ओर एक कमांड-लाइन रैपर है। इसका उद्देश्य स्पष्ट और सीमित है: 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 रिटर्न करे।
- वन-टाइम प्रोजेक्ट ट्रस्ट डायलॉग की निगरानी करता है और स्वचालित रूप से पुष्टिकरण की-प्रेस भेजता है।
- ब्रैकेटेड-पेस्ट एस्केप सीक्वेंस का उपयोग करके प्रॉम्प्ट इंजेक्ट करता है, ताकि TUI इसे बिना शेल इंटरप्रिटेशन के यूजर इनपुट के रूप में ले।
- एक अस्थायी Claude Code Stop हुक इंस्टॉल करता है जो FIFO में लिखता है; प्रोसेस उस रीड पर ब्लॉक हो जाती है।
- JSONL सत्र ट्रांसक्रिप्ट को पढ़ता है, असिस्टेंट टर्न को निकालता है, और इसे अनुरोधित फॉर्मेट में उत्सर्जित करता है।
इनपुट एक पोजीशनल आर्गुमेंट, `--input-file`, या नॉन-TTY stdin से आ सकता है; ये परस्पर अनन्य (mutually exclusive) हैं। आउटपुट फॉर्मेट `text` (डिफ़ॉल्ट), `json` (एक सिंगल-लाइन ऑब्जेक्ट जिसमें result, session_id, num_turns, duration_ms, cost_usd, claude_version और input/output/cache टोकन काउंट के साथ एक usage ऑब्जेक्ट जैसे फ़ील्ड होते हैं) और `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 फ्लीट डिस्पैच के लिए `~/.needle/agents/` में एक एडॉप्टर YAML कॉपी करता है। Cargo के साथ सोर्स से बिल्ड करना भी प्रलेखित है। केवल x86_64 Linux समर्थित है; aarch64/ARM और Windows ConPTY स्पष्ट रूप से दायरे से बाहर हैं। README बिलिंग-वेरिफिकेशन स्क्रिप्ट्स का भी दस्तावेजीकरण करता है जो `entrypoint` फ़ील्ड के लिए नवीनतम ट्रांसक्रिप्ट का निरीक्षण करते हैं और एक दैनिक कैनरी सर्विस/टाइमर का उपयोग करते हैं।
बताई गई सीमाएँ: केवल Linux PTY आवंटन, `claude` बाइनरी का पहले से इंस्टॉल और ऑथेंटिकेटेड होना आवश्यक है, प्रति इनवोकेशन एक प्रॉम्प्ट (बिना मल्टी-टर्न सेशन मोड के), और डायरेक्ट HTTP कॉल की तुलना में लगभग 2-5 सेकंड का स्टार्टअप लेटेंसी। एक प्रमुख परिचालन आवश्यकता यह है कि `HOME` को एक गैर-खाली, मौजूदा और राइटेबल डायरेक्टरी पर सेट किया जाना चाहिए; टूल जानबूझकर `/root` का अनुमान नहीं लगाता है या passwd डेटाबेस से परामर्श नहीं करता है, और वर्तमान बिल्ड्स सेशन स्टार्टअप, `--check` और `--version` से पहले इस अनुबंध को लागू करते हैं। समस्या निवारण नोट्स में गायब `/dev/ptmx`, Stop हुक्स का फायर न होना, और ट्रांसक्रिप्ट रेस कंडीशंस शामिल हैं।
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.