প্রকল্প সম্পর্কে

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 অনুযায়ী এটি যেভাবে কাজ করে: - এটি একটি PTY-এর অধীনে `claude` স্পন করে যাতে `isatty` ট্রু (true) রিটার্ন করে। - এটি একবার আসা প্রজেক্ট ট্রাস্ট ডায়ালগটি পর্যবেক্ষণ করে এবং স্বয়ংক্রিয়ভাবে কনফার্মেশন কি-প্রেস পাঠায়। - এটি ব্র্যাকেট-পেস্ট এসকেপ সিকোয়েন্স ব্যবহার করে প্রম্পট ইনজেক্ট করে, যাতে TUI এটিকে শেল ইন্টারপ্রিটেশন ছাড়াই ইউজার ইনপুট হিসেবে গণ্য করে। - এটি একটি অস্থায়ী Claude Code Stop হুক ইনস্টল করে যা একটি FIFO-তে লেখে; প্রসেসটি সেই রিড-এর জন্য ব্লক হয়ে থাকে। - এটি JSONL সেশন ট্রান্সক্রিপ্ট পড়ে, অ্যাসিস্ট্যান্ট টার্নটি এক্সট্রাক্ট করে এবং অনুরোধ করা ফরম্যাটে তা প্রদান করে। ইনপুট পজিশনাল আর্গুমেন্ট, `--input-file`, অথবা নন-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`, বেশ কিছু টাইমআউট অপশন (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)-এর জন্য এক্সিট কোডগুলো ডকুমেন্ট করা হয়েছে। কনফিগারেশন ঐচ্ছিক TOML ফরম্যাটে `$XDG_CONFIG_HOME/claude-print/config.toml` অথবা `~/.config/claude-print/config.toml`-এ থাকে, যা `--config` দিয়ে ওভাররাইড করা যায়। ডকুমেন্ট করা কি-গুলোর মধ্যে রয়েছে `model`, `inherit_hooks`, `max_turns` এবং `timeout_secs`, যার প্রতিটি ঐচ্ছিক এবং ভ্যালিডেশন যুক্ত। ফাইল না থাকলে ডিফল্ট মান ব্যবহৃত হয়, তবে ফাইলটি পড়া না গেলে, ভুল ফরম্যাটে থাকলে বা রেঞ্জের বাইরে থাকলে এটি সতর্কবার্তার পরিবর্তে স্ট্যাটাস ২ দিয়ে এক্সিট করে। ইনস্টলেশন প্রক্রিয়া হলো `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 কলের তুলনায় প্রায় ২-৫ সেকেন্ড স্টার্টআপ ল্যাটেন্সি। একটি গুরুত্বপূর্ণ অপারেশনাল রিকোয়ারমেন্ট হলো `HOME` অবশ্যই একটি নন-এম্পটি, বিদ্যমান এবং রাইটেবল ডিরেক্টরি হতে হবে; টুলটি ইচ্ছাকৃতভাবে `/root` অনুমান করে না বা passwd ডাটাবেস চেক করে না, এবং বর্তমান বিল্ডগুলো সেশন স্টার্টআপ, `--check` এবং `--version`-এর আগে এই শর্তটি কার্যকর করে। ট্রাবলশুটিং নোটে `/dev/ptmx`-এর অনুপস্থিতি, Stop হুক কাজ না করা এবং ট্রান্সক্রিপ্ট রেস কন্ডিশন নিয়ে আলোচনা করা হয়েছে।