running-claude-code-via-litellm-copilot

作者: xixu-me

在透過本地 LiteLLM 代理將 Claude Code 路由至 GitHub Copilot 時使用,以減少直接 Anthropic 花費、設定 ANTHROPIC_BASE_URL 或 ANTHROPIC_MODEL 覆寫,或疑難排解 Copilot 代理設定失敗,例如模型未找到、無 localhost 流量或 GitHub 401/403 驗證錯誤。

npx skills add https://github.com/xixu-me/skills --skill running-claude-code-via-litellm-copilot

Overview

Use this skill for the specific workaround where Claude Code keeps its Anthropic-shaped client behavior, but the actual backend traffic is sent to a local LiteLLM proxy and then forwarded to GitHub Copilot.

Treat this as an advanced workaround, not an officially guaranteed GitHub workflow. Help the user succeed technically, but do not promise GitHub support, policy approval, or long-term compatibility.

This skill is guidance-first but execution-aware:

  • If the user wants explanation only, provide the smallest correct set of files, commands, and checks.
  • If the user wants real setup work on the current machine, inspect first and adapt commands to the active shell and OS.
  • Pause before persistent edits such as ~/.claude/settings.json or shell profile files.

Read references/doc-verified-notes.md before answering if you need to justify which parts come from the article and which parts were tightened against current LiteLLM docs.

When To Use

Use this skill when the user wants any of the following:

  • Claude Code to run against GitHub Copilot through LiteLLM
  • lower direct Anthropic API spending while keeping the Claude Code workflow
  • a local config.yaml for LiteLLM's GitHub Copilot provider
  • ANTHROPIC_BASE_URL, ANTHROPIC_MODEL, or CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC setup
  • help understanding GitHub device authorization during LiteLLM startup
  • help with model mismatch, 404-like errors, no requests reaching LiteLLM, or GitHub 401/403 failures

Do not use this skill for:

  • deciding whether the workaround is allowed by GitHub terms
  • general LiteLLM architecture unrelated to Claude Code plus Copilot
  • direct Anthropic API setup with no Copilot or LiteLLM component

Core Rules

  1. Lead with a short compliance caveat. Explain that this is a workaround based on a local proxy path, not a GitHub-promoted workflow, and the user must evaluate the latest Copilot terms and limits for themselves.
  2. Prefer the minimum viable path first. Start with temporary environment variables and a local config.yaml unless the user explicitly wants a persistent setup.
  3. Keep ANTHROPIC_MODEL and LiteLLM model_name identical. Exact string match matters more than clever explanation.
  4. Treat ANTHROPIC_AUTH_TOKEN as a local placeholder. Claude Code expects a non-empty value locally, but it is not the GitHub Copilot credential and should not be presented as a reusable secret.
  5. Never overwrite ~/.claude/settings.json wholesale. Merge only the needed env keys and preserve unrelated settings.

Workflow

1. Preflight

Check these first when the user wants real setup work:

  • claude --help succeeds
  • uv --version or pip --version succeeds
  • the user has GitHub Copilot access
  • the intended LiteLLM port is available, usually 4000

If the user only wants instructions, state the prerequisites instead of running them.

2. Choose Temporary vs Persistent Setup

Use this rule:

  • Temporary setup: preferred default for first-time setup, debugging, and low-risk trials
  • Persistent setup: only when the user explicitly wants the proxy path to apply every time Claude Code starts

For persistent setup, confirm the target file and then merge keys into ~/.claude/settings.json. Do not replace the file contents.

3. Create LiteLLM config.yaml

Start from the article's flow, but keep the provider naming aligned with LiteLLM docs:

model_list:
  - model_name: claude-opus-4.5
    litellm_params:
      model: github_copilot/claude-opus-4.5
      drop_params: true

Explain the fields:

  • model_name: the logical name Claude Code will request
  • model: the LiteLLM provider route, using github_copilot/<model>
  • drop_params: true: strips unsupported Anthropic-specific fields before forwarding to Copilot

If the user wants a different Copilot-backed model, keep the same pattern:

