<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Free Claude Code on Producthunt daily</title>
        <link>https://producthunt.programnotes.cn/en/tags/free-claude-code/</link>
        <description>Recent content in Free Claude Code on Producthunt daily</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en</language>
        <lastBuildDate>Sat, 25 Apr 2026 16:09:35 +0800</lastBuildDate><atom:link href="https://producthunt.programnotes.cn/en/tags/free-claude-code/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>free-claude-code</title>
        <link>https://producthunt.programnotes.cn/en/p/free-claude-code/</link>
        <pubDate>Sat, 25 Apr 2026 16:09:35 +0800</pubDate>
        
        <guid>https://producthunt.programnotes.cn/en/p/free-claude-code/</guid>
        <description>&lt;img src="https://images.unsplash.com/photo-1759915995309-404c743bfbf9?ixid=M3w0NjAwMjJ8MHwxfHJhbmRvbXx8fHx8fHx8fDE3NzcxMDQ1NjJ8&amp;ixlib=rb-4.1.0" alt="Featured image of post free-claude-code" /&gt;&lt;h1 id=&#34;alishahryar1free-claude-code&#34;&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/Alishahryar1/free-claude-code&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Alishahryar1/free-claude-code&lt;/a&gt;
&lt;/h1&gt;&lt;div align=&#34;center&#34;&gt;
&lt;h1 id=&#34;-free-claude-code&#34;&gt;🤖 Free Claude Code
&lt;/h1&gt;&lt;h3 id=&#34;use-claude-code-cli--vscode-for-free-no-anthropic-api-key-required&#34;&gt;Use Claude Code CLI &amp;amp; VSCode for free. No Anthropic API key required.
&lt;/h3&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://opensource.org/licenses/MIT&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.shields.io/badge/License-MIT-yellow.svg?style=for-the-badge&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;License: MIT&#34;
	
	
&gt;&lt;/a&gt;
&lt;a class=&#34;link&#34; href=&#34;https://www.python.org/downloads/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.shields.io/badge/python-3.14-3776ab.svg?style=for-the-badge&amp;amp;logo=python&amp;amp;logoColor=white&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Python 3.14&#34;
	
	
&gt;&lt;/a&gt;
&lt;a class=&#34;link&#34; href=&#34;https://github.com/astral-sh/uv&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/uv/main/assets/badge/v0.json&amp;amp;style=for-the-badge&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;uv&#34;
	
	
&gt;&lt;/a&gt;
&lt;a class=&#34;link&#34; href=&#34;https://github.com/Alishahryar1/free-claude-code/actions/workflows/tests.yml&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.shields.io/badge/testing-Pytest-00c0ff.svg?style=for-the-badge&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Tested with Pytest&#34;
	
	
&gt;&lt;/a&gt;
&lt;a class=&#34;link&#34; href=&#34;https://pypi.org/project/ty/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.shields.io/badge/type%20checking-ty-ffcc00.svg?style=for-the-badge&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Type checking: Ty&#34;
	
	
&gt;&lt;/a&gt;
&lt;a class=&#34;link&#34; href=&#34;https://github.com/astral-sh/ruff&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.shields.io/badge/code%20formatting-ruff-f5a623.svg?style=for-the-badge&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Code style: Ruff&#34;
	
	
&gt;&lt;/a&gt;
&lt;a class=&#34;link&#34; href=&#34;https://github.com/Delgan/loguru&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;img src=&#34;https://img.shields.io/badge/logging-loguru-4ecdc4.svg?style=for-the-badge&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Logging: Loguru&#34;
	
	
&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A lightweight proxy that routes Claude Code&amp;rsquo;s Anthropic API calls to &lt;strong&gt;NVIDIA NIM&lt;/strong&gt; (40 req/min free), &lt;strong&gt;OpenRouter&lt;/strong&gt; (hundreds of models), &lt;strong&gt;DeepSeek&lt;/strong&gt; (direct API), &lt;strong&gt;LM Studio&lt;/strong&gt; (fully local), or &lt;strong&gt;llama.cpp&lt;/strong&gt; (local with Anthropic endpoints).&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;#quick-start&#34; &gt;Quick Start&lt;/a&gt; · &lt;a class=&#34;link&#34; href=&#34;#providers&#34; &gt;Providers&lt;/a&gt; · &lt;a class=&#34;link&#34; href=&#34;#discord-bot&#34; &gt;Discord Bot&lt;/a&gt; · &lt;a class=&#34;link&#34; href=&#34;#configuration&#34; &gt;Configuration&lt;/a&gt; · &lt;a class=&#34;link&#34; href=&#34;#development&#34; &gt;Development&lt;/a&gt; · &lt;a class=&#34;link&#34; href=&#34;#contributing&#34; &gt;Contributing&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;/div&gt;
&lt;div align=&#34;center&#34;&gt;
  &lt;img src=&#34;pic.png&#34; alt=&#34;Free Claude Code in action&#34; width=&#34;700&#34;&gt;
  &lt;p&gt;&lt;em&gt;Claude Code running via NVIDIA NIM, completely free&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id=&#34;features&#34;&gt;Features
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Feature&lt;/th&gt;
          &lt;th&gt;Description&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Zero Cost&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;40 req/min free on NVIDIA NIM. Free models on OpenRouter. Fully local with LM Studio&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Drop-in Replacement&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Set 2 env vars. No modifications to Claude Code CLI or VSCode extension needed&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;5 Providers&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;NVIDIA NIM, OpenRouter, DeepSeek, LM Studio (local), llama.cpp (&lt;code&gt;llama-server&lt;/code&gt;)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Per-Model Mapping&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Route Opus / Sonnet / Haiku to different models and providers. Mix providers freely&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Thinking Token Support&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Parses &lt;code&gt;&amp;lt;think&amp;gt;&lt;/code&gt; tags and &lt;code&gt;reasoning_content&lt;/code&gt; into native Claude thinking blocks&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Heuristic Tool Parser&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Models outputting tool calls as text are auto-parsed into structured tool use&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Request Optimization&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;5 categories of trivial API calls intercepted locally, saving quota and latency&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Smart Rate Limiting&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Proactive rolling-window throttle + reactive 429 exponential backoff + optional concurrency cap&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Discord / Telegram Bot&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Remote autonomous coding with tree-based threading, session persistence, and live progress&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Subagent Control&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Task tool interception forces &lt;code&gt;run_in_background=False&lt;/code&gt;. No runaway subagents&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Extensible&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Clean &lt;code&gt;BaseProvider&lt;/code&gt; and &lt;code&gt;MessagingPlatform&lt;/code&gt; ABCs. Add new providers or platforms easily&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;quick-start&#34;&gt;Quick Start
