Cursor (AI IDE) कैसे काम करता है
(blog.sshh.io)- AI कोडिंग टूल जैसे Cursor, Windsurf, और Copilot की आंतरिक कार्यप्रणाली को समझने से जटिल codebase में उत्पादकता बढ़ाई जा सकती है और लगातार प्रदर्शन सुनिश्चित किया जा सकता है
- बहुत से लोग AI IDE की सीमाओं को समझे बिना उसे पारंपरिक टूल की तरह इस्तेमाल करते हैं और फिर performance समस्याओं का सामना करते हैं
- यह लेख Cursor की आंतरिक कार्यप्रणाली, system prompt, और coding तथा Cursor rules को optimize करने के तरीकों की व्याख्या करता है
LLM से coding agent तक
बड़े भाषा मॉडल (LLM)
- LLM मूल रूप से अगले शब्द की भविष्यवाणी करने के तरीके से काम करता है
- prompt देने पर LLM auto-complete की तरह response बनाता है
- शुरुआती decoder-आधारित LLM (जैसे GPT-2) में मनचाहा परिणाम पाने के लिए खास prompt लिखना पड़ता था
- prompt engineering वह तकनीक है जिसमें मॉडल को 'ट्रिक' करके इच्छित उत्तर की ओर ले जाया जाता है
- instruction tuning आने के बाद उपयोग में काफी आसानी हुई
- “Foo method को refactor करने वाला PR बना दो” जैसे निर्देश सीधे काम करने लगे
- वास्तव में यह auto-complete process का ही विस्तारित रूप है
- tool calling जोड़ा गया
- मॉडल अब file पढ़ना, लिखना, और command चलाना जैसे काम कर सकता है
- उदाहरण:
read_file('index.py')→ client file का content देता है → मॉडल आगे काम करता है
agent-आधारित coding
Cursor जैसे AI IDE एक जटिल wrapper संरचना से बने होते हैं:
- VSCode fork → open source आधार से शुरुआत
- chat UI जोड़ना और उपयुक्त LLM चुनना (जैसे Sonnet 3.7)
- coding agent के लिए tools implement करना
read_file(full_path: str)write_file(full_path: str, content: str)run_command(command: str)
- prompt optimization
- "तुम एक expert coder हो", "अनुमान मत लगाओ, tools का उपयोग करो" जैसे निर्देश जोड़ना
→ सिर्फ ऊपर के चरण लागू कर देने से चीज़ें चल तो सकती हैं, लेकिन syntax error, hallucination, और consistency की कमी जैसी समस्याएँ आ सकती हैं
- "तुम एक expert coder हो", "अनुमान मत लगाओ, tools का उपयोग करो" जैसे निर्देश जोड़ना
agent-आधारित coding के optimization strategies और tips
- एक अच्छा AI IDE बनाने के लिए यह समझना ज़रूरी है कि LLM किन कामों में अच्छा है, और LLM की सीमाओं के अनुसार prompts और tools को सावधानी से design करना चाहिए।
- मुख्य काम को सरल बनाना और sub-task के लिए छोटे मॉडल इस्तेमाल करना प्रभावी होता है
- जटिल कामों को बाँटकर performance और consistency सुधारी जा सकती है
-
user context जोड़ना (
@fileका उपयोग)- संभव है कि user को पहले से पता हो कि कौन-सी file या context प्रासंगिक है
@filesyntax जोड़ना → पूरी file या folder का content शामिल करके context देना- tip:
@folder/@fileका सक्रिय रूप से उपयोग करें → साफ context देने से response speed और accuracy बेहतर होती है
-
code search optimization
- code search जटिल हो सकता है, खासकर semantic search (जैसे "authentication code कहाँ है") कठिन होती है
- codebase को vector store (Vectorstore) में index करना → search के समय LLM अपने-आप filter और rerank कर सकता है
- tip: code comments और documentation महत्वपूर्ण हैं → embedding model की performance बेहतर होती है
- file के ऊपर उस file का purpose, अर्थ, और आखिरी बदलाव का समय जोड़ें
-
file writing optimization
- परफेक्ट code लिखना कठिन और महँगा है
- पूरी file की बजाय semantic diff बनाना → सिर्फ बदले हुए code fragments देना
- semantic diff के आधार पर एक अलग apply model असली file लिखता है → syntax errors ठीक करता है
- tip: apply model को सीधे prompt निर्देश नहीं दिए जा सकते → पूरी file देने से नियंत्रण बेहतर होता है
- tip: apply model बड़ी files edit करते समय धीमा हो सकता है और errors दे सकता है → file size को 500 LoC से कम रखें
- tip: linter feedback बहुत महत्वपूर्ण signal है → मजबूत linter अपनाना ज़रूरी है
- compile और typed languages से मिलने वाले feedback का भी उपयोग किया जा सकता है
- tip: unique file names का उपयोग करें →
page.jsकी जगहfoo-page.js,bar-page.jsजैसे खास नाम रखें- documentation में पूरा file path दें → edit tool की ambiguity दूर होती है
-
agent-विशेष मॉडल का उपयोग
- सामान्य code-writing model के बजाय, agent-विशेष मॉडल का उपयोग सुझाया जाता है
- यही कारण है कि Anthropic के models Cursor जैसे IDE में शानदार प्रदर्शन करते हैं
- tip: सिर्फ code लिखने वाला model नहीं, बल्कि agent-आधारित IDE के लिए optimized model चुनें
- WebDev Arena leaderboard पर model performance देखी जा सकती है
-
self-repair tools का उपयोग (advanced strategy)
- "apply_and_check_tool" → महँगा linter चलाता है + headless browser में console logs और screenshots इकट्ठा करता है
- MCP(Model Context Protocol) → agent autonomy और context provisioning को मजबूत करता है
Cursor system prompt का विस्तृत विश्लेषण
- Cursor का नवीनतम prompt (March 2025) MCP-आधारित prompt injection तकनीक के जरिए निकाला गया
- Cursor के prompt engineers, दूसरे AI IDE की तुलना में भी, बहुत मजबूत prompt-writing क्षमता रखते हैं।
- prompt structure का विश्लेषण करके code generation performance और agent architecture design क्षमता सुधारी जा सकती है
-
मुख्य prompt elements और उनका अर्थ
- "<communication>", "<tool_calling>" जैसे tags का उपयोग
- Markdown और XML tags का मिश्रित उपयोग → इंसानों के लिए पढ़ना आसान और LLM के लिए process करना सरल
- "powered by Claude 3.5 Sonnet"
- model consistency मजबूत होती है → LLM चल रहे model के बारे में गलत जानकारी देने से बचता है
- "the world's best IDE"
- error आने पर LLM किसी दूसरे product की सिफारिश न करे, इसके लिए
- "we may automatically attach some information…follow the USER's instructions…by the <user_query> tag."
- user prompt को सीधे देने की बजाय special tag में रखा जाता है ताकि भ्रम कम हो
- "Refrain from apologizing"
- अनावश्यक माफ़ी से बचाने के लिए (Sonnet model की प्रवृत्ति को संतुलित करने हेतु)
- "NEVER refer to tool names when speaking"
- tool names का उल्लेख न करने का निर्देश → लेकिन वास्तविक model कभी-कभी इसे अनदेखा करता है
- "Before calling each tool, first explain"
- tool call से पहले स्थिति समझाना → user experience बेहतर होता है
- "partially satiate the USER's query, but you're not confident, gather more information"
- ज़रूरत से ज़्यादा confidence के कारण जल्दी जवाब देने से रोकना → और जानकारी लेने के लिए प्रेरित करना
- "NEVER output code to the USER"
- सीधे code output पर रोक → code सिर्फ tools के जरिए generate करने की अनुमति
- "If you're building a web app from scratch, give it a beautiful and modern UI"
- एक ही prompt से आकर्षक web app बनाने के लिए प्रेरित करना (demo उद्देश्य से)
- "you MUST read the the contents or section of what you're editing before editing it"
- code बदलने से पहले context पढ़ना अनिवार्य → context awareness बेहतर
- "DO NOT loop more than 3 times on fixing linter errors"
- fix loop की सीमा तय → infinite loop से बचाव
- "Address the root cause instead of the symptoms."
- symptoms नहीं, root cause ठीक करने के लिए प्रेरित करना
- "DO NOT hardcode an API key"
- security मजबूत करने के लिए निर्देश → hardcoding रोकना
- "codebase_search", "read_file", "grep_search", "file_search", "web_search"
- code लिखने से पहले सही context लेने के लिए कई search tools देना
- "One sentence explanation…why this command needs to be run…" की मांग
- tool arguments संभालने में logic मजबूत करना → prompt improvement technique लागू
- "reapply" tool का अर्थ है "Calls a smarter model to apply the last edit"
- आखिरी edit को अधिक उन्नत model से दोबारा लागू करना → edit quality बेहतर होती है
- "edit_file" tool का अर्थ है "represent all unchanged code using the comment of the language you're editing"
- बिना बदले code को comments के रूप में दिखाना → edit model की सटीकता बेहतर होती है
- "<communication>", "<tool_calling>" जैसे tags का उपयोग
- prompt caching का उपयोग
- system prompt और tool descriptions को static state में रखा जाता है
- codebase या user के अनुसार customization नहीं होता → prompt caching से cost और processing speed बेहतर हो सकती है
Cursor rules को प्रभावी ढंग से लिखना और उपयोग करना
- Cursor rules लिखने का कोई एकमात्र सही तरीका नहीं है, लेकिन prompt-writing अनुभव और Cursor की आंतरिक संरचना की समझ के आधार पर कुछ उपयोगी tips दिए गए हैं
- rules को सिर्फ साधारण commands नहीं, बल्कि encyclopedic guidance के रूप में लिखना महत्वपूर्ण है।
-
rule writing के मुख्य concepts
- LLM rule list के नाम और description के आधार पर fetch_rules(…) call करता है
- rules system prompt में जोड़े नहीं जाते, बल्कि ज़रूरत पड़ने पर refer किए जाते हैं
- इसलिए command-style की बजाय encyclopedic description अधिक प्रभावी है
-
rules लिखते समय किन चीज़ों से बचें
- identity define न करें
- "तुम TypeScript expert हो" जैसे वाक्य न लिखें
- LLM पहले से built-in prompt के जरिए अपनी identity जानता है → टकराव का जोखिम
- system prompt को overwrite करने की कोशिश न करें
- "comments मत जोड़ो", "सवाल पूछने के बाद code लिखो" जैसे निर्देश → internal tool usage में भ्रम पैदा करते हैं
- negative commands से बचें
- "मत करो" की बजाय "यह करो" जैसे positive निर्देश LLM पर अधिक असरदार होते हैं
- positive command का उदाहरण: "file edit करते समय पूरा context देखकर edit करें"
- identity define न करें
-
rules लिखते समय क्या अनुशंसित है
- स्पष्ट और सहज rule names तथा descriptions लिखें
- codebase के बारे में न्यूनतम जानकारी से भी rule apply हो सके
- duplicate rules भी बनाए जा सकते हैं → search accuracy बेहतर होती है
- rules को encyclopedic शैली में लिखें
- सीधे commands की बजाय स्थिति और उद्देश्य का विवरण दें
- ज़रूरत हो तो code files जोड़कर context को मजबूत किया जा सकता है
- Cursor से rule draft बनवाएँ
- LLM दूसरे LLM के लिए context लिखने में अच्छा होता है
- उदाहरण: "@folder/ अक्सर बदले जाने वाले code paths और definitions पर एक Markdown file बनाओ"
- बहुत ज़्यादा rules लिखने से बचें
- बहुत सारे rules अक्षम होते हैं और non-intuitive codebase का संकेत हो सकते हैं
- आदर्श codebase वह है जिसमें agent बहुत कम rules के साथ काम कर सके
- स्पष्ट और सहज rule names तथा descriptions लिखें
-
प्रभावी rules लिखने के उदाहरण
- ✅ rule command:
- "file बदलने से पहले पूरा context पढ़ें"
- "server code बदलते समय authentication logic जाँचें"
- "error होने पर पहले कारण ठीक करें"
- ❌ rule command (इनसे बचें):
- "comments delete मत करो"
- "edit से पहले मुझसे सवाल पूछो"
- "अनावश्यक code मत बदलो"
- ✅ rule command:
-
rule writing की मुख्य strategy
- rules को commands नहीं, बल्कि स्थिति के विवरण के रूप में लिखें
- सहज नाम और descriptions का उपयोग करें → कम से कम rules में अधिकतम performance
- सीधे commands की बजाय context explanation और code linkage को मजबूत करें
निष्कर्ष
- VSCode fork से शुरू होकर, open source prompts और public model APIs के आधार पर बने Cursor का 10 अरब डॉलर (लगभग 13 ट्रिलियन won) के करीब valuation पाना वाकई चौंकाने वाला है
- Cursor को फिलहाल "wrapper multiple" के आधार पर 6x valuation मिल रहा है
- Cursor optimized prompts और मजबूत tool-calling system की वजह से शक्तिशाली performance देता है
- Cursor के अपने agent model विकसित करने की संभावना कम है
- इसके बजाय Anthropic के Claude Code और Sonnet-आधारित प्रतिस्पर्धी products लॉन्च करने की संभावना अधिक है
-
मुख्य insights
- codebase, documentation, और rules को सही ढंग से सेट करना आगे भी एक महत्वपूर्ण skill रहेगा
- AI coding tools की optimization strategies समझने से productivity और accuracy बेहतर की जा सकती है
- अगर Cursor सही से काम नहीं कर रहा, तो संभव है कि समस्या उसके उपयोग के तरीके में हो
"अगर Cursor काम नहीं कर रहा है, तो उसके उपयोग के तरीके की फिर से जाँच करनी चाहिए।"
4 टिप्पणियां
लगता है इसे आज़माना पड़ेगा
दिलचस्प है। शायद इसलिए कि दोनों एक ही पानी पीते हैं?
इसमें अच्छी अंतर्दृष्टि है। धन्यवाद।