model_list:
  - model_name: <logical-name>
    litellm_params:
      model: github_copilot/<copilot-model>
      drop_params: true

Do not hardcode extra headers into the default path unless the user already hit a rejection that suggests header overrides are needed.

4. Install and Start LiteLLM

Preferred install:

uv tool install "litellm[proxy]"

Fallback:

pip install "litellm[proxy]"

Start the proxy from the directory containing config.yaml:

litellm --config config.yaml --port 4000

Tell the user to keep that terminal open because the logs are the fastest truth source during verification.

5. Explain GitHub Device Authorization

On the first successful request to the GitHub Copilot provider, LiteLLM may open a device authorization flow:

  1. LiteLLM prints a verification URL and device code
  2. the user opens the URL and approves the request
  3. LiteLLM stores the resulting credential locally for future use

Optional token-location overrides exist:

  • GITHUB_COPILOT_TOKEN_DIR
  • GITHUB_COPILOT_ACCESS_TOKEN_FILE

Only mention these when the user needs custom token storage, shared environments, or troubleshooting around expired or misplaced credentials.

6. Configure Claude Code

For a temporary PowerShell session:

$env:ANTHROPIC_AUTH_TOKEN = "sk-any-string"
$env:ANTHROPIC_BASE_URL = "http://localhost:4000"
$env:ANTHROPIC_MODEL = "claude-opus-4.5"
$env:CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC = "1"
claude

For a temporary Bash or Zsh session:

export ANTHROPIC_AUTH_TOKEN="sk-any-string"
export ANTHROPIC_BASE_URL="http://localhost:4000"
export ANTHROPIC_MODEL="claude-opus-4.5"
export CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1
claude

For persistent configuration, merge these keys into ~/.claude/settings.json:

{
  "env": {
    "ANTHROPIC_AUTH_TOKEN": "sk-any-string",
    "ANTHROPIC_BASE_URL": "http://localhost:4000",
    "ANTHROPIC_MODEL": "claude-opus-4.5",
    "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1"
  }
}

Merge-safe behavior:

  • if the file does not exist, create it
  • if it exists, preserve all unrelated top-level keys
  • preserve existing env entries that are unrelated to this workflow
  • update only the four keys above
  • if the JSON is malformed, stop and report the parse problem instead of overwriting the file

7. Verify The Request Chain

Use two terminals when possible:

  • Terminal A runs LiteLLM
  • Terminal B runs claude

Ask for one small prompt such as a short script or code review request, then verify:

  • Claude Code starts normally
  • LiteLLM logs show an inbound request
  • LiteLLM logs indicate the GitHub Copilot model route, typically github_copilot/<model>

The healthy path is:

Claude Code -> LiteLLM -> GitHub Copilot -> LiteLLM -> Claude Code

8. Troubleshooting

If Claude Code reports model-not-found, 404-like failures, or LiteLLM says the model does not exist:

  • compare ANTHROPIC_MODEL to model_name exactly
  • check case, punctuation, and hyphens

If LiteLLM never receives a request:

  • confirm ANTHROPIC_BASE_URL points to http://localhost:4000
  • confirm LiteLLM is still running on that port
  • confirm the environment variables were set in the same shell session that launched claude
  • check local firewall or port conflicts if the URL is correct but still silent

If LiteLLM reaches GitHub Copilot but gets 401 or 403 responses:

  • repeat the device authorization flow by restarting LiteLLM and retrying
  • confirm the GitHub account still has Copilot access
  • if custom token-directory variables are set, verify they point to the intended files

Advanced Fallback: Header Overrides

The article uses explicit Copilot-style headers. Current LiteLLM docs expose GitHub Copilot as a provider and also document header override support.

Only reach for explicit extra_headers when:

  • the basic provider flow reaches Copilot but still needs client-shape overrides
  • the user already has evidence that a specific environment behaves better with editor-style headers

Example fallback:

