5 पॉइंट द्वारा GN⁺ 16 시간 전 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • 1.61 लाख GitHub stars पाने वाले open source AI coding agent OpenCode को local Qwen3.6-27B के साथ टेस्ट करने पर पाया गया कि tool quality और security design, दोनों ही इस्तेमाल बंद कर देने लायक स्तर पर थे
  • AGENTS.md reload, fixed-distance context pruning, current date insertion और mode switching बार-बार prompt cache को invalidate करते हैं, जिससे M4 Max पर भी response generation शुरू होने में 10 मिनट तक लग सकते हैं
  • Session compaction, system prompt, permission checks, sub-agent control और TUI ठीक से साथ काम नहीं करते, जिससे context और messages खो जाते हैं, और agent अहम specification भूलकर code लिख सकता है
  • Bash AST और string patterns पर निर्भर permission filter indirect execution, absolute paths, variables, Python, redirection आदि को नहीं रोक पाता; external file access limits और permanent permissions भी आसानी से bypass हो जाते हैं
  • Remote model default connection, unlimited internet access और पुराने HTTP server RCE vulnerability को देखते हुए सिर्फ Docker पर्याप्त नहीं है; executable blocking, read-only paths और operating-system-level isolation जरूरी है

मूल्यांकन का दायरा और आधार

  • OpenCode एक project है जिसे निर्माता AI coding agent के रूप में पेश करते हैं, और review के समय इसके GitHub stars 1.61 लाख थे
  • Test local LLM Qwen3.6-27B और OpenCode Git version baef5cd4 के आधार पर किया गया
  • यह कोई अलग security disclosure नहीं, बल्कि इस बात की पड़ताल है कि LLM output को Bash में भेजने वाले structure में pipe layer कैसे fail होती है
  • LLM के इस्तेमाल को, और user की machine के आसानी से compromise या delete हो सकने को अलग-अलग मुद्दों के रूप में देखा गया

Prompt cache को बार-बार तोड़ने वाला structure

  • OpenAI /v1/chat/completions series APIs अब तक की पूरी conversation JSON के रूप में भेजती हैं, और JSON metadata वाले SSE delta stream से response देती हैं
    • Session लंबा होने पर upload cost quadratically बढ़ती है
    • Tool calls में कई JSON deltas को फिर से JSON में assemble करने वाला double encoding इस्तेमाल होता है
  • Server stateless structure रखता है, लेकिन performance के लिए evaluation results cache करता है
    • Request से match करने वाला सबसे लंबा cache prefix खोजता है
    • Prefix के अंत से last message तक prefill करता है
    • End token तक नए tokens generate करता है
  • लगभग 0.5TB/s memory bandwidth वाले M4 Max पर Qwen3.6-27B की token generation usable थी, लेकिन लंबे context का prefill computationally बहुत भारी था
    • अगर सही prefix cache न मिले, तो GPU को max पर चलाते हुए लगभग 10 मिनट इंतजार करने के बाद ही response generation शुरू हो सकता है
  • OpenCode हर SSE turn पर filesystem को glob करता है और first system prompt में insert होने वाली AGENTS.md को दोबारा पढ़ता है
    • अगले session के लिए AGENTS.md modify करने पर भी current session पूरा re-evaluate होता है
  • Agent से user पर switch करते समय tool-call context को prune करके बड़े cache segment को invalidate करता है
    • PRUNE_PROTECT = 40_000 से पुराने tool results फेंक दिए जाते हैं, इसलिए best case में भी 40 हजार token cache miss होता है
    • Interrupt को भी user switch माना जाता है, इसलिए गलत progress ठीक करने पर cache discard होता है और फिर इंतजार करना पड़ता है
  • First system prompt में current date डालकर हर SSE turn पर re-evaluate करता है, इसलिए midnight पार होते ही full cache miss होता है

