Local branch had diverged from origin/master (sibling commits on the same base). Rewrote local history linearly on top of origin/master, folding in all local content: exa/hot-platform discovery hunters, leaks ledger, nightly sweep orchestrator, updated .gitignore and skill docs, plus the latest hunt output and vault state. Remote-only files (vault keys, channel scripts) were restored rather than dropped, so the resulting tree is a full union of both sides.
1 line
107 KiB
JSON
1 line
107 KiB
JSON
{"repo": "ccwq/infocard-pub", "files": {"docs/20260611-backdoor.html": {"6886890ed841f3a63b4a3d6f74e0bc6ee967abe9": {"t": 1785747367.6649392, "n": 23891, "h": "c7e699f6346c3278", "c": "<!doctype html>\n<html lang=\"zh-CN\">\n<head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <title>Backdoor · Claude Code Proxy</title>\n <style>\n :root{\n --canvas:#f7f2e8; --paper:#fffdf8; --ink:#0c1220; --line:#111111;\n --purple:#6e3fd6; --green:#2e9b4b; --blue:#2e6be6; --orange:#f59e0b; --yellow:#f5d46b;\n --soft-purple:#f2ecff; --soft-green:#eefbf1; --soft-blue:#eef4ff; --soft-orange:#fff4e6;\n --shadow:8px 8px 0 rgba(17,17,17,.12);\n }\n *{box-sizing:border-box;margin:0;padding:0}\n html,body{margin:0;overflow-x:hidden}\n body{\n color:var(--ink);line-height:1.58;font-family:Inter,system-ui,-apple-system,\"PingFang SC\",\"Microsoft YaHei\",\"Segoe UI\",Arial,sans-serif;\n background:\n linear-gradient(rgba(17,17,17,.04) 1px, transparent 1px) 0 0/100% 42px,\n linear-gradient(90deg, rgba(17,17,17,.04) 1px, transparent 1px) 0 0/42px 100%,\n radial-gradient(circle at 10% 8%, rgba(110,63,214,.06) 0 11%, transparent 12%),\n radial-gradient(circle at 86% 10%, rgba(46,155,75,.05) 0 10%, transparent 11%),\n linear-gradient(180deg,#faf4e9 0,#f7f2e8 100%);\n }\n img{display:block;max-width:100%}\n a{color:inherit;text-decoration:none}\n code,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}\n .page{width:min(1180px, calc(100% - 20px));margin:0 auto;padding:18px 0 88px}\n\n .hero{display:grid;grid-template-columns:minmax(0,1.08fr) minmax(0,1.12fr) minmax(0,.82fr);gap:14px;border:3px solid var(--line);background:var(--paper);overflow:hidden;box-shadow:var(--shadow)}\n .hero-bar{grid-column:1/-1;height:14px;background:#111;border-bottom:3px solid var(--line);position:relative}\n .hero-bar::before{content:\"\";position:absolute;inset:0 auto 0 0;width:180px;background:var(--purple)}\n .hero-bar::after{content:\"\";position:absolute;inset:0 0 0 auto;width:150px;background:var(--blue)}\n .hero-copy{padding:16px;border-right:3px solid var(--line);display:grid;gap:10px;align-content:start}\n .kicker{display:inline-flex;align-items:center;gap:8px;width:fit-content;border:2px solid var(--line);background:#fff;padding:5px 9px;font-size:11px;font-weight:900;letter-spacing:.18em;text-transform:uppercase}\n .kicker::before{content:\"■\";color:var(--purple);font-size:10px}\n h1.demo-title{margin:0;max-width:820px;font-size:clamp(24px,3.7vw,44px);line-height:.98;letter-spacing:-.05em}\n .subtitle{color:#4d5567;font-size:12.5px;line-height:1.55}\n .badge-row{display:flex;flex-wrap:wrap;gap:6px}\n .badge{display:inline-flex;align-items:center;min-height:28px;padding:5px 9px;border:2px solid var(--line);background:#fff;font-size:11.6px;font-weight:850}\n .badge.purple{background:var(--purple);color:#fff}\n .badge.blue{background:var(--blue);color:#fff}\n .badge.green{background:var(--green);color:#fff}\n .badge.orange{background:var(--orange);color:#111}\n .badge.dark{background:#111;color:#fff}\n .badge.ink{background:#111;color:#fff;font-size:11px;min-height:24px;padding:4px 8px}\n .alert{border:2px solid var(--line);background:#111;color:#fff;padding:10px 12px;display:grid;gap:8px;box-shadow:var(--shadow)}\n .alert strong{display:block;font-size:13.5px;line-height:1.35}\n .alert p{margin:0;font-size:12.5px;line-height:1.62;color:#f0ebe0}\n .mini-row{display:flex;flex-wrap:wrap;gap:6px}\n .mini-tag{display:inline-flex;align-items:center;border:1.5px solid #fff;padding:4px 8px;font-size:11px;font-weight:850;line-height:1;background:#111;color:#fff}\n\n .architecture-column{background:#fff;display:grid;grid-template-rows:auto 1fr}\n .panel-top{padding:14px;border-bottom:3px solid var(--line);background:linear-gradient(135deg,#0f1320 0%,#151a2b 100%);color:#fff}\n .panel-top .eyebrow{display:inline-flex;align-items:center;border:1.5px solid #fff;padding:3px 8px;font-size:10.8px;font-weight:900;letter-spacing:.16em;text-transform:uppercase}\n .panel-top h3{margin:10px 0 6px;font-size:20px;line-height:1.08;letter-spacing:-.04em}\n .panel-top p{margin:0;color:#ece8dc;font-size:13px;line-height:1.64}\n .panel-body{padding:14px;display:grid;gap:10px;background:#f7f6f2}\n .quote{border-left:4px solid var(--blue);padding:10px 12px;background:var(--soft-blue);font-weight:750;line-height:1.58}\n .cost-compare{display:grid;gap:8px}\n .cost-row{border:2px solid var(--line);background:#fff;padding:10px 12px;display:grid;gap:3px;box-shadow:4px 4px 0 rgba(17,17,17,.08)}\n .cost-row .l{font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:#5d6472;font-weight:900}\n .cost-row .v{font-size:22px;font-weight:950;line-height:1.1;letter-spacing:-.04em}\n .cost-row .v.purple{color:var(--purple)}\n .cost-row .v.green{color:var(--green)}\n .cost-row .v.orange{color:var(--orange)}\n .cost-row .note{font-size:13px;line-height:1.5;color:#222}\n\n .summary-rail{background:#111;color:#fff;display:grid;grid-template-rows:auto 1fr;overflow:hidden}\n .summary-head{padding:14px;border-bottom:3px solid #0c0c0c;background:linear-gradient(180deg,#141414,#111)}\n .summary-head h3{font-size:20px;line-height:1.08;letter-spacing:-.04em;margin:0 0 6px}\n .summary-head p{margin:0;color:#e8e0d3;font-size:12.8px;line-height:1.6}\n .summary-body{padding:14px;display:grid;gap:10px;background:#151515}\n .summary-card{border:1.5px solid rgba(255,255,255,.14);background:#1a1a1a;padding:12px;display:grid;gap:6px}\n .summary-card .t{display:flex;align-items:center;gap:8px;font-size:11px;font-weight:900;letter-spacing:.12em;text-transform:uppercase;color:#d7d7d7}\n .summary-card .t::before{content:\"■\"}\n .summary-card p{margin:0;color:#ece8dc;font-size:12.6px;line-height:1.62}\n .summary-card.purple .t::before{color:var(--purple)}\n .summary-card.green .t::before{color:var(--green)}\n .summary-card.blue .t::before{color:var(--blue)}\n .summary-card.orange .t::before{color:var(--orange)}\n .github{border:2px solid #fff;background:#fff;color:#111;padding:12px;display:grid;gap:8px}\n .github .small{font-size:10.8px;font-weight:900;letter-spacing:.16em;text-transform:uppercase;color:#666}\n .github .num{font-size:30px;line-height:1;font-weight:950;letter-spacing:-.04em;color:var(--purple)}\n\n .section{margin-top:30px;border-top:3px solid var(--line);padding-top:14px}\n .section-head{display:grid;grid-template-columns:96px 1fr;gap:14px;align-items:start;margin-bottom:12px}\n .section-no{display:grid;place-items:center;width:96px;height:96px;border:3px solid var(--line);background:var(--purple);color:#fff;font-size:34px;font-weight:950;line-height:1;box-shadow:var(--shadow)}\n .section-no.b{background:var(--blue)}\n .section-no.g{background:var(--green)}\n .section-no.o{background:var(--orange);color:#111}\n .section-meta{display:grid;gap:7px;padding-top:4px}\n .section-meta .label{font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:var(--purple);font-weight:900}\n .section-meta .label.b{color:var(--blue)}\n .section-meta .label.g{color:var(--green)}\n .section-meta .label.o{color:var(--orange)}\n .section-meta h2{margin:0;font-size:clamp(22px,3.7vw,38px);line-height:1.02;letter-spacing:-.05em}\n .section-meta p{margin:0;color:#5d6472;font-size:14px;line-height:1.62;max-width:980px}\n\n .grid-2,.grid-3,.grid-4{display:grid;gap:12px}\n .grid-2{grid-template-columns:repeat(2,minmax(0,1fr))}\n .grid-3{grid-template-columns:repeat(3,minmax(0,1fr))}\n .grid-4{grid-template-columns:repeat(4,minmax(0,1fr))}\n .card,.mini{border:2px solid var(--line);background:#fff;min-width:0;box-shadow:var(--shadow)}\n .card,.mini{padding:14px}\n .card{display:grid;gap:10px}\n .card h3,.mini h4{margin:0;letter-spacing:-.02em}\n .card h3{font-size:17px;line-height:1.16}\n .card p,.mini p{margin:0;font-size:14px;color:#222;line-height:1.66}\n .card ul,.mini ul{margin:0;padding-left:0;list-style-position:inside}\n .card li,.mini li{margin:4px 0;font-size:14px;color:#222;line-height:1.66}\n .tagrow{display:flex;flex-wrap:wrap;gap:6px}\n .tag{display:inline-flex;align-items:center;gap:6px;border:2px solid var(--line);padding:4px 8px;background:#fff;font-size:11.6px;font-weight:850;line-height:1}\n .tag.purple{background:var(--soft-purple);border-color:var(--purple);color:var(--purple)}\n .tag.green{background:var(--soft-green);border-color:var(--green);color:var(--green)}\n .tag.blue{background:var(--soft-blue);border-color:var(--blue);color:var(--blue)}\n .tag.orange{background:var(--soft-orange);border-color:var(--orange);color:#8c5200}\n .tag.dark{background:#111;color:#fff}\n\n .matrix{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}\n .matrix .mini{display:grid;gap:8px}\n .mini h4{font-size:15px;line-height:1.2}\n .mini .lead{font-size:13px;color:#5d6472;font-weight:850;letter-spacing:.04em;text-transform:uppercase}\n .mini .quote-line{border-left:4px solid var(--purple);padding-left:10px;font-weight:900;line-height:1.58}\n\n .flow-v{display:grid;gap:8px}\n .flow-item{border:2px solid var(--line);background:#fff;padding:10px 12px;display:grid;gap:3px;position:relative;box-shadow:4px 4px 0 rgba(17,17,17,.08)}\n .flow-item::after{content:\"↓\";position:absolute;left:14px;bottom:-17px;color:var(--blue);font-size:15px;font-weight:900}\n .flow-item:last-child::after{display:none}\n .flow-item .t{font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:#5d6472;font-weight:900}\n .flow-item .c{font-size:14px;line-height:1.55;font-weight:900}\n .flow-item.purple .c{color:var(--purple)}\n .flow-item.green .c{color:var(--green)}\n .flow-item.blue .c{color:var(--blue)}\n .flow-item.orange .c{color:var(--orange)}\n\n .quote-block{border-left:4px solid var(--blue);padding:12px 14px;background:var(--soft-blue);font-size:14px;line-height:1.72;box-shadow:var(--shadow)}\n .spec-table{width:100%;border-collapse:collapse;font-size:13px;line-height:1.6}\n .spec-table th,.spec-table td{border:2px solid var(--line);padding:8px 10px;text-align:left;background:#fff}\n .spec-table th{background:#111;color:#fff;font-weight:850;font-size:11.6px;letter-spacing:.08em;text-transform:uppercase}\n .spec-table .yes{color:var(--green);font-weight:900}\n .spec-table .no{color:#aaa}\n .rule{height:3px;background:#111;margin:8px 0 0}\n .source-note{margin-top:18px;text-align:center;color:#5d6472;font-size:12.5px;line-height:1.62}\n\n @media (max-width:1080px){\n .hero{grid-template-columns:1fr}\n .hero-copy{border-right:0;border-bottom:3px solid var(--line)}\n .summary-rail{border-top:3px solid #0c0c0c}\n .grid-4,.matrix{grid-template-columns:repeat(2,minmax(0,1fr))}\n }\n @media (max-width:720px){\n .page{width:min(100% - 16px,1180px);padding:10px 0 60px}\n .hero{display:flex;flex-direction:column}\n .hero-copy{padding:16px;border-right:0;border-top:3px solid var(--line)}\n .grid-4,.grid-3,.grid-2,.matrix{grid-template-columns:1fr}\n .section-head{grid-template-columns:1fr;gap:10px}\n .section-no{width:72px;height:72px;font-size:28px}\n .card,.mini,.alert{padding-left:12px;padding-right:12px}\n .spec-table{font-size:12px}\n .spec-table th,.spec-table td{padding:5px 6px}\n }\n </style>\n</head>\n<body>\n <main class=\"page\">\n\n <header class=\"hero\">\n <div class=\"hero-bar\"></div>\n <div class=\"hero-copy\">\n <div class=\"kicker\">BACKDOOR · CLAUDE CODE PROXY</div>\n <h1 class=\"demo-title\">Run Claude Code Against Any AI Provider</h1>\n <p class=\"subtitle\">Backdoor 是一个轻量级代理,拦截 Claude Code 的 Anthropic API 调用,路由到任何 OpenAI 兼容的提供商。DeepSeek、Groq、Ollama、OpenRouter — 你选。同一 UI、同一工具、同一 agentic loop,零锁定。</p>\n <div class=\"badge-row\">\n <span class=\"badge purple\">DeepSeek</span>\n <span class=\"badge green\">Groq</span>\n <span class=\"badge blue\">Ollama</span>\n <span class=\"badge orange\">OpenRouter</span>\n </div>\n <div class=\"badge-row\">\n <span class=\"badge dark\">NVIDIA NIM</span>\n <span class=\"badge ink\">LM Studio</span>\n <span class=\"badge ink\">200+ Models</span>\n <span class=\"badge ink\">Telegram Control</span>\n </div>\n <div class=\"alert\">\n <strong>最好的编码 agent,搭配你选的模型</strong>\n <p>Claude Code 是目前最好的 coding agent — 工具调用、agentic 循环、代码库导航能力无可匹敌。Backdoor 解除了它和 Anthropic API 的硬绑定,让你用任何模型、任何价格跑同一个 ui。</p>\n <div class=\"mini-row\">\n <span class=\"mini-tag\">Zero Lock-in</span>\n <span class=\"mini-tag\">99.95% Cheaper</span>\n <span class=\"mini-tag\"><600 LOC</span>\n </div>\n </div>\n </div>\n\n <section class=\"architecture-column\">\n <div class=\"panel-top\">\n <div class=\"eyebrow\">COST COMPARISON</div>\n <h3>500M Tokens · Same Workload</h3>\n <p>Backdoor 实测数据:同一 task 负载跑过 500M tokens,两种后端的费用差距。</p>\n </div>\n <div class=\"panel-body\">\n <div class=\"cost-compare\">\n <div class=\"cost-row\">\n <div class=\"l\">Claude Opus 4.7</div>\n <div class=\"v purple\">$9,834</div>\n <div class=\"note\">~$19.67 / 1M tokens</div>\n </div>\n <div class=\"cost-row\">\n <div class=\"l\">DeepSeek V3 Flash</div>\n <div class=\"v green\">$5.34</div>\n <div class=\"note\">~$0.01 / 1M tokens — <strong>99.95% cheaper</strong></div>\n </div>\n </div>\n <div class=\"quote\">$9,834 vs $5.34 — 近 2,000x 成本差距。个人开发者从\"肉疼\"变\"忽略不计\",团队从小没预算变随便跑。</div>\n <div class=\"cost-row\" style=\"border-color:var(--purple)\">\n <div class=\"l\">NVIDIA NIM / Groq 免费层</div>\n <div class=\"v green\">$0</div>\n <div class=\"note\">月数千次请求免费 — 零成本上手。</div>\n </div>\n </div>\n </section>\n\n <aside class=\"summary-rail\">\n <div class=\"summary-head\">\n <h3>为什么选择 Backdoor</h3>\n <p>Claude Code 的 harness 是免费的。背后跑什么模型,由你决定。</p>\n </div>\n <div class=\"summary-body\">\n <article class=\"summary-card purple\">\n <div class=\"t\">完全免费层</div>\n <p>NVIDIA NIM 和 Groq 都有免费层,月数千次请求。开箱即用,零成本启动。</p>\n </article>\n <article class=\"summary-card green\">\n <div class=\"t\">成本降低 95%+</div>\n <p>DeepSeek 比 Claude API 便宜约 95%。从\"一杯咖啡\"变成\"忽略不计\"。</p>\n </article>\n <article class=\"summary-card blue\">\n <div class=\"t\">完全本地私密</div>\n <p>指向本地 Ollama 实例,数据永远不会离开你的机器。无 API、无日志、无传输。</p>\n </article>\n <article class=\"summary-card orange\">\n <div class=\"t\">200+ 模型,一把钥匙</div>\n <p>通过 OpenRouter 接入 Gemini、Grok、Qwen 等所有主流模型,单一 API key。</p>\n </article>\n <div class=\"github\">\n <div class=\"small\">GitHub / Backdoor</div>\n <div class=\"num\">288</div>\n <div style=\"font-size:12.4px;line-height:1.55\">stars · 30 forks · MIT · Python · 3 commands to set up</div>\n </div>\n </div>\n </aside>\n </header>\n\n <section class=\"section\">\n <div class=\"section-head\">\n <div class=\"section-no\">01</div>\n <div class=\"section-meta\">\n <div class=\"label\">THE PROBLEM & THE FIX</div>\n <h2>锁定的代价与解耦的方案</h2>\n <p>Claude Code 硬绑定到 Anthropic API。你付 Anthropic 的价格、用 Anthropic 的模型、受 Anthropic 的规则约束。Backdoor 在中间做了一层透明的协议转换。</p>\n </div>\n </div>\n <div class=\"grid-3\">\n <article class=\"card\">\n <div class=\"tagrow\"><span class=\"tag purple\">Before</span><span class=\"tag dark\">Lock-in</span></div>\n <h3>锁定状态</h3>\n <p>Claude Code → Anthropic API → $$$。最高质量的 coding agent 只有一种后端选择。</p>\n <ul>\n <li>单一 API 定价无竞争</li>\n <li>模型更新节奏随 Anthropic</li>\n <li>高成本限制使用规模</li>\n </ul>\n </article>\n <article class=\"card\" style=\"border-color:var(--green)\">\n <div class=\"tagrow\"><span class=\"tag green\">After</span><span class=\"tag dark\">Freedom</span></div>\n <h3>解耦方案</h3>\n <p>Claude Code → Backdoor → 任意 OpenAI 兼容提供商。零改动、零配置切换。</p>\n <ul>\n <li>一行 .env 切换提供商</li>\n <li>支持 DeepSeek/Groq/NVIDIA/Ollama</li>\n <li>代码 < 600 行,完全透明</li>\n </ul>\n </article>\n <article class=\"card\">\n <div class=\"tagrow\"><span class=\"tag orange\">核心洞察</span><span class=\"tag dark\">Why</span></div>\n <h3>Agent Harness > 模型</h3>\n <p>Claude Code 真正强大的是它的工具调用系统和 agentic loop。模型是可更换的。</p>\n <ul>\n <li>最好的 harness + 最便宜的模型 = 最优解</li>\n <li>不否定 Anthropic,而是让更多人能用上</li>\n <li>MIT 开源,任何人都能参与改进</li>\n </ul>\n </article>\n </div>\n </section>\n\n <section class=\"section\">\n <div class=\"section-head\">\n <div class=\"section-no b\">02</div>\n <div class=\"section-meta\">\n <div class=\"label b\">PROVIDER MATRIX</div>\n <h2>支持的提供商一览</h2>\n <p>修改 .env 中三行配置即可切换后端。覆盖免费层、本地部署和商业 API 三种场景。</p>\n </div>\n </div>\n <div class=\"grid-2\">\n <table class=\"spec-table\">\n <thead>\n <tr><th>提供商</th><th>免费层</th><th>速度</th><th>最适合</th></tr>\n </thead>\n <tbody>\n <tr><td><strong>DeepSeek</strong></td><td class=\"no\">—</td><td>快</td><td>极致性价比</td></tr>\n <tr><td><strong>Groq</strong></td><td class=\"yes\">✅</td><td>最快</td><td>即时响应场景</td></tr>\n <tr><td><strong>NVIDIA NIM</strong></td><td class=\"yes\">✅</td><td>快</td><td>免费 Llama 3.3 70B</td></tr>\n <tr><td><strong>OpenRouter</strong></td><td class=\"no\">—</td><td>因模型而异</td><td>一把钥匙通所有</td></tr>\n <tr><td><strong>Ollama</strong></td><td class=\"yes\">✅ (本地)</td><td>看硬件</td><td>完全私有部署</td></tr>\n <tr><td><strong>LM Studio</strong></td><td class=\"yes\">✅ (本地)</td><td>看硬件</td><td>便捷本地模型管理</td></tr>\n </tbody>\n </table>\n <div style=\"display:grid;gap:8px;align-content:start\">\n <div class=\"quote-block\">一行切换:改 <code>PROVIDER_BASE_URL</code>、<code>PROVIDER_API_KEY</code>、<code>PROVIDER_MODEL</code> 三个环境变量。除 Ollama 外所有提供商共用同一套配置模板。</div>\n <div class=\"card\">\n <div class=\"tagrow\"><span class=\"tag dark\">.env</span><span class=\"tag purple\">Configuration</span></div>\n <h3>示例:切换到 DeepSeek</h3>\n <pre style=\"font-size:12px;line-height:1.5;background:#f5f2eb;padding:10px;border:1px solid var(--line);overflow-x:auto\">PROVIDER_BASE_URL=https://api.deepseek.com/v1\nPROVIDER_API_KEY=sk-...\nPROVIDER_MODEL=deepseek-chat</pre>\n </div>\n </div>\n </div>\n </section>\n\n <section class=\"section\">\n <div class=\"section-head\">\n <div class=\"section-no g\">03</div>\n <div class=\"section-meta\">\n <div class=\"label g\">QUICK SETUP</div>\n <h2>60 秒上手引导</h2>\n <p>三条命令、一个交互式向导,从头到位零手动配置。</p>\n </div>\n </div>\n <div class=\"grid-2\">\n <div class=\"card\" style=\"background:var(--soft-blue)\">\n <div class=\"tagrow\"><span class=\"tag blue\">One-liner</span><span class=\"tag dark\">Step 1–3</span></div>\n <h3>三行命令开始</h3>\n <pre style=\"font-size:12px;line-height:1.5;background:#fff;padding:10px;border:1px solid var(--line);overflow-x:auto\">git clone https://github.com/ajsai47/backdoor\ncd backdoor\n./backdoor # 一步步向导</pre>\n <p><strong>向导会做什么:</strong>动画开场 → 选择提供商 → 输入 API key → 写入配置 → 启动 Claude Code。想手动配置?复制 <code>.env.example</code> → 填写 → 运行 <code>./run.sh</code>。</p>\n </div>\n <div class=\"card\" style=\"background:var(--soft-orange)\">\n <div class=\"tagrow\"><span class=\"tag orange\">Telegram</span><span class=\"tag dark\">Mobile</span></div>\n <h3>Bonus:手机控制 Claude Code</h3>\n <p>设置 <code>TELEGRAM_BOT_TOKEN</code> 和 <code>TELEGRAM_ALLOWED_USER_ID</code> 环境变量,即可从 Telegram 发送 prompt 并在聊天中接收 Claude Code 输出。</p>\n <p style=\"color:#8c5200;font-weight:850;font-size:13px\">一个从手机上触发编码任务、在移动端获取编码结果的完整闭环。</p>\n </div>\n </div>\n </section>\n\n <section class=\"section\">\n <div class=\"section-head\">\n <div class=\"section-no o\">04</div>\n <div class=\"section-meta\">\n <div class=\"label o\">ARCHITECTURE</div>\n <h2>工作原理:代理层的协议桥接</h2>\n <p>Claude Code 认为自己在和 Anthropic API 通信。实际上 Backdoor 在本地做了实时协议翻译。</p>\n </div>\n </div>\n <div class=\"grid-2\">\n <div class=\"flow-v\">\n <div class=\"flow-item purple\"><div class=\"t\">Step 1</div><div class=\"c\">Claude Code 发送请求到 localhost:8082</div></div>\n <div class=\"flow-item green\"><div class=\"t\">Step 2</div><div class=\"c\">Backdoor 接收请求,从 Messages API 格式翻译为 OpenAI chat completions</div></div>\n <div class=\"flow-item blue\"><div class=\"t\">Step 3</div><div class=\"c\">转发到选择的提供商(DeepSeek/Groq/Ollama/...)</div></div>\n <div class=\"flow-item orange\"><div class=\"t\">Step 4</div><div class=\"c\">流式回传:结果实时翻译回 Anthropic SSE 格式。工具调用、delta、token 计数全部透明。</div></div>\n </div>\n <div>\n <div class=\"card\">\n <div class=\"tagrow\"><span class=\"tag dark\">Housekeeping</span><span class=\"tag purple\">Short-circuit</span></div>\n <h3>内部请求本地短路</h3>\n <p>Claude Code 的部分内部请求(quota 探测、标题生成等)被 Backdoor 识别并在本地拦截,不消耗你的提供商配额。免费层用户特别受益于此。</p>\n </div>\n <div class=\"card\" style=\"margin-top:12px\">\n <div class=\"tagrow\"><span class=\"tag blue\">Troubleshooting</span><span class=\"tag orange\">Common</span></div>\n <h3>常见问题速查</h3>\n <ul>\n <li><strong>Proxy failed to start</strong> — 端口 8082 被占用,改 <code>PORT=8083</code></li>\n <li><strong>Model not found / 404</strong> — PROVIDER_MODEL 名称不正确(例:DeepSeek 用 <code>deepseek-chat</code>)</li>\n <li><strong>响应慢</strong> — 切换到 Groq,最快推理 + 免费层</li>\n <li><strong>查看日志</strong> — 检查 <code>proxy.log</code>;为空则直接运行 <code>uv run uvicorn server:app</code></li>\n </ul>\n </div>\n </div>\n </div>\n </section>\n\n <section class=\"section\">\n <div class=\"section-head\">\n <div class=\"section-no\">05</div>\n <div class=\"section-meta\">\n <div class=\"label\">OPEN SOURCE & COMMUNITY</div>\n <h2>MIT 开源,零附随条件</h2>\n <p>代码简洁、可读、可 fork。如果明天一个新 AI 提供商上线,当天就能用上。</p>\n </div>\n </div>\n <div class=\"grid-3\">\n <div class=\"card\" style=\"background:var(--soft-purple)\">\n <div class=\"tagrow\"><span class=\"tag purple\">代码量</span><span class=\"tag dark\"><600 lines</span></div>\n <h3>可审计的简洁代码</h3>\n <p>读得懂的 600 行 Python。没有黑盒、没有隐藏端点、没有遥测。你可以逐行审计它做了什么。</p>\n </div>\n <div class=\"card\" style=\"background:var(--soft-green)\">\n <div class=\"tagrow\"><span class=\"tag green\">许可</span><span class=\"tag dark\">MIT</span></div>\n <h3>真正的开放</h3>\n <p>MIT 许可。Fork it、改它、用它构建你的产品。没有限制,没有 Strings attached。</p>\n </div>\n <div class=\"card\" style=\"background:var(--soft-orange)\">\n <div class=\"tagrow\"><span class=\"tag orange\">未来就绪</span><span class=\"tag dark\">New Provider</span></div>\n <h3>当天接入新提供商</h3>\n <p>新 AI 提供商发布当天就能用。不用等 PR merge,直接改 <code>PROVIDER_BASE_URL</code> 就行。</p>\n </div>\n </div>\n <div class=\"quote-block\" style=\"margin-top:14px;background:var(--soft-purple);border-color:var(--purple)\">\n <strong>Claude Code is the best coding agent ever built. The model underneath is optional.</strong> — Backdoor 的核心理念。Harness 免费、模型按需选择。学生、个人开发者、预算受限地区的用户,都应该用上最好的编码工具。\n </div>\n </section>\n\n <div class=\"rule\"></div>\n <p class=\"source-note\">ajsai47/backdoor · MIT License · Python · 3 commands · Any provider · <a href=\"https://github.com/ajsai47/backdoor\">github.com/ajsai47/backdoor</a></p>\n </main>\n</body>\n</html>"}, "b73be24d470c568c16db3c0a9fa3c5453f833764": {"t": 1785772851.8767753, "n": 23891, "h": "c7e699f6346c3278", "c": "<!doctype html>\n<html lang=\"zh-CN\">\n<head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <title>Backdoor · Claude Code Proxy</title>\n <style>\n :root{\n --canvas:#f7f2e8; --paper:#fffdf8; --ink:#0c1220; --line:#111111;\n --purple:#6e3fd6; --green:#2e9b4b; --blue:#2e6be6; --orange:#f59e0b; --yellow:#f5d46b;\n --soft-purple:#f2ecff; --soft-green:#eefbf1; --soft-blue:#eef4ff; --soft-orange:#fff4e6;\n --shadow:8px 8px 0 rgba(17,17,17,.12);\n }\n *{box-sizing:border-box;margin:0;padding:0}\n html,body{margin:0;overflow-x:hidden}\n body{\n color:var(--ink);line-height:1.58;font-family:Inter,system-ui,-apple-system,\"PingFang SC\",\"Microsoft YaHei\",\"Segoe UI\",Arial,sans-serif;\n background:\n linear-gradient(rgba(17,17,17,.04) 1px, transparent 1px) 0 0/100% 42px,\n linear-gradient(90deg, rgba(17,17,17,.04) 1px, transparent 1px) 0 0/42px 100%,\n radial-gradient(circle at 10% 8%, rgba(110,63,214,.06) 0 11%, transparent 12%),\n radial-gradient(circle at 86% 10%, rgba(46,155,75,.05) 0 10%, transparent 11%),\n linear-gradient(180deg,#faf4e9 0,#f7f2e8 100%);\n }\n img{display:block;max-width:100%}\n a{color:inherit;text-decoration:none}\n code,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}\n .page{width:min(1180px, calc(100% - 20px));margin:0 auto;padding:18px 0 88px}\n\n .hero{display:grid;grid-template-columns:minmax(0,1.08fr) minmax(0,1.12fr) minmax(0,.82fr);gap:14px;border:3px solid var(--line);background:var(--paper);overflow:hidden;box-shadow:var(--shadow)}\n .hero-bar{grid-column:1/-1;height:14px;background:#111;border-bottom:3px solid var(--line);position:relative}\n .hero-bar::before{content:\"\";position:absolute;inset:0 auto 0 0;width:180px;background:var(--purple)}\n .hero-bar::after{content:\"\";position:absolute;inset:0 0 0 auto;width:150px;background:var(--blue)}\n .hero-copy{padding:16px;border-right:3px solid var(--line);display:grid;gap:10px;align-content:start}\n .kicker{display:inline-flex;align-items:center;gap:8px;width:fit-content;border:2px solid var(--line);background:#fff;padding:5px 9px;font-size:11px;font-weight:900;letter-spacing:.18em;text-transform:uppercase}\n .kicker::before{content:\"■\";color:var(--purple);font-size:10px}\n h1.demo-title{margin:0;max-width:820px;font-size:clamp(24px,3.7vw,44px);line-height:.98;letter-spacing:-.05em}\n .subtitle{color:#4d5567;font-size:12.5px;line-height:1.55}\n .badge-row{display:flex;flex-wrap:wrap;gap:6px}\n .badge{display:inline-flex;align-items:center;min-height:28px;padding:5px 9px;border:2px solid var(--line);background:#fff;font-size:11.6px;font-weight:850}\n .badge.purple{background:var(--purple);color:#fff}\n .badge.blue{background:var(--blue);color:#fff}\n .badge.green{background:var(--green);color:#fff}\n .badge.orange{background:var(--orange);color:#111}\n .badge.dark{background:#111;color:#fff}\n .badge.ink{background:#111;color:#fff;font-size:11px;min-height:24px;padding:4px 8px}\n .alert{border:2px solid var(--line);background:#111;color:#fff;padding:10px 12px;display:grid;gap:8px;box-shadow:var(--shadow)}\n .alert strong{display:block;font-size:13.5px;line-height:1.35}\n .alert p{margin:0;font-size:12.5px;line-height:1.62;color:#f0ebe0}\n .mini-row{display:flex;flex-wrap:wrap;gap:6px}\n .mini-tag{display:inline-flex;align-items:center;border:1.5px solid #fff;padding:4px 8px;font-size:11px;font-weight:850;line-height:1;background:#111;color:#fff}\n\n .architecture-column{background:#fff;display:grid;grid-template-rows:auto 1fr}\n .panel-top{padding:14px;border-bottom:3px solid var(--line);background:linear-gradient(135deg,#0f1320 0%,#151a2b 100%);color:#fff}\n .panel-top .eyebrow{display:inline-flex;align-items:center;border:1.5px solid #fff;padding:3px 8px;font-size:10.8px;font-weight:900;letter-spacing:.16em;text-transform:uppercase}\n .panel-top h3{margin:10px 0 6px;font-size:20px;line-height:1.08;letter-spacing:-.04em}\n .panel-top p{margin:0;color:#ece8dc;font-size:13px;line-height:1.64}\n .panel-body{padding:14px;display:grid;gap:10px;background:#f7f6f2}\n .quote{border-left:4px solid var(--blue);padding:10px 12px;background:var(--soft-blue);font-weight:750;line-height:1.58}\n .cost-compare{display:grid;gap:8px}\n .cost-row{border:2px solid var(--line);background:#fff;padding:10px 12px;display:grid;gap:3px;box-shadow:4px 4px 0 rgba(17,17,17,.08)}\n .cost-row .l{font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:#5d6472;font-weight:900}\n .cost-row .v{font-size:22px;font-weight:950;line-height:1.1;letter-spacing:-.04em}\n .cost-row .v.purple{color:var(--purple)}\n .cost-row .v.green{color:var(--green)}\n .cost-row .v.orange{color:var(--orange)}\n .cost-row .note{font-size:13px;line-height:1.5;color:#222}\n\n .summary-rail{background:#111;color:#fff;display:grid;grid-template-rows:auto 1fr;overflow:hidden}\n .summary-head{padding:14px;border-bottom:3px solid #0c0c0c;background:linear-gradient(180deg,#141414,#111)}\n .summary-head h3{font-size:20px;line-height:1.08;letter-spacing:-.04em;margin:0 0 6px}\n .summary-head p{margin:0;color:#e8e0d3;font-size:12.8px;line-height:1.6}\n .summary-body{padding:14px;display:grid;gap:10px;background:#151515}\n .summary-card{border:1.5px solid rgba(255,255,255,.14);background:#1a1a1a;padding:12px;display:grid;gap:6px}\n .summary-card .t{display:flex;align-items:center;gap:8px;font-size:11px;font-weight:900;letter-spacing:.12em;text-transform:uppercase;color:#d7d7d7}\n .summary-card .t::before{content:\"■\"}\n .summary-card p{margin:0;color:#ece8dc;font-size:12.6px;line-height:1.62}\n .summary-card.purple .t::before{color:var(--purple)}\n .summary-card.green .t::before{color:var(--green)}\n .summary-card.blue .t::before{color:var(--blue)}\n .summary-card.orange .t::before{color:var(--orange)}\n .github{border:2px solid #fff;background:#fff;color:#111;padding:12px;display:grid;gap:8px}\n .github .small{font-size:10.8px;font-weight:900;letter-spacing:.16em;text-transform:uppercase;color:#666}\n .github .num{font-size:30px;line-height:1;font-weight:950;letter-spacing:-.04em;color:var(--purple)}\n\n .section{margin-top:30px;border-top:3px solid var(--line);padding-top:14px}\n .section-head{display:grid;grid-template-columns:96px 1fr;gap:14px;align-items:start;margin-bottom:12px}\n .section-no{display:grid;place-items:center;width:96px;height:96px;border:3px solid var(--line);background:var(--purple);color:#fff;font-size:34px;font-weight:950;line-height:1;box-shadow:var(--shadow)}\n .section-no.b{background:var(--blue)}\n .section-no.g{background:var(--green)}\n .section-no.o{background:var(--orange);color:#111}\n .section-meta{display:grid;gap:7px;padding-top:4px}\n .section-meta .label{font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:var(--purple);font-weight:900}\n .section-meta .label.b{color:var(--blue)}\n .section-meta .label.g{color:var(--green)}\n .section-meta .label.o{color:var(--orange)}\n .section-meta h2{margin:0;font-size:clamp(22px,3.7vw,38px);line-height:1.02;letter-spacing:-.05em}\n .section-meta p{margin:0;color:#5d6472;font-size:14px;line-height:1.62;max-width:980px}\n\n .grid-2,.grid-3,.grid-4{display:grid;gap:12px}\n .grid-2{grid-template-columns:repeat(2,minmax(0,1fr))}\n .grid-3{grid-template-columns:repeat(3,minmax(0,1fr))}\n .grid-4{grid-template-columns:repeat(4,minmax(0,1fr))}\n .card,.mini{border:2px solid var(--line);background:#fff;min-width:0;box-shadow:var(--shadow)}\n .card,.mini{padding:14px}\n .card{display:grid;gap:10px}\n .card h3,.mini h4{margin:0;letter-spacing:-.02em}\n .card h3{font-size:17px;line-height:1.16}\n .card p,.mini p{margin:0;font-size:14px;color:#222;line-height:1.66}\n .card ul,.mini ul{margin:0;padding-left:0;list-style-position:inside}\n .card li,.mini li{margin:4px 0;font-size:14px;color:#222;line-height:1.66}\n .tagrow{display:flex;flex-wrap:wrap;gap:6px}\n .tag{display:inline-flex;align-items:center;gap:6px;border:2px solid var(--line);padding:4px 8px;background:#fff;font-size:11.6px;font-weight:850;line-height:1}\n .tag.purple{background:var(--soft-purple);border-color:var(--purple);color:var(--purple)}\n .tag.green{background:var(--soft-green);border-color:var(--green);color:var(--green)}\n .tag.blue{background:var(--soft-blue);border-color:var(--blue);color:var(--blue)}\n .tag.orange{background:var(--soft-orange);border-color:var(--orange);color:#8c5200}\n .tag.dark{background:#111;color:#fff}\n\n .matrix{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}\n .matrix .mini{display:grid;gap:8px}\n .mini h4{font-size:15px;line-height:1.2}\n .mini .lead{font-size:13px;color:#5d6472;font-weight:850;letter-spacing:.04em;text-transform:uppercase}\n .mini .quote-line{border-left:4px solid var(--purple);padding-left:10px;font-weight:900;line-height:1.58}\n\n .flow-v{display:grid;gap:8px}\n .flow-item{border:2px solid var(--line);background:#fff;padding:10px 12px;display:grid;gap:3px;position:relative;box-shadow:4px 4px 0 rgba(17,17,17,.08)}\n .flow-item::after{content:\"↓\";position:absolute;left:14px;bottom:-17px;color:var(--blue);font-size:15px;font-weight:900}\n .flow-item:last-child::after{display:none}\n .flow-item .t{font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:#5d6472;font-weight:900}\n .flow-item .c{font-size:14px;line-height:1.55;font-weight:900}\n .flow-item.purple .c{color:var(--purple)}\n .flow-item.green .c{color:var(--green)}\n .flow-item.blue .c{color:var(--blue)}\n .flow-item.orange .c{color:var(--orange)}\n\n .quote-block{border-left:4px solid var(--blue);padding:12px 14px;background:var(--soft-blue);font-size:14px;line-height:1.72;box-shadow:var(--shadow)}\n .spec-table{width:100%;border-collapse:collapse;font-size:13px;line-height:1.6}\n .spec-table th,.spec-table td{border:2px solid var(--line);padding:8px 10px;text-align:left;background:#fff}\n .spec-table th{background:#111;color:#fff;font-weight:850;font-size:11.6px;letter-spacing:.08em;text-transform:uppercase}\n .spec-table .yes{color:var(--green);font-weight:900}\n .spec-table .no{color:#aaa}\n .rule{height:3px;background:#111;margin:8px 0 0}\n .source-note{margin-top:18px;text-align:center;color:#5d6472;font-size:12.5px;line-height:1.62}\n\n @media (max-width:1080px){\n .hero{grid-template-columns:1fr}\n .hero-copy{border-right:0;border-bottom:3px solid var(--line)}\n .summary-rail{border-top:3px solid #0c0c0c}\n .grid-4,.matrix{grid-template-columns:repeat(2,minmax(0,1fr))}\n }\n @media (max-width:720px){\n .page{width:min(100% - 16px,1180px);padding:10px 0 60px}\n .hero{display:flex;flex-direction:column}\n .hero-copy{padding:16px;border-right:0;border-top:3px solid var(--line)}\n .grid-4,.grid-3,.grid-2,.matrix{grid-template-columns:1fr}\n .section-head{grid-template-columns:1fr;gap:10px}\n .section-no{width:72px;height:72px;font-size:28px}\n .card,.mini,.alert{padding-left:12px;padding-right:12px}\n .spec-table{font-size:12px}\n .spec-table th,.spec-table td{padding:5px 6px}\n }\n </style>\n</head>\n<body>\n <main class=\"page\">\n\n <header class=\"hero\">\n <div class=\"hero-bar\"></div>\n <div class=\"hero-copy\">\n <div class=\"kicker\">BACKDOOR · CLAUDE CODE PROXY</div>\n <h1 class=\"demo-title\">Run Claude Code Against Any AI Provider</h1>\n <p class=\"subtitle\">Backdoor 是一个轻量级代理,拦截 Claude Code 的 Anthropic API 调用,路由到任何 OpenAI 兼容的提供商。DeepSeek、Groq、Ollama、OpenRouter — 你选。同一 UI、同一工具、同一 agentic loop,零锁定。</p>\n <div class=\"badge-row\">\n <span class=\"badge purple\">DeepSeek</span>\n <span class=\"badge green\">Groq</span>\n <span class=\"badge blue\">Ollama</span>\n <span class=\"badge orange\">OpenRouter</span>\n </div>\n <div class=\"badge-row\">\n <span class=\"badge dark\">NVIDIA NIM</span>\n <span class=\"badge ink\">LM Studio</span>\n <span class=\"badge ink\">200+ Models</span>\n <span class=\"badge ink\">Telegram Control</span>\n </div>\n <div class=\"alert\">\n <strong>最好的编码 agent,搭配你选的模型</strong>\n <p>Claude Code 是目前最好的 coding agent — 工具调用、agentic 循环、代码库导航能力无可匹敌。Backdoor 解除了它和 Anthropic API 的硬绑定,让你用任何模型、任何价格跑同一个 ui。</p>\n <div class=\"mini-row\">\n <span class=\"mini-tag\">Zero Lock-in</span>\n <span class=\"mini-tag\">99.95% Cheaper</span>\n <span class=\"mini-tag\"><600 LOC</span>\n </div>\n </div>\n </div>\n\n <section class=\"architecture-column\">\n <div class=\"panel-top\">\n <div class=\"eyebrow\">COST COMPARISON</div>\n <h3>500M Tokens · Same Workload</h3>\n <p>Backdoor 实测数据:同一 task 负载跑过 500M tokens,两种后端的费用差距。</p>\n </div>\n <div class=\"panel-body\">\n <div class=\"cost-compare\">\n <div class=\"cost-row\">\n <div class=\"l\">Claude Opus 4.7</div>\n <div class=\"v purple\">$9,834</div>\n <div class=\"note\">~$19.67 / 1M tokens</div>\n </div>\n <div class=\"cost-row\">\n <div class=\"l\">DeepSeek V3 Flash</div>\n <div class=\"v green\">$5.34</div>\n <div class=\"note\">~$0.01 / 1M tokens — <strong>99.95% cheaper</strong></div>\n </div>\n </div>\n <div class=\"quote\">$9,834 vs $5.34 — 近 2,000x 成本差距。个人开发者从\"肉疼\"变\"忽略不计\",团队从小没预算变随便跑。</div>\n <div class=\"cost-row\" style=\"border-color:var(--purple)\">\n <div class=\"l\">NVIDIA NIM / Groq 免费层</div>\n <div class=\"v green\">$0</div>\n <div class=\"note\">月数千次请求免费 — 零成本上手。</div>\n </div>\n </div>\n </section>\n\n <aside class=\"summary-rail\">\n <div class=\"summary-head\">\n <h3>为什么选择 Backdoor</h3>\n <p>Claude Code 的 harness 是免费的。背后跑什么模型,由你决定。</p>\n </div>\n <div class=\"summary-body\">\n <article class=\"summary-card purple\">\n <div class=\"t\">完全免费层</div>\n <p>NVIDIA NIM 和 Groq 都有免费层,月数千次请求。开箱即用,零成本启动。</p>\n </article>\n <article class=\"summary-card green\">\n <div class=\"t\">成本降低 95%+</div>\n <p>DeepSeek 比 Claude API 便宜约 95%。从\"一杯咖啡\"变成\"忽略不计\"。</p>\n </article>\n <article class=\"summary-card blue\">\n <div class=\"t\">完全本地私密</div>\n <p>指向本地 Ollama 实例,数据永远不会离开你的机器。无 API、无日志、无传输。</p>\n </article>\n <article class=\"summary-card orange\">\n <div class=\"t\">200+ 模型,一把钥匙</div>\n <p>通过 OpenRouter 接入 Gemini、Grok、Qwen 等所有主流模型,单一 API key。</p>\n </article>\n <div class=\"github\">\n <div class=\"small\">GitHub / Backdoor</div>\n <div class=\"num\">288</div>\n <div style=\"font-size:12.4px;line-height:1.55\">stars · 30 forks · MIT · Python · 3 commands to set up</div>\n </div>\n </div>\n </aside>\n </header>\n\n <section class=\"section\">\n <div class=\"section-head\">\n <div class=\"section-no\">01</div>\n <div class=\"section-meta\">\n <div class=\"label\">THE PROBLEM & THE FIX</div>\n <h2>锁定的代价与解耦的方案</h2>\n <p>Claude Code 硬绑定到 Anthropic API。你付 Anthropic 的价格、用 Anthropic 的模型、受 Anthropic 的规则约束。Backdoor 在中间做了一层透明的协议转换。</p>\n </div>\n </div>\n <div class=\"grid-3\">\n <article class=\"card\">\n <div class=\"tagrow\"><span class=\"tag purple\">Before</span><span class=\"tag dark\">Lock-in</span></div>\n <h3>锁定状态</h3>\n <p>Claude Code → Anthropic API → $$$。最高质量的 coding agent 只有一种后端选择。</p>\n <ul>\n <li>单一 API 定价无竞争</li>\n <li>模型更新节奏随 Anthropic</li>\n <li>高成本限制使用规模</li>\n </ul>\n </article>\n <article class=\"card\" style=\"border-color:var(--green)\">\n <div class=\"tagrow\"><span class=\"tag green\">After</span><span class=\"tag dark\">Freedom</span></div>\n <h3>解耦方案</h3>\n <p>Claude Code → Backdoor → 任意 OpenAI 兼容提供商。零改动、零配置切换。</p>\n <ul>\n <li>一行 .env 切换提供商</li>\n <li>支持 DeepSeek/Groq/NVIDIA/Ollama</li>\n <li>代码 < 600 行,完全透明</li>\n </ul>\n </article>\n <article class=\"card\">\n <div class=\"tagrow\"><span class=\"tag orange\">核心洞察</span><span class=\"tag dark\">Why</span></div>\n <h3>Agent Harness > 模型</h3>\n <p>Claude Code 真正强大的是它的工具调用系统和 agentic loop。模型是可更换的。</p>\n <ul>\n <li>最好的 harness + 最便宜的模型 = 最优解</li>\n <li>不否定 Anthropic,而是让更多人能用上</li>\n <li>MIT 开源,任何人都能参与改进</li>\n </ul>\n </article>\n </div>\n </section>\n\n <section class=\"section\">\n <div class=\"section-head\">\n <div class=\"section-no b\">02</div>\n <div class=\"section-meta\">\n <div class=\"label b\">PROVIDER MATRIX</div>\n <h2>支持的提供商一览</h2>\n <p>修改 .env 中三行配置即可切换后端。覆盖免费层、本地部署和商业 API 三种场景。</p>\n </div>\n </div>\n <div class=\"grid-2\">\n <table class=\"spec-table\">\n <thead>\n <tr><th>提供商</th><th>免费层</th><th>速度</th><th>最适合</th></tr>\n </thead>\n <tbody>\n <tr><td><strong>DeepSeek</strong></td><td class=\"no\">—</td><td>快</td><td>极致性价比</td></tr>\n <tr><td><strong>Groq</strong></td><td class=\"yes\">✅</td><td>最快</td><td>即时响应场景</td></tr>\n <tr><td><strong>NVIDIA NIM</strong></td><td class=\"yes\">✅</td><td>快</td><td>免费 Llama 3.3 70B</td></tr>\n <tr><td><strong>OpenRouter</strong></td><td class=\"no\">—</td><td>因模型而异</td><td>一把钥匙通所有</td></tr>\n <tr><td><strong>Ollama</strong></td><td class=\"yes\">✅ (本地)</td><td>看硬件</td><td>完全私有部署</td></tr>\n <tr><td><strong>LM Studio</strong></td><td class=\"yes\">✅ (本地)</td><td>看硬件</td><td>便捷本地模型管理</td></tr>\n </tbody>\n </table>\n <div style=\"display:grid;gap:8px;align-content:start\">\n <div class=\"quote-block\">一行切换:改 <code>PROVIDER_BASE_URL</code>、<code>PROVIDER_API_KEY</code>、<code>PROVIDER_MODEL</code> 三个环境变量。除 Ollama 外所有提供商共用同一套配置模板。</div>\n <div class=\"card\">\n <div class=\"tagrow\"><span class=\"tag dark\">.env</span><span class=\"tag purple\">Configuration</span></div>\n <h3>示例:切换到 DeepSeek</h3>\n <pre style=\"font-size:12px;line-height:1.5;background:#f5f2eb;padding:10px;border:1px solid var(--line);overflow-x:auto\">PROVIDER_BASE_URL=https://api.deepseek.com/v1\nPROVIDER_API_KEY=sk-...\nPROVIDER_MODEL=deepseek-chat</pre>\n </div>\n </div>\n </div>\n </section>\n\n <section class=\"section\">\n <div class=\"section-head\">\n <div class=\"section-no g\">03</div>\n <div class=\"section-meta\">\n <div class=\"label g\">QUICK SETUP</div>\n <h2>60 秒上手引导</h2>\n <p>三条命令、一个交互式向导,从头到位零手动配置。</p>\n </div>\n </div>\n <div class=\"grid-2\">\n <div class=\"card\" style=\"background:var(--soft-blue)\">\n <div class=\"tagrow\"><span class=\"tag blue\">One-liner</span><span class=\"tag dark\">Step 1–3</span></div>\n <h3>三行命令开始</h3>\n <pre style=\"font-size:12px;line-height:1.5;background:#fff;padding:10px;border:1px solid var(--line);overflow-x:auto\">git clone https://github.com/ajsai47/backdoor\ncd backdoor\n./backdoor # 一步步向导</pre>\n <p><strong>向导会做什么:</strong>动画开场 → 选择提供商 → 输入 API key → 写入配置 → 启动 Claude Code。想手动配置?复制 <code>.env.example</code> → 填写 → 运行 <code>./run.sh</code>。</p>\n </div>\n <div class=\"card\" style=\"background:var(--soft-orange)\">\n <div class=\"tagrow\"><span class=\"tag orange\">Telegram</span><span class=\"tag dark\">Mobile</span></div>\n <h3>Bonus:手机控制 Claude Code</h3>\n <p>设置 <code>TELEGRAM_BOT_TOKEN</code> 和 <code>TELEGRAM_ALLOWED_USER_ID</code> 环境变量,即可从 Telegram 发送 prompt 并在聊天中接收 Claude Code 输出。</p>\n <p style=\"color:#8c5200;font-weight:850;font-size:13px\">一个从手机上触发编码任务、在移动端获取编码结果的完整闭环。</p>\n </div>\n </div>\n </section>\n\n <section class=\"section\">\n <div class=\"section-head\">\n <div class=\"section-no o\">04</div>\n <div class=\"section-meta\">\n <div class=\"label o\">ARCHITECTURE</div>\n <h2>工作原理:代理层的协议桥接</h2>\n <p>Claude Code 认为自己在和 Anthropic API 通信。实际上 Backdoor 在本地做了实时协议翻译。</p>\n </div>\n </div>\n <div class=\"grid-2\">\n <div class=\"flow-v\">\n <div class=\"flow-item purple\"><div class=\"t\">Step 1</div><div class=\"c\">Claude Code 发送请求到 localhost:8082</div></div>\n <div class=\"flow-item green\"><div class=\"t\">Step 2</div><div class=\"c\">Backdoor 接收请求,从 Messages API 格式翻译为 OpenAI chat completions</div></div>\n <div class=\"flow-item blue\"><div class=\"t\">Step 3</div><div class=\"c\">转发到选择的提供商(DeepSeek/Groq/Ollama/...)</div></div>\n <div class=\"flow-item orange\"><div class=\"t\">Step 4</div><div class=\"c\">流式回传:结果实时翻译回 Anthropic SSE 格式。工具调用、delta、token 计数全部透明。</div></div>\n </div>\n <div>\n <div class=\"card\">\n <div class=\"tagrow\"><span class=\"tag dark\">Housekeeping</span><span class=\"tag purple\">Short-circuit</span></div>\n <h3>内部请求本地短路</h3>\n <p>Claude Code 的部分内部请求(quota 探测、标题生成等)被 Backdoor 识别并在本地拦截,不消耗你的提供商配额。免费层用户特别受益于此。</p>\n </div>\n <div class=\"card\" style=\"margin-top:12px\">\n <div class=\"tagrow\"><span class=\"tag blue\">Troubleshooting</span><span class=\"tag orange\">Common</span></div>\n <h3>常见问题速查</h3>\n <ul>\n <li><strong>Proxy failed to start</strong> — 端口 8082 被占用,改 <code>PORT=8083</code></li>\n <li><strong>Model not found / 404</strong> — PROVIDER_MODEL 名称不正确(例:DeepSeek 用 <code>deepseek-chat</code>)</li>\n <li><strong>响应慢</strong> — 切换到 Groq,最快推理 + 免费层</li>\n <li><strong>查看日志</strong> — 检查 <code>proxy.log</code>;为空则直接运行 <code>uv run uvicorn server:app</code></li>\n </ul>\n </div>\n </div>\n </div>\n </section>\n\n <section class=\"section\">\n <div class=\"section-head\">\n <div class=\"section-no\">05</div>\n <div class=\"section-meta\">\n <div class=\"label\">OPEN SOURCE & COMMUNITY</div>\n <h2>MIT 开源,零附随条件</h2>\n <p>代码简洁、可读、可 fork。如果明天一个新 AI 提供商上线,当天就能用上。</p>\n </div>\n </div>\n <div class=\"grid-3\">\n <div class=\"card\" style=\"background:var(--soft-purple)\">\n <div class=\"tagrow\"><span class=\"tag purple\">代码量</span><span class=\"tag dark\"><600 lines</span></div>\n <h3>可审计的简洁代码</h3>\n <p>读得懂的 600 行 Python。没有黑盒、没有隐藏端点、没有遥测。你可以逐行审计它做了什么。</p>\n </div>\n <div class=\"card\" style=\"background:var(--soft-green)\">\n <div class=\"tagrow\"><span class=\"tag green\">许可</span><span class=\"tag dark\">MIT</span></div>\n <h3>真正的开放</h3>\n <p>MIT 许可。Fork it、改它、用它构建你的产品。没有限制,没有 Strings attached。</p>\n </div>\n <div class=\"card\" style=\"background:var(--soft-orange)\">\n <div class=\"tagrow\"><span class=\"tag orange\">未来就绪</span><span class=\"tag dark\">New Provider</span></div>\n <h3>当天接入新提供商</h3>\n <p>新 AI 提供商发布当天就能用。不用等 PR merge,直接改 <code>PROVIDER_BASE_URL</code> 就行。</p>\n </div>\n </div>\n <div class=\"quote-block\" style=\"margin-top:14px;background:var(--soft-purple);border-color:var(--purple)\">\n <strong>Claude Code is the best coding agent ever built. The model underneath is optional.</strong> — Backdoor 的核心理念。Harness 免费、模型按需选择。学生、个人开发者、预算受限地区的用户,都应该用上最好的编码工具。\n </div>\n </section>\n\n <div class=\"rule\"></div>\n <p class=\"source-note\">ajsai47/backdoor · MIT License · Python · 3 commands · Any provider · <a href=\"https://github.com/ajsai47/backdoor\">github.com/ajsai47/backdoor</a></p>\n </main>\n</body>\n</html>"}, "796595564792d611f3c9bda6b7bdb73a556020ec": {"t": 1786068154.9117942, "n": 23891, "h": "c7e699f6346c3278", "c": "<!doctype html>\n<html lang=\"zh-CN\">\n<head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <title>Backdoor · Claude Code Proxy</title>\n <style>\n :root{\n --canvas:#f7f2e8; --paper:#fffdf8; --ink:#0c1220; --line:#111111;\n --purple:#6e3fd6; --green:#2e9b4b; --blue:#2e6be6; --orange:#f59e0b; --yellow:#f5d46b;\n --soft-purple:#f2ecff; --soft-green:#eefbf1; --soft-blue:#eef4ff; --soft-orange:#fff4e6;\n --shadow:8px 8px 0 rgba(17,17,17,.12);\n }\n *{box-sizing:border-box;margin:0;padding:0}\n html,body{margin:0;overflow-x:hidden}\n body{\n color:var(--ink);line-height:1.58;font-family:Inter,system-ui,-apple-system,\"PingFang SC\",\"Microsoft YaHei\",\"Segoe UI\",Arial,sans-serif;\n background:\n linear-gradient(rgba(17,17,17,.04) 1px, transparent 1px) 0 0/100% 42px,\n linear-gradient(90deg, rgba(17,17,17,.04) 1px, transparent 1px) 0 0/42px 100%,\n radial-gradient(circle at 10% 8%, rgba(110,63,214,.06) 0 11%, transparent 12%),\n radial-gradient(circle at 86% 10%, rgba(46,155,75,.05) 0 10%, transparent 11%),\n linear-gradient(180deg,#faf4e9 0,#f7f2e8 100%);\n }\n img{display:block;max-width:100%}\n a{color:inherit;text-decoration:none}\n code,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}\n .page{width:min(1180px, calc(100% - 20px));margin:0 auto;padding:18px 0 88px}\n\n .hero{display:grid;grid-template-columns:minmax(0,1.08fr) minmax(0,1.12fr) minmax(0,.82fr);gap:14px;border:3px solid var(--line);background:var(--paper);overflow:hidden;box-shadow:var(--shadow)}\n .hero-bar{grid-column:1/-1;height:14px;background:#111;border-bottom:3px solid var(--line);position:relative}\n .hero-bar::before{content:\"\";position:absolute;inset:0 auto 0 0;width:180px;background:var(--purple)}\n .hero-bar::after{content:\"\";position:absolute;inset:0 0 0 auto;width:150px;background:var(--blue)}\n .hero-copy{padding:16px;border-right:3px solid var(--line);display:grid;gap:10px;align-content:start}\n .kicker{display:inline-flex;align-items:center;gap:8px;width:fit-content;border:2px solid var(--line);background:#fff;padding:5px 9px;font-size:11px;font-weight:900;letter-spacing:.18em;text-transform:uppercase}\n .kicker::before{content:\"■\";color:var(--purple);font-size:10px}\n h1.demo-title{margin:0;max-width:820px;font-size:clamp(24px,3.7vw,44px);line-height:.98;letter-spacing:-.05em}\n .subtitle{color:#4d5567;font-size:12.5px;line-height:1.55}\n .badge-row{display:flex;flex-wrap:wrap;gap:6px}\n .badge{display:inline-flex;align-items:center;min-height:28px;padding:5px 9px;border:2px solid var(--line);background:#fff;font-size:11.6px;font-weight:850}\n .badge.purple{background:var(--purple);color:#fff}\n .badge.blue{background:var(--blue);color:#fff}\n .badge.green{background:var(--green);color:#fff}\n .badge.orange{background:var(--orange);color:#111}\n .badge.dark{background:#111;color:#fff}\n .badge.ink{background:#111;color:#fff;font-size:11px;min-height:24px;padding:4px 8px}\n .alert{border:2px solid var(--line);background:#111;color:#fff;padding:10px 12px;display:grid;gap:8px;box-shadow:var(--shadow)}\n .alert strong{display:block;font-size:13.5px;line-height:1.35}\n .alert p{margin:0;font-size:12.5px;line-height:1.62;color:#f0ebe0}\n .mini-row{display:flex;flex-wrap:wrap;gap:6px}\n .mini-tag{display:inline-flex;align-items:center;border:1.5px solid #fff;padding:4px 8px;font-size:11px;font-weight:850;line-height:1;background:#111;color:#fff}\n\n .architecture-column{background:#fff;display:grid;grid-template-rows:auto 1fr}\n .panel-top{padding:14px;border-bottom:3px solid var(--line);background:linear-gradient(135deg,#0f1320 0%,#151a2b 100%);color:#fff}\n .panel-top .eyebrow{display:inline-flex;align-items:center;border:1.5px solid #fff;padding:3px 8px;font-size:10.8px;font-weight:900;letter-spacing:.16em;text-transform:uppercase}\n .panel-top h3{margin:10px 0 6px;font-size:20px;line-height:1.08;letter-spacing:-.04em}\n .panel-top p{margin:0;color:#ece8dc;font-size:13px;line-height:1.64}\n .panel-body{padding:14px;display:grid;gap:10px;background:#f7f6f2}\n .quote{border-left:4px solid var(--blue);padding:10px 12px;background:var(--soft-blue);font-weight:750;line-height:1.58}\n .cost-compare{display:grid;gap:8px}\n .cost-row{border:2px solid var(--line);background:#fff;padding:10px 12px;display:grid;gap:3px;box-shadow:4px 4px 0 rgba(17,17,17,.08)}\n .cost-row .l{font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:#5d6472;font-weight:900}\n .cost-row .v{font-size:22px;font-weight:950;line-height:1.1;letter-spacing:-.04em}\n .cost-row .v.purple{color:var(--purple)}\n .cost-row .v.green{color:var(--green)}\n .cost-row .v.orange{color:var(--orange)}\n .cost-row .note{font-size:13px;line-height:1.5;color:#222}\n\n .summary-rail{background:#111;color:#fff;display:grid;grid-template-rows:auto 1fr;overflow:hidden}\n .summary-head{padding:14px;border-bottom:3px solid #0c0c0c;background:linear-gradient(180deg,#141414,#111)}\n .summary-head h3{font-size:20px;line-height:1.08;letter-spacing:-.04em;margin:0 0 6px}\n .summary-head p{margin:0;color:#e8e0d3;font-size:12.8px;line-height:1.6}\n .summary-body{padding:14px;display:grid;gap:10px;background:#151515}\n .summary-card{border:1.5px solid rgba(255,255,255,.14);background:#1a1a1a;padding:12px;display:grid;gap:6px}\n .summary-card .t{display:flex;align-items:center;gap:8px;font-size:11px;font-weight:900;letter-spacing:.12em;text-transform:uppercase;color:#d7d7d7}\n .summary-card .t::before{content:\"■\"}\n .summary-card p{margin:0;color:#ece8dc;font-size:12.6px;line-height:1.62}\n .summary-card.purple .t::before{color:var(--purple)}\n .summary-card.green .t::before{color:var(--green)}\n .summary-card.blue .t::before{color:var(--blue)}\n .summary-card.orange .t::before{color:var(--orange)}\n .github{border:2px solid #fff;background:#fff;color:#111;padding:12px;display:grid;gap:8px}\n .github .small{font-size:10.8px;font-weight:900;letter-spacing:.16em;text-transform:uppercase;color:#666}\n .github .num{font-size:30px;line-height:1;font-weight:950;letter-spacing:-.04em;color:var(--purple)}\n\n .section{margin-top:30px;border-top:3px solid var(--line);padding-top:14px}\n .section-head{display:grid;grid-template-columns:96px 1fr;gap:14px;align-items:start;margin-bottom:12px}\n .section-no{display:grid;place-items:center;width:96px;height:96px;border:3px solid var(--line);background:var(--purple);color:#fff;font-size:34px;font-weight:950;line-height:1;box-shadow:var(--shadow)}\n .section-no.b{background:var(--blue)}\n .section-no.g{background:var(--green)}\n .section-no.o{background:var(--orange);color:#111}\n .section-meta{display:grid;gap:7px;padding-top:4px}\n .section-meta .label{font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:var(--purple);font-weight:900}\n .section-meta .label.b{color:var(--blue)}\n .section-meta .label.g{color:var(--green)}\n .section-meta .label.o{color:var(--orange)}\n .section-meta h2{margin:0;font-size:clamp(22px,3.7vw,38px);line-height:1.02;letter-spacing:-.05em}\n .section-meta p{margin:0;color:#5d6472;font-size:14px;line-height:1.62;max-width:980px}\n\n .grid-2,.grid-3,.grid-4{display:grid;gap:12px}\n .grid-2{grid-template-columns:repeat(2,minmax(0,1fr))}\n .grid-3{grid-template-columns:repeat(3,minmax(0,1fr))}\n .grid-4{grid-template-columns:repeat(4,minmax(0,1fr))}\n .card,.mini{border:2px solid var(--line);background:#fff;min-width:0;box-shadow:var(--shadow)}\n .card,.mini{padding:14px}\n .card{display:grid;gap:10px}\n .card h3,.mini h4{margin:0;letter-spacing:-.02em}\n .card h3{font-size:17px;line-height:1.16}\n .card p,.mini p{margin:0;font-size:14px;color:#222;line-height:1.66}\n .card ul,.mini ul{margin:0;padding-left:0;list-style-position:inside}\n .card li,.mini li{margin:4px 0;font-size:14px;color:#222;line-height:1.66}\n .tagrow{display:flex;flex-wrap:wrap;gap:6px}\n .tag{display:inline-flex;align-items:center;gap:6px;border:2px solid var(--line);padding:4px 8px;background:#fff;font-size:11.6px;font-weight:850;line-height:1}\n .tag.purple{background:var(--soft-purple);border-color:var(--purple);color:var(--purple)}\n .tag.green{background:var(--soft-green);border-color:var(--green);color:var(--green)}\n .tag.blue{background:var(--soft-blue);border-color:var(--blue);color:var(--blue)}\n .tag.orange{background:var(--soft-orange);border-color:var(--orange);color:#8c5200}\n .tag.dark{background:#111;color:#fff}\n\n .matrix{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}\n .matrix .mini{display:grid;gap:8px}\n .mini h4{font-size:15px;line-height:1.2}\n .mini .lead{font-size:13px;color:#5d6472;font-weight:850;letter-spacing:.04em;text-transform:uppercase}\n .mini .quote-line{border-left:4px solid var(--purple);padding-left:10px;font-weight:900;line-height:1.58}\n\n .flow-v{display:grid;gap:8px}\n .flow-item{border:2px solid var(--line);background:#fff;padding:10px 12px;display:grid;gap:3px;position:relative;box-shadow:4px 4px 0 rgba(17,17,17,.08)}\n .flow-item::after{content:\"↓\";position:absolute;left:14px;bottom:-17px;color:var(--blue);font-size:15px;font-weight:900}\n .flow-item:last-child::after{display:none}\n .flow-item .t{font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:#5d6472;font-weight:900}\n .flow-item .c{font-size:14px;line-height:1.55;font-weight:900}\n .flow-item.purple .c{color:var(--purple)}\n .flow-item.green .c{color:var(--green)}\n .flow-item.blue .c{color:var(--blue)}\n .flow-item.orange .c{color:var(--orange)}\n\n .quote-block{border-left:4px solid var(--blue);padding:12px 14px;background:var(--soft-blue);font-size:14px;line-height:1.72;box-shadow:var(--shadow)}\n .spec-table{width:100%;border-collapse:collapse;font-size:13px;line-height:1.6}\n .spec-table th,.spec-table td{border:2px solid var(--line);padding:8px 10px;text-align:left;background:#fff}\n .spec-table th{background:#111;color:#fff;font-weight:850;font-size:11.6px;letter-spacing:.08em;text-transform:uppercase}\n .spec-table .yes{color:var(--green);font-weight:900}\n .spec-table .no{color:#aaa}\n .rule{height:3px;background:#111;margin:8px 0 0}\n .source-note{margin-top:18px;text-align:center;color:#5d6472;font-size:12.5px;line-height:1.62}\n\n @media (max-width:1080px){\n .hero{grid-template-columns:1fr}\n .hero-copy{border-right:0;border-bottom:3px solid var(--line)}\n .summary-rail{border-top:3px solid #0c0c0c}\n .grid-4,.matrix{grid-template-columns:repeat(2,minmax(0,1fr))}\n }\n @media (max-width:720px){\n .page{width:min(100% - 16px,1180px);padding:10px 0 60px}\n .hero{display:flex;flex-direction:column}\n .hero-copy{padding:16px;border-right:0;border-top:3px solid var(--line)}\n .grid-4,.grid-3,.grid-2,.matrix{grid-template-columns:1fr}\n .section-head{grid-template-columns:1fr;gap:10px}\n .section-no{width:72px;height:72px;font-size:28px}\n .card,.mini,.alert{padding-left:12px;padding-right:12px}\n .spec-table{font-size:12px}\n .spec-table th,.spec-table td{padding:5px 6px}\n }\n </style>\n</head>\n<body>\n <main class=\"page\">\n\n <header class=\"hero\">\n <div class=\"hero-bar\"></div>\n <div class=\"hero-copy\">\n <div class=\"kicker\">BACKDOOR · CLAUDE CODE PROXY</div>\n <h1 class=\"demo-title\">Run Claude Code Against Any AI Provider</h1>\n <p class=\"subtitle\">Backdoor 是一个轻量级代理,拦截 Claude Code 的 Anthropic API 调用,路由到任何 OpenAI 兼容的提供商。DeepSeek、Groq、Ollama、OpenRouter — 你选。同一 UI、同一工具、同一 agentic loop,零锁定。</p>\n <div class=\"badge-row\">\n <span class=\"badge purple\">DeepSeek</span>\n <span class=\"badge green\">Groq</span>\n <span class=\"badge blue\">Ollama</span>\n <span class=\"badge orange\">OpenRouter</span>\n </div>\n <div class=\"badge-row\">\n <span class=\"badge dark\">NVIDIA NIM</span>\n <span class=\"badge ink\">LM Studio</span>\n <span class=\"badge ink\">200+ Models</span>\n <span class=\"badge ink\">Telegram Control</span>\n </div>\n <div class=\"alert\">\n <strong>最好的编码 agent,搭配你选的模型</strong>\n <p>Claude Code 是目前最好的 coding agent — 工具调用、agentic 循环、代码库导航能力无可匹敌。Backdoor 解除了它和 Anthropic API 的硬绑定,让你用任何模型、任何价格跑同一个 ui。</p>\n <div class=\"mini-row\">\n <span class=\"mini-tag\">Zero Lock-in</span>\n <span class=\"mini-tag\">99.95% Cheaper</span>\n <span class=\"mini-tag\"><600 LOC</span>\n </div>\n </div>\n </div>\n\n <section class=\"architecture-column\">\n <div class=\"panel-top\">\n <div class=\"eyebrow\">COST COMPARISON</div>\n <h3>500M Tokens · Same Workload</h3>\n <p>Backdoor 实测数据:同一 task 负载跑过 500M tokens,两种后端的费用差距。</p>\n </div>\n <div class=\"panel-body\">\n <div class=\"cost-compare\">\n <div class=\"cost-row\">\n <div class=\"l\">Claude Opus 4.7</div>\n <div class=\"v purple\">$9,834</div>\n <div class=\"note\">~$19.67 / 1M tokens</div>\n </div>\n <div class=\"cost-row\">\n <div class=\"l\">DeepSeek V3 Flash</div>\n <div class=\"v green\">$5.34</div>\n <div class=\"note\">~$0.01 / 1M tokens — <strong>99.95% cheaper</strong></div>\n </div>\n </div>\n <div class=\"quote\">$9,834 vs $5.34 — 近 2,000x 成本差距。个人开发者从\"肉疼\"变\"忽略不计\",团队从小没预算变随便跑。</div>\n <div class=\"cost-row\" style=\"border-color:var(--purple)\">\n <div class=\"l\">NVIDIA NIM / Groq 免费层</div>\n <div class=\"v green\">$0</div>\n <div class=\"note\">月数千次请求免费 — 零成本上手。</div>\n </div>\n </div>\n </section>\n\n <aside class=\"summary-rail\">\n <div class=\"summary-head\">\n <h3>为什么选择 Backdoor</h3>\n <p>Claude Code 的 harness 是免费的。背后跑什么模型,由你决定。</p>\n </div>\n <div class=\"summary-body\">\n <article class=\"summary-card purple\">\n <div class=\"t\">完全免费层</div>\n <p>NVIDIA NIM 和 Groq 都有免费层,月数千次请求。开箱即用,零成本启动。</p>\n </article>\n <article class=\"summary-card green\">\n <div class=\"t\">成本降低 95%+</div>\n <p>DeepSeek 比 Claude API 便宜约 95%。从\"一杯咖啡\"变成\"忽略不计\"。</p>\n </article>\n <article class=\"summary-card blue\">\n <div class=\"t\">完全本地私密</div>\n <p>指向本地 Ollama 实例,数据永远不会离开你的机器。无 API、无日志、无传输。</p>\n </article>\n <article class=\"summary-card orange\">\n <div class=\"t\">200+ 模型,一把钥匙</div>\n <p>通过 OpenRouter 接入 Gemini、Grok、Qwen 等所有主流模型,单一 API key。</p>\n </article>\n <div class=\"github\">\n <div class=\"small\">GitHub / Backdoor</div>\n <div class=\"num\">288</div>\n <div style=\"font-size:12.4px;line-height:1.55\">stars · 30 forks · MIT · Python · 3 commands to set up</div>\n </div>\n </div>\n </aside>\n </header>\n\n <section class=\"section\">\n <div class=\"section-head\">\n <div class=\"section-no\">01</div>\n <div class=\"section-meta\">\n <div class=\"label\">THE PROBLEM & THE FIX</div>\n <h2>锁定的代价与解耦的方案</h2>\n <p>Claude Code 硬绑定到 Anthropic API。你付 Anthropic 的价格、用 Anthropic 的模型、受 Anthropic 的规则约束。Backdoor 在中间做了一层透明的协议转换。</p>\n </div>\n </div>\n <div class=\"grid-3\">\n <article class=\"card\">\n <div class=\"tagrow\"><span class=\"tag purple\">Before</span><span class=\"tag dark\">Lock-in</span></div>\n <h3>锁定状态</h3>\n <p>Claude Code → Anthropic API → $$$。最高质量的 coding agent 只有一种后端选择。</p>\n <ul>\n <li>单一 API 定价无竞争</li>\n <li>模型更新节奏随 Anthropic</li>\n <li>高成本限制使用规模</li>\n </ul>\n </article>\n <article class=\"card\" style=\"border-color:var(--green)\">\n <div class=\"tagrow\"><span class=\"tag green\">After</span><span class=\"tag dark\">Freedom</span></div>\n <h3>解耦方案</h3>\n <p>Claude Code → Backdoor → 任意 OpenAI 兼容提供商。零改动、零配置切换。</p>\n <ul>\n <li>一行 .env 切换提供商</li>\n <li>支持 DeepSeek/Groq/NVIDIA/Ollama</li>\n <li>代码 < 600 行,完全透明</li>\n </ul>\n </article>\n <article class=\"card\">\n <div class=\"tagrow\"><span class=\"tag orange\">核心洞察</span><span class=\"tag dark\">Why</span></div>\n <h3>Agent Harness > 模型</h3>\n <p>Claude Code 真正强大的是它的工具调用系统和 agentic loop。模型是可更换的。</p>\n <ul>\n <li>最好的 harness + 最便宜的模型 = 最优解</li>\n <li>不否定 Anthropic,而是让更多人能用上</li>\n <li>MIT 开源,任何人都能参与改进</li>\n </ul>\n </article>\n </div>\n </section>\n\n <section class=\"section\">\n <div class=\"section-head\">\n <div class=\"section-no b\">02</div>\n <div class=\"section-meta\">\n <div class=\"label b\">PROVIDER MATRIX</div>\n <h2>支持的提供商一览</h2>\n <p>修改 .env 中三行配置即可切换后端。覆盖免费层、本地部署和商业 API 三种场景。</p>\n </div>\n </div>\n <div class=\"grid-2\">\n <table class=\"spec-table\">\n <thead>\n <tr><th>提供商</th><th>免费层</th><th>速度</th><th>最适合</th></tr>\n </thead>\n <tbody>\n <tr><td><strong>DeepSeek</strong></td><td class=\"no\">—</td><td>快</td><td>极致性价比</td></tr>\n <tr><td><strong>Groq</strong></td><td class=\"yes\">✅</td><td>最快</td><td>即时响应场景</td></tr>\n <tr><td><strong>NVIDIA NIM</strong></td><td class=\"yes\">✅</td><td>快</td><td>免费 Llama 3.3 70B</td></tr>\n <tr><td><strong>OpenRouter</strong></td><td class=\"no\">—</td><td>因模型而异</td><td>一把钥匙通所有</td></tr>\n <tr><td><strong>Ollama</strong></td><td class=\"yes\">✅ (本地)</td><td>看硬件</td><td>完全私有部署</td></tr>\n <tr><td><strong>LM Studio</strong></td><td class=\"yes\">✅ (本地)</td><td>看硬件</td><td>便捷本地模型管理</td></tr>\n </tbody>\n </table>\n <div style=\"display:grid;gap:8px;align-content:start\">\n <div class=\"quote-block\">一行切换:改 <code>PROVIDER_BASE_URL</code>、<code>PROVIDER_API_KEY</code>、<code>PROVIDER_MODEL</code> 三个环境变量。除 Ollama 外所有提供商共用同一套配置模板。</div>\n <div class=\"card\">\n <div class=\"tagrow\"><span class=\"tag dark\">.env</span><span class=\"tag purple\">Configuration</span></div>\n <h3>示例:切换到 DeepSeek</h3>\n <pre style=\"font-size:12px;line-height:1.5;background:#f5f2eb;padding:10px;border:1px solid var(--line);overflow-x:auto\">PROVIDER_BASE_URL=https://api.deepseek.com/v1\nPROVIDER_API_KEY=sk-...\nPROVIDER_MODEL=deepseek-chat</pre>\n </div>\n </div>\n </div>\n </section>\n\n <section class=\"section\">\n <div class=\"section-head\">\n <div class=\"section-no g\">03</div>\n <div class=\"section-meta\">\n <div class=\"label g\">QUICK SETUP</div>\n <h2>60 秒上手引导</h2>\n <p>三条命令、一个交互式向导,从头到位零手动配置。</p>\n </div>\n </div>\n <div class=\"grid-2\">\n <div class=\"card\" style=\"background:var(--soft-blue)\">\n <div class=\"tagrow\"><span class=\"tag blue\">One-liner</span><span class=\"tag dark\">Step 1–3</span></div>\n <h3>三行命令开始</h3>\n <pre style=\"font-size:12px;line-height:1.5;background:#fff;padding:10px;border:1px solid var(--line);overflow-x:auto\">git clone https://github.com/ajsai47/backdoor\ncd backdoor\n./backdoor # 一步步向导</pre>\n <p><strong>向导会做什么:</strong>动画开场 → 选择提供商 → 输入 API key → 写入配置 → 启动 Claude Code。想手动配置?复制 <code>.env.example</code> → 填写 → 运行 <code>./run.sh</code>。</p>\n </div>\n <div class=\"card\" style=\"background:var(--soft-orange)\">\n <div class=\"tagrow\"><span class=\"tag orange\">Telegram</span><span class=\"tag dark\">Mobile</span></div>\n <h3>Bonus:手机控制 Claude Code</h3>\n <p>设置 <code>TELEGRAM_BOT_TOKEN</code> 和 <code>TELEGRAM_ALLOWED_USER_ID</code> 环境变量,即可从 Telegram 发送 prompt 并在聊天中接收 Claude Code 输出。</p>\n <p style=\"color:#8c5200;font-weight:850;font-size:13px\">一个从手机上触发编码任务、在移动端获取编码结果的完整闭环。</p>\n </div>\n </div>\n </section>\n\n <section class=\"section\">\n <div class=\"section-head\">\n <div class=\"section-no o\">04</div>\n <div class=\"section-meta\">\n <div class=\"label o\">ARCHITECTURE</div>\n <h2>工作原理:代理层的协议桥接</h2>\n <p>Claude Code 认为自己在和 Anthropic API 通信。实际上 Backdoor 在本地做了实时协议翻译。</p>\n </div>\n </div>\n <div class=\"grid-2\">\n <div class=\"flow-v\">\n <div class=\"flow-item purple\"><div class=\"t\">Step 1</div><div class=\"c\">Claude Code 发送请求到 localhost:8082</div></div>\n <div class=\"flow-item green\"><div class=\"t\">Step 2</div><div class=\"c\">Backdoor 接收请求,从 Messages API 格式翻译为 OpenAI chat completions</div></div>\n <div class=\"flow-item blue\"><div class=\"t\">Step 3</div><div class=\"c\">转发到选择的提供商(DeepSeek/Groq/Ollama/...)</div></div>\n <div class=\"flow-item orange\"><div class=\"t\">Step 4</div><div class=\"c\">流式回传:结果实时翻译回 Anthropic SSE 格式。工具调用、delta、token 计数全部透明。</div></div>\n </div>\n <div>\n <div class=\"card\">\n <div class=\"tagrow\"><span class=\"tag dark\">Housekeeping</span><span class=\"tag purple\">Short-circuit</span></div>\n <h3>内部请求本地短路</h3>\n <p>Claude Code 的部分内部请求(quota 探测、标题生成等)被 Backdoor 识别并在本地拦截,不消耗你的提供商配额。免费层用户特别受益于此。</p>\n </div>\n <div class=\"card\" style=\"margin-top:12px\">\n <div class=\"tagrow\"><span class=\"tag blue\">Troubleshooting</span><span class=\"tag orange\">Common</span></div>\n <h3>常见问题速查</h3>\n <ul>\n <li><strong>Proxy failed to start</strong> — 端口 8082 被占用,改 <code>PORT=8083</code></li>\n <li><strong>Model not found / 404</strong> — PROVIDER_MODEL 名称不正确(例:DeepSeek 用 <code>deepseek-chat</code>)</li>\n <li><strong>响应慢</strong> — 切换到 Groq,最快推理 + 免费层</li>\n <li><strong>查看日志</strong> — 检查 <code>proxy.log</code>;为空则直接运行 <code>uv run uvicorn server:app</code></li>\n </ul>\n </div>\n </div>\n </div>\n </section>\n\n <section class=\"section\">\n <div class=\"section-head\">\n <div class=\"section-no\">05</div>\n <div class=\"section-meta\">\n <div class=\"label\">OPEN SOURCE & COMMUNITY</div>\n <h2>MIT 开源,零附随条件</h2>\n <p>代码简洁、可读、可 fork。如果明天一个新 AI 提供商上线,当天就能用上。</p>\n </div>\n </div>\n <div class=\"grid-3\">\n <div class=\"card\" style=\"background:var(--soft-purple)\">\n <div class=\"tagrow\"><span class=\"tag purple\">代码量</span><span class=\"tag dark\"><600 lines</span></div>\n <h3>可审计的简洁代码</h3>\n <p>读得懂的 600 行 Python。没有黑盒、没有隐藏端点、没有遥测。你可以逐行审计它做了什么。</p>\n </div>\n <div class=\"card\" style=\"background:var(--soft-green)\">\n <div class=\"tagrow\"><span class=\"tag green\">许可</span><span class=\"tag dark\">MIT</span></div>\n <h3>真正的开放</h3>\n <p>MIT 许可。Fork it、改它、用它构建你的产品。没有限制,没有 Strings attached。</p>\n </div>\n <div class=\"card\" style=\"background:var(--soft-orange)\">\n <div class=\"tagrow\"><span class=\"tag orange\">未来就绪</span><span class=\"tag dark\">New Provider</span></div>\n <h3>当天接入新提供商</h3>\n <p>新 AI 提供商发布当天就能用。不用等 PR merge,直接改 <code>PROVIDER_BASE_URL</code> 就行。</p>\n </div>\n </div>\n <div class=\"quote-block\" style=\"margin-top:14px;background:var(--soft-purple);border-color:var(--purple)\">\n <strong>Claude Code is the best coding agent ever built. The model underneath is optional.</strong> — Backdoor 的核心理念。Harness 免费、模型按需选择。学生、个人开发者、预算受限地区的用户,都应该用上最好的编码工具。\n </div>\n </section>\n\n <div class=\"rule\"></div>\n <p class=\"source-note\">ajsai47/backdoor · MIT License · Python · 3 commands · Any provider · <a href=\"https://github.com/ajsai47/backdoor\">github.com/ajsai47/backdoor</a></p>\n </main>\n</body>\n</html>"}, "3bd3e853268bc01b16e3e4be8f8fdafc135aa9e1": {"t": 1786068605.9774292, "n": 23891, "h": "c7e699f6346c3278", "c": "<!doctype html>\n<html lang=\"zh-CN\">\n<head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <title>Backdoor · Claude Code Proxy</title>\n <style>\n :root{\n --canvas:#f7f2e8; --paper:#fffdf8; --ink:#0c1220; --line:#111111;\n --purple:#6e3fd6; --green:#2e9b4b; --blue:#2e6be6; --orange:#f59e0b; --yellow:#f5d46b;\n --soft-purple:#f2ecff; --soft-green:#eefbf1; --soft-blue:#eef4ff; --soft-orange:#fff4e6;\n --shadow:8px 8px 0 rgba(17,17,17,.12);\n }\n *{box-sizing:border-box;margin:0;padding:0}\n html,body{margin:0;overflow-x:hidden}\n body{\n color:var(--ink);line-height:1.58;font-family:Inter,system-ui,-apple-system,\"PingFang SC\",\"Microsoft YaHei\",\"Segoe UI\",Arial,sans-serif;\n background:\n linear-gradient(rgba(17,17,17,.04) 1px, transparent 1px) 0 0/100% 42px,\n linear-gradient(90deg, rgba(17,17,17,.04) 1px, transparent 1px) 0 0/42px 100%,\n radial-gradient(circle at 10% 8%, rgba(110,63,214,.06) 0 11%, transparent 12%),\n radial-gradient(circle at 86% 10%, rgba(46,155,75,.05) 0 10%, transparent 11%),\n linear-gradient(180deg,#faf4e9 0,#f7f2e8 100%);\n }\n img{display:block;max-width:100%}\n a{color:inherit;text-decoration:none}\n code,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}\n .page{width:min(1180px, calc(100% - 20px));margin:0 auto;padding:18px 0 88px}\n\n .hero{display:grid;grid-template-columns:minmax(0,1.08fr) minmax(0,1.12fr) minmax(0,.82fr);gap:14px;border:3px solid var(--line);background:var(--paper);overflow:hidden;box-shadow:var(--shadow)}\n .hero-bar{grid-column:1/-1;height:14px;background:#111;border-bottom:3px solid var(--line);position:relative}\n .hero-bar::before{content:\"\";position:absolute;inset:0 auto 0 0;width:180px;background:var(--purple)}\n .hero-bar::after{content:\"\";position:absolute;inset:0 0 0 auto;width:150px;background:var(--blue)}\n .hero-copy{padding:16px;border-right:3px solid var(--line);display:grid;gap:10px;align-content:start}\n .kicker{display:inline-flex;align-items:center;gap:8px;width:fit-content;border:2px solid var(--line);background:#fff;padding:5px 9px;font-size:11px;font-weight:900;letter-spacing:.18em;text-transform:uppercase}\n .kicker::before{content:\"■\";color:var(--purple);font-size:10px}\n h1.demo-title{margin:0;max-width:820px;font-size:clamp(24px,3.7vw,44px);line-height:.98;letter-spacing:-.05em}\n .subtitle{color:#4d5567;font-size:12.5px;line-height:1.55}\n .badge-row{display:flex;flex-wrap:wrap;gap:6px}\n .badge{display:inline-flex;align-items:center;min-height:28px;padding:5px 9px;border:2px solid var(--line);background:#fff;font-size:11.6px;font-weight:850}\n .badge.purple{background:var(--purple);color:#fff}\n .badge.blue{background:var(--blue);color:#fff}\n .badge.green{background:var(--green);color:#fff}\n .badge.orange{background:var(--orange);color:#111}\n .badge.dark{background:#111;color:#fff}\n .badge.ink{background:#111;color:#fff;font-size:11px;min-height:24px;padding:4px 8px}\n .alert{border:2px solid var(--line);background:#111;color:#fff;padding:10px 12px;display:grid;gap:8px;box-shadow:var(--shadow)}\n .alert strong{display:block;font-size:13.5px;line-height:1.35}\n .alert p{margin:0;font-size:12.5px;line-height:1.62;color:#f0ebe0}\n .mini-row{display:flex;flex-wrap:wrap;gap:6px}\n .mini-tag{display:inline-flex;align-items:center;border:1.5px solid #fff;padding:4px 8px;font-size:11px;font-weight:850;line-height:1;background:#111;color:#fff}\n\n .architecture-column{background:#fff;display:grid;grid-template-rows:auto 1fr}\n .panel-top{padding:14px;border-bottom:3px solid var(--line);background:linear-gradient(135deg,#0f1320 0%,#151a2b 100%);color:#fff}\n .panel-top .eyebrow{display:inline-flex;align-items:center;border:1.5px solid #fff;padding:3px 8px;font-size:10.8px;font-weight:900;letter-spacing:.16em;text-transform:uppercase}\n .panel-top h3{margin:10px 0 6px;font-size:20px;line-height:1.08;letter-spacing:-.04em}\n .panel-top p{margin:0;color:#ece8dc;font-size:13px;line-height:1.64}\n .panel-body{padding:14px;display:grid;gap:10px;background:#f7f6f2}\n .quote{border-left:4px solid var(--blue);padding:10px 12px;background:var(--soft-blue);font-weight:750;line-height:1.58}\n .cost-compare{display:grid;gap:8px}\n .cost-row{border:2px solid var(--line);background:#fff;padding:10px 12px;display:grid;gap:3px;box-shadow:4px 4px 0 rgba(17,17,17,.08)}\n .cost-row .l{font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:#5d6472;font-weight:900}\n .cost-row .v{font-size:22px;font-weight:950;line-height:1.1;letter-spacing:-.04em}\n .cost-row .v.purple{color:var(--purple)}\n .cost-row .v.green{color:var(--green)}\n .cost-row .v.orange{color:var(--orange)}\n .cost-row .note{font-size:13px;line-height:1.5;color:#222}\n\n .summary-rail{background:#111;color:#fff;display:grid;grid-template-rows:auto 1fr;overflow:hidden}\n .summary-head{padding:14px;border-bottom:3px solid #0c0c0c;background:linear-gradient(180deg,#141414,#111)}\n .summary-head h3{font-size:20px;line-height:1.08;letter-spacing:-.04em;margin:0 0 6px}\n .summary-head p{margin:0;color:#e8e0d3;font-size:12.8px;line-height:1.6}\n .summary-body{padding:14px;display:grid;gap:10px;background:#151515}\n .summary-card{border:1.5px solid rgba(255,255,255,.14);background:#1a1a1a;padding:12px;display:grid;gap:6px}\n .summary-card .t{display:flex;align-items:center;gap:8px;font-size:11px;font-weight:900;letter-spacing:.12em;text-transform:uppercase;color:#d7d7d7}\n .summary-card .t::before{content:\"■\"}\n .summary-card p{margin:0;color:#ece8dc;font-size:12.6px;line-height:1.62}\n .summary-card.purple .t::before{color:var(--purple)}\n .summary-card.green .t::before{color:var(--green)}\n .summary-card.blue .t::before{color:var(--blue)}\n .summary-card.orange .t::before{color:var(--orange)}\n .github{border:2px solid #fff;background:#fff;color:#111;padding:12px;display:grid;gap:8px}\n .github .small{font-size:10.8px;font-weight:900;letter-spacing:.16em;text-transform:uppercase;color:#666}\n .github .num{font-size:30px;line-height:1;font-weight:950;letter-spacing:-.04em;color:var(--purple)}\n\n .section{margin-top:30px;border-top:3px solid var(--line);padding-top:14px}\n .section-head{display:grid;grid-template-columns:96px 1fr;gap:14px;align-items:start;margin-bottom:12px}\n .section-no{display:grid;place-items:center;width:96px;height:96px;border:3px solid var(--line);background:var(--purple);color:#fff;font-size:34px;font-weight:950;line-height:1;box-shadow:var(--shadow)}\n .section-no.b{background:var(--blue)}\n .section-no.g{background:var(--green)}\n .section-no.o{background:var(--orange);color:#111}\n .section-meta{display:grid;gap:7px;padding-top:4px}\n .section-meta .label{font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:var(--purple);font-weight:900}\n .section-meta .label.b{color:var(--blue)}\n .section-meta .label.g{color:var(--green)}\n .section-meta .label.o{color:var(--orange)}\n .section-meta h2{margin:0;font-size:clamp(22px,3.7vw,38px);line-height:1.02;letter-spacing:-.05em}\n .section-meta p{margin:0;color:#5d6472;font-size:14px;line-height:1.62;max-width:980px}\n\n .grid-2,.grid-3,.grid-4{display:grid;gap:12px}\n .grid-2{grid-template-columns:repeat(2,minmax(0,1fr))}\n .grid-3{grid-template-columns:repeat(3,minmax(0,1fr))}\n .grid-4{grid-template-columns:repeat(4,minmax(0,1fr))}\n .card,.mini{border:2px solid var(--line);background:#fff;min-width:0;box-shadow:var(--shadow)}\n .card,.mini{padding:14px}\n .card{display:grid;gap:10px}\n .card h3,.mini h4{margin:0;letter-spacing:-.02em}\n .card h3{font-size:17px;line-height:1.16}\n .card p,.mini p{margin:0;font-size:14px;color:#222;line-height:1.66}\n .card ul,.mini ul{margin:0;padding-left:0;list-style-position:inside}\n .card li,.mini li{margin:4px 0;font-size:14px;color:#222;line-height:1.66}\n .tagrow{display:flex;flex-wrap:wrap;gap:6px}\n .tag{display:inline-flex;align-items:center;gap:6px;border:2px solid var(--line);padding:4px 8px;background:#fff;font-size:11.6px;font-weight:850;line-height:1}\n .tag.purple{background:var(--soft-purple);border-color:var(--purple);color:var(--purple)}\n .tag.green{background:var(--soft-green);border-color:var(--green);color:var(--green)}\n .tag.blue{background:var(--soft-blue);border-color:var(--blue);color:var(--blue)}\n .tag.orange{background:var(--soft-orange);border-color:var(--orange);color:#8c5200}\n .tag.dark{background:#111;color:#fff}\n\n .matrix{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}\n .matrix .mini{display:grid;gap:8px}\n .mini h4{font-size:15px;line-height:1.2}\n .mini .lead{font-size:13px;color:#5d6472;font-weight:850;letter-spacing:.04em;text-transform:uppercase}\n .mini .quote-line{border-left:4px solid var(--purple);padding-left:10px;font-weight:900;line-height:1.58}\n\n .flow-v{display:grid;gap:8px}\n .flow-item{border:2px solid var(--line);background:#fff;padding:10px 12px;display:grid;gap:3px;position:relative;box-shadow:4px 4px 0 rgba(17,17,17,.08)}\n .flow-item::after{content:\"↓\";position:absolute;left:14px;bottom:-17px;color:var(--blue);font-size:15px;font-weight:900}\n .flow-item:last-child::after{display:none}\n .flow-item .t{font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:#5d6472;font-weight:900}\n .flow-item .c{font-size:14px;line-height:1.55;font-weight:900}\n .flow-item.purple .c{color:var(--purple)}\n .flow-item.green .c{color:var(--green)}\n .flow-item.blue .c{color:var(--blue)}\n .flow-item.orange .c{color:var(--orange)}\n\n .quote-block{border-left:4px solid var(--blue);padding:12px 14px;background:var(--soft-blue);font-size:14px;line-height:1.72;box-shadow:var(--shadow)}\n .spec-table{width:100%;border-collapse:collapse;font-size:13px;line-height:1.6}\n .spec-table th,.spec-table td{border:2px solid var(--line);padding:8px 10px;text-align:left;background:#fff}\n .spec-table th{background:#111;color:#fff;font-weight:850;font-size:11.6px;letter-spacing:.08em;text-transform:uppercase}\n .spec-table .yes{color:var(--green);font-weight:900}\n .spec-table .no{color:#aaa}\n .rule{height:3px;background:#111;margin:8px 0 0}\n .source-note{margin-top:18px;text-align:center;color:#5d6472;font-size:12.5px;line-height:1.62}\n\n @media (max-width:1080px){\n .hero{grid-template-columns:1fr}\n .hero-copy{border-right:0;border-bottom:3px solid var(--line)}\n .summary-rail{border-top:3px solid #0c0c0c}\n .grid-4,.matrix{grid-template-columns:repeat(2,minmax(0,1fr))}\n }\n @media (max-width:720px){\n .page{width:min(100% - 16px,1180px);padding:10px 0 60px}\n .hero{display:flex;flex-direction:column}\n .hero-copy{padding:16px;border-right:0;border-top:3px solid var(--line)}\n .grid-4,.grid-3,.grid-2,.matrix{grid-template-columns:1fr}\n .section-head{grid-template-columns:1fr;gap:10px}\n .section-no{width:72px;height:72px;font-size:28px}\n .card,.mini,.alert{padding-left:12px;padding-right:12px}\n .spec-table{font-size:12px}\n .spec-table th,.spec-table td{padding:5px 6px}\n }\n </style>\n</head>\n<body>\n <main class=\"page\">\n\n <header class=\"hero\">\n <div class=\"hero-bar\"></div>\n <div class=\"hero-copy\">\n <div class=\"kicker\">BACKDOOR · CLAUDE CODE PROXY</div>\n <h1 class=\"demo-title\">Run Claude Code Against Any AI Provider</h1>\n <p class=\"subtitle\">Backdoor 是一个轻量级代理,拦截 Claude Code 的 Anthropic API 调用,路由到任何 OpenAI 兼容的提供商。DeepSeek、Groq、Ollama、OpenRouter — 你选。同一 UI、同一工具、同一 agentic loop,零锁定。</p>\n <div class=\"badge-row\">\n <span class=\"badge purple\">DeepSeek</span>\n <span class=\"badge green\">Groq</span>\n <span class=\"badge blue\">Ollama</span>\n <span class=\"badge orange\">OpenRouter</span>\n </div>\n <div class=\"badge-row\">\n <span class=\"badge dark\">NVIDIA NIM</span>\n <span class=\"badge ink\">LM Studio</span>\n <span class=\"badge ink\">200+ Models</span>\n <span class=\"badge ink\">Telegram Control</span>\n </div>\n <div class=\"alert\">\n <strong>最好的编码 agent,搭配你选的模型</strong>\n <p>Claude Code 是目前最好的 coding agent — 工具调用、agentic 循环、代码库导航能力无可匹敌。Backdoor 解除了它和 Anthropic API 的硬绑定,让你用任何模型、任何价格跑同一个 ui。</p>\n <div class=\"mini-row\">\n <span class=\"mini-tag\">Zero Lock-in</span>\n <span class=\"mini-tag\">99.95% Cheaper</span>\n <span class=\"mini-tag\"><600 LOC</span>\n </div>\n </div>\n </div>\n\n <section class=\"architecture-column\">\n <div class=\"panel-top\">\n <div class=\"eyebrow\">COST COMPARISON</div>\n <h3>500M Tokens · Same Workload</h3>\n <p>Backdoor 实测数据:同一 task 负载跑过 500M tokens,两种后端的费用差距。</p>\n </div>\n <div class=\"panel-body\">\n <div class=\"cost-compare\">\n <div class=\"cost-row\">\n <div class=\"l\">Claude Opus 4.7</div>\n <div class=\"v purple\">$9,834</div>\n <div class=\"note\">~$19.67 / 1M tokens</div>\n </div>\n <div class=\"cost-row\">\n <div class=\"l\">DeepSeek V3 Flash</div>\n <div class=\"v green\">$5.34</div>\n <div class=\"note\">~$0.01 / 1M tokens — <strong>99.95% cheaper</strong></div>\n </div>\n </div>\n <div class=\"quote\">$9,834 vs $5.34 — 近 2,000x 成本差距。个人开发者从\"肉疼\"变\"忽略不计\",团队从小没预算变随便跑。</div>\n <div class=\"cost-row\" style=\"border-color:var(--purple)\">\n <div class=\"l\">NVIDIA NIM / Groq 免费层</div>\n <div class=\"v green\">$0</div>\n <div class=\"note\">月数千次请求免费 — 零成本上手。</div>\n </div>\n </div>\n </section>\n\n <aside class=\"summary-rail\">\n <div class=\"summary-head\">\n <h3>为什么选择 Backdoor</h3>\n <p>Claude Code 的 harness 是免费的。背后跑什么模型,由你决定。</p>\n </div>\n <div class=\"summary-body\">\n <article class=\"summary-card purple\">\n <div class=\"t\">完全免费层</div>\n <p>NVIDIA NIM 和 Groq 都有免费层,月数千次请求。开箱即用,零成本启动。</p>\n </article>\n <article class=\"summary-card green\">\n <div class=\"t\">成本降低 95%+</div>\n <p>DeepSeek 比 Claude API 便宜约 95%。从\"一杯咖啡\"变成\"忽略不计\"。</p>\n </article>\n <article class=\"summary-card blue\">\n <div class=\"t\">完全本地私密</div>\n <p>指向本地 Ollama 实例,数据永远不会离开你的机器。无 API、无日志、无传输。</p>\n </article>\n <article class=\"summary-card orange\">\n <div class=\"t\">200+ 模型,一把钥匙</div>\n <p>通过 OpenRouter 接入 Gemini、Grok、Qwen 等所有主流模型,单一 API key。</p>\n </article>\n <div class=\"github\">\n <div class=\"small\">GitHub / Backdoor</div>\n <div class=\"num\">288</div>\n <div style=\"font-size:12.4px;line-height:1.55\">stars · 30 forks · MIT · Python · 3 commands to set up</div>\n </div>\n </div>\n </aside>\n </header>\n\n <section class=\"section\">\n <div class=\"section-head\">\n <div class=\"section-no\">01</div>\n <div class=\"section-meta\">\n <div class=\"label\">THE PROBLEM & THE FIX</div>\n <h2>锁定的代价与解耦的方案</h2>\n <p>Claude Code 硬绑定到 Anthropic API。你付 Anthropic 的价格、用 Anthropic 的模型、受 Anthropic 的规则约束。Backdoor 在中间做了一层透明的协议转换。</p>\n </div>\n </div>\n <div class=\"grid-3\">\n <article class=\"card\">\n <div class=\"tagrow\"><span class=\"tag purple\">Before</span><span class=\"tag dark\">Lock-in</span></div>\n <h3>锁定状态</h3>\n <p>Claude Code → Anthropic API → $$$。最高质量的 coding agent 只有一种后端选择。</p>\n <ul>\n <li>单一 API 定价无竞争</li>\n <li>模型更新节奏随 Anthropic</li>\n <li>高成本限制使用规模</li>\n </ul>\n </article>\n <article class=\"card\" style=\"border-color:var(--green)\">\n <div class=\"tagrow\"><span class=\"tag green\">After</span><span class=\"tag dark\">Freedom</span></div>\n <h3>解耦方案</h3>\n <p>Claude Code → Backdoor → 任意 OpenAI 兼容提供商。零改动、零配置切换。</p>\n <ul>\n <li>一行 .env 切换提供商</li>\n <li>支持 DeepSeek/Groq/NVIDIA/Ollama</li>\n <li>代码 < 600 行,完全透明</li>\n </ul>\n </article>\n <article class=\"card\">\n <div class=\"tagrow\"><span class=\"tag orange\">核心洞察</span><span class=\"tag dark\">Why</span></div>\n <h3>Agent Harness > 模型</h3>\n <p>Claude Code 真正强大的是它的工具调用系统和 agentic loop。模型是可更换的。</p>\n <ul>\n <li>最好的 harness + 最便宜的模型 = 最优解</li>\n <li>不否定 Anthropic,而是让更多人能用上</li>\n <li>MIT 开源,任何人都能参与改进</li>\n </ul>\n </article>\n </div>\n </section>\n\n <section class=\"section\">\n <div class=\"section-head\">\n <div class=\"section-no b\">02</div>\n <div class=\"section-meta\">\n <div class=\"label b\">PROVIDER MATRIX</div>\n <h2>支持的提供商一览</h2>\n <p>修改 .env 中三行配置即可切换后端。覆盖免费层、本地部署和商业 API 三种场景。</p>\n </div>\n </div>\n <div class=\"grid-2\">\n <table class=\"spec-table\">\n <thead>\n <tr><th>提供商</th><th>免费层</th><th>速度</th><th>最适合</th></tr>\n </thead>\n <tbody>\n <tr><td><strong>DeepSeek</strong></td><td class=\"no\">—</td><td>快</td><td>极致性价比</td></tr>\n <tr><td><strong>Groq</strong></td><td class=\"yes\">✅</td><td>最快</td><td>即时响应场景</td></tr>\n <tr><td><strong>NVIDIA NIM</strong></td><td class=\"yes\">✅</td><td>快</td><td>免费 Llama 3.3 70B</td></tr>\n <tr><td><strong>OpenRouter</strong></td><td class=\"no\">—</td><td>因模型而异</td><td>一把钥匙通所有</td></tr>\n <tr><td><strong>Ollama</strong></td><td class=\"yes\">✅ (本地)</td><td>看硬件</td><td>完全私有部署</td></tr>\n <tr><td><strong>LM Studio</strong></td><td class=\"yes\">✅ (本地)</td><td>看硬件</td><td>便捷本地模型管理</td></tr>\n </tbody>\n </table>\n <div style=\"display:grid;gap:8px;align-content:start\">\n <div class=\"quote-block\">一行切换:改 <code>PROVIDER_BASE_URL</code>、<code>PROVIDER_API_KEY</code>、<code>PROVIDER_MODEL</code> 三个环境变量。除 Ollama 外所有提供商共用同一套配置模板。</div>\n <div class=\"card\">\n <div class=\"tagrow\"><span class=\"tag dark\">.env</span><span class=\"tag purple\">Configuration</span></div>\n <h3>示例:切换到 DeepSeek</h3>\n <pre style=\"font-size:12px;line-height:1.5;background:#f5f2eb;padding:10px;border:1px solid var(--line);overflow-x:auto\">PROVIDER_BASE_URL=https://api.deepseek.com/v1\nPROVIDER_API_KEY=sk-...\nPROVIDER_MODEL=deepseek-chat</pre>\n </div>\n </div>\n </div>\n </section>\n\n <section class=\"section\">\n <div class=\"section-head\">\n <div class=\"section-no g\">03</div>\n <div class=\"section-meta\">\n <div class=\"label g\">QUICK SETUP</div>\n <h2>60 秒上手引导</h2>\n <p>三条命令、一个交互式向导,从头到位零手动配置。</p>\n </div>\n </div>\n <div class=\"grid-2\">\n <div class=\"card\" style=\"background:var(--soft-blue)\">\n <div class=\"tagrow\"><span class=\"tag blue\">One-liner</span><span class=\"tag dark\">Step 1–3</span></div>\n <h3>三行命令开始</h3>\n <pre style=\"font-size:12px;line-height:1.5;background:#fff;padding:10px;border:1px solid var(--line);overflow-x:auto\">git clone https://github.com/ajsai47/backdoor\ncd backdoor\n./backdoor # 一步步向导</pre>\n <p><strong>向导会做什么:</strong>动画开场 → 选择提供商 → 输入 API key → 写入配置 → 启动 Claude Code。想手动配置?复制 <code>.env.example</code> → 填写 → 运行 <code>./run.sh</code>。</p>\n </div>\n <div class=\"card\" style=\"background:var(--soft-orange)\">\n <div class=\"tagrow\"><span class=\"tag orange\">Telegram</span><span class=\"tag dark\">Mobile</span></div>\n <h3>Bonus:手机控制 Claude Code</h3>\n <p>设置 <code>TELEGRAM_BOT_TOKEN</code> 和 <code>TELEGRAM_ALLOWED_USER_ID</code> 环境变量,即可从 Telegram 发送 prompt 并在聊天中接收 Claude Code 输出。</p>\n <p style=\"color:#8c5200;font-weight:850;font-size:13px\">一个从手机上触发编码任务、在移动端获取编码结果的完整闭环。</p>\n </div>\n </div>\n </section>\n\n <section class=\"section\">\n <div class=\"section-head\">\n <div class=\"section-no o\">04</div>\n <div class=\"section-meta\">\n <div class=\"label o\">ARCHITECTURE</div>\n <h2>工作原理:代理层的协议桥接</h2>\n <p>Claude Code 认为自己在和 Anthropic API 通信。实际上 Backdoor 在本地做了实时协议翻译。</p>\n </div>\n </div>\n <div class=\"grid-2\">\n <div class=\"flow-v\">\n <div class=\"flow-item purple\"><div class=\"t\">Step 1</div><div class=\"c\">Claude Code 发送请求到 localhost:8082</div></div>\n <div class=\"flow-item green\"><div class=\"t\">Step 2</div><div class=\"c\">Backdoor 接收请求,从 Messages API 格式翻译为 OpenAI chat completions</div></div>\n <div class=\"flow-item blue\"><div class=\"t\">Step 3</div><div class=\"c\">转发到选择的提供商(DeepSeek/Groq/Ollama/...)</div></div>\n <div class=\"flow-item orange\"><div class=\"t\">Step 4</div><div class=\"c\">流式回传:结果实时翻译回 Anthropic SSE 格式。工具调用、delta、token 计数全部透明。</div></div>\n </div>\n <div>\n <div class=\"card\">\n <div class=\"tagrow\"><span class=\"tag dark\">Housekeeping</span><span class=\"tag purple\">Short-circuit</span></div>\n <h3>内部请求本地短路</h3>\n <p>Claude Code 的部分内部请求(quota 探测、标题生成等)被 Backdoor 识别并在本地拦截,不消耗你的提供商配额。免费层用户特别受益于此。</p>\n </div>\n <div class=\"card\" style=\"margin-top:12px\">\n <div class=\"tagrow\"><span class=\"tag blue\">Troubleshooting</span><span class=\"tag orange\">Common</span></div>\n <h3>常见问题速查</h3>\n <ul>\n <li><strong>Proxy failed to start</strong> — 端口 8082 被占用,改 <code>PORT=8083</code></li>\n <li><strong>Model not found / 404</strong> — PROVIDER_MODEL 名称不正确(例:DeepSeek 用 <code>deepseek-chat</code>)</li>\n <li><strong>响应慢</strong> — 切换到 Groq,最快推理 + 免费层</li>\n <li><strong>查看日志</strong> — 检查 <code>proxy.log</code>;为空则直接运行 <code>uv run uvicorn server:app</code></li>\n </ul>\n </div>\n </div>\n </div>\n </section>\n\n <section class=\"section\">\n <div class=\"section-head\">\n <div class=\"section-no\">05</div>\n <div class=\"section-meta\">\n <div class=\"label\">OPEN SOURCE & COMMUNITY</div>\n <h2>MIT 开源,零附随条件</h2>\n <p>代码简洁、可读、可 fork。如果明天一个新 AI 提供商上线,当天就能用上。</p>\n </div>\n </div>\n <div class=\"grid-3\">\n <div class=\"card\" style=\"background:var(--soft-purple)\">\n <div class=\"tagrow\"><span class=\"tag purple\">代码量</span><span class=\"tag dark\"><600 lines</span></div>\n <h3>可审计的简洁代码</h3>\n <p>读得懂的 600 行 Python。没有黑盒、没有隐藏端点、没有遥测。你可以逐行审计它做了什么。</p>\n </div>\n <div class=\"card\" style=\"background:var(--soft-green)\">\n <div class=\"tagrow\"><span class=\"tag green\">许可</span><span class=\"tag dark\">MIT</span></div>\n <h3>真正的开放</h3>\n <p>MIT 许可。Fork it、改它、用它构建你的产品。没有限制,没有 Strings attached。</p>\n </div>\n <div class=\"card\" style=\"background:var(--soft-orange)\">\n <div class=\"tagrow\"><span class=\"tag orange\">未来就绪</span><span class=\"tag dark\">New Provider</span></div>\n <h3>当天接入新提供商</h3>\n <p>新 AI 提供商发布当天就能用。不用等 PR merge,直接改 <code>PROVIDER_BASE_URL</code> 就行。</p>\n </div>\n </div>\n <div class=\"quote-block\" style=\"margin-top:14px;background:var(--soft-purple);border-color:var(--purple)\">\n <strong>Claude Code is the best coding agent ever built. The model underneath is optional.</strong> — Backdoor 的核心理念。Harness 免费、模型按需选择。学生、个人开发者、预算受限地区的用户,都应该用上最好的编码工具。\n </div>\n </section>\n\n <div class=\"rule\"></div>\n <p class=\"source-note\">ajsai47/backdoor · MIT License · Python · 3 commands · Any provider · <a href=\"https://github.com/ajsai47/backdoor\">github.com/ajsai47/backdoor</a></p>\n </main>\n</body>\n</html>"}}}} |