claude CLI: वे फ़्लैग जो नतीजा बदल देते हैं
ज़्यादातर लोग Claude Code कमांड लाइन की तीन चीज़ें सीखते हैं — claude, claude -c और claude -p — और वहीं रुक जाते हैं। अगर आप इसे सिर्फ़ सामने बैठकर चलाते हैं तो वहाँ रुकना ठीक है। लेकिन जैसे ही आप Claude Code को किसी स्क्रिप्ट, CI जॉब, बैकग्राउंड क्यू या किसी साथी के हाथों में देते हैं, फ़्लैग सुविधा नहीं रह जाते — वे तय करते हैं कि रन एक डॉलर में निपटेगा या एक घंटे अटका रहेगा।
यह पेज रेफ़रेंस तालिका की दूसरी प्रति नहीं है। यह है इस सतह को सीखने का क्रम, वे फ़्लैग जो सचमुच नतीजा बदलते हैं, और वे चार जाल जिनसे लोगों का असली समय बर्बाद हुआ है।
- आप कौन-से छह तरह के सेशन शुरू कर सकते हैं, और कौन-सा फ़्लैग कौन-सा चुनता है
- वह पाँच-फ़्लैग अनुबंध जो बिना निगरानी वाले रन को सीमित, जवाबदेह और पार्स करने योग्य बनाता है
- --append-system-prompt बदलकर --continue दोबारा चलाने पर कुछ होता क्यों नहीं दिखता — रिकॉर्ड किए गए प्रॉम्प्ट का नियम
- --bare, --safe-mode और --restricted में क्या फ़र्क है, और कब कौन-सा चुनें
- शेल से बैकग्राउंड सेशन चलाना: agents, attach, logs, respawn, rm, daemon
- वे फ़्लैग जोड़ियाँ जिन्हें लोग गड्डमड्ड करते हैं: --tools बनाम --allowedTools बनाम --disallowedTools
सवाल से शुरू करें: यह किस तरह का सेशन है?
बाक़ी हर फ़ैसला इसी से निकलता है। Claude Code छह मूलतः अलग चीज़ें शुरू कर सकता है, और जो फ़्लैग इनमें से एक चुनता है वही अक्सर आपका सबसे पहला टाइप किया हुआ होता है।
| आप चाहते हैं | फ़्लैग | आपको मिलता है |
|---|---|---|
| एक बातचीत जिसे आप देखते रहें | (कोई नहीं) | इसी टर्मिनल में इंटरैक्टिव सेशन |
| एक जवाब, फिर बाहर | -p / --print | नॉन-इंटरैक्टिव रन, आउटपुट stdout पर |
| ऐसा काम जो इस टर्मिनल के बाद भी चले | --bg / --background | एक बैकग्राउंड सेशन; यह अपनी ID और उसे सँभालने का तरीक़ा छापता है |
| प्रयोग के लिए एक अलग शाखा | -w / --worktree | <repo>/.claude/worktrees/<name> के अंतर्गत एक git worktree |
| Anthropic की मशीनों पर काम | --cloud | एक क्लाउड सेशन, या किसी मौजूदा सेशन में कतार में डाला गया फ़ॉलो-अप |
| इस सेशन को फ़ोन से चलाना | --rc / --remote-control | एक इंटरैक्टिव सेशन जिसे claude.ai या Claude ऐप से भी नियंत्रित किया जा सकता है |
इनमें से दो को मिलाया नहीं जा सकता: --bg और -p परस्पर अनन्य हैं, क्योंकि एक तुरंत लौट आता है और दूसरा जवाब का इंतज़ार करता है। अगर आप बैकग्राउंड में Claude सेशन की जगह शेल कमांड चलाना चाहते हैं, तो --bg को --exec के साथ जोड़ें:
Run the test suite as a background job, not a Claude session
claude --bg --exec 'pytest -x'
और --bg शुरू होने से पहले उस डायरेक्टरी के लिए वर्कस्पेस ट्रस्ट जाँचता है — इसलिए अविश्वसनीय रिपॉज़िटरी में बैकग्राउंड सेशन आधे रास्ते में नहीं, शुरू में ही विफल हो जाता है।
बिना निगरानी वाले रन के लिए पाँच-फ़्लैग अनुबंध
इस पेज की सबसे क़ीमती चीज़ यही है। बिना निगरानी वाले claude -p रन के बिगड़ने के तीन तरीक़े हैं जो इंटरैक्टिव सेशन में होते ही नहीं: यह उन परमिशन प्रॉम्प्ट पर अटक सकता है जिनका जवाब देने वाला कोई नहीं, आपकी उम्मीद से कहीं ज़्यादा देर लूप में चल सकता है, और जब आपकी स्क्रिप्ट को डेटा चाहिए तब गद्य उगल सकता है। पाँच फ़्लैग तीनों को बंद कर देते हैं।
- `claude -p "query"` जवाब छापकर बाहर निकल जाता है। नीचे सब कुछ सिर्फ़ print मोड का है, इसलिए यह फ़्लैग बाक़ी सबका दरवाज़ा है।
- डिफ़ॉल्ट `host` है, जो प्रॉम्प्ट को Agent SDK होस्ट या `--permission-prompt-tool` को भेजता है। जब कोई जवाब नहीं दे सकता, जैसे cron जॉब या CI स्टेप में, तब `--permission-prompts none` दें: रन होस्ट से पूछना या उसका इंतज़ार करना बंद कर देता है, जो भी प्रॉम्प्ट करवाता वह अस्वीकृत हो जाता है जब तक कोई `PermissionRequest` हुक उसे अनुमति न दे, और Claude को दोबारा कोशिश न करने को कहा जाता है। बिना किसी होस्ट वाला `-p` रन पहले से ही ऐसे अनुरोध अस्वीकार करता है; वहाँ यह फ़्लैग मुख्यतः दोबारा कोशिशें रोकता है। v2.1.259 या बाद का वर्ज़न चाहिए। इसे संकरे `--allowedTools` नियमों के साथ जोड़ें ताकि अस्वीकृतियाँ आम न होकर दुर्लभ हों।
- डिफ़ॉल्ट रूप से कोई टर्न सीमा नहीं है। `--max-turns 3` सीमा पूरी होने पर त्रुटि के साथ बाहर निकलता है। इसे बेक़ाबू एजेंटिक लूप के ख़िलाफ़ ट्रिपवायर की तरह इस्तेमाल करें, बजट की तरह नहीं।
- `--max-budget-usd 5.00` तब रुक जाता है जब क्लाइंट-साइड लागत अनुमान सीमा तक पहुँचता है। सबएजेंट का ख़र्च इसमें गिना जाता है; सीमा पूरी होने पर एक और सबएजेंट शुरू करना `Budget limit reached` के साथ विफल होता है और चल रहे बैकग्राउंड सबएजेंट रोक दिए जाते हैं। सीमा लागू होने के लिए v2.1.217 या बाद का वर्ज़न चाहिए।
- `--output-format json` आपको एक संरचित लिफ़ाफ़ा देता है। `--json-schema '<schema>'` इससे आगे जाता है: Claude Code अंतिम उत्तर को आपके JSON Schema के विरुद्ध मान्य करता है और अमान्य स्कीमा पर शुरू में ही त्रुटि देता है, इसलिए आपकी स्क्रिप्ट को गद्य पर regex चलाने की ज़रूरत नहीं पड़ती।
A CI step that cannot hang, cannot loop forever, and cannot overspend
claude -p "Review the staged diff and list bugs" \ --permission-prompts none \ --allowedTools "Read" "Bash(git diff *)" \ --max-turns 6 \ --max-budget-usd 2.00 \ --output-format json
- Claude Code सीमा को अपने क्लाइंट-साइड लागत अनुमान से जाँचता है, जो आपके असल बिल से अलग हो सकता है।
- जब आप --continue या --resume से किसी बातचीत में लौटते हैं, तो पिछले रनों से बहाल किए गए कुल योग सीमा में नहीं गिने जाते — इसलिए $2 की सीमा में तीन बार बहाल किए गए रन कुल मिलाकर $2 से ज़्यादा ख़र्च कर सकते हैं।
- इसे एक रन के लिए सर्किट ब्रेकर मानें। पूरे खाते या प्रोजेक्ट की असली ऊपरी सीमा के लिए Hard Spend Caps देखें।
इंसान के बिना रन को आगे बढ़ने देने के पूरे रुख़ के लिए — क्या अनुमति दें, क्या छिपाएँ, क्या लॉग करें — स्वायत्त रनों को सख़्त बनाना और हेडलेस मोड और Agent SDK देखें। प्रोवाइडर-स्तर की सीमाओं के लिए Hard Spend Caps।
सिस्टम-प्रॉम्प्ट परिवार, और उसमें छिपा जाल
पाँच फ़्लैग सिस्टम प्रॉम्प्ट को आकार देते हैं। चार उसका टेक्स्ट तय करते हैं; पाँचवाँ तय करता है कि बातचीत वही टेक्स्ट रखती है जिससे वह शुरू हुई थी या नहीं।
| फ़्लैग | क्या करता है |
|---|---|
--system-prompt | पूरे डिफ़ॉल्ट प्रॉम्प्ट की जगह आपका टेक्स्ट रखता है |
--system-prompt-file | उसकी जगह किसी फ़ाइल की सामग्री रखता है |
--append-system-prompt | डिफ़ॉल्ट प्रॉम्प्ट के अंत में आपका टेक्स्ट जोड़ता है |
--append-system-prompt-file | डिफ़ॉल्ट प्रॉम्प्ट के अंत में किसी फ़ाइल की सामग्री जोड़ता है |
--system-prompt-snapshot | off हर अनुरोध पर प्रॉम्प्ट दोबारा बनाता है; on (डिफ़ॉल्ट) रिकॉर्ड किया हुआ दोबारा इस्तेमाल करता है |
जोड़ने और बदलने के बीच चुनाव पहचान का चुनाव है। जोड़ना Claude Code के डिफ़ॉल्ट टूल मार्गदर्शन, सुरक्षा निर्देश और कोडिंग परंपराएँ बनाए रखता है और उन पर आपके नियम चढ़ा देता है — प्रति-रन निर्देश, आउटपुट फ़ॉर्मैट या प्रोजेक्ट संदर्भ के लिए सही। बदलना यह सब हटा देता है, टूल मार्गदर्शन समेत, इसलिए यह तभी सही है जब सतह सचमुच कोडिंग असिस्टेंट न हो: किसी ऐसी पाइपलाइन में गैर-कोडिंग एजेंट जिसे कोई देख नहीं रहा। अगर आप बदलते हैं, तो काम को जो भी चाहिए उसकी ज़िम्मेदारी आपकी है।
आप इन्हें मिला सकते हैं। जोड़ने वाला फ़्लैग बदलने वाले फ़्लैग के साथ देने पर डिफ़ॉल्ट बदल जाता है और फिर आपका टेक्स्ट जुड़ता है। v2.1.283 से आप किसी फ़्लैग को उसके अपने फ़ाइल रूप के साथ भी दे सकते हैं — --append-system-prompt और --append-system-prompt-file — और Claude Code दोनों इस्तेमाल करता है, फ़ाइल की सामग्री पहले, चाहे आपने उन्हें किसी भी क्रम में टाइप किया हो।
- Claude Code सिस्टम प्रॉम्प्ट को एक बार, बातचीत के पहले अनुरोध पर बनाता है, और उसे सेशन में रिकॉर्ड कर लेता है।
- बातचीत के कॉम्पैक्ट होने तक, बाद का हर अनुरोध उसी रिकॉर्ड किए प्रॉम्प्ट का उपयोग करता है — --resume या --continue के बाद भी।
- तो आप अपना --append-system-prompt टेक्स्ट बदलते हैं, claude --continue दोबारा चलाते हैं, और कुछ नहीं बदलता। फ़्लैग टूटा नहीं है; बातचीत अब भी रिकॉर्डिंग इस्तेमाल कर रही है।
- नया टेक्स्ट तब असर करता है जब बातचीत कॉम्पैक्ट होती है, या बिल्कुल नई बातचीत में।
- --continue रनों के बीच शब्दों पर काम करने के लिए --system-prompt-snapshot off दें और प्रॉम्प्ट हर अनुरोध पर दोबारा बनेगा। v2.1.257 या बाद का वर्ज़न चाहिए।
स्थिर निर्देशों और प्रति-रन संदर्भ को मिलाने वाले बदलने वाले प्रॉम्प्ट में एक और तरकीब जानने लायक़ है। दोनों के बीच ऐसी लाइन रखें जिसमें सिर्फ़ __SYSTEM_PROMPT_DYNAMIC_BOUNDARY__ हो: Claude Code पहली ऐसी लाइन पर बाँटता है और उसे हटा देता है, इसलिए ऊपर का हिस्सा कैश में रहता है जबकि नीचे का हिस्सा बदलता रहता है। v2.1.275 या बाद का वर्ज़न चाहिए। यह आपके बिल के लिए क्यों मायने रखता है, यह Prompt Caching का विषय है।
और बहु-उपयोगकर्ता स्क्रिप्टेड वर्कलोड के लिए, --exclude-dynamic-system-prompt-sections प्रति-उपयोगकर्ता संदर्भ — जैसे ऑटो-मेमोरी की जगह — को सिस्टम प्रॉम्प्ट से हटाकर पहले यूज़र मैसेज में ले जाता है, ताकि अलग-अलग मशीनों पर वही काम एक ही कैश्ड प्रीफ़िक्स साझा करे। यह सिर्फ़ डिफ़ॉल्ट प्रॉम्प्ट पर लागू होता है और --system-prompt या --system-prompt-file सेट करने पर नज़रअंदाज़ हो जाता है।
चीज़ें बंद करने वाले तीन फ़्लैग, और वे एक जैसे नहीं हैं
लोग इन्हें एक-दूसरे की जगह इस्तेमाल करते हैं और फिर सोचते हैं कि लक्षण क्यों नहीं हिला। ये तीन अलग समस्याएँ हल करते हैं।
--bare | --safe-mode | --restricted | |
|---|---|---|---|
| यह कौन-सी समस्या हल करता है | स्क्रिप्टेड कॉल के लिए स्टार्टअप बहुत धीमा है | मेरी कॉन्फ़िगरेशन टूटी है और मुझे नहीं पता कौन-सा हिस्सा | इवैल हार्नेस को इस साझा मशीन को नहीं छूना चाहिए |
| CLAUDE.md, स्किल, कमांड, सबएजेंट, प्लगइन, MCP, ऑटो मेमोरी | खोजे नहीं जाते | लोड नहीं होते | सिर्फ़ मैनेज्ड सेटिंग और --settings लोड होते हैं |
| बिल्ट-इन टूल | Bash, फ़ाइल रीड, फ़ाइल एडिट | सामान्य रूप से काम करते हैं | कमांड/कोड चलाने वाले टूल और WebFetch हटा दिए जाते हैं, जब तक --tools में अलग-अलग नाम से न दिए जाएँ |
| फ़ाइल एक्सेस | सामान्य | सामान्य | वर्किंग डायरेक्टरी तक सीमित |
bypassPermissions | अनुमत | अनुमत | अस्वीकृत |
| मैनेज्ड पॉलिसी | लागू होती है | फिर भी लागू रहती है, पॉलिसी हुक और स्टेटस लाइन समेत | लागू होती है |
| साइड इफ़ेक्ट | CLAUDE_CODE_SIMPLE सेट करता है | CLAUDE_CODE_SAFE_MODE सेट करता है | क्लाउड सेशन बनाने से इनकार करता है |
तालिका को इरादे की प्रगति की तरह पढ़ें: --bare रफ़्तार के लिए है, --safe-mode निदान के लिए, --restricted नियंत्रण के लिए। एक काम की बात: --add-dir से दी गई डायरेक्टरी की स्किल --bare में भी लोड होती हैं, और इसी तरह आप बाक़ी सब छीन लिए गए रन में ठीक एक क्षमता बनाए रखते हैं।
जब कुछ गड़बड़ हो और आप तय न कर पाएँ कि दोष Claude Code का है या आपकी अपनी कॉन्फ़िगरेशन का, तब सबसे पहले --safe-mode आज़माएँ — इसमें यह पता लगाना भी शामिल है कि कहीं कोई कस्टमाइज़ेशन ही ऑटोमैटिक मॉडल फ़ॉलबैक तो नहीं चला रहा। इसे claude doctor के साथ जोड़ें, जो सेशन शुरू किए बिना रीड-ओनली इंस्टॉलेशन और सेटिंग निदान छापता है। (सेशन के अंदर वाला /doctor कमांड अलग चीज़ है: वह सुधार भी लागू कर सकता है।) लक्षण से शुरू होने वाली और डिबगिंग Claude Code की समस्याएँ सुलझाना में है। --restricted के लिए v2.1.248 या बाद का वर्ज़न चाहिए।
शेल से बैकग्राउंड सेशन चलाना
जब आप --bg से सेशन शुरू करते हैं, तो टर्मिनल एक कंट्रोल प्लेन बन जाता है। पूरे जीवनचक्र के लिए एक कमांड है, और किसी के लिए इंटरैक्टिव UI खोलना ज़रूरी नहीं।
- समानांतर बैकग्राउंड सेशन की निगरानी और डिस्पैच के लिए एजेंट व्यू खोलता है। स्क्रिप्टिंग के लिए `--json` सक्रिय सेशन को JSON ऐरे के रूप में छापता है, और `--json --all` पूरे हो चुके सेशन भी शामिल करता है। `--cwd <path>` उस डायरेक्टरी के अंतर्गत शुरू हुए सेशन तक सीमित करता है। व्यू खोलने के लिए इंटरैक्टिव टर्मिनल चाहिए; JSON रूप के लिए नहीं।
- `claude logs <id|name>` किसी बैकग्राउंड सेशन का हाल का आउटपुट छापता है। v2.1.290 से आप ID की जगह चल रहे सेशन के नाम का एक हिस्सा दे सकते हैं — इसलिए `claude logs auth` अक्सर काफ़ी होता है।
- `claude attach <id|name>` किसी बैकग्राउंड सेशन को इस टर्मिनल में ले आता है। आंशिक नाम मिलान के लिए भी v2.1.290 या बाद का वर्ज़न चाहिए।
- `claude respawn <id>` किसी सेशन को, चल रहा हो या रुका हो, उसकी बातचीत सुरक्षित रखते हुए रीस्टार्ट करता है। `--all` हर चल रहे सेशन को रीस्टार्ट करता है — Claude Code बाइनरी अपग्रेड करने के बाद की सही चाल।
- `claude stop <id>` (`claude kill` भी) सेशन को रोकता है। `claude rm <id>` उसे सूची से हटाता है; ट्रांसक्रिप्ट आपकी मशीन पर रहता है और `claude --resume` से अब भी पहुँच में रहता है। अगर सेशन के worktree की वजह से हटाने से मना किया जाए, तो इनकार संदेश अगला सही फ़्लैग ठीक-ठीक छापता है — `--discard-unpushed` (v2.1.260+) या `--force-remove-worktree` (v2.1.268+)।
- बैकग्राउंड सेशन एक सुपरवाइज़र प्रक्रिया द्वारा होस्ट किए जाते हैं। `claude daemon status` उसकी स्थिति, वर्ज़न, सॉकेट डायरेक्टरी और वर्कर संख्या छापता है, और यदि वह चल नहीं रहा तो 1 के साथ बाहर निकलता है। `claude daemon logs` `~/.claude/daemon.log` को फ़ॉलो करता है। `claude daemon stop --any --keep-workers` सुपरवाइज़र को रीस्टार्ट करता है और सेशन को ज़िंदा छोड़ देता है ताकि अगला सुपरवाइज़र उनसे दोबारा जुड़ सके।
इसका सेशन के भीतर से जवाबी पहलू — काम बैकग्राउंड में कैसे जाता है, और जाने पर क्या साथ जाता है — बैकग्राउंड टास्क, /loop और शेड्यूलिंग में है।
फ़्लैग जोड़ियाँ जिन्हें लोग ग़लत समझते हैं
- --tools तय करता है कि कौन-से बिल्ट-इन टूल मौजूद हैं। --allowedTools बताता है कि कौन-सी कॉल परमिशन प्रॉम्प्ट छोड़ें। --disallowedTools कॉल को अस्वीकार करता है। ये तीन अलग काम हैं, और ग़लत वाला देना “यह अब भी क्यों पूछ रहा है” का सबसे आम कारण है।
- --tools MCP टूल पर बिल्कुल असर नहीं डालता। उन्हें भी हटाने के लिए --disallowedTools "mcp__*" जोड़ें।
- --disallowedTools में सिर्फ़ नाम देने से टूल Claude के संदर्भ से हट जाता है; Bash(rm *) जैसा दायरे वाला नियम टूल को उपलब्ध रखता है और केवल मेल खाती कॉल अस्वीकार करता है।
- --dangerously-skip-permissions bypassPermissions में शुरू करता है। --allow-dangerously-skip-permissions केवल उस मोड को Shift+Tab चक्र में जोड़ता है, ताकि आप plan मोड में शुरू करके बाद में बदल सकें। आप असल में लगभग हमेशा दूसरा वाला चाहते थे।
- --add-dir फ़ाइल एक्सेस देता है, लेकिन Claude Code उन डायरेक्टरी से अधिकांश .claude/ कॉन्फ़िगरेशन नहीं खोजता। डायरेक्टरी जोड़ना उसकी कॉन्फ़िगरेशन अपनाने के बराबर नहीं है।
- --desktop कोई प्रॉम्प्ट और --verbose तथा --debug फ़्लैग के सिवा कोई अन्य फ़्लैग नहीं लेता, क्योंकि Desktop ऐप सेशन ख़ुद शुरू करता है। v2.1.285 या बाद का वर्ज़न चाहिए।
एक छोटी-सी सुविधा की बात: किसी सबकमांड की स्पेलिंग गड़बड़ करें तो Claude Code सबसे क़रीबी मेल सुझाता है और सेशन शुरू किए बिना बाहर निकल जाता है — claude udpate वह बातचीत खोलने की बजाय जो आप नहीं चाहते थे, Did you mean claude update? छापता है।
ख़ुद को परखें
Check yourself
0/3- पहले सेशन का प्रकार चुनें — जो फ़्लैग इसे चुनता है वही तय करता है कि आप बाक़ी कौन-से फ़्लैग दे सकते हैं।
- बिना निगरानी वाले रन को एक नहीं, पाँच फ़्लैग चाहिए: -p, --permission-prompts none, --max-turns, --max-budget-usd, और एक संरचित आउटपुट फ़ॉर्मैट।
- --max-budget-usd को एक रन के लिए सर्किट ब्रेकर मानें, बिल की ऊपरी सीमा नहीं। यह क्लाइंट-साइड अनुमान है और बहाल कुल योग इससे बच निकलते हैं।
- बातचीतें पहले अनुरोध पर अपना सिस्टम प्रॉम्प्ट रिकॉर्ड कर लेती हैं। अगर प्रॉम्प्ट का बदलाव नज़रअंदाज़ होता लगे, तो यही कारण है — काम करते समय --system-prompt-snapshot off इस्तेमाल करें।
- --bare रफ़्तार है, --safe-mode निदान है, --restricted नियंत्रण है। ग़लत वाला उठाने से एक पूरी दोपहर बर्बाद होती है।
- --help जानबूझकर अधूरा है। CLI रेफ़रेंस ही सच्चाई का स्रोत है, और वर्ज़न की सीमाएँ मायने रखती हैं — किसी फ़्लैग को दोष देने से पहले claude -v जाँच लें।
आगे
- हेडलेस मोड और Agent SDK — जब एक बार वाली
-pकॉल काफ़ी न रहे तो क्या बनाएँ - settings.json: कॉन्फ़िगरेशन प्रणाली — उन फ़्लैग का स्थायी ठिकाना जिन्हें आप बार-बार टाइप करते रहते हैं
- Claude Code की समस्याएँ सुलझाना — लक्षण से शुरू होने वाली डिबगिंग,
--safe-modeसे शुरू करके