Pruning और session compaction

  • Pruning skill को छोड़कर सभी tool results पर समान रूप से लागू होती है, और शुरुआत में पढ़ी गई अहम material को अलग से protect नहीं करती
    • नए session में specification पहले पढ़ी जाती है
    • Related code और पढ़ते हुए 40 हजार token threshold पार हो जाता है
    • Model बेकार reasoning या गलत दिशा में चला जाता है और user interrupt करता है
    • Interrupt से specification context से delete हो जाती है
    • Model मूल specification देखे बिना implementation करता है
  • Session compaction existing session के आगे नया prompt जोड़ती है, पूरी चीज को फिर prefill करती है, और कुछ bullets में summarize करती है
    • Summary prompt को session के अंत में डालने से full prefill टाला जा सकता है
    • Model से handoff memo file के रूप में लिखवाने का तरीका बेहतर चला, और result को edit या कई sessions में reuse भी किया जा सका
  • Compaction finite context window को infinite जैसा दिखाने वाली leaky abstraction है, और pruning के साथ इस्तेमाल होने पर समस्या बढ़ जाती है
  • Context window और prompt cache को core constraints मानकर management tools देना बेहतर है; Pi का session tree prompt cache का जानबूझकर उपयोग करता है

System prompt और Plan mode

  • Default system prompt बहुत लंबा है, और उसका बड़ा हिस्सा model को concise जवाब देने का निर्देश देने में खर्च होता है
  • इसमें sub-agent को ABSOLUTELY NO COMMENTS कहने को मजबूर करने जैसी strong coding preferences भी शामिल हैं
  • Plan से Build में handoff smooth नहीं है; plan को पर्याप्त detailed बनाते-बनाते context window के अंत के पास पहुंचा जा सकता है
    • Discussion results को file में लिखकर edit करने और फिर नए session को सौंपने का तरीका पसंद किया गया
  • Plan mode notification कहता है कि किसी भी directory में write नहीं कर सकते, पर असल में .opencode/plans में write किया जा सकता है
    • बिना निर्देश दिए उस directory में लिखना, या explicitly request करने पर भी write refuse करना—दोनों तरह की failures देखीं
  • Default system prompt को globally modify नहीं किया जा सकता, इसलिए हर project में copy करना पड़ता है
  • सिर्फ Build mode prompt redefine करने पर Plan mode में switch करते समय full prompt cache miss होता है
  • Model-specific prompts में content और quality का बड़ा अंतर है
    • GPT-4, o1, o3 के लिए Beast Mode निर्देश देता है कि third-party packages और dependencies समझने के लिए Google verification अनिवार्य है

Permission checks से पैदा होने वाली decision fatigue

  • Project के बाहर file access को temporary string analysis से detect करने पर Yes, No, Always permission window दिखती है और जवाब आने तक execution रुकता है
    • आगे वही काम लगातार reject करने के लिए Never option नहीं है
  • जब sub-agent /tmp में script output पढ़ने की कोशिश करे और No चुना जाए, तो agent terminate हो जाता है और task context भी गायब हो जाता है
    • Progress preserve करने के लिए unwanted external access पर भी Yes चुनने की स्थिति बनती है
  • अगर allow requests बार-बार आएं और productivity बनाए रखने का एकमात्र option Yes हो, तो user risky requests भी approve कर सकता है
  • Directory के बाहर write रोकने वाली default safeguard मानव की लगातार attention पर निर्भर नहीं होनी चाहिए