model_list:
  - model_name: claude-opus-4.5
    litellm_params:
      model: github_copilot/claude-opus-4.5
      drop_params: true
      extra_headers:
        editor-version: "vscode/1.85.1"
        editor-plugin-version: "copilot/1.155.0"
        Copilot-Integration-Id: "vscode-chat"
        user-agent: "GithubCopilot/1.155.0"

Present this as an advanced fallback, not the universal default.

Output Checklist

When answering a real user request with this skill, include:

  • the brief compliance caveat
  • the exact config.yaml or the delta to apply
  • shell-appropriate commands
  • whether the setup is temporary or persistent
  • the verification path
  • the smallest relevant troubleshooting section if something failed

Safety Reminders

  • Do not state that GitHub officially supports this workaround.
  • Do not imply that a dummy ANTHROPIC_AUTH_TOKEN is a real Copilot credential.
  • Do not recommend replacing ~/.claude/settings.json wholesale.
  • Do not present stale model names as guaranteed current availability; if the user asks for a specific model, keep the github_copilot/<model> pattern and note that Copilot-exposed model availability may change.

來自 xixu-me 的更多技能

github-actions-docs
xixu-me
當使用者詢問如何撰寫、解釋、自訂、遷移、保護或疑難排解 GitHub Actions 工作流程、工作流程語法、觸發器、矩陣、執行器、可重複使用工作流程、成品、快取、密碼、OIDC、部署、自訂動作或 Actions Runner Controller 時使用,特別是當他們需要官方 GitHub 文件、精確連結或基於文件的 YAML 指引時。
developmentdevopsdocument
use-my-browser
xixu-me
當工作依賴於用戶的即時瀏覽器工作階段或可見的渲染狀態,而非靜態擷取時使用,特別適用於瀏覽器除錯情境、開發者工具選取的元素或請求、已登入的儀表板或CMS流程、本地主機應用程式、表單、上傳、下載、媒體檢查、DOM或iframe檢查、Shadow DOM,以及看似軟性404、驗證牆、反機器人檢查或速率限制的瀏覽器故障。
browser-automationweb-scrapingtesting
readme-i18n
xixu-me
當使用者想要翻譯儲存庫的README、讓儲存庫支援多語言、在地化文件、加入語言切換器、國際化README,或是在GitHub風格的儲存庫中更新已在地化的README版本時使用。
documentdevelopmentapi
openclaw-secure-linux-cloud
xixu-me
在雲端伺服器上自行託管 OpenClaw 時使用,用於強化遠端 OpenClaw 閘道、選擇 SSH 隧道、Tailscale 或反向代理暴露方式,或審查 Podman、配對、沙箱、令牌驗證及工具權限預設值,以確保安全的個人部署。
devopssecurity
develop-userscripts
xixu-me
在構建、除錯、打包或發佈用於 Tampermonkey 或 ScriptCat 的瀏覽器使用者腳本時使用,包括 GM API、元數據區塊、權限問題、@match/@grant/@connect 設定、ScriptCat 背景或排程腳本、UserConfig 區塊或訂閱工作流程。
developmentbrowser-automationweb-scraping
secure-linux-web-hosting
xixu-me
在設定、強化或檢視用於自架站的雲端伺服器時使用,包括 DNS、SSH、防火牆、Nginx、靜態網站託管、應用程式的反向代理、使用 Let's Encrypt 或 ACME 用戶端的 HTTPS、安全的 HTTP 到 HTTPS 重新導向,或可選的啟動後網路調校(如 BBR)。
devopssecurityaws
opensource-guide-coach
xixu-me
當使用者希望獲得關於啟動、貢獻、發展、治理、資助、保護或維持開源專案的指導,或詢問貢獻者入門、社群健康、維護者倦怠、行為準則、指標、法律基礎或開源專案採用的相關問題時使用。
developmentresearch
skills-cli
xixu-me
Use when users ask to discover, install, list, check, update, remove, back up, restore, sync, or initialize Agent Skills, mention `bunx skills`, `npx skills`, `skills.sh`, or `skills-lock.json`, ask "find a skill for X", or want help extending agent capabilities with installable skills.
developmentapiproductivity