type: runbook
status: active
timestamp: 2026-06-26
tags: [vscode, copilot, github, ide, settings, free-tier, no-card]

VS Code Copilot warning suppression + GitHub Copilot Free signup

Silence VS Code Copilot nag; claim free 2k-completions/mo tier (no card)

VS Code Copilot warning suppression + Copilot Free signup

Context

VS Code 1.95+ ships bundled Copilot setup UI even when the extensions are uninstalled. The “Set up Copilot” notification re-appears on startup unless settings explicitly disable it. Microsoft’s Copilot-by-default push means there is no toggle in the UI to permanently silence it — the kill must happen in settings.json.

Two paths

GitHub Copilot Free (launched Dec 2024) gives every personal GitHub account:

Signup steps:

  1. Go to https://github.com/features/copilot while signed in.
  2. Click “Start using Copilot Free” (or equivalent CTA).
  3. Confirm the activation; no card prompt should appear.
  4. In VS Code, install the official GitHub.copilot + GitHub.copilot-chat extensions.
  5. Sign in with the same GitHub account.

Verify the token’s copilot scope is present:

val=$(grep -E "^GH_PAT=" .env | cut -d= -f2-)
curl -sI -H "Authorization: Bearer $val" https://api.github.com/user \
  | grep -i 'x-oauth-scopes' | tr ',' '\n' | grep -i copilot
# Expected: ` copilot` in the output

Path B — Disable the bundled UI entirely (no Copilot at all)

If you don’t want to take the free tier (avoiding the Microsoft account-data attach, or just disliking the IDE clutter), apply these settings to both stable + Insiders:

Add (or update) these keys:

{
    "github.copilot.enable": {
        "*": false,
        "plaintext": false,
        "markdown": false,
        "scminput": false,
        "yaml": false
    },
    "github.copilot.chat.welcomeMessage": "never",
    "chat.commandCenter.enabled": false,
    "chat.setupFromDialog": false,
    "chat.disableAIFeatures": true,
    "workbench.welcomePage.experimental.videoTutorials": "off",
    "workbench.tips.enabled": false,
    "extensions.experimental.affinity": {
        "GitHub.copilot": 0,
        "GitHub.copilot-chat": 0
    }
}

Then uninstall the extensions if they’re installed:

code --uninstall-extension GitHub.copilot 2>/dev/null
code --uninstall-extension GitHub.copilot-chat 2>/dev/null
code-insiders --uninstall-extension GitHub.copilot 2>/dev/null
code-insiders --uninstall-extension GitHub.copilot-chat 2>/dev/null

Restart VS Code. The warning should be gone.

What each setting does

SettingEffect
github.copilot.enable.*: falseTells the (possibly bundled) Copilot completion engine to do nothing per file type.
github.copilot.chat.welcomeMessage: "never"Suppresses the chat panel’s first-run greeting.
chat.commandCenter.enabled: falseRemoves the Copilot icon from the title bar’s command center.
chat.setupFromDialog: falsePrevents the modal “Set up Copilot” dialog on startup.
chat.disableAIFeatures: trueMaster switch — turns off all AI surfaces VS Code knows about.
workbench.tips.enabled: falseDisables the periodic “did you know about Copilot” hints.
extensions.experimental.affinityPins Copilot extensions to extension host 0, isolating their startup cost if they DO get installed by accident.

GitHub tokens — what’s expected in .env

The umbrella .env (gitignored, per rules-centralized-at-umbrella-no-per-repo) has these GitHub-related vars:

# GitHub Personal Access Token (classic) with the full admin scope set.
# Get one at: https://github.com/settings/tokens
#   1. "Generate new token (classic)"
#   2. Tick: repo, workflow, write:packages, delete_repo, admin:org,
#      admin:enterprise, admin:public_key, admin:repo_hook, gist,
#      notifications, user, audit_log, codespace, copilot, project
#   3. Set "No expiration" or 90 days max
#   4. Copy starts with `ghp_` (40 chars after prefix)
GH_PAT=

# Same scopes as GH_PAT — used by scripts that need admin power.
GH_ADMIN_PAT=

# Default token consumed by `gh` CLI + 3rd-party libraries that read GITHUB_TOKEN.
GITHUB_TOKEN=

# GitHub username (lowercase).
GH_USERNAME=

Audit your tokens (verify each has copilot scope + reads as your user):

for key in GH_PAT GH_ADMIN_PAT GITHUB_TOKEN; do
  val=$(grep -E "^${key}=" .env | cut -d= -f2-)
  echo "--- $key ---"
  scopes=$(curl -sI -H "Authorization: Bearer $val" https://api.github.com/user \
    | grep -i 'x-oauth-scopes:' | sed 's/^[^:]*: //')
  user=$(curl -s -H "Authorization: Bearer $val" https://api.github.com/user | jq -r .login)
  echo "  user: $user"
  echo "  scopes: $scopes"
done

Expected: all 3 return your username + a long scope string including copilot.

Anti-patterns

Verification after applying

  1. Close all VS Code windows.
  2. Reopen any folder.
  3. Watch the bottom-right status bar + the title bar — no “Set up Copilot” badge, no notification toasts.
  4. Open Command Palette → search “copilot” → no commands should be exposed for an uninstalled extension.

If a warning still appears, screenshot the exact message — the rule is updated when a specific notification has its own dedicated setting key.


Edit on GitHub · Back to index