Skip to content

Option to turn off the model-manifest fetch from raw.githubusercontent.com at server start #36479

Open

Description

@joshuaswarren

Version: t3 0.1.9, linux-arm64 release asset, run as t3 serve --host 127.0.0.1 --port 3773 --base-dir <dir> <workdir> with T3CODE_TELEMETRY_ENABLED=false.

What I see. Right after start, the server opens one outbound HTTPS connection to raw.githubusercontent.com and downloads the model manifest. The URL is fixed in the server code (MODEL_MANIFEST_URL):

https://raw.githubusercontent.com/pingdotgg/t3code/main/apps/server/src/provider/model-manifest.json

The answer is saved as <base-dir>/userdata/model-manifest.json. With ss -tnp sampled twice a second for 30 s, this was the only non-loopback peer of the node process (185.199.111.133:443). The server trace log lists the same URL as the only remote address. There was no connection to ingest.t3.codes.

Why it matters. docs/user/telemetry.md describes how to turn off product events and relay tracing. This fetch is not telemetry, and it sends no prompt, file or key. But some users run T3 Code with a local model on a machine that must not call out at all, and today they cannot tell from the docs that this request exists, and they cannot turn it off. I found no environment variable, setting or managed-policy entry for it (I searched the release binary for T3CODE_ names and read managed-policy.md).

Request.

  1. A switch that stops the fetch, for example an environment variable, a server setting and a managed-policy entry. With the switch on, the server would use the manifest that ships in the release.
  2. A line in docs/user/telemetry.md (or the FAQ) that names this request, what it fetches and how often (the code uses a 1 hour refresh and a 5 minute retry).

I can send a pull request for either part if you tell me which setting name you want.

Activity

  1. juliusmarminge commented on Nov 14, 2026

    @juliusmarminge
    Member

    Thanks for the careful write-up. This switch already exists. The model-manifest fetch is controlled by the provider update checks setting, and when it is off the server makes no request and uses the manifest bundled in the release. You can turn it off in any of these ways:

    • In the app: Settings → Maintenance → Updates → turn off provider update checks.
    • Headless (t3 serve): put {"enableProviderUpdateChecks": false} in <base-dir>/userdata/settings.json before you start the server. On current main, a fresh base dir with that file made no connection to raw.githubusercontent.com and wrote no model-manifest.json. Without it, the fetch happened about 2 s after startup.
    • Managed policy: lock it under settings, for example "settings": { "enableProviderUpdateChecks": { "value": false, "locked": true } } (see the Settings section of docs/user/managed-policy.md for the exact shape).

    The same setting also stops T3 Code from checking installed provider CLIs for newer versions. With it off, new models only arrive when you update T3 Code itself. There is no environment variable for it today. You're right that telemetry.md and the FAQ don't mention this request; it is only described in docs/user/updating.md. A short docs PR adding one line there would be welcome: it fetches the model catalog from raw.githubusercontent.com, refreshes it at most hourly (retrying after 5 minutes on failure, or sooner when the model picker opens), and is turned off with enableProviderUpdateChecks.

  2. joshuaswarren commented on Nov 14, 2026

    @joshuaswarren
    Author

    Thank you, this works. On v0.1.9 linux-arm64 with {"enableProviderUpdateChecks": false} in <base-dir>/userdata/settings.json, a clean base dir shows no non-loopback connection over a 30 s sample and no model-manifest.json is written. Without it, the one connection to raw.githubusercontent.com appears as before. I will leave the docs line to you unless you want a PR; say the word and I will send one for docs/user/updating.md or the telemetry page.

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

Metadata

Metadata

Assignees

No one assigned

    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