Messages और sub-agent interaction

  • SSE streaming के दौरान भेजे गए messages queue में जाते हैं, लेकिन actual send time clear नहीं है
    • Code tool-call turn के end पर send करता दिखता है, लेकिन queued message भेजे बिना tool से thought process में जाने की स्थिति भी देखी गई
    • User interrupt करे तो message queue से हटकर सिर्फ log में रह जाता है और भेजा नहीं जा सकता, इसलिए नया stream शुरू करने के लिए second message चाहिए
  • Message undo कभी-कभी log से उस message को remove नहीं कर पाता
  • Sub-agent से directly बात करना या उसकी progress interrupt करना संभव नहीं है
    • गलत दिशा में जाए तो terminate करके context खोना पड़ता है या token burn होते देखते रहना पड़ता है
    • पहले यह feature था लगता है, लेकिन अब हट चुका है
    • Default chat में sub-agent को @mention करने से useful काम नहीं होता और interrupt भी नहीं किया जा सकता
  • जैसे Qwen thought process में tool call डाल देता है, वैसे ही sub-agent का tool call fail होने पर fatal error होता है और तब तक का context गायब हो जाता है
  • Sub-agent reuse, छोटे context में काम split करने के उद्देश्य से टकराता है
    • Unrelated task में existing sub-agent reuse हो सकता है
    • बड़े context वाले main agent और sub-agent के बीच आना-जाना cache misses पैदा करता है
    • Human interaction rich हो सकती है, लेकिन model को दिए जाने वाले choices कम होने चाहिए
  • Sub-agent behavior से जुड़ा GitHub issue भी है

Agent tool design

  • edit default रूप से uniquely matching text को exact search-and-replace करता है
    • Model file contents ठीक याद रख सकता है, लेकिन कई edits के बाद बदले हुए line numbers miss कर सकता है, इसलिए यह suitable तरीका है
    • Global replace option से कई follow-up fixes करवानी पड़ीं; इसे हटाने पर design Pi के edit जैसा हो जाता है
  • Plan mode का multiple-choice question tool system prompt में natural language से सवाल करवाने की तुलना में असुविधाजनक है
  • grep और glob को bash से replace किया जा सकता है, और असल में model भी Bash में grep या rg चलाता है
    • मकसद Explore जैसे read-only agents को Bash इस्तेमाल करने से रोकना हो सकता है
    • यह इस समस्या से जुड़ता है कि Bash command चलाए बिना side effects पहचानना मुश्किल है
  • todo generally useful है, लेकिन model TODO check करना ही भूल जाता है

TUI और documentation quality

  • OpenCode TUI text rendering के लिए लगभग 1GB RAM इस्तेमाल करता है
  • Message input box में Shift+Enter line break काम नहीं करता था, और existing issue “मेरे computer पर तो चलता है” जवाब के बाद बंद कर दिया गया
  • Long message auto-wrap होने पर input box और cursor move होते हैं, लेकिन new line के characters दिखाई नहीं दे सकते
  • Streaming के दौरान text select करने पर auto-scroll selection को clear कर देता है
  • Ctrl-C running command interrupt करने के बजाय session तुरंत close कर देता है
    • Interactive shell convention के हिसाब से Ctrl-C command interrupt करे, और running command न होने पर Ctrl-D session end करे
  • Mac के Option+left/right arrow जैसे common word-level movement shortcuts support नहीं हैं
  • Messages या thought process लंबा होने पर Markdown re-rendering आदि में कई seconds लगते हैं, और performance issue quadratic time complexity जैसा दिखता है
  • Input problems के कारण external editor में message लिखकर paste करना पड़ा
  • Documentation inconsistent है और इंसान के बजाय model द्वारा पढ़े जाने के लिए लिखी हुई जैसी लगती है

Remote-first connection और data exposure

  • OpenCode default रूप से remote model से connect करता है
  • Local model setup का simple example documentation में नहीं है, और गलत config होने पर remote model से connect हो जाता है
  • Local model सही specify करने पर भी program चलाने के बाद interactively select करना पड़ता है, और तब तक remote model और local shell already connected state में होते हैं
  • Default model URL distribution में fixed नहीं है, बल्कि OpenCode से linked models.dev से download होता है
    • Related code opencode/src/provider/provider.ts line 1684 में है
  • Fresh install के बाद opencode चलाकर सिर्फ एक character और Enter input करने से, बिना user config, remote model local shell से connect हो सकता है
  • अगर first message empty या ambiguous हो, तो agent model अक्सर current directory glob करता है और files पढ़ता है; पढ़ा गया data अगले POST request में शामिल होता है