&lt;/h2&gt;&lt;h3 id=&#34;prerequisites&#34;&gt;Prerequisites
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;Get an API key (or use LM Studio / llama.cpp locally):
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;NVIDIA NIM&lt;/strong&gt;: &lt;a class=&#34;link&#34; href=&#34;https://build.nvidia.com/settings/api-keys&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;build.nvidia.com/settings/api-keys&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OpenRouter&lt;/strong&gt;: &lt;a class=&#34;link&#34; href=&#34;https://openrouter.ai/keys&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;openrouter.ai/keys&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DeepSeek&lt;/strong&gt;: &lt;a class=&#34;link&#34; href=&#34;https://platform.deepseek.com/api_keys&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;platform.deepseek.com/api_keys&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LM Studio&lt;/strong&gt;: No API key needed. Run locally with &lt;a class=&#34;link&#34; href=&#34;https://lmstudio.ai&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;LM Studio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;llama.cpp&lt;/strong&gt;: No API key needed. Run &lt;code&gt;llama-server&lt;/code&gt; locally.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Install &lt;a class=&#34;link&#34; href=&#34;https://github.com/anthropics/claude-code&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Claude Code&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;install-uv&#34;&gt;Install &lt;code&gt;uv&lt;/code&gt;
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Install uv (required to run the project)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install uv
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;If uv is already installed, run uv self update to get the latest version.&lt;/p&gt;
&lt;h3 id=&#34;clone--configure&#34;&gt;Clone &amp;amp; Configure
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/Alishahryar1/free-claude-code.git
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; free-claude-code
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp .env.example .env
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Choose your provider and edit &lt;code&gt;.env&lt;/code&gt;:&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;&lt;b&gt;NVIDIA NIM&lt;/b&gt; (40 req/min free, recommended)&lt;/summary&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;NVIDIA_NIM_API_KEY=&amp;#34;nvapi-your-key-here&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MODEL_OPUS=
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MODEL_SONNET=
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MODEL_HAIKU=
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MODEL=&amp;#34;nvidia_nim/z-ai/glm4.7&amp;#34;                     # fallback
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# Global switch for provider reasoning requests and Claude thinking blocks.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ENABLE_THINKING=true
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/details&gt;
&lt;details&gt;
&lt;summary&gt;&lt;b&gt;OpenRouter&lt;/b&gt; (hundreds of models)&lt;/summary&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;OPENROUTER_API_KEY=&amp;#34;sk-or-your-key-here&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MODEL_OPUS=&amp;#34;open_router/deepseek/deepseek-r1-0528:free&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MODEL_SONNET=&amp;#34;open_router/openai/gpt-oss-120b:free&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MODEL_HAIKU=&amp;#34;open_router/stepfun/step-3.5-flash:free&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MODEL=&amp;#34;open_router/stepfun/step-3.5-flash:free&amp;#34;     # fallback
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/details&gt;
&lt;details&gt;
&lt;summary&gt;&lt;b&gt;DeepSeek&lt;/b&gt; (direct API)&lt;/summary&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;DEEPSEEK_API_KEY=&amp;#34;your-deepseek-key-here&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MODEL_OPUS=&amp;#34;deepseek/deepseek-reasoner&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MODEL_SONNET=&amp;#34;deepseek/deepseek-chat&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MODEL_HAIKU=&amp;#34;deepseek/deepseek-chat&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MODEL=&amp;#34;deepseek/deepseek-chat&amp;#34;                      # fallback
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/details&gt;
&lt;details&gt;
&lt;summary&gt;&lt;b&gt;LM Studio&lt;/b&gt; (fully local, no API key)&lt;/summary&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MODEL_OPUS=&amp;#34;lmstudio/unsloth/MiniMax-M2.5-GGUF&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MODEL_SONNET=&amp;#34;lmstudio/unsloth/Qwen3.5-35B-A3B-GGUF&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MODEL_HAIKU=&amp;#34;lmstudio/unsloth/GLM-4.7-Flash-GGUF&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MODEL=&amp;#34;lmstudio/unsloth/GLM-4.7-Flash-GGUF&amp;#34;         # fallback
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/details&gt;
&lt;details&gt;
&lt;summary&gt;&lt;b&gt;llama.cpp&lt;/b&gt; (fully local, no API key)&lt;/summary&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;LLAMACPP_BASE_URL=&amp;#34;http://localhost:8080/v1&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MODEL_OPUS=&amp;#34;llamacpp/local-model&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MODEL_SONNET=&amp;#34;llamacpp/local-model&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MODEL_HAIKU=&amp;#34;llamacpp/local-model&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MODEL=&amp;#34;llamacpp/local-model&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/details&gt;
&lt;details&gt;
&lt;summary&gt;&lt;b&gt;Mix providers&lt;/b&gt;&lt;/summary&gt;
&lt;p&gt;Each &lt;code&gt;MODEL_*&lt;/code&gt; variable can use a different provider. &lt;code&gt;MODEL&lt;/code&gt; is the fallback for unrecognized Claude models.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;NVIDIA_NIM_API_KEY=&amp;#34;nvapi-your-key-here&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;OPENROUTER_API_KEY=&amp;#34;sk-or-your-key-here&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MODEL_OPUS=&amp;#34;nvidia_nim/moonshotai/kimi-k2.5&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MODEL_SONNET=&amp;#34;open_router/deepseek/deepseek-r1-0528:free&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MODEL_HAIKU=&amp;#34;lmstudio/unsloth/GLM-4.7-Flash-GGUF&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MODEL=&amp;#34;nvidia_nim/z-ai/glm4.7&amp;#34;                      # fallback
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/details&gt;
&lt;blockquote&gt;
&lt;p&gt;Migration: &lt;code&gt;NIM_ENABLE_THINKING&lt;/code&gt; was removed in this release. Rename it to &lt;code&gt;ENABLE_THINKING&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;details&gt;
&lt;summary&gt;&lt;b&gt;Optional Authentication&lt;/b&gt; (restrict access to your proxy)&lt;/summary&gt;
&lt;p&gt;Set &lt;code&gt;ANTHROPIC_AUTH_TOKEN&lt;/code&gt; in &lt;code&gt;.env&lt;/code&gt; to require clients to authenticate:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ANTHROPIC_AUTH_TOKEN=&amp;#34;your-secret-token-here&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;How it works:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If &lt;code&gt;ANTHROPIC_AUTH_TOKEN&lt;/code&gt; is empty (default), no authentication is required (backward compatible)&lt;/li&gt;
&lt;li&gt;If set, clients must provide the same token via the &lt;code&gt;ANTHROPIC_AUTH_TOKEN&lt;/code&gt; header&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;claude-pick&lt;/code&gt; script automatically reads the token from &lt;code&gt;.env&lt;/code&gt; if configured&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Example usage:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# With authentication&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ANTHROPIC_AUTH_TOKEN&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;your-secret-token-here&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ANTHROPIC_BASE_URL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;http://localhost:8082&amp;#34;&lt;/span&gt; claude
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# claude-pick automatically uses the configured token&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;claude-pick
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Use this feature if:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Running the proxy on a public network&lt;/li&gt;
&lt;li&gt;Sharing the server with others but restricting access&lt;/li&gt;
&lt;li&gt;Wanting an additional layer of security&lt;/li&gt;
&lt;/ul&gt;
&lt;/details&gt;
&lt;h3 id=&#34;run-it&#34;&gt;Run It
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Terminal 1:&lt;/strong&gt; Start the proxy server:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv run uvicorn server:app --host 0.0.0.0 --port &lt;span class=&#34;m&#34;&gt;8082&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Terminal 2:&lt;/strong&gt; Run Claude Code:&lt;/p&gt;
&lt;p&gt;Point &lt;code&gt;ANTHROPIC_BASE_URL&lt;/code&gt; at the proxy root URL, not &lt;code&gt;http://localhost:8082/v1&lt;/code&gt;.&lt;/p&gt;
&lt;h4 id=&#34;powershell&#34;&gt;Powershell
&lt;/h4&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$env:ANTHROPIC_AUTH_TOKEN&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;freecc&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$env:ANTHROPIC_BASE_URL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;http://localhost:8082&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;claude&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id=&#34;bash&#34;&gt;Bash
&lt;/h4&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ANTHROPIC_AUTH_TOKEN&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;freecc&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;ANTHROPIC_BASE_URL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;http://localhost:8082&amp;#34;&lt;/span&gt; claude
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;That&amp;rsquo;s it! Claude Code now uses your configured provider for free.&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;&lt;b&gt;VSCode Extension Setup&lt;/b&gt;&lt;/summary&gt;
&lt;ol&gt;
&lt;li&gt;Start the proxy server (same as above).&lt;/li&gt;
&lt;li&gt;Open Settings (&lt;code&gt;Ctrl + ,&lt;/code&gt;) and search for &lt;code&gt;claude-code.environmentVariables&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Edit in settings.json&lt;/strong&gt; and add:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;claudeCode.environmentVariables&amp;#34;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;ANTHROPIC_BASE_URL&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;&amp;#34;value&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;http://localhost:8082&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;ANTHROPIC_AUTH_TOKEN&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;&amp;#34;value&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;freecc&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;Reload extensions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;If you see the login screen&lt;/strong&gt;: Click &lt;strong&gt;Anthropic Console&lt;/strong&gt;, then authorize. The extension will start working. You may be redirected to buy credits in the browser; ignore it — the extension already works.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;To switch back to Anthropic models, comment out the added block and reload extensions.&lt;/p&gt;
&lt;/details&gt;
&lt;details&gt;
&lt;summary&gt;&lt;b&gt;IntelliJ Extension Setup&lt;/b&gt;&lt;/summary&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Open the configuration file:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Windows&lt;/strong&gt;: &lt;code&gt;C:\Users\%USERNAME%\AppData\Roaming\JetBrains\acp-agents\installed.json&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Linux/macOS&lt;/strong&gt;: &lt;code&gt;~/.jetbrains/acp.json&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Inside acp.registry.claude-acp, change:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;#34;env&amp;#34;: {}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;to&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;#34;env&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;#34;ANTHROPIC_AUTH_TOKEN&amp;#34;: &amp;#34;freecc&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;#34;ANTHROPIC_BASE_URL&amp;#34;: &amp;#34;http://localhost:8082&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Start the proxy server&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Restart IDE&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/details&gt;
&lt;details&gt;
&lt;summary&gt;&lt;b&gt;Multi-Model Support (Model Picker)&lt;/b&gt;&lt;/summary&gt;
&lt;p&gt;&lt;code&gt;claude-pick&lt;/code&gt; is an interactive model selector that lets you choose any model from your active provider each time you launch Claude, without editing &lt;code&gt;MODEL&lt;/code&gt; in &lt;code&gt;.env&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/user-attachments/assets/9a33c316-90f8-4418-9650-97e7d33ad645&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/user-attachments/assets/9a33c316-90f8-4418-9650-97e7d33ad645&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Install &lt;a class=&#34;link&#34; href=&#34;https://github.com/junegunn/fzf&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;fzf&lt;/a&gt;&lt;/strong&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew install fzf        &lt;span class=&#34;c1&#34;&gt;# macOS/Linux&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;2. Add the alias to &lt;code&gt;~/.zshrc&lt;/code&gt; or &lt;code&gt;~/.bashrc&lt;/code&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt; claude-pick&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/absolute/path/to/free-claude-code/claude-pick&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Then reload your shell (&lt;code&gt;source ~/.zshrc&lt;/code&gt; or &lt;code&gt;source ~/.bashrc&lt;/code&gt;) and run &lt;code&gt;claude-pick&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Or use a fixed model alias&lt;/strong&gt; (no picker needed):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt; claude-kimi&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;ANTHROPIC_BASE_URL=&amp;#34;http://localhost:8082&amp;#34; ANTHROPIC_AUTH_TOKEN=&amp;#34;freecc:moonshotai/kimi-k2.5&amp;#34; claude&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/details&gt;
&lt;h3 id=&#34;install-as-a-package-no-clone-needed&#34;&gt;Install as a Package (no clone needed)
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv tool install git+https://github.com/Alishahryar1/free-claude-code.git
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fcc-init        &lt;span class=&#34;c1&#34;&gt;# creates ~/.config/free-claude-code/.env from the built-in template&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Edit &lt;code&gt;~/.config/free-claude-code/.env&lt;/code&gt; with your API keys and model names, then:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;free-claude-code    &lt;span class=&#34;c1&#34;&gt;# starts the server&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;To update: &lt;code&gt;uv tool upgrade free-claude-code&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;how-it-works&#34;&gt;How It Works
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;┌─────────────────┐        ┌──────────────────────┐        ┌──────────────────┐
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│  Claude Code    │───────&amp;gt;│  Free Claude Code    │───────&amp;gt;│  LLM Provider    │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│  CLI / VSCode   │&amp;lt;───────│  Proxy (:8082)       │&amp;lt;───────│  NIM / OR / LMS  │
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;└─────────────────┘        └──────────────────────┘        └──────────────────┘
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   Anthropic API                                             Native Anthropic
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   format (SSE)                                             or OpenAI chat SSE
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Transparent proxy&lt;/strong&gt;: Claude Code sends standard Anthropic API requests; the proxy forwards them to your configured provider&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Per-model routing&lt;/strong&gt;: Opus / Sonnet / Haiku requests resolve to their model-specific backend, with &lt;code&gt;MODEL&lt;/code&gt; as fallback&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Request optimization&lt;/strong&gt;: 5 categories of trivial requests (quota probes, title generation, prefix detection, suggestions, filepath extraction) are intercepted and responded to locally without using API quota&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Format handling&lt;/strong&gt;: OpenRouter, LM Studio, and llama.cpp use native Anthropic Messages endpoints; NIM and DeepSeek use shared OpenAI chat translation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Thinking tokens&lt;/strong&gt;: &lt;code&gt;&amp;lt;think&amp;gt;&lt;/code&gt; tags and &lt;code&gt;reasoning_content&lt;/code&gt; fields are converted into native Claude thinking blocks when &lt;code&gt;ENABLE_THINKING=true&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The proxy also exposes Claude-compatible probe routes: &lt;code&gt;GET /v1/models&lt;/code&gt;, &lt;code&gt;POST /v1/messages&lt;/code&gt;, &lt;code&gt;POST /v1/messages/count_tokens&lt;/code&gt;, plus &lt;code&gt;HEAD&lt;/code&gt;/&lt;code&gt;OPTIONS&lt;/code&gt; support for the common probe endpoints.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;providers&#34;&gt;Providers
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Provider&lt;/th&gt;
          &lt;th&gt;Cost&lt;/th&gt;
          &lt;th&gt;Rate Limit&lt;/th&gt;
          &lt;th&gt;Best For&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;NVIDIA NIM&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Free&lt;/td&gt;
          &lt;td&gt;40 req/min&lt;/td&gt;
          &lt;td&gt;Daily driver, generous free tier&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;OpenRouter&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Free / Paid&lt;/td&gt;
          &lt;td&gt;Varies&lt;/td&gt;
          &lt;td&gt;Model variety, fallback options&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;DeepSeek&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Usage-based&lt;/td&gt;
          &lt;td&gt;Varies&lt;/td&gt;
          &lt;td&gt;Direct access to DeepSeek chat/reasoner&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;LM Studio&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Free (local)&lt;/td&gt;
          &lt;td&gt;Unlimited&lt;/td&gt;
          &lt;td&gt;Privacy, offline use, no rate limits&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;llama.cpp&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Free (local)&lt;/td&gt;
          &lt;td&gt;Unlimited&lt;/td&gt;
          &lt;td&gt;Lightweight local inference engine&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Models use a prefix format: &lt;code&gt;provider_prefix/model/name&lt;/code&gt;. An invalid prefix causes an error.&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Provider&lt;/th&gt;
          &lt;th&gt;&lt;code&gt;MODEL&lt;/code&gt; prefix&lt;/th&gt;
          &lt;th&gt;API Key Variable&lt;/th&gt;
          &lt;th&gt;Default Base URL&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;NVIDIA NIM&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;nvidia_nim/...&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;NVIDIA_NIM_API_KEY&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;integrate.api.nvidia.com/v1&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;OpenRouter&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;open_router/...&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;OPENROUTER_API_KEY&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;openrouter.ai/api/v1&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;DeepSeek&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;deepseek/...&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;DEEPSEEK_API_KEY&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;api.deepseek.com&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;LM Studio&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;lmstudio/...&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;(none)&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;localhost:1234/v1&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;llama.cpp&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;llamacpp/...&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;(none)&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;localhost:8080/v1&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;details&gt;
