1. 终端里第一次跑通 Claude Code CLI:从安装后启动到会话内基础命令
Claude Code 的 CLI 命令行模式,简单说就是让你在终端里直接跟一个能读写文件、执行命令、理解整个项目上下文的 AI 结对。它不是一个聊天窗口,而是一个能真正动手改代码的终端代理。适合谁?适合已经装好 Claude Code、但每次只会敲claude然后干瞪眼的新手,也适合想把 AI 塞进脚本和 CI 的老手。这一篇聚焦命令行模式的上手路径:首次启动、会话内常用基础命令、批量文件操作、快捷键提效,最后把 endpoint 改到 TaoToken 统一 Key/API 通道,让你在终端里稳定跑通一次完整编码任务。
我试过最典型的翻车场景是这样的:装完 Claude Code,兴冲冲cd进项目敲claude,结果第一句话就卡住——要么认证报错,要么模型名不认识,要么它想写文件时弹出一堆权限确认,你手忙脚乱点了 Deny,然后它就再也不动了。问题不在你笨,而在于 CLI 模式有一套自己的启动参数、会话命令和权限模型,没人系统讲一遍,你只能靠猜。
先把最基本的启动方式摆出来。Claude Code 的 CLI 入口就是claude这个命令,后面可以跟参数,也可以跟一个 prompt:
# 最基本的启动方式,进入交互会话 claude # 指定项目目录启动(推荐,让 AI 拿到正确的项目上下文) cd ~/my-project && claude # 非交互式:直接发一个 prompt,输出结果后退出 claude -p "解释这段代码的作用"这里有个新手最容易忽略的点:启动目录就是 AI 的工作根目录。你在~下敲claude,它看到的是你的整个家目录;你在项目根目录敲,它才理解src/、package.json这些结构。所以养成习惯,先cd到项目再启动。
启动参数里最值得先记住的是这几个:
| 参数 | 缩写 | 说明 | 示例 |
|---|---|---|---|
--print | -p | 非交互模式,输出后退出 | claude -p "写一个快排" |
--continue | -c | 继续上次对话 | claude -c |
--resume | -r | 恢复指定会话 | claude -r <session-id> |
--model | 指定模型 | claude --model sonnet | |
--effort | 思考深度级别 | claude --effort high | |
--version | -v | 查看版本号 | claude -v |
思考深度(Effort)是 Claude Code 一个很实用的设计,它控制模型在回答前"想多久"。简单查询用low最快,日常编码medium是推荐默认,架构设计和复杂重构上high,疑难杂症才需要xhigh或max。别一上来就max,又慢又费,简单格式化任务用low就够了。
进入交互模式后,真正提效的是那些以/开头的斜杠命令。/model查看和切换当前模型,/clear清空上下文,/compact在上下文快满时压缩历史,/help看全部命令,/init生成CLAUDE.md项目配置文件,/memory管理跨会话记忆,/permissions查看权限设置,/review发起代码审查。这几个命令里,/compact和/clear是保命用的——对话一长,上下文塞满,模型开始胡言乱语,这时候/compact压缩一下,或者/clear直接重开,比硬撑着强。
文件操作是 CLI 模式的核心价值。你不需要记任何文件 API,直接用自然语言描述:
> 读取 src/main.ts 的内容,找出潜在的 bug > 在 package.json 中添加 lodash 依赖 > 删除 src/temp 目录下所有 .tmp 文件 > 把 UserService.java 中的 findUser 方法重命名为 findById > 给所有 public 方法添加单元测试Git 操作同样深度支持。让它看未提交改动生成 commit message、创建 feature 分支、squash 最近三个 commit、review 分支差异,都能直接说。权限管理这块要重点理解:Claude Code 在执行写文件、跑命令前会请求确认,弹出[Allow] [Deny] [Allow All]。选 Allow 是本次允许,Allow All 是永久允许这类操作(会写进settings.local.json),Deny 是拒绝。新手常见错误是乱点 Allow All,结果它把你不想动的文件也改了。稳妥做法是先 Allow 几次观察行为,确认靠谱了再考虑预配置权限。
2. 把 endpoint 改到 TaoToken 统一 Key/API 通道的前置准备
在讲配置之前,得先说清楚为什么要改 endpoint。Claude Code 默认走的是官方通道,但很多人在国内环境下会遇到网络不稳定、认证反复失败、模型名对不上等问题。TaoToken 提供的是一个统一的 Key/API 通道,把模型调用收敛到一个 Base URL 和一把 Key 上,配置一次,Claude Code、Cline、Codex 这些工具都能复用同一套凭证。官网在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 入口是 https://taotoken.net/api 。
前置准备其实就三件事:拿到 Key、确认 Base URL、想清楚用哪个 Model ID。这三件套是后面所有配置的基础,缺一个都跑不起来。
第一件,拿 Key。登录 TaoToken 控制台,在 API Keys 页面创建一个新的 Key。创建时给它起个能认出来的名字,比如claude-code-cli,方便以后区分是哪个工具在用。Key 只在创建时完整显示一次,复制下来存好,别等关了页面再找。控制台地址是 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API Keys 页面是 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。
第二件,确认 Base URL。TaoToken 的 API 根地址是https://taotoken.net/api。注意这里不要加 UTM 参数,配置里写的是纯 API 地址。很多工具要求 Base URL 不带尾部斜杠,写https://taotoken.net/api就行。
第三件,选 Model ID。这是新手最容易踩坑的地方——Claude Code 默认认的是opus、sonnet、haiku这类别名,但走统一通道时,你需要填通道实际支持的模型 ID。具体有哪些模型、各自的 ID 叫什么,去接入文档里查,别凭记忆瞎填。文档地址是 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。
注意:Key 属于敏感凭证,不要提交到 Git 仓库,不要贴在公开的 issue 或聊天记录里。建议放在环境变量或本地的 settings 文件里,并且把 settings 文件加进
.gitignore。
如果你同时用 Claude Code 和 Cline,或者还在折腾 Codex,那"三件套"的概念要刻进脑子里:Base URL + Key + Model ID。这三个值在任何一个工具里配置,逻辑都是一样的,只是填的位置不同。Claude Code 走的是 settings 文件和环境变量,Cline 走的是插件设置面板,Codex 走的是auth.json。把这三个值记在一个安全的地方,换工具时直接复用,能省掉大量重复排查。
还有一个前置认知:改 endpoint 不是"破解"或"绕过",而是把工具指向你自己有权使用的 API 通道。TaoToken 是正规的 API 服务,你用的是自己账号下的 Key 和额度。理解这一点,后面配置时心态就稳了,不会因为看到"非官方地址"就心虚。
准备阶段最后一步,验证你的 Key 是否有效。在正式改 Claude Code 配置前,先用一条最简单的 curl 确认通道通不通:
curl https://taotoken.net/api/v1/models \ -H "Authorization: Bearer $TAOTOKEN_API_KEY"如果返回模型列表,说明 Key 和 Base URL 都没问题,可以进入下一步配置。如果返回 401,说明 Key 不对或没带上;如果连接超时,检查网络和 Base URL 拼写。这一步花两分钟,能帮你把后面 80% 的报错提前排掉。
3. 可复制的 settings 配置片段:Claude Code CLI 接入统一通道
这一节是全文最核心的部分,直接给可复制的配置。Claude Code 的配置分两层:全局配置在~/.claude/settings.json,项目级配置在项目根目录的.claude/settings.json,本地私有覆盖在.claude/settings.local.json。权限相关的 Allow All 会写进settings.local.json,而 endpoint 和认证相关的配置,我们主要动全局的settings.json和环境变量。
先看环境变量方式,这是最干净、最不容易污染项目配置的做法。Claude Code 认ANTHROPIC_BASE_URL和ANTHROPIC_AUTH_TOKEN这两个环境变量:
# 写入 shell 配置(~/.bashrc 或 ~/.zshrc) export ANTHROPIC_BASE_URL="https://taotoken.net/api" export ANTHROPIC_AUTH_TOKEN="你的_TaoToken_Key" # 让配置立即生效 source ~/.zshrc # 验证环境变量已生效 echo $ANTHROPIC_BASE_URL echo $ANTHROPIC_AUTH_TOKEN把 Key 直接写在 shell 配置里有泄露风险,更稳妥的做法是单独放一个文件,然后 source 进来:
# ~/.taotoken_env(记得 chmod 600,并加入 .gitignore) export ANTHROPIC_BASE_URL="https://taotoken.net/api" export ANTHROPIC_AUTH_TOKEN="sk-你的实际Key" # 在 ~/.zshrc 里引用 [ -f ~/.taotoken_env ] && source ~/.taotoken_env然后是 settings 文件方式。如果你希望配置跟着 Claude Code 走而不是跟着 shell 走,就写~/.claude/settings.json:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_AUTH_TOKEN": "sk-你的实际Key" }, "model": "你的ModelID", "permissions": { "allow": [ "Bash(git *)", "Bash(npm *)", "Read", "Edit", "Write" ] } }这里的model字段填你在接入文档里查到的 Model ID。permissions.allow是预授权列表,把常用的只读和 Git 操作放进去,能减少反复确认的打断。但注意,Write和Edit放进去意味着 AI 可以不经确认直接改文件,新手建议先别加这两个,等熟悉它的行为模式后再放开。
如果你用的是 CC Switch 这类多模型切换工具,配置逻辑是一样的,只是填的位置在它的图形界面里。核心还是那三件套:Base URL 填https://taotoken.net/api,Key 填你的 TaoToken Key,Model ID 填通道支持的模型。CC Switch 的好处是可以在多个通道之间快速切换,适合同时用多个 API 服务的场景。
项目级配置.claude/settings.json适合放跟项目强相关的东西,比如这个项目专用的权限白名单、项目级的 model 偏好。但不要把 Key 写进项目级配置,因为项目配置通常会提交到 Git。Key 只放全局配置或环境变量。
配置写完后,用claude doctor检查安装和配置健康状态:
claude doctor这个命令会检查 Claude Code 的安装完整性、认证状态、配置是否可读。如果它报认证失败,回去检查ANTHROPIC_AUTH_TOKEN是否拼对、有没有多余空格。如果报 Base URL 无法访问,检查ANTHROPIC_BASE_URL是不是写成了带 UTM 的地址——配置里必须是纯 API 地址https://taotoken.net/api。
提示:改完配置后,已经打开的 Claude Code 会话不会自动读取新配置,需要退出重开。用
Esc按两次退出,或者Ctrl+C中断,然后重新claude启动。
配置这块还有一个容易忽略的细节:不同版本的 Claude Code 对配置字段的支持可能不同。如果你写了model字段但启动时报"unknown model",先claude -v看版本,再去文档确认该版本支持的字段名。别硬猜,文档里都有。
4. 逐条验证:从一次问答到完整编码任务的跑通流程
配置写完不算完,得逐条验证,确认每一层都通了。这一节给一套从简到繁的验证流程,你照着敲一遍,就能确认整条链路是活的。
第一步,验证非交互模式能出结果。这是最小验证单元,不涉及文件操作,只测通道和认证:
claude -p "用一句话解释什么是快速排序" --effort low如果这条命令能正常输出一句话,说明 Base URL、Key、Model ID 三件套都对了。如果报 401,回去查 Key;如果报 model not found,回去查 Model ID;如果连接超时,查 Base URL 和网络。这一步过了,后面才有意义。
第二步,验证交互模式能启动并识别项目上下文:
cd ~/my-project claude进入交互界面后,先敲/status看当前会话状态,确认模型和 token 使用情况。然后问一个跟项目相关的问题:
> 这个项目用的是什么语言和框架?入口文件在哪?如果它能准确说出你的项目结构,说明它正确读取了当前目录的上下文。这一步验证的是"工作目录即上下文根"这个机制。
第三步,验证文件读取能力。让它读一个具体文件并分析:
> 读取 src/main.ts,告诉我这个文件导出了哪些函数它会请求读取权限,选 Allow。如果它能列出正确的函数名,说明文件读取链路通了。
第四步,验证文件写入能力。这一步要谨慎,先在一个临时文件上试:
> 在项目根目录创建一个 test-claude.md,写入一行 "hello from claude code"它会请求写入权限,选 Allow。然后你在另一个终端cat test-claude.md确认内容写进去了。确认后删掉这个测试文件。这一步验证的是写权限和文件系统操作。
第五步,跑一次完整的编码任务。这是本篇的目标——在终端里稳定跑通一次完整编码任务。找一个真实的小需求,比如:
> 在 src/utils 目录下创建一个 date.ts 工具文件,包含 formatDate() 和 dateDiff() 两个函数, 用 TypeScript 写,加上类型定义和 JSDoc 注释观察它的行为:它会先创建文件,写入代码,可能还会提示你运行类型检查。整个过程你能看到它调用了哪些工具、改了哪些文件。完成后,用cat src/utils/date.ts检查产物,再跑一下项目的类型检查命令确认没引入错误。
第六步,验证非交互模式的管道集成。这是 CLI 模式区别于 GUI 的核心能力:
# 把 git diff 喂给它做代码审查 git diff | claude -p "review 这些改动,只列出严重问题" --effort medium # 生成 commit message git diff --staged | claude -p "为这些改动生成一个简洁的 commit message"如果这两条能正常输出,说明你已经能把 Claude Code 当成一个标准的 Unix 命令行工具来用了,可以嵌进脚本和 CI。
第七步,验证会话恢复。退出后重新进来,用claude -c继续上次对话,或者claude -r列出历史会话选择恢复。这一步验证的是会话持久化,对长任务很重要——你不可能一次会话就把大重构做完。
把这七步走完,你对 Claude Code CLI 的掌握就从"能启动"进阶到"能干活"了。每一步都是一个独立的验证点,哪一步失败就针对性排查,不用从头再来。
5. 本篇常见报错排查:401、local proxy failed、reading choices、OAuth
配置和验证过程中,报错是必然的。这一节把最常见的几类报错和排查路径列清楚,你对着症状找原因。
401 Unauthorized。这是最高频的报错,几乎都跟 Key 有关。排查顺序:先echo $ANTHROPIC_AUTH_TOKEN确认环境变量真的生效了(很多人改了.zshrc但没source,或者改的是.bashrc但用的是 zsh);再确认 Key 没有多余空格或换行,复制时容易带上;然后确认 Key 没有过期或被删除,去控制台 API Keys 页面核对;最后确认请求头格式对,Claude Code 用的是Authorization: Bearer <key>,如果你手动 curl 测试,别漏了Bearer前缀。如果环境变量和 settings 文件都配了 Key,注意优先级——通常环境变量会覆盖文件配置,两边不一致时以环境变量为准。
local proxy failed / connection refused。这类报错说明 Claude Code 尝试连接 Base URL 但连不上。先确认ANTHROPIC_BASE_URL写的是https://taotoken.net/api,没有多余路径、没有尾部斜杠、没有 UTM 参数。然后用 curl 直接测:
curl -v https://taotoken.net/api/v1/models \ -H "Authorization: Bearer $ANTHROPIC_AUTH_TOKEN"如果 curl 也连不上,是网络或地址问题;如果 curl 能通但 Claude Code 报错,是 Claude Code 的配置读取问题,检查 settings 文件 JSON 格式是否合法(少个逗号、多个括号都会导致解析失败)。JSON 格式错误可以用python -m json.tool ~/.claude/settings.json验证。
reading choices / unexpected response format。这类报错通常出现在模型返回的内容格式跟 Claude Code 预期不一致时。常见原因:Model ID 填错了,通道返回的是另一个模型的响应格式;或者--output-format参数跟当前用法冲突。排查:先确认 Model ID 是从文档里查的、通道确实支持的;再检查是不是在非交互模式里用了交互模式才支持的参数。如果用了--output-format json但模型返回的不是合法 JSON,也会报这个。解决方法是去掉--output-format用默认文本输出,或者换一个明确支持结构化输出的模型。
OAuth / authentication failed。Claude Code 默认可能走 OAuth 流程,当你改成 API Key 认证时,如果旧的 OAuth 凭证还在,会冲突。排查:检查~/.claude/下有没有残留的认证缓存文件,必要时清理掉重新认证。另外确认你没有同时配置 OAuth 和 API Key 两套认证方式,二选一。如果用的是claude auth子命令管理认证,先claude auth看当前认证状态,再决定是登出重来还是补 Key。
权限确认死循环。AI 反复请求同一个权限,你点了 Allow 但下次还问。这通常是因为你点的是单次 Allow 而不是 Allow All,或者settings.local.json没写成功。检查.claude/settings.local.json里的permissions.allow数组,确认规则写对了。规则格式是Bash(git *)这种,通配符位置要对。如果文件写对了还反复问,可能是项目级配置和全局配置冲突,检查两处。
模型名不认识 / unknown model。claude --model opus在官方通道能用,但走统一通道时opus这个别名可能不被识别。解决方法是查接入文档,用通道实际支持的 Model ID 替换别名。这也是为什么前面强调"三件套"里的 Model ID 必须从文档查,不能凭记忆。
排查的通用心法:从最小验证单元开始。先用 curl 测通道,再用claude -p测非交互,最后才测交互和文件操作。哪一层断了就修哪一层,不要一上来就在复杂场景里 debug。另外,claude doctor是你的朋友,配置类问题先跑它。
6. 把 CLI 用顺手:批量操作、快捷键与长期编码的通道选择
基础命令和配置都通了之后,真正拉开效率差距的是批量操作和快捷键。这一节讲怎么把 Claude Code CLI 用成你终端里的常规武器。
批量文件操作的核心思路是"用自然语言描述批量意图,让它自己遍历"。比如给所有 Java 类生成 Javadoc,你不需要写循环,直接说:
> 为 src/main/java 下所有 .java 文件中的 public 方法生成 Javadoc 注释它会自己找文件、逐个处理。但批量操作要注意两点:一是先在小范围试,确认产物符合预期再放开;二是批量写操作前先git commit或git stash,万一改坏了能回滚。批量删除类操作尤其危险,> 删除 src/temp 下所有 .tmp 文件这种,执行前一定确认路径没写错。
管道集成是 CLI 模式的杀手锏。把 Claude Code 当成一个能理解代码的grep或awk,嵌进你的 shell 脚本:
#!/bin/bash # review-all.sh - 审查所有未合并的 PR for pr in $(gh pr list --state open --json number -q '.[].number'); do echo "=== PR #$pr ===" gh pr diff $pr | claude -p "审查这个 PR,只列出严重问题" --effort medium done这种脚本能直接进 CI,比如在 GitHub Actions 里对每个 PR 自动跑一遍 AI 审查,把结果写进review-report.md。注意 CI 环境里 Key 要通过 secrets 注入,不要硬编码。
快捷键这块,记住几个高频的就够:Enter发送,Shift+Enter换行(多行输入必备),Ctrl+C中断当前操作,Esc按两次退出,Ctrl+L清屏。Shift+Enter特别重要,写复杂 prompt 时不用它你只能写一行,很难受。
上下文管理是长期使用的关键。对话一长,/compact压缩历史,/clear完全重置,/status看 token 使用。重要信息用/memory add存进跨会话记忆,比如> /memory add "本项目使用 Java 17 + Spring Boot 3.2 + MySQL 8.0",下次会话它还记得。/init生成CLAUDE.md项目配置文件,把项目约定写进去,比每次口头交代高效。
如果你打算长期用 Claude Code 做编码和 Agent 任务,通道选择上可以考虑 Coding Plan。它适合高频、长时间的编码场景,比按量计费更可控。具体方案在 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。如果你只是想先验证模型效果、跑几个 prompt 看看输出质量,用模型对话页面就够了:https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。而配置和排障过程中需要反复查的 Key 和文档,分别在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 和 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。
最后给一个我踩过的坑:别在同一个项目里同时用多套配置。环境变量一套、全局 settings 一套、项目 settings 一套、CC Switch 里还存一套,出问题时你根本不知道哪套生效了。统一到一处——要么全用环境变量,要么全用全局 settings,项目级只放权限白名单。配置越简单,排查越快。把 CLI 用顺手之后,你会发现终端里的 AI 结对比任何 GUI 都直接,因为它就在你原本的工作流里,不用切窗口、不用复制粘贴,git diff | claude -p一条命令就把审查做了。