Internet access और system prompt

  • OpenCode WebFetch tool देता है और system prompt में उसे इस्तेमाल करने का explicit निर्देश देता है
  • Default prompt user-provided messages या local files के URLs इस्तेमाल करने की अनुमति देता है, और अगर programming support URL होने का भरोसा हो तो URL generate या guess करने की ambiguous permission भी देता है
  • Bash में network sandbox नहीं है, इसलिए WebFetch से बड़ी समस्या यह structure है जिसमें उम्मीद की जाती है कि model curl | bash जैसी commands execute नहीं करेगा

Bash permission filter को bypass करने के तरीके

  • opencode.json में "bash": {"git *": "deny"} git status या echo hello && git push --force को block करता है
  • Implementation tree-sitter की Bash और PowerShell grammars से commands को AST में parse करता है, command nodes traverse करता है और config से बने regex से compare करता है
  • लेकिन text-based check कई indirect execution allow करता है
    • echo 'git clean -fdx .' | bash
    • env git status
    • alias से git को किसी दूसरे command name से जोड़ना
    • /usr/bin/git status, $(which git) status
    • GIT=git && $GIT status
    • Base64-encoded git reset --hard को decode करके Bash को पास करना
    • heredoc के अंदर git push --force
    • Python subprocess.run से git checkout . execute करना
  • Model आम तौर पर malicious न भी हो, तब भी failures को persistently bypass करने के लिए trained होता है, इसलिए वह naturally adversarial input जैसा behave कर सकता है
  • String command filter safety mechanism नहीं, बल्कि false sense of security देता है

Permanent permissions और CWD exception

  • python3 -c 'print("hello")' पर Always चुनने से पूरा python3 prefix permanently allow हो जाता है
    • इसके बाद Python से SSH private key पढ़ने वाली command भी already approved मानी जा सकती है
    • Permission disk पर save होती है और आगे के sessions में भी बनी रहती है
  • cd, chdir, popd, pushd, push-location, set-location उन CWD exception list में हैं जिन्हें side-effect-free माना जाता है
  • ये commands सभी Bash commands deny करने के लिए configure होने पर भी permission checks को explicitly bypass करती हैं

File access checks की कमियाँ

  • Default setting OpenCode चलाए गए directory और Git repository में से छोटी path के बाहर file access रोकने की कोशिश करती है
  • Bash tool में tree-sitter AST traverse करके path जैसे दिखने वाले values interpret और check किए जाते हैं
    • cat /tmp/logfile permission मांगता है
    • python3 -c 'import shutil; shutil.rmtree("/")' check नहीं कर पाता
  • cargo global ~/.cargo में freely read/write/execute करता है, लेकिन model अगर ~/.cargo/registry/src के package source को direct पढ़ना चाहे तो permission मांगता है
  • जिन commands को files access करने वाला माना जाता है वे fixed FILES list तक limited हैं
    • इसमें rm, cp, mv, mkdir, touch, chmod, chown, cat और कुछ PowerShell commands आदि शामिल हैं
    • List में न होने वाली command को file access नहीं करने वाला माना जाता है, इसलिए दिए गए path भी check नहीं होते

Redirection और allowed commands का combination

  • echo "hello world!" पर Always चुनने से आगे echo के जरिए file/device writes भी allowed हो जाते हैं
    • GPIO related /sys/class/gpio paths पर redirect करने वाली commands भी चल सकती हैं
  • echo foo > bar.txt के AST में redirection, command का child नहीं बल्कि sibling node है
    • Path check सिर्फ command children पर होता है, इसलिए redirection destination check नहीं होता
    • echo खुद भी FILES list में नहीं है, इसलिए path validation शुरू ही नहीं होता

