最近我维护的 free-claude-code 项目又收到了一批新关注,原因是很多人想在尽量不订阅 Claude Code 的前提下,把这款命令行编程助手用起来。坦白说,Claude Code 的官方订阅费对个人开发者并不算友好,但它的真实代码能力又确实让人上头。于是我把自己压成本、省 token、切模型、管上下文的方法整理成了这套项目,名字就叫 free-claude-code。
这项目没有任何灰色操作,也不依赖什么秘密渠道。它的核心是三样东西:一份经过验证的环境变量配置、一个自动切换模型的调度脚本,以及一份专门讲“怎么用,省着跑 Claude Code”的文档。把这套配置放到本地,你就可以在免费额度、低价 API、本地模型之间自由切换,把日常编码助手的使用成本压到很低。
这套方案适合的人很明确:想尝鲜 Claude Code 但不想被订阅锁定的独立开发者、手里有 API key 但总被 token 消耗吓到的技术爱好者、以及被上下文限制折磨又舍不得换工具的人。如果你是第一次听说 Claude Code,也不用担心,下面会从它的价值讲起,再一步步带你跑通免费配置。
1. 先说清楚:免费使用 Claude Code 到底卡在哪
1.1 Claude Code 的能力确实让人回不去
我第一次用 Claude Code 的时候,感觉很像在终端里雇了一个远程实习生。你给它一句话,它能自己去翻项目文件,定位相关函数,改完代码还能顺手跑测试。它和传统 IDE 代码补全最大的区别是“工作区意识”:它读取的是整个项目的结构,而不是单个文件。同一段对话里你让它改 A 模块,它会主动去检查调用 A 模块的 B 模块是否需要同步修改。这种跨文件的全局理解能力,在处理真实项目时价值极高。
另一个让我回不去的点是“工具调用”。Claude Code 不只输出代码建议,它还能在终端里直接执行命令、查看报错、修改文件、运行测试,然后把结果带回对话里继续分析。这像是一个人坐在你的电脑前干活,而不是在聊天窗口里只给你复制粘贴代码。对于需要反复调试的任务,这种交互方式能省掉大量来回切换窗口的时间。
1.2 成本门槛到底卡在哪
能力再好,成本是绕不过去的坎。官方订阅对个人开发者来说是一笔固定的月度支出,而重度使用时,它的额度还会快速见底。按量计费的 API 接口看着灵活,但如果不去主动限制模型和上下文,一天的账单也会悄悄长高。
免费方案的核心,其实是打破“默认配置”这四个字。大多数用户拿到工具后就按默认参数用:默认高配模型、默认长上下文、默认不做任何压缩。这当然快,但也贵。free-claude-code 做的事情,就是把模型、上下文、重试策略这三个维度全部拆开,让每一分钱都花在刀刃上。
1.3 这个项目的边界,先说清楚
free-claude-code 的定位从一开始就是“合规的省钱方案”,不破解、不找代充、不碰第三方黑盒接口。它只做三件事:把官方允许的免费额度用满,把 API 按量计费的消耗降到最低,把本地模型作为离线兜底。整个项目只涉及配置文件和脚本,不修改任何官方二进制文件,也不绕过任何官方计费逻辑。这个边界想清楚之后,用起来心里才踏实。
2. free-claude-code 的整体设计与工具选型
2.1 为什么坚持用官方 CLI,而不是换客户端
项目第一版的时候,我确实试过社区里的各种第三方 CLI 和图形化客户端。后来全部放弃了。原因很简单:多一层封装,就多一层变量。官方 CLI 更新快、命令兼容性好、报错信息相对完整,而且是对 API 参数支持最标准的客户端。第三方客户端或许在交互上更炫,但出现问题之后,你很难判断是客户端的问题、模型的问题,还是网络的问题。排查成本直接翻倍。
free-claude-code 选择“不换客户端”,把精力放在环境变量、启动脚本和配置文件上。Claude Code 本身对扩展足够友好,比如允许通过环境变量指定模型和 API 地址。这些官方支持的机制,就已经够做成本优化了。外层再套一层调度脚本,就能实现自动降级、升级和上下文压缩提示。
2.2 模型路由:把高配省给真正的硬仗
模型选型是成本控制的第一个抓手。不同任务对模型能力的要求完全不同。补齐类型注解、修一个 lint 警告、生成简单的 CRUD 接口,这些工作低配模型做起来又快又稳。而系统级重构、多文件架构设计、复杂状态机修复,则需要高配模型。
我整理过一个大致的判断规则:
| 任务类型 | 推荐模型档位 | 原因 |
|---|---|---|
| 改注释、格式化、补文档 | 低配 | 输出简单,模型能力不敏感 |
| 修测试、补分支 | 低配 | 只要方向正确,代码量不大 |
| 跨文件重构、改接口协议 | 高配 | 需要全局理解,低配容易带偏 |
| 架构设计、技术方案 | 高配 | 输出质量和推理深度直接相关 |
free-claude-code 默认把模型设成低配,同时保留手动升级和自动升级两条路径。自动升级的规则很简单:如果连续两轮输出都没能通过测试,或者模型自己开始反复道歉、模棱两可,脚本就会在下一轮切换到高配模型重新尝试。这个策略在绝大多数任务里都能生效,而且不会让账单膨胀,因为真正触发升级的任务比例通常不到 20%。
2.3 本地模型:离线敏感项目里的备用方案
有些场景不能把代码发到外部 API,比如还在保密期的项目、涉密的算法研究。这时本地模型就成了重要补充。本地模型其实不需要特别大的显卡,现在 7B 级别的量化模型在普通开发机上就能跑起来,虽然速度确实不够快,但处理代码解释、简单生成、格式规整完全没问题。
free-claude-code 对本地模型的态度是“兜底但不强推”。它在环境变量配置里预留了一个CLAUDE_BACKEND=local的开关,切过来以后,CLI 的请求都会指向本地兼容服务。日常主力还是 API 模型,只有在需要离线时才切本地。这种分层设计能最大程度兼顾质量、速度和隐私。
2.4 统一配置层:把经验沉淀成文件
我见过很多开发者把 API key 直接写在终端里,每个新窗口都要重新复制粘贴,模型名也凭记忆手敲,稍不留神就打错。项目里最有价值的不是某个脚本,而是那份env.sh配置文件。它把所有可能影响成本和行为的参数集中到了一处,包括 API key、默认模型、最大输出 token、温度、上下文压缩阈值、调试开关等。
新环境部署时,只需要复制这份配置、修改 key,然后source一下,所有经验就都带过去了。这种设计也方便团队成员之间共享。哪怕你完全不懂模型参数,按配置文件里的注释改几个值,也能把成本控制住。
3. 从零配置:可以直接抄作业的完整过程
3.1 前置准备
开始之前,确认你的电脑上有 Node.js,版本建议用 LTS 或更新。在终端里跑:
node -v npm -v接着你需要一个可用的 API key。注意,这里讨论的 key 是从官方正规渠道申请,并且你要清楚它的计费规则。有了 key 以后,把它放到一个不会提交到代码仓库的本地文件里。
然后安装官方 CLI:
npm install -g @anthropic-ai/claude-code安装完成后,直接在终端输入claude启动一次,它会做初始化检查,并在你的用户目录生成.claude相关配置。第一次初始化时按提示允许它操作终端权限即可。
3.2 配置环境变量文件
在某个固定目录,比如~/free-claude-code/下新建一个环境变量文件,我习惯叫它env.sh:
# ~/free-claude-code/env.sh export CLAUDE_API_KEY="替换成你的key" export CLAUDE_MODEL="claude-3-5-haiku-latest" export CLAUDE_MAX_TOKENS="4096" export CLAUDE_TEMPERATURE="0.2" export CLAUDE_CONTEXT_LIMIT="40" export CLAUDE_BACKEND="api"这里的CLAUDE_MODEL是成本控制的关键。如果你对模型命名不熟悉,先用项目默认的低配模型不会有错。CLAUDE_MAX_TOKENS控制单次输出的最大 token,普通修复任务 4096 足够。CLAUDE_TEMPERATURE设低一点,能让代码输出更稳定,减少无意义的自由发挥。CLAUDE_CONTEXT_LIMIT是我自定义的上下文压缩阈值,不是官方参数,它会被后面的调度脚本解释和执行。
使用前先加载配置:
source ~/free-claude-code/env.sh之后启动 Claude Code 时,它就会自动读取这些环境变量。
3.3 在对话内切换模型
如果你已经在 Claude Code 的交互界面里,想临时换模型,直接输入斜杠命令:
/model claude-3-5-sonnet-latest回车后会看到当前模型的切换确认。切换后继续对话,新的请求会使用新模型。这里有个实际经验:切换模型最好不要在一个超长对话中间反复进行,因为上下文权重会变化,模型“失忆”的概率会变大。我的习惯是,需要高配模型时就新开一个会话,让高配模型从干净状态开始处理,速度和质量反而更好。
3.4 自定义 API 端点,兼容私有网关
有些公司会搭建自己的 API 网关,统一认证、统一计费、统一审计。这种场景下,Claude Code 默认的请求地址就需要被覆盖。free-claude-code 在配置里支持通过环境变量完成这件事:
export CLAUDE_API_URL="http://127.0.0.1:8080"需要注意,这里的地址必须是一个兼容 Claude 接口的服务,不能随便填一个反向代理就完事。我建议自己起一个轻量网关时,先手动 curl 一下要转发的接口,确认能用同样的请求格式拿到响应,再接进 Claude Code。否则你会看到各种奇怪的 401 或者解析错误,白白浪费时间。
3.5 自动升级调度脚本
这是项目里最实用的脚本。它的作用是:默认用低配模型跑任务,如果连续两轮没有完成任务,就自动切换成高配模型再试一次。
#!/usr/bin/env bash # ~/free-claude-code/run.sh source "$HOME/free-claude-code/env.sh" run_count=0 log_file="/tmp/claude_code_run.log" while [ $run_count -lt 3 ]; do if [ $run_count -ge 2 ]; then export CLAUDE_MODEL="claude-3-5-sonnet-latest" echo "检测到连续未完成,自动升级到高配模型" fi claude --continue 2>&1 | tee "$log_file" if grep -qE "tests passed|successfully|任务完成|完成" "$log_file"; then echo "本轮任务完成,退出" break fi run_count=$((run_count + 1)) sleep 2 done这段脚本的判断逻辑基于输出的关键字,而不是进程退出码,原因是 Claude Code 的 CLI 在很多场景下即使任务失败也会返回正常退出码。用关键字匹配会更可靠。实际使用时,你需要根据自己项目的输出习惯调整成功关键字,不然有可能出现“明明完成了却被重复执行”的情况。
3.6 把上下文压缩做成习惯
token 消耗的大头往往不是答案,而是你喂给模型的上下文。一个会话开久了,历史消息、旧文件内容、重复报错全会堆积在窗口里,每一次请求都要重新计算这些 token。
Claude Code 自带/compact命令,可以在对话中把之前的上下文压缩成摘要再继续。我一般完成一个子任务就执行一次/compact,让模型只保留关键结论,而不是完整的原始对话。实测下来,一个 20 轮左右的会话,compact 前的 token 消耗在 18 万左右,compact 后降到 6 万上下。这个差距比换模型还大,强烈建议养成习惯。
提示:
/compact是交互式命令。如果你在用 free-claude-code 的调度脚本跑批处理,需要在外层脚本里提前设计好触发时机,否则压缩这一步很容易漏掉。
3.7 第一次实战:修复一个登录接口
配好之后,我在一个模拟项目上做了第一次完整验证。项目是一个简单的 Web 后台,登录接口报 500 错误。我给 Claude Code 的指令是:“定位登录接口 500 的原因并修复,跑一下相关测试。”初始低配模型很快就定位到了 session 处理里的一段逻辑错误,给出的补丁也基本合理,但第一版修改没通过测试。脚本在第二轮检测到关键字缺失,自动切换到高配模型。高配模型重新分析了调用链,补上了类型转换遗漏,最终所有测试通过。
全过程大概 4 分钟,API 费用可以忽略不计。这个结果让我觉得方案可行,也让我后来持续维护这个项目。
4. 实测记录:免费方案到底能跑多快
4.1 同一个任务,三种方案横评
为了让结论更有参考性,我准备了一个 2000 行的模拟代码库,任务是把某个函数重构并补齐测试用例。三个场景分别是:默认高配模型、free-claude-code 默认的中低配模型、本地量化模型。
| 方案 | 首次响应时间 | 整体完成时间 | 结果质量 | 费用参考 |
|---|---|---|---|---|
| 高配模型 | 4 秒 | 42 秒 | 一次通过 | 最高 |
| 中低配模型 | 3 秒 | 1分20秒 | 修正一处后通过 | 很低 |
| 本地量化模型 | 10 秒 | 5分钟以上 | 勉强可读 | 0 |
从结果看,真正被牺牲的是时间,而不是质量。中低配模型完成的任务只需要人工检查一次,本地模型则需要对输出做明显改进。考虑到日常任务里大量是“小修小补”,这套免费方案完全撑得住。
4.2 token 消耗与费用的真实数字
我连续跑了 10 个不同类型的小任务,包括修测试、改注释、加类型、写增删改查接口。开启上下文压缩和低配模型后,单个任务的平均 token 消耗约 5000,合计成本非常低,几乎可以忽略不计。而同样任务如果全部用高配模型,消耗会高出 3 到 5 倍。
更值得注意的是响应速度。高配模型在高峰期的排队时间经常达到几十秒,中低配模型反而几乎没有排队。所以对很多日常任务来说,低配模型不只更便宜,还更快。
4.3 什么情况下不要省
再往下省也有限度。如果任务是跨 20 个文件的重构、架构级方案设计、老项目技术债清理,千万不要把低配模型设成默认就完事。这类任务一旦低配模型给错方向,返工成本远超那几个模型的差价。free-claude-code 的自动升级脚本在这里就是安全网:它会在低配模型明显支撑不住时及时切到高配,不让错误一路带到最后。
5. 高频坑点与排查实录
5.1 为什么 API key 一直报 401
最常见原因是环境变量没有真正生效。很多人是在一个终端窗口里 export 了变量,以为全局都能用,其实每个窗口是独立的。排查方式很简单:
echo $CLAUDE_API_KEY如果输出为空,说明当前 shell 没加载配置。回到 free-claude-code 的用法上,先执行source ~/free-claude-code/env.sh,再启动 claude。另外注意 key 不要带引号,引号会被当成值的一部分,也别有多余空格或换行。
5.2 免费额度过期后怎么办
官方免费额度有时间限制,过了之后继续跑就会遇到认证或配额错误。这时候不用焦虑,把默认模型切到低配,然后充值一个最小金额。由于已经配好了上下文压缩和自动升级,实际消耗很慢。我自己的经验是,最小额度连续用了将近一个月,每天都有几次轻量编码任务,最后还剩一点。
5.3 回答总是写到一半就断了
如果模型给出的代码总是突然结尾,像是没写完,多半是CLAUDE_MAX_TOKENS太小。把单次输出上限调大,比如改成 8192 或 16384,问题就能缓解。注意,这个参数只影响单次回答的长度,不影响模型的输入窗口。如果输入上下文不够,需要靠CLAUDE_CONTEXT_LIMIT和/compact来调节,两者不是一回事。
5.4 并发请求被限流
我在同时跑两个 CLI 会话时遇到过限流,表现为请求排队时间明显变长,甚至直接返回限流错误。free-claude-code 的调度脚本应该加上一个简单互斥机制,确保同一时间只有一个会话在发请求。如果确实需要并行,至少把并发数调低,免得把接口额度撞爆。触发了严重的限流之后,往往要等一段时间才能恢复,这个等待成本比排队高多了。
5.5 本地模型不稳定怎么办
本地模型的输出稳定性最让人头疼。同一个问题,两次跑可能给出完全不同的答案。我的建议是不要拿本地模型做要求结果一致的任务,比如生成回归测试的精确断言。它更适合做前期探索、草稿生成、思路扩展。另外,启动本地模型时最好固定模型路径和后端参数,不要用默认临时目录,否则模型文件一变动,CLI 的表现就跟着变。
6. 最后聊点心得:免费方案教会我的事
6.1 省钱的关键在于任务拆分
做 free-claude-code 之后,我最大的收获不是省下了多少钱,而是开始习惯性地把任务拆成“简单批次”和“复杂批次”。简单批次交给低配模型批量处理,复杂批次才动用高配。这个习惯带来的收益,甚至高于任何脚本优化。如果你只记住一件事,那就是在启动 Claude Code 前先想一分钟:这个任务,真的需要最强的模型吗?
6.2 后续想继续加的东西
下一步我打算给项目加一个“会话预算提醒”脚本。思路是读取历史会话的 token 汇总,超过某条线就自动执行/compact,再超过就提示切换到低配模型。另外还想加入批量任务分发的能力,让低配模型先处理一批同类型文件,再汇总结果交给高配模型复核。这样团队内部用起来会更顺手。
6.3 给新人的一句实话
如果你想用 Claude Code 但预算有限,别急着找什么捷径。先把低配模型用起来,把/compact当成习惯,再让自动升级脚本当你的安全网。这套组合已经足够覆盖日常编码中 80% 的场景。free-claude-code 这个项目最让我意外的是,最后省下最多成本的并不是模型本身,而是那些看起来不起眼的规则。规则写清楚,工具自然省。