{"slug": "prompt-submitted-to-cloud-even-when-using-local-llm-by-default", "title": "Prompt submitted to cloud even when using local LLM by default", "summary": "A bug in opencode sends user prompts to a public cloud endpoint at opencode.ai/zen/v1/responses even when a local LLM is configured, exposing data to OpenAI's GPT-5-nano model for title generation. The issue, filed as #15854, affects core functionality and raises privacy concerns for users expecting local-only processing.", "body_md": "-\n[Notifications](/login?return_to=%2Fanomalyco%2Fopencode)You must be signed in to change notification settings -\n[Fork 23.4k](/login?return_to=%2Fanomalyco%2Fopencode)\n\n# Prompt submitted to cloud even when using local LLM by default #15854\n\nCopy link\n\nCopy link\n\nClosed as not planned\n\nLabels\n\n[bugSomething isn't working](https://github.com/anomalyco/opencode/issues?q=state%3Aopen%20label%3A%22bug%22)Something isn't working\n\n[coreAnything pertaining to core functionality of the application (opencode server stuff)](https://github.com/anomalyco/opencode/issues?q=state%3Aopen%20label%3A%22core%22)Anything pertaining to core functionality of the application (opencode server stuff)\n\n## Description\n\n### Description\n\nWhen using a local model, opencode still sends your prompt to public cloud endpoint [https://opencode.ai/zen/v1/responses](https://opencode.ai/zen/v1/responses) to get a title summary.\n\nFor example:\n\n```\nopencode run this is a test\n```\n\nor even with an explicit model\n\n```\nopencode -m local/Qwen/Qwen-Next-Coder run this is a test\n```\n\ncauses opencode to generate a request\n\n```\nPOST /zen/v1/responses HTTP/2\nHost: opencode.ai\nAuthorization: Bearer public\nContent-Type: application/json\nUser-Agent: ai-sdk/openai/2.0.89 ai-sdk/provider-utils/3.0.20 runtime/bun/1.3.10\nX-Opencode-Client: cli\nX-Opencode-Project: global\nX-Opencode-Request: msg_cb41776da0013RO7pnTvyuSA0h\nX-Opencode-Session: ses_34be88938ffewkdc070WPvraqG\nConnection: keep-alive\nAccept: */*\nAccept-Encoding: gzip, deflate, br\nContent-Length: 2574\n\n{\n  \"model\": \"gpt-5-nano\",\n  \"input\": [\n    {\n      \"role\": \"developer\",\n      \"content\": \"You are a title generator. You output ONLY a thread title. Nothing else.\\n\\n<task>\\nGenerate a brief title that would help the user find this conversation later.\\n\\nFollow all rules in <rules>\\nUse the <examples> so you know what a good title looks like.\\nYour output must be:\\n- A single line\\n- ≤50 characters\\n- No explanations\\n</task>\\n\\n<rules>\\n- you MUST use the same language as the user message you are summarizing\\n- Title must be grammatically correct and read naturally - no word salad\\n- Never include tool names in the title (e.g. \\\"read tool\\\", \\\"bash tool\\\", \\\"edit tool\\\")\\n- Focus on the main topic or question the user needs to retrieve\\n- Vary your phrasing - avoid repetitive patterns like always starting with \\\"Analyzing\\\"\\n- When a file is mentioned, focus on WHAT the user wants to do WITH the file, not just that they shared it\\n- Keep exact: technical terms, numbers, filenames, HTTP codes\\n- Remove: the, this, my, a, an\\n- Never assume tech stack\\n- Never use tools\\n- NEVER respond to questions, just generate a title for the conversation\\n- The title should NEVER include \\\"summarizing\\\" or \\\"generating\\\" when generating a title\\n- DO NOT SAY YOU CANNOT GENERATE A TITLE OR COMPLAIN ABOUT THE INPUT\\n- Always output something meaningful, even if the input is minimal.\\n- If the user message is short or conversational (e.g. \\\"hello\\\", \\\"lol\\\", \\\"what's up\\\", \\\"hey\\\"):\\n  → create a title that reflects the user's tone or intent (such as Greeting, Quick check-in, Light chat, Intro message, etc.)\\n</rules>\\n\\n<examples>\\n\\\"debug 500 errors in production\\\" → Debugging production 500 errors\\n\\\"refactor user service\\\" → Refactoring user service\\n\\\"why is app.js failing\\\" → app.js failure investigation\\n\\\"implement rate limiting\\\" → Rate limiting implementation\\n\\\"how do I connect postgres to my API\\\" → Postgres API connection\\n\\\"best practices for React hooks\\\" → React hooks best practices\\n\\\"@src/auth.ts can you add refresh token support\\\" → Auth refresh token support\\n\\\"@utils/parser.ts this is broken\\\" → Parser bug fix\\n\\\"look at @config.json\\\" → Config review\\n\\\"@App.tsx add dark mode toggle\\\" → Dark mode toggle in App\\n</examples>\\n\"\n    },\n    {\n      \"role\": \"user\",\n      \"content\": [\n        {\n          \"type\": \"input_text\",\n          \"text\": \"Generate a title for this conversation:\\n\"\n        }\n      ]\n    },\n    {\n      \"role\": \"user\",\n      \"content\": [\n        {\n          \"type\": \"input_text\",\n          \"text\": \"this is a test\"\n        }\n      ]\n    }\n  ],\n  \"max_output_tokens\": 32000,\n  \"store\": false,\n  \"include\": [\n    \"reasoning.encrypted_content\"\n  ],\n  \"reasoning\": {\n    \"effort\": \"minimal\"\n  },\n  \"stream\": true\n}\n```\n\nThis has leaked your private prompt text to the opencode API.\n\nIt can be disabled using\n\n```\n  \"agent\":{\n    \"title\": {\n      \"disable\":true\n    }\n  }\n```\n\nThe default should be either disabled, or to use the model you specify.\n\n### Plugins\n\nNone\n\n### OpenCode version\n\n1.2.15\n\n### Steps to reproduce\n\nConfigure a local model\n\nexport https_proxy=[http://127.0.0.1:8080](http://127.0.0.1:8080)\n\nexport NODE_TLS_REJECT_UNAUTHORIZED=0\n\nrun Burp proxy or similar to capture requests\n\nrun:\n\nopencode run this is a test\n\nCheck Burp to see the request to opencode.ai with \"this is a test\"\n\n### Screenshot and/or share link\n\n*No response*\n\n### Operating System\n\nUbuntu 24\n\n### Terminal\n\n*No response*\n\nReactions are currently unavailable\n\n## Metadata\n\n## Metadata\n\n### Assignees\n\n### Labels\n\n[bugSomething isn't working](https://github.com/anomalyco/opencode/issues?q=state%3Aopen%20label%3A%22bug%22)Something isn't working\n\n[coreAnything pertaining to core functionality of the application (opencode server stuff)](https://github.com/anomalyco/opencode/issues?q=state%3Aopen%20label%3A%22core%22)Anything pertaining to core functionality of the application (opencode server stuff)\n\n### Type\n\n### Fields\n\nNo fields configured for issues without a type.", "url": "https://wpnews.pro/news/prompt-submitted-to-cloud-even-when-using-local-llm-by-default", "canonical_source": "https://github.com/anomalyco/opencode/issues/15854", "published_at": "2026-07-17 12:00:37+00:00", "updated_at": "2026-07-17 12:21:39.345152+00:00", "lang": "en", "topics": ["ai-ethics", "ai-products", "ai-infrastructure"], "entities": ["opencode", "OpenAI", "GPT-5-nano", "Qwen", "anomalyco"], "alternates": {"html": "https://wpnews.pro/news/prompt-submitted-to-cloud-even-when-using-local-llm-by-default", "markdown": "https://wpnews.pro/news/prompt-submitted-to-cloud-even-when-using-local-llm-by-default.md", "text": "https://wpnews.pro/news/prompt-submitted-to-cloud-even-when-using-local-llm-by-default.txt", "jsonld": "https://wpnews.pro/news/prompt-submitted-to-cloud-even-when-using-local-llm-by-default.jsonld"}}