&lt;summary&gt;&lt;b&gt;NVIDIA NIM models&lt;/b&gt;&lt;/summary&gt;
&lt;p&gt;Popular models (full list in &lt;a class=&#34;link&#34; href=&#34;nvidia_nim_models.json&#34; &gt;&lt;code&gt;nvidia_nim_models.json&lt;/code&gt;&lt;/a&gt;):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;nvidia_nim/minimaxai/minimax-m2.5&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nvidia_nim/qwen/qwen3.5-397b-a17b&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nvidia_nim/z-ai/glm5&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nvidia_nim/moonshotai/kimi-k2.5&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nvidia_nim/stepfun-ai/step-3.5-flash&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Browse: &lt;a class=&#34;link&#34; href=&#34;https://build.nvidia.com/explore/discover&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;build.nvidia.com&lt;/a&gt; · Update list: &lt;code&gt;curl &amp;quot;https://integrate.api.nvidia.com/v1/models&amp;quot; &amp;gt; nvidia_nim_models.json&lt;/code&gt;&lt;/p&gt;
&lt;/details&gt;
&lt;details&gt;
&lt;summary&gt;&lt;b&gt;OpenRouter models&lt;/b&gt;&lt;/summary&gt;
&lt;p&gt;Popular free models:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;open_router/arcee-ai/trinity-large-preview:free&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;open_router/stepfun/step-3.5-flash:free&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;open_router/deepseek/deepseek-r1-0528:free&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;open_router/openai/gpt-oss-120b:free&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Browse: &lt;a class=&#34;link&#34; href=&#34;https://openrouter.ai/models&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;openrouter.ai/models&lt;/a&gt; · &lt;a class=&#34;link&#34; href=&#34;https://openrouter.ai/collections/free-models&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Free models&lt;/a&gt;&lt;/p&gt;
&lt;/details&gt;
&lt;details&gt;
&lt;summary&gt;&lt;b&gt;DeepSeek models&lt;/b&gt;&lt;/summary&gt;
&lt;p&gt;DeepSeek currently exposes the direct API models:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;deepseek/deepseek-chat&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;deepseek/deepseek-reasoner&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Browse: &lt;a class=&#34;link&#34; href=&#34;https://api-docs.deepseek.com&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;api-docs.deepseek.com&lt;/a&gt;&lt;/p&gt;
&lt;/details&gt;
&lt;details&gt;
&lt;summary&gt;&lt;b&gt;LM Studio models&lt;/b&gt;&lt;/summary&gt;
&lt;p&gt;Run models locally with &lt;a class=&#34;link&#34; href=&#34;https://lmstudio.ai&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;LM Studio&lt;/a&gt;. Load a model in the Chat or Developer tab, then set &lt;code&gt;MODEL&lt;/code&gt; to its identifier.&lt;/p&gt;
&lt;p&gt;Examples with native tool-use support:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;LiquidAI/LFM2-24B-A2B-GGUF&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;unsloth/MiniMax-M2.5-GGUF&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;unsloth/GLM-4.7-Flash-GGUF&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;unsloth/Qwen3.5-35B-A3B-GGUF&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Browse: &lt;a class=&#34;link&#34; href=&#34;https://model.lmstudio.ai&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;model.lmstudio.ai&lt;/a&gt;&lt;/p&gt;
&lt;/details&gt;
&lt;details&gt;
&lt;summary&gt;&lt;b&gt;llama.cpp models&lt;/b&gt;&lt;/summary&gt;
&lt;p&gt;Run models locally using &lt;code&gt;llama-server&lt;/code&gt;. Ensure you have a tool-capable GGUF. Set &lt;code&gt;MODEL&lt;/code&gt; to whatever arbitrary name you&amp;rsquo;d like (e.g. &lt;code&gt;llamacpp/my-model&lt;/code&gt;), as &lt;code&gt;llama-server&lt;/code&gt; ignores the model name when run via &lt;code&gt;/v1/messages&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;See the Unsloth docs for detailed instructions and capable models:
&lt;a class=&#34;link&#34; href=&#34;https://unsloth.ai/docs/models/qwen3.5#qwen3.5-small-0.8b-2b-4b-9b&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://unsloth.ai/docs/models/qwen3.5#qwen3.5-small-0.8b-2b-4b-9b&lt;/a&gt;&lt;/p&gt;
&lt;/details&gt;
&lt;hr&gt;
&lt;h2 id=&#34;discord-bot&#34;&gt;Discord Bot
&lt;/h2&gt;&lt;p&gt;Control Claude Code remotely from Discord (or Telegram). Send tasks, watch live progress, and manage multiple concurrent sessions.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Capabilities:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tree-based message threading: reply to a message to fork the conversation&lt;/li&gt;
&lt;li&gt;Session persistence across server restarts&lt;/li&gt;
&lt;li&gt;Live streaming of thinking tokens, tool calls, and results&lt;/li&gt;
&lt;li&gt;Unlimited concurrent Claude CLI sessions (concurrency controlled by &lt;code&gt;PROVIDER_MAX_CONCURRENCY&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Voice notes: send voice messages; they are transcribed and processed as regular prompts&lt;/li&gt;
&lt;li&gt;Commands: &lt;code&gt;/stop&lt;/code&gt; (cancel a task; reply to a message to stop only that task), &lt;code&gt;/clear&lt;/code&gt; (reset all sessions, or reply to clear a branch), &lt;code&gt;/stats&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;setup&#34;&gt;Setup
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Create a Discord Bot&lt;/strong&gt;: Go to &lt;a class=&#34;link&#34; href=&#34;https://discord.com/developers/applications&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Discord Developer Portal&lt;/a&gt;, create an application, add a bot, and copy the token. Enable &lt;strong&gt;Message Content Intent&lt;/strong&gt; under Bot settings.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Edit &lt;code&gt;.env&lt;/code&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MESSAGING_PLATFORM=&amp;#34;discord&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;DISCORD_BOT_TOKEN=&amp;#34;your_discord_bot_token&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ALLOWED_DISCORD_CHANNELS=&amp;#34;123456789,987654321&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;Enable Developer Mode in Discord (Settings → Advanced), then right-click a channel and &amp;ldquo;Copy ID&amp;rdquo;. Comma-separate multiple channels. If empty, no channels are allowed.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;&lt;strong&gt;Configure the workspace&lt;/strong&gt; (where Claude will operate):&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;CLAUDE_WORKSPACE=&amp;#34;./agent_workspace&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ALLOWED_DIR=&amp;#34;C:/Users/yourname/projects&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;&lt;strong&gt;Start the server:&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv run uvicorn server:app --host 0.0.0.0 --port &lt;span class=&#34;m&#34;&gt;8082&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;&lt;strong&gt;Invite the bot&lt;/strong&gt; via OAuth2 URL Generator (scopes: &lt;code&gt;bot&lt;/code&gt;, permissions: Read Messages, Send Messages, Manage Messages, Read Message History).&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;telegram&#34;&gt;Telegram
&lt;/h3&gt;&lt;p&gt;Set &lt;code&gt;MESSAGING_PLATFORM=telegram&lt;/code&gt; and configure:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;TELEGRAM_BOT_TOKEN=&amp;#34;123456789:ABCdefGHIjklMNOpqrSTUvwxYZ&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ALLOWED_TELEGRAM_USER_ID=&amp;#34;your_telegram_user_id&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Get a token from &lt;a class=&#34;link&#34; href=&#34;https://t.me/BotFather&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;@BotFather&lt;/a&gt;; find your user ID via &lt;a class=&#34;link&#34; href=&#34;https://t.me/userinfobot&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;@userinfobot&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;voice-notes&#34;&gt;Voice Notes
&lt;/h3&gt;&lt;p&gt;Send voice messages on Discord or Telegram; they are transcribed and processed as regular prompts.&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Backend&lt;/th&gt;
          &lt;th&gt;Description&lt;/th&gt;
          &lt;th&gt;API Key&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Local Whisper&lt;/strong&gt; (default)&lt;/td&gt;
          &lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://huggingface.co/openai/whisper-large-v3-turbo&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Hugging Face Whisper&lt;/a&gt; — free, offline, CUDA compatible&lt;/td&gt;
          &lt;td&gt;not required&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;NVIDIA NIM&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Whisper/Parakeet models via gRPC&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;NVIDIA_NIM_API_KEY&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Install the voice extras:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# If you cloned the repo:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv sync --extra voice_local          &lt;span class=&#34;c1&#34;&gt;# Local Whisper&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv sync --extra voice                &lt;span class=&#34;c1&#34;&gt;# NVIDIA NIM&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv sync --extra voice --extra voice_local  &lt;span class=&#34;c1&#34;&gt;# Both&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# If you installed as a package (no clone):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv tool install &lt;span class=&#34;s2&#34;&gt;&amp;#34;free-claude-code[voice_local] @ git+https://github.com/Alishahryar1/free-claude-code.git&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv tool install &lt;span class=&#34;s2&#34;&gt;&amp;#34;free-claude-code[voice] @ git+https://github.com/Alishahryar1/free-claude-code.git&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv tool install &lt;span class=&#34;s2&#34;&gt;&amp;#34;free-claude-code[voice,voice_local] @ git+https://github.com/Alishahryar1/free-claude-code.git&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Configure via &lt;code&gt;WHISPER_DEVICE&lt;/code&gt; (&lt;code&gt;cpu&lt;/code&gt; | &lt;code&gt;cuda&lt;/code&gt; | &lt;code&gt;nvidia_nim&lt;/code&gt;) and &lt;code&gt;WHISPER_MODEL&lt;/code&gt;. See the &lt;a class=&#34;link&#34; href=&#34;#configuration&#34; &gt;Configuration&lt;/a&gt; table for all voice variables and supported model values.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;configuration&#34;&gt;Configuration
&lt;/h2&gt;&lt;h3 id=&#34;core&#34;&gt;Core
&lt;/h3&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Variable&lt;/th&gt;
          &lt;th&gt;Description&lt;/th&gt;
          &lt;th&gt;Default&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;MODEL&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Fallback model (&lt;code&gt;provider/model/name&lt;/code&gt; format; invalid prefix → error)&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;nvidia_nim/z-ai/glm4.7&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;MODEL_OPUS&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Model for Claude Opus requests; empty falls back to &lt;code&gt;MODEL&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;empty&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;MODEL_SONNET&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Model for Claude Sonnet requests; empty falls back to &lt;code&gt;MODEL&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;empty&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;MODEL_HAIKU&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Model for Claude Haiku requests; empty falls back to &lt;code&gt;MODEL&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;empty&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;NVIDIA_NIM_API_KEY&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;NVIDIA API key&lt;/td&gt;
          &lt;td&gt;required for NIM&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;ENABLE_THINKING&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Global switch for provider reasoning requests and Claude thinking blocks. Set &lt;code&gt;false&lt;/code&gt; to hide thinking across all providers.&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;OPENROUTER_API_KEY&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;OpenRouter API key&lt;/td&gt;
          &lt;td&gt;required for OpenRouter&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;DEEPSEEK_API_KEY&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;DeepSeek API key&lt;/td&gt;
          &lt;td&gt;required for DeepSeek&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;LM_STUDIO_BASE_URL&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;LM Studio server URL&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;http://localhost:1234/v1&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;LLAMACPP_BASE_URL&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;llama.cpp server URL&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;http://localhost:8080/v1&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;NVIDIA_NIM_PROXY&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Optional proxy URL for NVIDIA NIM requests (&lt;code&gt;http://...&lt;/code&gt; or &lt;code&gt;socks5://...&lt;/code&gt;)&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;OPENROUTER_PROXY&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Optional proxy URL for OpenRouter requests (&lt;code&gt;http://...&lt;/code&gt; or &lt;code&gt;socks5://...&lt;/code&gt;)&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;LMSTUDIO_PROXY&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Optional proxy URL for LM Studio requests (&lt;code&gt;http://...&lt;/code&gt; or &lt;code&gt;socks5://...&lt;/code&gt;)&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;LLAMACPP_PROXY&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Optional proxy URL for llama.cpp requests (&lt;code&gt;http://...&lt;/code&gt; or &lt;code&gt;socks5://...&lt;/code&gt;)&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;rate-limiting--timeouts&#34;&gt;Rate Limiting &amp;amp; Timeouts
&lt;/h3&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Variable&lt;/th&gt;
          &lt;th&gt;Description&lt;/th&gt;
          &lt;th&gt;Default&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;PROVIDER_RATE_LIMIT&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;LLM API requests per window&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;40&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;PROVIDER_RATE_WINDOW&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Rate limit window (seconds)&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;60&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;PROVIDER_MAX_CONCURRENCY&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Max simultaneous open provider streams&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;5&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;HTTP_READ_TIMEOUT&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Read timeout for provider requests (s)&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;120&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;HTTP_WRITE_TIMEOUT&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Write timeout for provider requests (s)&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;10&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;HTTP_CONNECT_TIMEOUT&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Connect timeout for provider requests (s)&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;10&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;messaging--voice&#34;&gt;Messaging &amp;amp; Voice
&lt;/h3&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Variable&lt;/th&gt;
          &lt;th&gt;Description&lt;/th&gt;
          &lt;th&gt;Default&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;MESSAGING_PLATFORM&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;discord&lt;/code&gt; or &lt;code&gt;telegram&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;discord&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;DISCORD_BOT_TOKEN&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Discord bot token&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;ALLOWED_DISCORD_CHANNELS&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Comma-separated channel IDs (empty = none allowed)&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;TELEGRAM_BOT_TOKEN&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Telegram bot token&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;ALLOWED_TELEGRAM_USER_ID&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Allowed Telegram user ID&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;CLAUDE_WORKSPACE&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Directory where the agent operates&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;./agent_workspace&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;ALLOWED_DIR&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Allowed directories for the agent&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;MESSAGING_RATE_LIMIT&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Messaging messages per window&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;MESSAGING_RATE_WINDOW&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Messaging window (seconds)&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;VOICE_NOTE_ENABLED&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Enable voice note handling&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;WHISPER_DEVICE&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;cpu&lt;/code&gt; | &lt;code&gt;cuda&lt;/code&gt; | &lt;code&gt;nvidia_nim&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;cpu&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;WHISPER_MODEL&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Whisper model (local: &lt;code&gt;tiny&lt;/code&gt;/&lt;code&gt;base&lt;/code&gt;/&lt;code&gt;small&lt;/code&gt;/&lt;code&gt;medium&lt;/code&gt;/&lt;code&gt;large-v2&lt;/code&gt;/&lt;code&gt;large-v3&lt;/code&gt;/&lt;code&gt;large-v3-turbo&lt;/code&gt;; NIM: &lt;code&gt;openai/whisper-large-v3&lt;/code&gt;, &lt;code&gt;nvidia/parakeet-ctc-1.1b-asr&lt;/code&gt;, etc.)&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;base&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;HF_TOKEN&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Hugging Face token for faster downloads (local Whisper, optional)&lt;/td&gt;
          &lt;td&gt;—&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;details&gt;
&lt;summary&gt;&lt;b&gt;Advanced: Request optimization flags&lt;/b&gt;&lt;/summary&gt;
&lt;p&gt;These are enabled by default and intercept trivial Claude Code requests locally to save API quota.&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Variable&lt;/th&gt;
          &lt;th&gt;Description&lt;/th&gt;
          &lt;th&gt;Default&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;FAST_PREFIX_DETECTION&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Enable fast prefix detection&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;ENABLE_NETWORK_PROBE_MOCK&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Mock network probe requests&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;ENABLE_TITLE_GENERATION_SKIP&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Skip title generation requests&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;ENABLE_SUGGESTION_MODE_SKIP&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Skip suggestion mode requests&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;ENABLE_FILEPATH_EXTRACTION_MOCK&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Mock filepath extraction&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/details&gt;
&lt;p&gt;See &lt;a class=&#34;link&#34; href=&#34;.env.example&#34; &gt;&lt;code&gt;.env.example&lt;/code&gt;&lt;/a&gt; for all supported parameters.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;development&#34;&gt;Development
&lt;/h2&gt;&lt;h3 id=&#34;project-structure&#34;&gt;Project Structure
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;free-claude-code/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── server.py              # Entry point
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── api/                   # FastAPI routes, API service layer, model routing, request detection, optimizations
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── core/                  # Shared Anthropic protocol helpers, SSE, conversion, parsers, token counting
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── providers/             # Provider registry, scoped runtime state, OpenAI chat + Anthropic messages transports
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── messaging/             # MessagingPlatform ABC + Discord/Telegram bots, commands, voice, session management
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── config/                # Settings, NIM config, logging
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── cli/                   # CLI session and process management
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;└── tests/                 # Pytest test suite
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;commands&#34;&gt;Commands
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv run ruff format     &lt;span class=&#34;c1&#34;&gt;# Format code&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv run ruff check      &lt;span class=&#34;c1&#34;&gt;# Lint&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv run ty check        &lt;span class=&#34;c1&#34;&gt;# Type checking&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv run pytest          &lt;span class=&#34;c1&#34;&gt;# Run tests&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;extending&#34;&gt;Extending
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Adding an OpenAI-compatible provider&lt;/strong&gt; (Groq, Together AI, etc.) — extend &lt;code&gt;OpenAIChatTransport&lt;/code&gt;, then add a descriptor in the provider registry:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;providers.openai_compat&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;OpenAIChatTransport&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;providers.base&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ProviderConfig&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;MyProvider&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;OpenAIChatTransport&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;fm&#34;&gt;__init__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;config&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ProviderConfig&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;super&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;fm&#34;&gt;__init__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;config&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;provider_name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;MYPROVIDER&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                         &lt;span class=&#34;n&#34;&gt;base_url&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;https://api.example.com/v1&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;api_key&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;config&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;api_key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Adding a native Anthropic provider&lt;/strong&gt; — extend &lt;code&gt;AnthropicMessagesTransport&lt;/code&gt;, then add a descriptor in &lt;code&gt;providers.registry&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Adding a fully custom provider&lt;/strong&gt; — extend &lt;code&gt;BaseProvider&lt;/code&gt; directly, implement &lt;code&gt;stream_response()&lt;/code&gt;, and register its descriptor.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Adding a messaging platform&lt;/strong&gt; — extend &lt;code&gt;MessagingPlatform&lt;/code&gt; in &lt;code&gt;messaging/&lt;/code&gt; and implement &lt;code&gt;start()&lt;/code&gt;, &lt;code&gt;stop()&lt;/code&gt;, &lt;code&gt;send_message()&lt;/code&gt;, &lt;code&gt;edit_message()&lt;/code&gt;, and &lt;code&gt;on_message()&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;contributing&#34;&gt;Contributing
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Report bugs or suggest features via &lt;a class=&#34;link&#34; href=&#34;https://github.com/Alishahryar1/free-claude-code/issues&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Issues&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Add new LLM providers (Groq, Together AI, etc.)&lt;/li&gt;
&lt;li&gt;Add new messaging platforms (Slack, etc.)&lt;/li&gt;
&lt;li&gt;Improve test coverage&lt;/li&gt;
&lt;li&gt;Not accepting Docker integration PRs for now&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout -b my-feature
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv run ruff format &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; uv run ruff check &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; uv run ty check &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; uv run pytest
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Open a pull request&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;hr&gt;
&lt;h2 id=&#34;license&#34;&gt;License
&lt;/h2&gt;&lt;p&gt;MIT License. See &lt;a class=&#34;link&#34; href=&#34;LICENSE&#34; &gt;LICENSE&lt;/a&gt; for details.&lt;/p&gt;
&lt;p&gt;Built with &lt;a class=&#34;link&#34; href=&#34;https://fastapi.tiangolo.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;FastAPI&lt;/a&gt;, &lt;a class=&#34;link&#34; href=&#34;https://github.com/openai/openai-python&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;OpenAI Python SDK&lt;/a&gt;, &lt;a class=&#34;link&#34; href=&#34;https://github.com/Rapptz/discord.py&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;discord.py&lt;/a&gt;, and &lt;a class=&#34;link&#34; href=&#34;https://python-telegram-bot.org/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;python-telegram-bot&lt;/a&gt;.&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