Self-upgrade और remote code execution के मामले

  • OpenCode में कई self-upgrade paths हैं, और curl-based installation में opencode upgrade चलाने पर https://opencode.ai/install का response download करके Bash standard input में execute किया जाता है
  • यह curl installer इस्तेमाल करने के समय वाले risk से बहुत अलग नहीं है, लेकिन production में remote script सीधे execute करने का उदाहरण है
  • CVE-2026-22812 के समय OpenCode ने default HTTP server में ये functions expose किए थे
    • पूरी तरह permissive CORS headers
    • Arbitrary shell commands execute करने वाला POST API
    • Arbitrary files पढ़ने वाला GET API
  • User द्वारा visit की गई website known default port पर request करके user permission level का system access पा सकती थी
  • Development team ने server को default disabled किया, जवाब दिया कि opencode.ai को machine पर remote code execute करने के लिए CORS exception चाहिए, फिर follow-up जारी नहीं रखा, और issue को stale bot ने बंद कर दिया
  • एक अलग issue ने report किया कि auth command user-provided arbitrary URL से content fetch करके execute करती है, और यह भी stale bot से close हुआ

सिर्फ Docker से समाधान क्यों नहीं होता

  • Development dependencies को new machine पर install करना इतना complex बनाने के बाद Docker पर depend करने वाला approach नहीं चाहिए
  • Docker खुद भी security problems बना सकता है
    • Root के रूप में running powerful service बनाता है
    • ufw firewall में जानबूझकर रास्ता बनाता है
  • अगर protect करने लायक सारा data container में है और internal local shell internet से connected है, तो protection boundary unclear है
  • अगर लक्ष्य root filesystem की recursive deletion रोकना है, तो Landlock, Seatbelt, Restricted Tokens जैसे अधिक direct operating-system mechanisms इस्तेमाल किए जा सकते हैं
  • Coding agent security किसी separate container पर responsibility डालने का मुद्दा नहीं, बल्कि harness की top priority होनी चाहिए
    • Git blocking command string से नहीं, बल्कि git executable खुद block करके होनी चाहिए
    • .git directory read-only बनाई जानी चाहिए
    • Bash commands को text से sanitize करने के बजाय native operating-system isolation इस्तेमाल करना चाहिए

Local LLM usage experience

  • Qwen3.6-27B जैसे local models भी frontier models की तरह codebase की stability और conceptual consistency को नुकसान पहुंचा सकते हैं, लेकिन तीन differences हैं
    • Intelligent दिखने के बाद बेवकूफी करने वाली uncanny valley कम है, और limits स्पष्ट होने से interaction adjust करना आसान है
    • Weights की संख्या training data को जस का तस reproduce करने के लिए कम है, इसलिए output contamination पर judgment अलग होता है
    • Cloud provider को support या depend करने की जरूरत नहीं होती
  • Code, symptoms और suspected cause देकर related code पढ़ने के बाद call path और code citations मांगने वाले input-driven search tasks में useful results मिले
    • Search problem तक scope सीमित करने से model की fact fabricate करने की tendency कम हो सकती है
  • Code generation architecture plan को बार-बार collapse करती है
    • कई components में shared करने के लिए design के बीच में mutable state move करने जैसे shortcuts चुनती है
    • समस्या सिर्फ यह नहीं कि code खुद नहीं लिखा; यह code understanding ability को भी नुकसान पहुंचाता है
  • Model weights के knowledge से direct answer निकालने का तरीका trillion-parameter models में भी hallucination पैदा करता है
  • LLM को normal tool बनना है तो surrounding software पर वास्तविक system engineering लागू करके security gaps हटाने होंगे, और वह काम इंसानों को करना होगा

