Skip to content

OpenCode is not private by default? #10416

Closed as not planned
Closed as not planned

Description

@MatthewCroughan

Question

@thdxr I have noticed that the titles of sessions is computed outside of my network and my own locally hosted LLMs. I noticed this because I have nftables rules that block access to outbound IPs, and this feature of naming the session only works when I disable nftables. What is going on with that, and why is opencode not operating private by default?

Activity

  1. MatthewCroughan commented on Jan 24, 2026

    @MatthewCroughan
    Author

    Related to #459

  2. rekram1-node commented on Jan 24, 2026

    @rekram1-node
    Contributor

    @MatthewCroughan can u share opencode debug config

  3. MatthewCroughan commented on Jan 24, 2026

    @MatthewCroughan
    Author

    @rekram1-node

    {
      "agent": {},
      "mode": {},
      "plugin": [],
      "command": {},
      "$schema": "https://opencode.ai/config.json",
      "provider": {
        "ollama": {
          "name": "Ollama",
          "npm": "@ai-sdk/openai-compatible",
          "models": {
            "gpt-oss:120b": {
              "name": "gpt-oss:120b"
            }
          },
          "options": {
            "baseURL": "http://192.168.5.161:11434/v1"
          }
        }
      },
      "username": "test",
      "keybinds": {
        "leader": "ctrl+x",
        "app_exit": "ctrl+c,ctrl+d,<leader>q",
        "editor_open": "<leader>e",
        "theme_list": "<leader>t",
        "sidebar_toggle": "<leader>b",
        "scrollbar_toggle": "none",
        "username_toggle": "none",
        "status_view": "<leader>s",
        "session_export": "<leader>x",
        "session_new": "<leader>n",
        "session_list": "<leader>l",
        "session_timeline": "<leader>g",
        "session_fork": "none",
        "session_rename": "ctrl+r",
        "session_delete": "ctrl+d",
        "stash_delete": "ctrl+d",
        "model_provider_list": "ctrl+a",
        "model_favorite_toggle": "ctrl+f",
        "session_share": "none",
        "session_unshare": "none",
        "session_interrupt": "escape",
        "session_compact": "<leader>c",
        "messages_page_up": "pageup",
        "messages_page_down": "pagedown",
        "messages_half_page_up": "ctrl+alt+u",
        "messages_half_page_down": "ctrl+alt+d",
        "messages_first": "ctrl+g,home",
        "messages_last": "ctrl+alt+g,end",
        "messages_next": "none",
        "messages_previous": "none",
        "messages_last_user": "none",
        "messages_copy": "<leader>y",
        "messages_undo": "<leader>u",
        "messages_redo": "<leader>r",
        "messages_toggle_conceal": "<leader>h",
        "tool_details": "none",
        "model_list": "<leader>m",
        "model_cycle_recent": "f2",
        "model_cycle_recent_reverse": "shift+f2",
        "model_cycle_favorite": "none",
        "model_cycle_favorite_reverse": "none",
        "command_list": "ctrl+p",
        "agent_list": "<leader>a",
        "agent_cycle": "tab",
        "agent_cycle_reverse": "shift+tab",
        "variant_cycle": "ctrl+t",
        "input_clear": "ctrl+c",
        "input_paste": "ctrl+v",
        "input_submit": "return",
        "input_newline": "shift+return,ctrl+return,alt+return,ctrl+j",
        "input_move_left": "left,ctrl+b",
        "input_move_right": "right,ctrl+f",
        "input_move_up": "up",
        "input_move_down": "down",
        "input_select_left": "shift+left",
        "input_select_right": "shift+right",
        "input_select_up": "shift+up",
        "input_select_down": "shift+down",
        "input_line_home": "ctrl+a",
        "input_line_end": "ctrl+e",
        "input_select_line_home": "ctrl+shift+a",
        "input_select_line_end": "ctrl+shift+e",
        "input_visual_line_home": "alt+a",
        "input_visual_line_end": "alt+e",
        "input_select_visual_line_home": "alt+shift+a",
        "input_select_visual_line_end": "alt+shift+e",
        "input_buffer_home": "home",
        "input_buffer_end": "end",
        "input_select_buffer_home": "shift+home",
        "input_select_buffer_end": "shift+end",
        "input_delete_line": "ctrl+shift+d",
        "input_delete_to_line_end": "ctrl+k",
        "input_delete_to_line_start": "ctrl+u",
        "input_backspace": "backspace,shift+backspace",
        "input_delete": "ctrl+d,delete,shift+delete",
        "input_undo": "ctrl+-,super+z",
        "input_redo": "ctrl+.,super+shift+z",
        "input_word_forward": "alt+f,alt+right,ctrl+right",
        "input_word_backward": "alt+b,alt+left,ctrl+left",
        "input_select_word_forward": "alt+shift+f,alt+shift+right",
        "input_select_word_backward": "alt+shift+b,alt+shift+left",
        "input_delete_word_forward": "alt+d,alt+delete,ctrl+delete",
        "input_delete_word_backward": "ctrl+w,ctrl+backspace,alt+backspace",
        "history_previous": "up",
        "history_next": "down",
        "session_child_cycle": "<leader>right",
        "session_child_cycle_reverse": "<leader>left",
        "session_parent": "<leader>up",
        "terminal_suspend": "ctrl+z",
        "terminal_title_toggle": "none",
        "tips_toggle": "<leader>h"
      }
    }
    
  4. MatthewCroughan commented on Jan 24, 2026

    @MatthewCroughan
    Author

    I had simply followed https://docs.ollama.com/integrations/opencode and wrote the following ~/.opencode/opencode.json

    {
      "$schema": "https://opencode.ai/config.json",
      "provider": {
        "ollama": {
          "npm": "@ai-sdk/openai-compatible",
          "name": "Ollama",
          "options": {
            "baseURL": "http://192.168.5.151:11434/v1"
          },
          "models": {
            "gpt-oss:120b": {
              "name": "gpt-oss:120b"
            }
          }
        }
      }
    }
    
  5. github-actions commented on Jan 24, 2026

    @github-actions
    Contributor

    This issue might be a duplicate of existing issues. Please check:

    Feel free to ignore if none of these address your specific case.

  6. MatthewCroughan commented on Jan 24, 2026

    @MatthewCroughan
    Author

    Yes, the Github bot does point to relevant issues, this is concerning and is absolutely a privacy concern. This sucks, especially when you read #459 (comment), it comes across as misleading, if not an outright lie. Why would you claim that it's only communicating with your own LLM, when it clearly is sending data to another internet connected model on the side?

  7. rekram1-node commented on Jan 24, 2026

    @rekram1-node
    Contributor

    Here is the exact logic:

    export async function getSmallModel(providerID: string) {

    You can get around this by adding:
    "disabled_providers": ["opencode"],

    OR "small_model": "ollama/gpt-oss:120b"

    What is happening:

    • you have no whitelisted cheap model available
    • we are falling back to running title gen using gpt-5-nano on zen provider (NO telemetry collected)

    Removing this behavior makes people upset (why am I being billed for model X, why is it using model Y, etc etc)

    Luckily this is entirely configurable on your side to resolve.

    And note that referenced comment is accurate, there is no telemetry

  8. MatthewCroughan commented on Jan 24, 2026

    @MatthewCroughan
    Author

    Luckily this is entirely configurable on your side to resolve.

    The issue title is that there OpenCode is not private by default, which is still an issue regardless of the configurability you described. There is also the issue of the the lack of care taken with communicating how OpenCode works with your data.

    If it's not private by default, why try to reassure people that it is like in #459 (comment)? Do you know how your own codebase is operating, or do you not take the care needed to assure that data is not sent abroad?

    Removing this behavior makes people upset (why am I being billed for model X, why is it using model Y, etc etc)

    The use case where you send data to third parties and providers is entirely separate from the use case where the model is running locally. It is not acceptable to somehow blend them together into a mush where some things are running locally and some things aren't, it's a violation of trust.

  9. smola commented on Jan 24, 2026

    @smola

    This behavior, as well as "disabled_providers": ["opencode"] should probably be documented at https://opencode.ai/docs/enterprise/#data-handling
    This page suggests data is not being sent to LLM providers other than the ones setup by the user, but as this issue shows, it's not always the case. So "disabled_providers": ["opencode"] is likely to be a prerequisite for most enterprise users.

  10. MatthewCroughan commented on Jan 24, 2026

    @MatthewCroughan
    Author

    My complaint is about defaults and who this tool is designed for. If it is not private by default, then it is not designed for people running models locally, and this tool should be added to a list of tools to avoid if you value your personal data privacy. The words "enterprise", "billing" and "provider" are business and corporate terms that are completely alien to anyone trying to run this stuff locally, i.e regular people.

  11. MatthewCroughan commented on Jan 24, 2026

    @MatthewCroughan
    Author

    FWIW, I don't want to come across as entitled, it's just not designed for me (and others like me) if the defaults are not privacy first.

  12. MatthewCroughan commented on Jan 24, 2026

    @MatthewCroughan
    Author

    Does the "Optional" /share feature mean that opencode is just hoovering up all data by default?

    If so, it's another example of why it should be added to a list of things to avoid.

    Who wants to go around disabling features all day just to get some basic privacy?

  13. MatthewCroughan commented on Jan 27, 2026

    @MatthewCroughan
    Author

    When a version update is done, and we open opencode, we see the following

    INFO  2026-01-27T14:54:57 +134ms service=default version=1.1.30 args=["--print-logs"] opencode
    INFO  2026-01-27T14:54:57 +1ms service=config path=/home/virus/.config/opencode/config.json loading
    INFO  2026-01-27T14:54:57 +0ms service=config path=/home/virus/.config/opencode/opencode.json loading
    INFO  2026-01-27T14:54:57 +2ms service=config path=/home/virus/.config/opencode/opencode.jsonc loading
    

    But then, the TUI is permanently black. This resolves itself if network access is granted to the program.

    Any ideas what nasty stuff is happening?

    @smola

  14. MatthewCroughan commented on Jan 27, 2026

    @MatthewCroughan
    Author

    Even after removing all the state that opencode creates, I am unable to open the opencode program.

    rm -rf /home/virus/.opencode/node_modules/ /home/virus/.opencode/.gitignore /home/virus/.opencode/config.json /home/virus/.opencode/bun.lock ~/.local/share/opencode/ ~/.cache/opencode/ ~/.local/state/opencode ~/.config/opencode/ ~/.opencode/

    It appears that for opencode to open for the first time, it must be connected to the internet.

  15. 37 remaining items

  16. thdxr commented on Mar 26, 2026

    @thdxr
    Member

    1.3.3 also embeds the webui in the binary now

    not sure if there are any other concerns remaining

  17. shantur commented on Apr 13, 2026

    @shantur
    Contributor

    @thdxr - Is there any guide / documentation to know settings to use ensuring opencode remains private when using in enterprise environment without risking data leakage.

  18. kha84 commented on May 1, 2026

    @kha84

    @shantur I tried to use the below lines in my ~/.config/opencode/opencode.json config, while hoping that OpenCode won't be "calling home" unless I allow it:

    {
      "$schema": "https://opencode.ai/config.json",
      "autoupdate": false,
      "disabled_providers": ["opencode"],
      ...  your rest settings ....
    }
    

    ... but quick-n-dirty inspection shows me it still keep calling some external IPs, even though no providers are configured (fresh install):

    strace -e trace=connect -f -yy opencode 2>&1 | grep -oP 'sin_addr=inet_addr\("\K[^"]+'
    

    There's a nice piece of software I love deeply with all my heart - OpenSnitch application firewall (https://github.com/evilsocket/opensnitch). It warns you and allows to block whatever network calls your apps are making. But the frontend is a gui thing, so if you're running opencode remotely on some headless server, it's not an option. Need to find something similar for TUI.

    And yeah, even though the opencode is a good product with a solid dev team behind it, I have to say that privacy-wise unfortunately it's a nightmare :-( If I don't find a way to shut it, I'll go find an alternative. Heard some good feedback on pi

  19. rekram1-node commented on Jun 23, 2026

    @rekram1-node
    Contributor

    Automated: closing question issues.

    GitHub Issues are for bug reports and feature requests only — questions / support are no longer tracked here.

    If this is a bug or feature request, please open a new issue with the appropriate template.

  20. tredondo commented on Jun 24, 2026

    @tredondo

    There's a nice piece of software I love deeply with all my heart - OpenSnitch application firewall (https://github.com/evilsocket/opensnitch). It warns you and allows to block whatever network calls your apps are making. But the frontend is a gui thing, so if you're running opencode remotely on some headless server, it's not an option.

    @kha84 You can install the OpenSnitch traffic monitoring daemon on a the headless server, and the GUI on your local machine:

    https://github.com/evilsocket/opensnitch/wiki/Nodes

  21. SynapseScribe commented on Jun 24, 2026

    @SynapseScribe

    why does opencode connect so often to models.dev, even in background? i am using a local model running in lm studio (server).

  22. rekram1-node commented on Jun 24, 2026

    @rekram1-node
    Contributor

    You can disable if u want to, but we have a model api that we use to track what providers have which models, how much they cost etc.

    It checks the list often so that u can use new models without having to upgrade everytime.

  23. SynapseScribe commented on Jun 24, 2026

    @SynapseScribe

    How to disable or reduce the no. of checks to models.dev? I also see periodic checks towards github, even if auto update is disabled

  24. daniel-capital commented on Jul 8, 2026

    @daniel-capital

    In the end, the issue for pointing out there's no privacy (at all) in a privacy-boasting agentic harness, after all the back-and-forth virtue signaling and hand-waving of "we're actually doing stuff, we just might have overlooked it, see? [shows irrelevant one-line change]" is being closed as "not planned". So much for "Open"Code.

  25. insanowsky commented on Oct 17, 2026

    @insanowsky

    well well well...

  26. SeungHuLee commented on Oct 17, 2026

    @SeungHuLee

    it's so over

  27. thdxr commented on Oct 17, 2026

    @thdxr
    Member

    This issue was resolved back in March as we stopped offering free title gen models by default

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions