Claude Code session कैसे resume करें और history कहाँ देखें
Claude Code session को नाम या ID के जरिए फिर से शुरू करने का तरीका जानें। अपनी पुरानी बातचीत के plaintext transcripts को लोकल मशीन पर खोजने की सटीक लोकेशन यहाँ दी गई है।
Claude Code session को फिर से कैसे शुरू करें
Claude Code session को फिर से शुरू करने के लिए, वर्तमान directory में सबसे हाल की बातचीत के लिए claude --continue चलाएं, या सूची में से पुरानी बातचीत चुनने के लिए claude --resume का उपयोग करें। पहले से चल रहे session के भीतर से, /resume command आपको बिना quit किए किसी दूसरी बातचीत पर ले जाती है। इसके संक्षिप्त रूप -c और -r हैं।
claude --continue
claude --resume
claude --resume auth-refactorयदि आप पहले से ही session का नाम या उसका ID जानते हैं, तो उसे argument के रूप में पास करें और Claude Code picker दिखाए बिना सीधे उस पर चला जाएगा।
नीचे दी गई सभी जानकारी अगस्त 2026 तक के आधिकारिक session documentation के अनुसार है। Claude Code के updates अक्सर आते रहते हैं, और versions के बीच flag के नाम और keyboard shortcuts बदल सकते हैं, इसलिए यदि यहाँ दी गई जानकारी आपके terminal पर दिख रही जानकारी से मेल न खाए, तो claude --help और उस page को ही आधिकारिक मानें।
सेशन वास्तव में क्या है
सेशन एक सहेजी गई बातचीत है जो एक प्रोजेक्ट डायरेक्टरी से जुड़ी होती है। इसमें पूरा मैसेज इतिहास होता है, जिसमें Claude द्वारा किए गए tool calls और उन calls से प्राप्त परिणाम शामिल हैं। Claude Code आपके काम करने के दौरान इसे लगातार डिस्क पर लिखता है, न कि अंत में एक बार, इसलिए टर्मिनल बंद करने या SSH कनेक्शन टूटने पर भी बातचीत सुरक्षित रहती है।
रिज़्यूम करने पर केवल टेक्स्ट ही वापस नहीं आता। बातचीत का पूरा इतिहास वापस आ जाता है, साथ ही वह मॉडल भी जिसका उपयोग सेशन कर रहा था और वह subagent भी जिसके साथ इसे शुरू किया गया था, यदि आपने --agent का उपयोग किया था। अनुमति मोड (permission mode) भी वापस आ जाता है, लेकिन सुरक्षा कारणों से कुछ अपवाद हैं: plan mode और bypass-permissions mode कभी रिस्टोर नहीं होते, इसलिए यदि कोई सेशन इनमें से किसी मोड में था, तो वह उस मोड में रिज़्यूम होगा जिसमें एक नया सेशन शुरू होता है।
कुछ चीजें वापस नहीं आतीं, क्योंकि वे लॉन्च-टाइम flags थीं न कि सहेजी गई स्थिति। --add-dir के साथ जोड़ी गई डायरेक्टरी और --mcp-config, --settings तथा --plugin-dir जैसे विकल्प, रिज़्यूम करते समय दोबारा देने पड़ते हैं। settings.json जैसी सेटिंग्स फाइलें लॉन्च के समय फिर से पढ़ी जाती हैं, इसलिए उनमें मौजूद किसी भी चीज़ को दोहराने की आवश्यकता नहीं होती है।
VPS पर session history क्यों अधिक महत्वपूर्ण है
यह एक ऐसा तथ्य है जो लोगों को आश्चर्यचकित करता है। ट्रांसक्रिप्ट उस मशीन पर लिखी जाती है जहाँ agent चला था। यह आपके account में सुरक्षित नहीं रहती और न ही cloud पर sync होती है। यह उस box की disk पर मौजूद एक file है।
इसलिए, यदि आपने अपने VPS पर tmux window के अंदर कोई session छोड़ दिया है, तो वह आपके laptop के picker में दिखाई नहीं देगा, और आपके laptop का session VPS पर दिखाई नहीं देगा। उनके बीच कुछ भी स्थानांतरित नहीं होता है। यदि आप उस तरह काम करते हैं जैसे अधिकांश लोग VPS पर tmux में Claude Code चलाते समय करते हैं, तो server ही वह स्थान है जहाँ आपका वास्तविक conversation history जमा होता है, और जो picker आप स्थानीय रूप से देखते हैं, वह एक अलग और बहुत छोटा सेट दिखाता है।
यही विभाजन अलग-अलग interfaces पर भी लागू होता है। desktop app और VS Code extension प्रत्येक अपना session history रखते हैं, और उनमें से कोई भी CLI का history नहीं है। web पर Claude Code भी अपना अलग history रखता है।
एक ही मशीन के भीतर, खोज आपकी अपेक्षा से अधिक व्यापक होती है। claude --resume <session-id> सबसे पहले वर्तमान project directory और उसके git worktrees में देखता है, फिर उस मशीन के हर दूसरे project में। याद रखने वाली मुख्य बात है "उस मशीन पर"। किसी अन्य host की session ID का कोई परिणाम नहीं निकलता है, और Claude Code आपको No conversation found with session ID: <session-id> के साथ इसकी सूचना देता है।
Claude Code सेशन हिस्ट्री कहाँ स्टोर करता है
डिफ़ॉल्ट रूप से, ट्रांसक्रिप्ट आपके Claude Code कॉन्फ़िग डायरेक्टरी के अंतर्गत, ~/.claude/projects/<project>/<session-id>.jsonl के रूप में एक पाथ पर रहते हैं।
<project> आपका वर्किंग डायरेक्टरी पाथ है जिसमें हर नॉन-अल्फ़ान्यूमेरिक कैरेक्टर को हाइफ़न से बदल दिया जाता है, इसलिए /home/deploy/apps/api में शुरू किया गया सेशन -home-deploy-apps-api नामक डायरेक्टरी के अंतर्गत स्टोर होता है। यदि यह परिवर्तित नाम 200 कैरेक्टर से अधिक हो जाता है, तो Claude Code इसे छोटा कर देता है और पूरे पाथ का एक हैश जोड़ देता है, ताकि डायरेक्टरी का नाम फ़ाइलसिस्टम की सीमाओं के भीतर रहे।
यह फ़ाइल JSONL है: प्रति लाइन एक JSON ऑब्जेक्ट, प्रत्येक लाइन एक मैसेज, एक टूल का उपयोग, या एक मेटाडेटा एंट्री है। यह पठनीय टेक्स्ट है, और इसे पढ़ना ठीक है।
इसके लिए पार्सर लिखना ठीक नहीं है। एंट्री फॉर्मेट Claude Code के लिए आंतरिक है और वर्ज़न के बीच बदलता रहता है, इसलिए इन फ़ाइलों को सीधे पढ़ने वाली स्क्रिप्ट किसी भी अपडेट पर खराब हो सकती है। Anthropic का अपना डॉक्यूमेंटेशन कहता है कि /export या डॉक्यूमेंटेड स्क्रिप्ट इंटरफेस का उपयोग करें, जो ठीक इसी कारण से एक अच्छी सलाह है।
दो सेटिंग्स इस प्रक्रिया को बदल देती हैं। CLAUDE_CONFIG_DIR पूरी कॉन्फ़िग डायरेक्टरी को स्थानांतरित कर देता है, जो कि ट्रांसक्रिप्ट को एक अलग वॉल्यूम या एन्क्रिप्टेड वॉल्यूम पर रखने का तरीका है। settings.json में cleanupPeriodDays यह नियंत्रित करता है कि उन्हें कितने समय तक रखा जाए, और यह डिफ़ॉल्ट रूप से 30 दिनों का होता है, जिसमें न्यूनतम 1 दिन की सीमा है।
उन transcript फाइलों के अंदर वास्तव में क्या होता है
हर टूल का परिणाम रिकॉर्ड किया जाता है, जिसका अर्थ है कि एक transcript में उन फाइलों की सामग्री होती है जिन्हें Claude ने पढ़ा है और उन commands का आउटपुट होता है जिन्हें Claude ने चलाया है। Anthropic का data usage page इसे स्पष्ट रूप से बताता है: Claude Code सत्र के transcripts को स्थानीय रूप से plaintext में ~/.claude/projects/ के अंतर्गत संग्रहीत करता है।
सोचिए कि सर्वर पर इसका क्या अर्थ है। यदि Claude ने यह पता लगाने के लिए कि कोई service क्यों शुरू नहीं हो रही है, एक .env फाइल पढ़ी है, तो उस फाइल की सामग्री अब आपके home directory में एक JSONL फाइल में मौजूद है। यदि किसी command ने connection string प्रिंट की है, तो वह string भी उसमें है। कुछ भी लीक नहीं हुआ है। transcript ने रिकॉर्ड किया है कि क्या हुआ, जो कि इसका मुख्य उद्देश्य है, और यही कारण है कि यह आपके threat model का हिस्सा होना चाहिए।
- Backups:
/homeया/rootका एक साधारण backup आपके transcripts को वहां कॉपी कर देता है जहां भी आप backup रखते हैं। एक exclusion जोड़ें, या यह स्वीकार करें कि आपके prompts और फाइल सामग्री की प्रतियां अब आपके backup store में मौजूद हैं। - Snapshots और images: किसी भी कारण से लिया गया VPS snapshot पूरी directory को शामिल करता है। ऐसा ही उस image के साथ होता है जिसे आप दूसरा सर्वर बनाने के लिए clone करते हैं।
- बॉक्स पर अन्य accounts: यह मानने के बजाय कि वे सुरक्षित हैं,
ls -ld ~/.claude ~/.claude/projectsके साथ स्वयं modes की जाँच करें। - जानबूझकर uploads:
/feedbackcommand बातचीत का इतिहास जानबूझकर Anthropic को भेजती है, और/bugतथा/shareउसी रास्ते से रिपोर्ट करते हैं। ये वे चीजें हैं जिन्हें आप करने का विकल्प चुनते हैं, इसलिए पुष्टि करने से पहले जान लें कि आप किस बात के लिए सहमति दे रहे हैं।
यदि आप चाहते हैं कि कोई transcript न बने, तो CLAUDE_CODE_SKIP_PROMPT_HISTORY transcript लिखने को रोकता है, और --no-session-persistence इसे एक बार के non-interactive claude -p run के लिए रोकता है। इनमें से किसी को भी सेट करने से पहले इसके परिणाम को समझ लें। Transcripts वही हैं जिन्हें resume पढ़ता है, इसलिए transcript न होने का मतलब है कि resume काम नहीं करेगा।
पुरानी बातचीत कैसे खोजें
claude --resume के साथ पिकर खोलें, या किसी चल रहे सेशन के अंदर /resume का उपयोग करें। प्रत्येक पंक्ति में सेशन का नाम दिखाई देता है यदि आपने उसे सेट किया है, या यदि आपने नहीं किया है तो एक जनरेट किया गया शीर्षक दिखाई देता है। इसके साथ ही अंतिम गतिविधि के बाद का समय, git branch और फ़ाइल का आकार भी दिखता है।
पिकर खोज करता है। सूची को फ़िल्टर करने के लिए / दबाएं, या बस टाइप करना शुरू करें। जो शॉर्टकट सीखने लायक हैं वे वे हैं जो इसे विस्तृत करते हैं: Ctrl+A इस मशीन पर हर प्रोजेक्ट के सेशन दिखाता है, Ctrl+W वर्तमान रिपॉजिटरी के हर worktree को दिखाता है, और Ctrl+B वर्तमान git branch तक फ़िल्टर करता है। किसी सेशन को चुनने से पहले उसकी सामग्री का पूर्वावलोकन करने के लिए Space दबाएं, और हाइलाइट किए गए सेशन का नाम बदलने के लिए Ctrl+R दबाएं।
सेशन को नाम देने से यह सब बहुत आसान हो जाता है। claude -n auth-refactor के साथ एक सेशन शुरू करें, या काम के बीच में /rename auth-refactor चलाएं, उस बिंदु पर जब आपको एहसास हो कि बातचीत एक वास्तविक काम में बदल गई है। एक नामित सेशन को सीधे शेल से नाम द्वारा फिर से शुरू किया जा सकता है।
बिना नाम वाले सेशन को अभी भी एक जनरेट किया गया शीर्षक मिलता है, जिसे एक छोटे तेज़ मॉडल के लिए बैकग्राउंड रिक्वेस्ट द्वारा लिखा जाता है जो आपके पहले प्रॉम्प्ट का सारांश देता है। वह शीर्षक आपको पिकर में पंक्ति को पहचानने में मदद करता है, लेकिन यह फिर से शुरू करने का हैंडल नहीं है। claude --resume <name> केवल उन नामों से मेल खाता है जिन्हें आप स्वयं सेट करते हैं।
ट्रांसक्रिप्ट्स को grep करके सही सेशन ढूँढना
कभी-कभी आपको केवल एक वाक्यांश याद रहता है और बाकी कुछ नहीं। ट्रांसक्रिप्ट्स टेक्स्ट फॉर्मेट में होते हैं, इसलिए आप उन्हें सर्च कर सकते हैं।
grep -rl "nftables" ~/.claude/projects/यह कमांड मैच होने वाली ट्रांसक्रिप्ट्स के पाथ प्रिंट करता है। .jsonl एक्सटेंशन के बिना फाइल का नाम ही सेशन ID है, और claude --resume <session-id> इसे स्वीकार करता है। यह पता लगाने के लिए कि आपको कौन सा सेशन चाहिए, grep का उपयोग करें, और फिर उसे पढ़ने के लिए या तो रिज्यूम करें या एक्सपोर्ट करें।
दो महत्वपूर्ण बातें ध्यान में रखें। कंटेंट JSON-escaped होता है, इसलिए यदि किसी वाक्यांश में कोटेशन मार्क्स हैं, या वह लाइन ब्रेक के कारण विभाजित हो गया है, तो वह literal स्ट्रिंग के रूप में मैच नहीं हो सकता है। और यदि टूल रिजल्ट के अंदर कोई मैच मिलता है, तो इसका मतलब है कि Claude ने वह टेक्स्ट देखा था, न कि किसी ने उसे टाइप किया था।
संवाद को पढ़ना और एक्सपोर्ट करना
/export वर्तमान संवाद को plain text के रूप में रेंडर करता है, जिसमें messages और tool output को JSON के बजाय पठनीय प्रारूप में लिखा जाता है। बिना किसी argument के यह एक menu खोलता है जो clipboard या file का विकल्प देता है। filename के साथ, /export handover.txt सीधे उस path पर लिखता है। सर्वर से अपने laptop पर संवाद ले जाने या किसी ticket के साथ उसे संलग्न करने का यह सही तरीका है।
किसी भी automated कार्य के लिए, उन interfaces का उपयोग करें जो stable रहने के लिए बनाए गए हैं। Hooks और status line commands इनपुट के रूप में transcript_path field प्राप्त करते हैं, इसलिए एक SessionEnd hook session समाप्त होने पर transcript को archive कर सकता है। आप किसी stored session को खोले बिना भी उससे प्रश्न पूछ सकते हैं:
claude -p --resume <session-id> --output-format json "summarize what we changed" | jq -r '.result'यह पुराने संवाद में एक follow-up prompt भेजता है और structured JSON लौटाता है। यह JSONL format को parse करने की तुलना में कहीं बेहतर आधार है, क्योंकि वह format भविष्य के release में बदल सकता है।
नया सत्र शुरू करना सत्र जारी रखने से बेहतर है
सत्र जारी रखने से पूरा इतिहास वापस आ जाता है, और हर बाद के अनुरोध (request) में वही पूरा इतिहास शामिल रहता है। कल चार घंटे तक चली बातचीत को आज जारी रखना महंगा पड़ता है, और लंबे सत्र में टोकन का उपयोग कैसे बढ़ता है यह बताता है कि वह लागत वास्तव में कहाँ से आती है।
Claude Code कभी-कभी बीच का रास्ता भी देता है। Pro या Max प्लान पर, यदि कोई सत्र लगभग एक घंटे से निष्क्रिय है और उसमें 100,000 से अधिक टोकन हैं, तो आपके पहले संदेश से पहले एक संवाद (dialog) खुलता है। तब तक prompt cache समाप्त हो चुका होता है, इसलिए आप कोई भी विकल्प चुनें, अगला अनुरोध पूरे इतिहास को एक बार फिर से प्रोसेस करता है।
- Resume from summary तुरंत एक compaction चलाता है, ताकि बाद के अनुरोधों में पूरे इतिहास के बजाय केवल सारांश (summary) जाए। यह प्रति अनुरोध सस्ता है, और जो जानकारी सारांश में हटा दी गई है, वह अब उपलब्ध नहीं रहती।
- Resume full session as-is बातचीत को बिना किसी बदलाव के लोड करता है, और हर विवरण को बनाए रखता है, जिसकी प्रति-अनुरोध लागत बातचीत के आकार के साथ बढ़ती जाती है।
तीसरा विकल्प सत्र को पूरी तरह से जारी रखता है और बाद के सत्रों में इस संवाद को आने से रोकता है।
यह निर्णय लेना जितना दिखता है, उससे कहीं अधिक सरल है। सत्र तब जारी रखें जब आप जो अगली बात लिखने वाले हैं, वह पिछली बातों पर निर्भर हो। जब ऐसा न हो, तो नया सत्र शुरू करें। यदि आप ध्यान दें तो भटकाव (drift) को पहचानना आसान है: जैसे Claude द्वारा किसी ऐसी फाइल का संदर्भ देना जिसे आपने एक घंटे पहले हटा दिया था, या किसी ऐसे निर्णय पर फिर से बहस करना जिसे आप सत्र की शुरुआत में ही तय कर चुके थे। यह पुराना संदर्भ (stale context) है, और इसे आगे ले जाने से आपके टोकन और सटीकता दोनों का नुकसान होता है।
यदि पुरानी बातचीत का उपयोगी हिस्सा कोई निर्णय या तथ्य है जिसकी आपको फिर से आवश्यकता होगी, तो उसे आगे ले जाने के लिए सत्र जारी रखने पर निर्भर न रहें। उसे कहीं लिख लें जहाँ हर सत्र उसे देख सके, जिसके लिए Claude Code की memory files बनी हैं।
/branch के बारे में जानना भी यहाँ उपयोगी है। यह वर्तमान बिंदु तक की बातचीत की एक प्रति बनाता है और आपको उस प्रति में स्विच कर देता है, जिससे मूल बातचीत सुरक्षित रहती है और picker में बनी रहती है। इसका उपयोग पहली बातचीत को खोए बिना दूसरा दृष्टिकोण आज़माने के लिए करें।
Resume, compaction और memory के बीच अंतर
अक्सर इनमें भ्रम हो जाता है, जबकि ये अलग-अलग समस्याओं का समाधान करते हैं।
Resume का संबंध किसी conversation को वापस पाने से है, जब आप उसे छोड़ देते हैं, reboot करते हैं या किसी अन्य कार्य पर चले जाते हैं। Compaction का संबंध एक सक्रिय conversation के भीतर context window से है: /compact Claude द्वारा ले जाए जा रहे डेटा को एक summary से बदल देता है, ताकि बाद के requests में कम tokens भेजने पड़ें। यदि आपकी समस्या यह है कि context window भर गया है, तो compaction ही सही उपकरण है, और Claude Code context window को manage करना में इसे विस्तार से समझाया गया है।
Memory का कार्य बिल्कुल अलग है। CLAUDE.md फाइलें और auto memory ऐसे निर्देशों और तथ्यों को सुरक्षित रखती हैं जो हर session की शुरुआत में load होते हैं, इसलिए ये वह conversation नहीं हैं जिस पर आप वापस लौटते हैं। ये वे जानकारी हैं जिन्हें आप लिख कर रखते हैं ताकि आपको कभी किसी पुराने session पर वापस न लौटना पड़े।
यदि आप चाहते हैं कि दो conversations एक साथ चलें और आपस में समन्वय करें, तो उसके लिए एक अलग तंत्र है। Claude Code sessions एक-दूसरे को message भेज सकते हैं जब वे दोनों सक्रिय हों, जो कि कल के session को disk से वापस लाने से बिल्कुल अलग समस्या है।
FAQ
Claude Code मेरा session history कहाँ store करता है?
डिफ़ॉल्ट रूप से यह आपके config directory के अंतर्गत ~/.claude/projects/<project>/<session-id>.jsonl में होता है, जहाँ <project> वर्किंग डायरेक्टरी का पाथ है जिसमें non-alphanumeric characters को हाइफ़न से बदल दिया गया है। प्रत्येक फ़ाइल JSONL प्रारूप में होती है: एक संदेश, टूल के उपयोग, या मेटाडेटा प्रविष्टि के लिए प्रति लाइन एक JSON ऑब्जेक्ट। CLAUDE_CONFIG_DIR का उपयोग करके config directory को कहीं और ले जाया जा सकता है, और settings.json में cleanupPeriodDays यह निर्धारित करता है कि ट्रांसक्रिप्ट को कितने समय तक रखा जाएगा, जो डिफ़ॉल्ट रूप से 30 दिन है और न्यूनतम 1 दिन है।
मैं अपने लैपटॉप पर picker में अपना VPS session क्यों नहीं देख पा रहा हूँ?
क्योंकि ट्रांसक्रिप्ट उस मशीन की डिस्क पर लिखी जाती हैं जहाँ एजेंट चला था, और मशीनों के बीच इनका कोई सिंक नहीं होता है। आपके VPS पर tmux के अंदर की गई बातचीत केवल उसी VPS पर मौजूद रहती है। इसे SSH के माध्यम से वहीं resume करें, या यदि आप स्थानीय रिकॉर्ड चाहते हैं तो उसके अंदर /export चलाएँ और टेक्स्ट फ़ाइल को कॉपी कर लें।
क्या मैं किसी अलग directory में शुरू किए गए session को resume कर सकता हूँ?
हाँ, यदि आपके पास उसका session ID है। claude --resume <session-id> पहले वर्तमान प्रोजेक्ट डायरेक्टरी और उसके git worktrees में खोजता है, फिर उसी मशीन पर मौजूद हर दूसरे प्रोजेक्ट में। Picker के अंदर, Ctrl+A सूची को मशीन के हर प्रोजेक्ट तक विस्तृत कर देता है और Ctrl+W इसे वर्तमान रिपॉजिटरी के हर worktree तक विस्तृत कर देता है। यदि कुछ भी मेल नहीं खाता है, तो Claude Code No conversation found with session ID: <session-id> रिपोर्ट करता है।
क्या मुझे पुराना session resume करना चाहिए या नया शुरू करना चाहिए?
तब resume करें जब आपका अगला संदेश उस बातचीत पर निर्भर हो जो पहले ही हो चुकी है। जब ऐसा न हो तो नया session शुरू करें, क्योंकि resume करने पर पूरा इतिहास लोड हो जाता है और बाद के हर अनुरोध में वह शामिल रहता है। Drift पर नज़र रखें: एक ऐसा session जो उन फ़ाइलों का संदर्भ देता रहता है जिन्हें आपने पहले ही हटा दिया है, वह पुराना संदर्भ (stale context) ले जा रहा है, और वह संदर्भ हर टर्न पर आपके टोकन और सटीकता की लागत बढ़ाता है।
क्या मैं Claude Code को डिस्क पर ट्रांसक्रिप्ट लिखने से रोक सकता हूँ?
हाँ। CLAUDE_CODE_SKIP_PROMPT_HISTORY ट्रांसक्रिप्ट लिखने को रोकता है, और --no-session-persistence इसे एक एकल non-interactive claude -p रन के लिए रोकता है। पहले इसके परिणाम को समझ लें, क्योंकि ट्रांसक्रिप्ट वही हैं जिन्हें resume पढ़ता है, इसलिए उन्हें बंद करने का मतलब है कि --continue और --resume के पास लोड करने के लिए कुछ नहीं होगा। यदि आपकी चिंता इस बात को लेकर है कि फ़ाइलें कहाँ स्थित हैं, न कि उनके अस्तित्व को लेकर, तो CLAUDE_CONFIG_DIR को एक एन्क्रिप्टेड वॉल्यूम पर पॉइंट करें और cleanupPeriodDays को कम कर दें।