1 टिप्पणियां

 
Hacker News की रायें
  • इस लेख का बेहतर शीर्षक शायद “ऐसी छोटी असुविधाएँ जिन्हें ठीक करने से OpenCode बेहतर होगा” जैसा कुछ होना चाहिए
    हर बार AGENTS.md को फिर से पढ़ना या तारीख बदलने से prompt cache miss होना सहने लायक है
    compression और pruning के ठीक से काम न करने की समस्या Codex और Claude में भी देखी है, और default system prompt भी consistency के लिए है, इसलिए पसंद न हो तो बदल दें

    • अब codebase vibe coding से जोड़े गए features की वजह से गंभीर रूप से फूला हुआ हो गया है और Claude Code जैसी ही समस्या दिखाता है
      stability, performance और memory usage सभी खराब हुए हैं; पहले OpenCode पसंद था, लेकिन इसे अच्छी तरह लिखा software कहना मुश्किल है
      अब मैंने इसे पूरी तरह Pi से बदल दिया है, और OpenCode से सीखकर जहाँ ज़रूरत हो वहाँ अधिक संयमित design लागू करने वाले नए विकल्प भी काफ़ी हैं
    • मैं OpenCode पर काम करता हूँ
      अब हम tool-call pruning नहीं करते, लेकिन सीमित context window में एक ही काम लंबे समय तक जारी रखने के लिए मौजूदा progress का summary बनाना पड़ता है, इसलिए compression फिलहाल एक necessary evil है
      अभी beta में मौजूद V2 में AGENTS.md, उपलब्ध technologies आदि बदलने वाले system instructions को up-to-date रखते हुए भी cache miss को जितना हो सके टालने का नया तरीका है
      https://x.com/kitlangton/status/2075749116760457346/video/1
    • वे बातें “Annoying Things” के तहत रखी गई हैं, इसलिए “Alarming Things” भी पढ़नी चाहिए
    • अभी जिन बातों पर चर्चा हुई वे लेख के “Annoying Things” section की items हैं
      अलग “Alarming Things” section में “It’s Fucking Full of RCEs” नाम का subsection भी है, और पिछले section में दिखी समस्याओं से पैदा होने वाली बातों के अलावा भी कई remote code execution vulnerabilities हैं
    • तो इसीलिए OpenCode मेरे code की comments को randomly delete कर रहा था
  • agent-type CLI के risks को अच्छी तरह समेटा गया है, लेकिन सिर्फ OpenCode पर केंद्रित title दो वजहों से अजीब है
    पहली, यह कोई स्पष्ट alternative नहीं सुझाता। कई समस्याएँ इतनी fundamental हैं कि शायद लगभग scratch से redesign और rewrite करना पड़े, इसलिए केवल OpenCode के fixes सुझाना भी पर्याप्त न होगा, लेकिन कोई constructive proposal बिल्कुल नहीं है, जिससे यह practically “LLM इस्तेमाल करना बंद करो” जैसा लेख लगता है
    दूसरी, “Alarming Things” की मुख्य समस्याएँ सिर्फ OpenCode की नहीं हैं; वे Claude CLI और शायद दूसरे cutting-edge model providers के agents पर भी लागू होती हैं
    फिर भी बेहतर tools को शुरुआत से बनाने के लिए प्रेरित करने वाले record के रूप में इसकी बहुत value है, इसलिए मैं इसे bookmark करूँगा और widely share करूँगा; लेकिन body जितनी अच्छी है, title और focus उतने ही गलत लगते हैं

    • shell access देते हुए arbitrary command execution को सुरक्षित रूप से रोक पाना आप कैसे संभव मानते हैं, यह जानने की उत्सुकता है
      खासकर echo git | bash फिर भी execute हो जाता है, इस पर शिकायत करना बेतुका लगता है
  • “अगर आप OpenCode को नहीं जानते, तो इंसानी चेहरे को हमेशा के लिए रौंदते हुए एक बूट की कल्पना करें। बूट TypeScript से बना है और चेहरा वह सब कुछ है जो हमने 1940 के दशक में electronic computers के आविष्कार के बाद security और system software के बारे में सीखा है” — यह वाक्य जबरन खींची गई उपमा श्रेणी में Bulwer-Lytton पुरस्कार का उम्मीदवार है

    • यह उपमा George Orwell की 1984 की पंक्ति “अगर आप भविष्य की तस्वीर देखना चाहते हैं, तो इंसानी चेहरे को हमेशा के लिए रौंदते हुए एक बूट की कल्पना करें” से ली गई है
  • लेख की style बहुत ज़्यादा गुस्से भरी और harsh है
    कई points से broadly सहमत हूँ, लेकिन OpenCode को “security posture ‘पापा, मैं आपके लिए झुक जाता हूँ’ level वाली clown car turbo garbage” कहते हुए सबको इसका इस्तेमाल बंद करने को कहने वाले हिस्से से आगे पढ़ने का मन नहीं करता
    यह software भी आम लोगों ने बनाया है; open source पर इस तरह हमला करना कब से सामान्य हो गया, समझ नहीं आता, और सोचता हूँ कि मेरे बनाए software को ऐसी review मिले तो कैसा लगेगा

    • इस भावना से सहमत हूँ, लेकिन ऐसी culture कम से कम 1990s से मौजूद है
      पुराने comp.lang.lisp में भी कुछ लोग ivory-tower standards पर खरा न उतरने वाला code लिखने वालों को नीचा दिखाकर मज़ा लेते थे; कुछ लोग चले गए, और कुछ ने इसे skill सुधारने के लिए ज़रूरी डाँट समझकर medal की तरह स्वीकार किया
      इससे जुड़ी पुरानी HN चर्चा: https://news.ycombinator.com/item?id=587045
    • आजकल किसी चीज़ को “vibe-coded” कह देना ऐसा license बन गया है मानो कोई व्यक्ति target नहीं हो रहा, इसलिए बढ़ा-चढ़ाकर बोलना और insult करना ठीक है
      लगता है लोग समझते नहीं कि ऐसी rhetoric collateral damage झेलने वाले developers और इसे normalise करने वाले खुद उनके लिए कितनी harmful है
    • “OpenCode की internal structure को अच्छी तरह जानने वाले किसी व्यक्ति को—मैं मानूँगा कि OpenCode development team इसमें शामिल नहीं है—ऊपर दिए python3 example पर आपत्ति हो सकती है” वाला हिस्सा मज़ेदार था
    • अगर आपने OpenCode में contribute किया भी है, तो humor का sense हो तो आप हँसे होंगे; इसलिए हर चीज़ को बहुत गंभीरता से लेने की ज़रूरत नहीं
    • यह आज भी normal expression नहीं है, लेकिन नया भी नहीं; ऐसी language लंबे समय से मौजूद है
  • client के tech stack की वजह से Claude Code इस्तेमाल करता हूँ और personal काम के लिए OpenCode का एक खास version इस्तेमाल करता था; OpenCode काफी बेहतर था, इसलिए यह लेख पढ़कर दुख हुआ
    अब तक जिन अजीब anomalies को देख कर नज़रअंदाज़ किया था, वे सभी लेख से match करती हैं और उनका कारण भी समझाया गया है। अतिशयोक्तिपूर्ण भाषा और जिन emotional parts से सहमत नहीं हूँ उन्हें छोड़ दें तो कुल मिलाकर बात सही लगती है, इसलिए कोई दूसरा execution tool ढूँढना पड़ेगा
    Pi का architecture सच में बेहतर है या कोई बेहतर alternative है, इस पर recommendations चाहिए

  • defects से अलग, कई tools आज़माने के बाद OpenCode में मेरी productivity सबसे ज़्यादा रही
    लेख में कही गई ज़्यादातर बातें मामूली inconveniences या opinion differences हैं, और खासकर command filtering के purpose को fundamental रूप से गलत समझा गया है। यह security measure नहीं, बल्कि model के behavior को guide करने वाला mechanism है
    लेखक ने OpenCode से वास्तव में कुछ बनाया हो ऐसा नहीं लगता; अगर इस्तेमाल किया होता तो सबसे अहम output की quality पर बिल्कुल बात करता

    • मुझे भी लगता है कि OpenCode में ऐसा ठीक संतुलन है जो बाधा नहीं बनता और computer को भी खराब नहीं करता
      खासकर plan mode आसानी से इस्तेमाल करके काम जल्दी खत्म किया जा सकता है
  • OpenCode में Pi पर स्विच करने के बाद tool call की performance काफी बेहतर हो गई और bugs भी कम महसूस हुए
    लगता है OpenCode https://openrouter.ai/apps/category/coding से भी गायब हो गया है

    • OpenCode टीम ने OpenRouter ranking से हटाने का अनुरोध किया था: https://github.com/anomalyco/opencode/issues/11926#issuecomm...
    • यह इसलिए नहीं कि OpenCode खराब है, बल्कि इसलिए कि Pi अच्छा है. Claude और Pi की तुलना करें तो भी यही बात कही जा सकती है
    • OpenCode की खूबियों में से एक LSP integration है; Pi में इसे कैसे handle किया जाता है, यह जानने की जिज्ञासा है
    • हाल में OpenCode और Pi इस्तेमाल किए, और Claude Code से आने वाले व्यक्ति के तौर पर यह देखकर हैरानी हुई कि दोनों ही बिना confirmation window के default रूप से edits allow करते लगते हैं
      याद है कि उनमें से एक में settings से confirmation चालू किया जा सकता है और दूसरे में plugin चाहिए
    • user से पूछे बिना background में npm packages डाउनलोड करना देखकर मैंने OpenCode पूरी तरह delete कर दिया
      यह behavior supply-chain attack का risk और बढ़ा देता है
  • सिर्फ text दिखाने वाली TUI desktop app का native apps ही नहीं बल्कि browser-based desktop apps की अधिकतर apps से भी भारी होना बेतुका है, और RAM, CPU, energy व battery बर्बाद करता है
    मैं C++ Qt6 में अपना AI execution tool और chat app बना रहा हूं; sub-agents, code diffs, terminal emulator, simple editor, Markdown preview, translucent background, user themes, permissions, MCP, Git integration, docking system और project tabs तक होने के बावजूद यह दूसरे tools से हल्का है
    अभी कुछ bugs हटाने, UI को सरल बनाने और polish करने पर काम चल रहा है, इसलिए इसे release नहीं किया है: https://zeteo.krysoph.com/preview.html

  • अब पता चला कि OpenCode comments delete क्यों कर रहा था—default system prompt में “Use ABSOLUTELY NO COMMENTS” लिखा था—और यह बहुत चिढ़ाने वाला है
    हालांकि यह सिर्फ छोटी-मोटी असुविधा नहीं, बल्कि security risk है, और यह दूसरे execution tools पर भी लागू होता है. ये tools भारी मात्रा में data तक पहुंचते हैं और लगभग रोज update होते हैं; इनके vibe-coded nature की वजह से संभव है कि खींची जाने वाली ढेरों npm dependencies का ठीक से audit कोई न कर रहा हो
    left-pad जैसा एक incident भी पूरी supply chain के लिए आपदा बन सकता है

  • system prompt में date डालने से midnight पर cache invalid होना reasonable decision है, और दूसरे execution tools भी ज्यादातर यही तरीका इस्तेमाल करते हैं
    अगर पूरी date और time डाले जाते तो यह गैर-जिम्मेदाराना होता, लेकिन OpenCode ऐसा नहीं करता

    • midnight पर इस्तेमाल करते समय local GPU का KV cache फिर से भरने के लिए 10 मिनट इंतजार करना पड़ा, तब यह reasonable नहीं लगा
      date को प्रति session एक बार, या लंबे समय तक चलने वाले session के पुराने date पर अटके रहने से रोकने के लिए opencode binary चलाने पर एक बार evaluate कर देना ही आसान समाधान हो सकता है