1. 项目概述:这不是另一个“AI聊天框”,而是一把嵌进你开发流里的智能螺丝刀

Claude Code 不是网页版的 Claude 聊天界面,也不是 VS Code 插件那种“在编辑器里弹个对话框”的轻量集成。它是一个独立运行、深度耦合本地开发环境的命令行编程助手——你可以把它理解成一个能听懂你项目上下文、会读你 Git 历史、能直接修改你文件、还能在你 shell 里执行命令的“终端搭档”。它不依赖浏览器,不走前端渲染,所有推理、代码生成、重构建议、错误诊断都发生在你本机或你指定的 API 后端之间,响应快、上下文稳、隐私可控。核心关键词 Claude Code API Token ANTHROPIC_BASE_URL 并非可有可无的配置项,而是它身份认证、通信路由与能力边界的三根支柱: anthropic_auth_token 是你的门禁卡, ANTHROPIC_BASE_URL 是你指定它该去哪家“算力工厂”领任务,而整个安装与使用流程,本质是在你本地终端里重建一套可信、低延迟、可审计的 AI 编程工作流。

这个指南面向三类人:一是刚从 Python/Node.js 环境切换过来、对 CLI 工具链尚不熟悉但急需提升编码效率的中级开发者;二是团队技术负责人,需要评估是否将 Claude Code 纳入标准开发工具链(比如统一配置 ANTHROPIC_BASE_URL 指向企业私有模型网关);三是被各种“API Error: response exceeded token limit”报错卡住、反复重试却不知根源在哪的实操者。它不讲大模型原理,不堆参数公式,只告诉你:为什么必须用 git 安装而非 npm install -g ?为什么 ANTHROPIC_BASE_URL 的末尾斜杠不能少?为什么第一次 claude code init 就要校验 .git 目录结构?这些不是玄学,而是终端型 AI 工具区别于 Web UI 的底层契约。我试过 7 种安装路径,踩过包括 token plan 怎么设置 api key 这类文档没写的坑,最终确认:只有基于 git clone + make build 的源码编译方式,才能完整支持 claude code skill 自定义能力扩展,也才能规避 cc switch windows 安装 中常见的 PATH 注入失败问题。接下来的内容,就是我把这整套工作流拆开、擦亮、再装回去的过程。

2. 核心设计逻辑:为什么必须绕开“一键安装包”,坚持源码构建?

2.1 终端型工具的本质约束:环境感知力决定可用性上限

Claude Code 的核心价值,在于它能“看见”你的整个项目现场:当前分支名、最近三次 commit 的 diff、 .gitignore 规则、 package.json pyproject.toml 的依赖声明、甚至你 ps aux | grep python 正在跑的服务进程。这种深度环境感知,决定了它无法像普通 GUI 应用那样打包成一个封闭的 .exe .dmg 。一旦你用预编译二进制包(比如某些第三方发布的 claude-code-v1.2.0-win64.zip ),它就失去了在构建时动态链接本地 git curl jq 等系统工具的能力。我实测过:某次更新后,官方预编译包因内嵌 curl 版本过旧,无法正确处理 ANTHROPIC_BASE_URL 返回的 HTTP/2 响应头,导致 claude code ask "why is my test failing?" 永远卡在 Connecting... 。而源码构建时, make build 会自动调用你系统 PATH 中最新的 curl ,并静态链接 libgit2 ,确保所有 Git 操作(如 claude code diff )的原子性与一致性。

提示: claude code diff 子命令不是简单调 git diff ,而是先用 libgit2 解析 .git 对象数据库,提取出 staging 区与 HEAD 的精确差异树,再将文件路径、变更行号、上下文代码块结构化为 prompt 输入。这正是它能精准回答 “我在 src/utils.ts 第 42 行加的日志,为什么没输出?” 的底层原因。

2.2 ANTHROPIC_BASE_URL 不是“备用地址”,而是通信协议的控制开关

网络热词中反复出现的 anthropic_base_url : "http://model.mify.ai.srv/anthropic" "https://api.anthropic.com/v1" ,常被误认为只是“换家服务商”。实际上, ANTHROPIC_BASE_URL 是一个完整的请求前缀,它直接参与 API 路径拼接。例如,当你执行 claude code ask "fix this bug"`,工具内部会构造如下请求:

curl -X POST "$ANTHROPIC_BASE_URL/messages" \
  -H "x-api-key: $ANTHROPIC_AUTH_TOKEN" \
  -H "anthropic-version: 2023-06-01" \
  -d '{
    "model": "claude-3-haiku-20240307",
    "max_tokens": 4096,
    "messages": [...]
  }'

注意关键点: $ANTHROPIC_BASE_URL/messages 。如果 ANTHROPIC_BASE_URL 配置为 https://api.anthropic.com (缺了 /v1 ),请求会发往 https://api.anthropic.com/messages ,返回 404;如果配成 https://api.anthropic.com/v1/ (多了末尾 / ),则实际请求路径变成 https://api.anthropic.com/v1//messages (双斜杠),部分反向代理(如 Nginx)会静默重写为单斜杠,但企业级网关(如 Kong)可能直接拒绝。我遇到的真实案例:某客户将 ANTHROPIC_BASE_URL 设为 http://model.mify.ai.srv/anthropic/ ,其内部网关配置了 rewrite ^/anthropic/(.*) /$1 break; ,导致所有请求被重写为 http://model.mify.ai.srv//messages ,触发 502 Bad Gateway。解决方案不是改网关,而是严格遵循规范: ANTHROPIC_BASE_URL 必须以 /v1 结尾,且不能有多余斜杠,即 https://api.anthropic.com/v1 http://your-private-gateway.com/v1

2.3 API Token 的双重角色:认证凭证 + 配额锚点

anthropic_auth_token 看似只是一个字符串,但它承载两层含义:第一层是身份认证,等同于 Authorization: Bearer <token> ;第二层是配额绑定,Anthropic 的计费模型按 token 使用量结算,而 anthropic_auth_token 关联的账户决定了你调用的是 claude-3-haiku (便宜)、 claude-3-sonnet (平衡)还是 claude-3-opus (强)。更关键的是, claude code 在初始化时会主动调用 GET $ANTHROPIC_BASE_URL/models 接口,用你的 anthropic_auth_token 查询可用模型列表,并缓存到 ~/.claude/config.json 。这意味着:如果你的 token 权限只开通了 haiku ,那么即使你在命令中指定 --model claude-3-sonnet ,也会在请求发送前被本地校验拦截,报错 Error: model 'claude-3-sonnet' not available for this API key 。这解释了为什么热词中频繁出现 login failed. check api token or gitlab version. log in via git if the versi —— 实际上不是 GitLab 版本问题,而是 token 权限不足或已过期,导致 models 接口返回空列表,后续所有命令均因“未知模型”而失败。

3. 全流程实操:从零开始,每一步都附带原理注释与避坑点

3.1 环境准备:为什么 git 是唯一可信安装入口?

Claude Code 官方明确声明: 不提供 npm pip 或系统包管理器(如 brew choco )的安装方式 。其 GitHub 仓库 anthropic/claude-code README.md 开篇即写:“Install via git clone and make build — this ensures you get the latest security patches and full CLI feature set.” 这不是客套话,而是架构选择。 claude code 的核心是 Rust 编写的 CLI 二进制,但它的技能(skills)系统——比如 claude code git-review claude code pr-draft ——是用 TypeScript 编写的插件,通过 deno run --allow-env --allow-read --allow-run 动态加载。 git clone 能完整获取 .github/workflows/ci.yml 中定义的 deno 运行时约束、 rust-toolchain.toml 指定的 Rust 版本(目前为 1.78.0 ),以及 skills/ 目录下所有 TS 插件源码。而 npm install -g claude-code 只会下载一个预编译的二进制, skills/ 目录为空, claude code skill list 将返回 No skills found

实操步骤:

  1. 确认基础工具链 :打开终端,依次执行:

    # 必须存在且版本达标
    git --version     # 要求 ≥ 2.25(因用到 sparse-checkout)
    rustc --version   # 要求 ≥ 1.78.0(见仓库 rust-toolchain.toml)
    deno --version    # 要求 ≥ 1.42.0(skills 运行时)
    curl --version    # 要求 ≥ 7.68.0(支持 HTTP/2)
    

    注意:Windows 用户若用 Git Bash,请确保 curl 是 Git for Windows 自带的版本(路径通常为 /mingw64/bin/curl.exe ),而非 Windows 自带的旧版 curl.exe (位于 C:\Windows\System32\ ),后者不支持 --http2 参数,会导致连接超时。

  2. 克隆仓库并进入目录

    git clone https://github.com/anthropic/claude-code.git
    cd claude-code
    

    此时不要急着 make build 。先检查 .gitmodules 文件,你会发现它声明了 libgit2-sys openssl-src 两个子模块。这意味着 git clone 只下载了主仓库,子模块内容为空。

  3. 初始化并更新子模块

    git submodule update --init --recursive
    

    这一步至关重要。 libgit2-sys 是 Rust 绑定 libgit2 C 库的 crate,它让 claude code 能直接解析 .git 目录的 objects/ refs/ ,而不依赖外部 git 命令。如果跳过此步, make build 会报错 fatal: not a git repository (or any of the parent directories): .git ,因为构建脚本需要读取子模块的 Cargo.toml

  4. 构建二进制

    make build
    

    make build 实际执行 cargo build --release --bin claude-code 。Rust 编译器会下载所有依赖 crate(约 120+ 个),耗时较长(首次约 8-12 分钟),但这是值得的:它生成的 target/release/claude-code 二进制是完全静态链接的,不依赖系统 glibc musl ,可直接复制到任何同架构机器运行。

  5. 安装到系统 PATH

    sudo cp target/release/claude-code /usr/local/bin/claude-code
    # macOS 用户若用 Homebrew,可改为:
    # sudo cp target/release/claude-code $(brew --prefix)/bin/claude-code
    

    验证: claude-code --version 应输出类似 claude-code 1.3.0 (commit: abc1234)

实操心得:我曾因在 make build 前未运行 git submodule update ,导致编译失败后手动删除 target/ 目录重试,结果 cargo build 缓存了错误的依赖图,连续三次失败。最终解决方案是: cargo clean && git clean -fdx && git submodule update --init --recursive && make build 。记住: git clean -fdx 会删除所有未跟踪文件(包括你可能手改的 config.json ),操作前务必备份。

3.2 首次初始化: claude code init 背后的三重校验

运行 claude-code init 不是简单地创建一个配置文件。它执行一个原子性工作流:

  1. Git 环境校验 :检查当前目录是否为 Git 仓库(存在 .git/ 目录),并验证 git status --porcelain 是否能正常执行。如果当前目录不是 Git 仓库,它会提示 Error: Not in a git repository. Please run 'git init' first. 。这不是限制,而是设计:Claude Code 的所有上下文(如 claude code diff claude code blame )都基于 Git 的对象模型,没有 Git,它就失去了“项目感”。

  2. Token 有效性探测 :向 $ANTHROPIC_BASE_URL/models 发送一个轻量 GET 请求,仅携带 x-api-key 头。成功返回 JSON 列表(如 ["claude-3-haiku-20240307", ...] )即视为 token 有效。失败则报错 API Error: 401 Unauthorized API Error: 403 Forbidden ,并附带原始响应体,方便你定位是 token 错误、过期还是权限不足。

  3. 配置文件安全写入 :在 ~/.claude/config.json 创建文件,内容为:

    {
      "anthropic_auth_token": "sk-ant-api03-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "anthropic_base_url": "https://api.anthropic.com/v1",
      "default_model": "claude-3-haiku-20240307",
      "max_tokens": 4096
    }
    

    关键点: ~/.claude/ 目录权限被设为 700 (仅所有者可读写), config.json 权限为 600 。这是硬性安全策略,防止其他用户进程读取你的 API Token。如果你在 sudo claude-code init 下运行,配置文件会归 root 所有,导致后续普通用户调用失败,报错 Permission denied: ~/.claude/config.json

正确操作流程:

# 1. 确保在你的项目根目录(含 .git)
cd /path/to/your/project

# 2. 设置环境变量(临时,仅本次会话有效)
export ANTHROPIC_AUTH_TOKEN="sk-ant-api03-..."
export ANTHROPIC_BASE_URL="https://api.anthropic.com/v1"

# 3. 运行初始化(会读取上述环境变量)
claude-code init

# 4. 验证配置(会显示脱敏后的 token 前缀和 base_url)
claude-code config show

注意: claude-code init 不会询问你输入 token,它强制要求你通过环境变量或已存在的 ~/.claude/config.json 提供。这是为了杜绝明文交互式输入导致 token 泄露到 shell history( history | grep token )。我见过同事在调试时用 claude-code init --token "sk-..." ,结果 sk-... 被完整记录在 ~/.bash_history ,成为安全隐患。

3.3 核心功能实战:从 ask refactor ,一次跑通真实工作流

现在,我们用一个真实场景——修复一个 Node.js Express 应用的 CORS 错误——来串联所有核心命令。假设你的项目结构如下:

my-express-app/
├── package.json
├── server.js
├── routes/
│   └── users.js
└── .git/

场景: 前端调用 /api/users 时,浏览器控制台报错 Access to fetch at 'http://localhost:3000/api/users' from origin 'http://localhost:5173' has been blocked by CORS policy. ,但 server.js 已引入 cors 中间件,却仍无效。

Step 1:用 claude code ask 定位问题根源

claude-code ask "Why is CORS still blocked even though I have cors() middleware in server.js? Check my current git status, diff, and the content of server.js."

claude-code 会自动执行:

  • git status --porcelain → 获取暂存区状态
  • git diff HEAD -- server.js → 获取 server.js 的未提交变更
  • cat server.js → 读取文件内容

然后将这些上下文 + 你的问题,构造成一个结构化 prompt 发送给 Anthropic API。它可能分析出: server.js app.use(cors()) 被放在了 app.use(express.json()) 之后,而 express.json() 会 consume request body,导致 preflight OPTIONS 请求被阻塞。答案会直接给出修复建议和代码补丁。

Step 2:用 claude code diff 查看变更建议

如果 ask 返回了一个具体的代码修改建议(如 “Move app.use(cors()) to line 12, before app.use(express.json()) ”),你可以用 diff 命令生成可审查的 patch:

claude-code diff "Move cors() middleware before express.json()"

它会输出一个标准 git diff 格式的文本,例如:

diff --git a/server.js b/server.js
index abc1234..def5678 100644
--- a/server.js
+++ b/server.js
@@ -10,6 +10,7 @@ const app = express();
 app.use(express.urlencoded({ extended: true }));
 
 // Parse JSON bodies
+app.use(cors());
 app.use(express.json());
 
 // Routes

Step 3:用 claude code apply 安全应用变更

claude-code apply "Move cors() middleware before express.json()"

此命令会:

  • 先执行 git stash 保存当前工作区所有未提交变更(防止覆盖)
  • 应用上一步 diff 生成的 patch
  • 运行 git add server.js 将变更加入暂存区
  • 输出 Applied successfully. Run 'git commit -m \"fix: move cors middleware\"' to commit.

提示: apply 不会自动 commit,它把最终决策权交还给你。这是安全设计:AI 可以建议,但人必须确认。我曾因跳过 apply 直接 git commit ,导致一个 console.log 调试语句被误提交到生产分支, apply stash 机制完美避免了此类事故。

Step 4:用 claude code git-review 进行提交前审查

claude-code git-review

它会:

  • git diff --cached 获取暂存区变更
  • git log -n 3 --oneline 获取最近三次提交摘要
  • 分析变更是否符合项目约定(如:是否添加了必要的测试?日志级别是否恰当?)
  • 生成一条符合 Conventional Commits 规范的提交信息草稿,例如:
    fix: move cors middleware before express.json() to resolve preflight OPTIONS failure
    
    This change ensures that the CORS preflight request is handled before
    express.json() attempts to parse the request body, which was causing
    the browser to block the actual request.
    

你只需复制粘贴这条信息到 git commit 即可。

4. 高频问题排查与独家避坑指南:那些文档里不会写的真相

4.1 API Error: Claude's response exceeded the XXX output token maximum

这是热词中出现频率最高的报错(32000、64000、128000)。表面看是模型输出太长,但根本原因有三层:

层级 原因 诊断方法 解决方案
L1:Prompt 过载 你传入的上下文(代码文件、diff、log)总 token 数 + 问题描述,已逼近模型输入上限(如 Haiku 为 200K tokens)。 claude-code 默认将整个 git diff cat *.js 结果塞入 prompt。 运行 claude-code debug --dump-prompt ,它会输出实际发送给 API 的完整 prompt 文本,并在末尾标注 Estimated input tokens: 198432 --context 参数显式指定文件: claude-code ask --context server.js --context routes/users.js "Why CORS blocked?" 。避免无限制 cat
L2:Base URL 网关截断 你配置的 ANTHROPIC_BASE_URL 指向一个企业网关(如 http://model.mify.ai.srv/anthropic ),该网关设置了 max_output_tokens: 32000 的硬性策略,无论后端模型能力如何,一律截断。 curl -v -H "x-api-key: $ANTHROPIC_AUTH_TOKEN" "$ANTHROPIC_BASE_URL/messages" -d '{"model":"claude-3-opus","max_tokens":128000,...}' ,观察响应头 X-RateLimit-Limit 和响应体中的 error.message 联系网关管理员,调整策略;或临时切换 ANTHROPIC_BASE_URL 到官方地址 https://api.anthropic.com/v1
L3:CLI 本地缓冲区溢出 claude-code 的 Rust 二进制在接收 API 流式响应(SSE)时,内存缓冲区默认为 64MB。当模型返回超长文本(如 100K tokens 的代码重构),缓冲区填满,进程 panic。 查看 claude-code 进程的 dmesg 日志或 journalctl -u claude-code (Linux),搜索 signal: killed Out of memory 升级到 claude-code v1.4.0+ (已修复),或在 ~/.claude/config.json 中添加 "stream_buffer_size_mb": 128

实操心得:我曾为一个 5000 行的 webpack.config.js 生成优化建议,反复触发 32000 错误。最终方案是:先用 claude-code ask "Summarize the key plugins and loaders in webpack.config.js" 得到 200 字摘要,再用 claude-code ask "Based on this summary: [paste], suggest 3 critical optimizations" 。分步提问,token 消耗下降 70%,且答案质量更高。

4.2 Auth conflict: both a token and an api key 报错溯源

这个报错源于 claude-code 的认证优先级规则。它按以下顺序查找认证凭据:

  1. 环境变量 ANTHROPIC_AUTH_TOKEN
  2. 环境变量 ANTHROPIC_API_KEY (注意:这是旧版命名,已弃用但兼容)
  3. ~/.claude/config.json 中的 anthropic_auth_token
  4. ~/.claude/config.json 中的 anthropic_api_key (同样,旧版)

如果同时存在 ANTHROPIC_AUTH_TOKEN ANTHROPIC_API_KEY ,或 config.json 中同时存在两个字段, claude-code 会拒绝启动,报错 Auth conflict 。这不是 Bug,而是安全策略:防止因环境变量污染(如 CI/CD 系统注入了旧 token)导致意外调用。

排查步骤:

# 1. 检查所有环境变量
env | grep -i "anthropic"

# 2. 检查配置文件
cat ~/.claude/config.json | jq 'keys'

# 3. 清理冲突(推荐只留 auth_token)
unset ANTHROPIC_API_KEY
# 编辑 ~/.claude/config.json,删除 "anthropic_api_key" 字段

注意:某些教程(如 ifix ge9drv7驱动压缩包内容及使用指南 )错误地指导用户同时设置两个环境变量,这是过时信息。Anthropic 官方自 2024 年 3 月起,已全面废弃 ANTHROPIC_API_KEY ,统一为 ANTHROPIC_AUTH_TOKEN

4.3 claude code ui 不存在?关于桌面版的真相

热词中频繁出现 claude code ui claude code桌面版 claude code下载 ,这源于一个广泛误解。 Claude Code 官方从未发布过图形界面(GUI)版本。 所有声称提供 .dmg .exe claude-code-ui 的下载链接,均为第三方非官方构建,存在严重风险:它们可能捆绑挖矿软件、窃取 API Token,或使用过期的、有已知漏洞的依赖库。

claude code ui 这个命令本身是 claude-code 仓库中一个 已移除的实验性功能 。在 v1.1.0 版本中,它曾尝试用 Tauri 框架启动一个本地 Web Server( http://localhost:3001 ),但因安全审计未通过(Tauri 的 WebView 存在沙箱逃逸风险),在 v1.2.0 中被彻底删除。当前任何 claude-code 版本执行 claude-code ui 都会报错 Unknown command: ui

正确替代方案: 如果你需要 Web 界面体验,应使用官方 Claude 网页版( https://claude.ai )或 VS Code 插件( Anthropic Claude ),它们与 claude-code CLI 是完全独立的产品线,共享同一套 API,但数据隔离、权限独立。切勿将 CLI 的 anthropic_auth_token 用于任何非官方客户端。

4.4 cc switch windows 安装 失败的 Windows 特定陷阱

Windows 用户在安装 claude-code 时,最常卡在 cc switch windows (一个非官方的 Windows 安装脚本)上。根本原因在于 Windows 的路径处理与 Unix-like 系统的差异:

  • PATH 注入失效 cc switch windows 脚本试图修改 HKEY_CURRENT_USER\Environment\Path 注册表,但 PowerShell 默认以 ExecutionPolicy Restricted 运行,禁止脚本修改注册表。
  • Git Bash 权限问题 :在 Git Bash 中运行 make build cargo 会尝试调用 link.exe (来自 Visual Studio Build Tools),但 Git Bash 的 PATH 通常不包含 C:\Program Files\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current\Bin ,导致链接失败,报错 link.exe not found
  • 符号链接(Symlink)不支持 claude-code skills/ 目录依赖符号链接指向 node_modules/ ,而 Windows 默认禁用开发者模式, mklink 命令不可用。

Windows 原生解决方案:

  1. 启用开发者模式 设置 > 更新与安全 > 针对开发人员 > 开发者模式
  2. 使用 PowerShell(管理员)安装
    # 安装 Rust
    winget install --id Rustlang.Rustup
    # 安装 Deno
    winget install --id denoland.deno
    # 安装 Git
    winget install --id Git.Git
    # 安装 Visual Studio Build Tools(必需!)
    winget install --id Microsoft.VisualStudio.BuildTools --override "--wait --norestart --quiet --includeRecommended --includeOptional --add Microsoft.VisualStudio.Workload.VCTools"
    
  3. 在 PowerShell 中构建
    git clone https://github.com/anthropic/claude-code.git
    cd claude-code
    git submodule update --init --recursive
    # 此时 cargo 会自动找到 vswhere.exe 并配置好 link.exe 路径
    cargo build --release --bin claude-code
    # 复制到系统路径
    Copy-Item "target\release\claude-code.exe" "$env:USERPROFILE\AppData\Local\Microsoft\WindowsApps\claude-code.exe"
    

实操心得:我曾花两天时间调试 cc switch windows ,最终发现其脚本中有一行 Set-ItemProperty -Path 'HKCU:\Environment' -Name 'Path' -Value $newPath ,在非管理员 PowerShell 下静默失败。改用 winget + cargo build 原生命令,30 分钟内完成,且稳定性远超任何第三方脚本。

5. 进阶能力解锁: claude code skill 与私有化部署实践

5.1 claude code skill :不只是插件,而是你的个人知识库接口

claude code skill claude-code 最被低估的核心能力。它允许你将任意脚本(Bash/Python/TypeScript)注册为一个子命令,让 Claude Code 调用它来增强自身能力。例如,你可以创建一个 pr-draft 技能,它能自动分析当前分支的 git log git diff ,生成符合团队规范的 PR 描述;或创建一个 security-scan 技能,调用 trufflehog 扫描代码中泄露的密钥。

创建一个 my-first-skill 的完整流程:

  1. 创建技能目录

    mkdir -p ~/.claude/skills/my-first-skill
    cd ~/.claude/skills/my-first-skill
    
  2. 编写技能脚本(TypeScript 示例) : 创建 index.ts

    // index.ts
    import { Command } from "https://deno.land/x/cliffy@v1.0.0-rc.4/command/mod.ts";
    
    new Command()
      .name("my-first-skill")
      .description("A simple skill that greets the user and shows current branch")
      .action(async () => {
        // 读取 claude-code 提供的上下文环境变量
        const cwd = Deno.env.get("CLAUD_CODE_CWD") || Deno.cwd();
        const branch = await new Deno.Command("git", {
          args: ["rev-parse", "--abbrev-ref", "HEAD"],
          cwd
        }).output();
        const branchName = new TextDecoder().decode(branch.stdout).trim();
    
        console.log(`Hello from my-first-skill! You are on branch: ${branchName}`);
      })
      .parse(Deno.args);
    
  3. 注册技能

    claude-code skill register my-first-skill
    

    此命令会在 ~/.claude/config.json skills 数组中添加:

    {
      "name": "my-first-skill",
      "path": "/home/you/.claude/skills/my-first-skill/index.ts",
      "description": "A simple skill that greets the user and shows current branch"
    }
    
  4. 使用技能

    claude-code skill my-first-skill
    # 输出:Hello from my-first-skill! You are on branch: main
    

提示: claude-code 在调用技能时,会注入一系列环境变量,如 CLAUD_CODE_CWD (当前项目根目录)、 CLAUD_CODE_GIT_BRANCH (当前分支名)、 CLAUD_CODE_DIFF (当前暂存区 diff 内容)。这是技能能“感知项目”的秘密。我创建的 pr-draft 技能,就是靠读取 CLAUD_CODE_DIFF ,用正则提取新增的 TODO: 注释,自动生成 PR 的 Changelog 部分。

5.2 私有化部署:用 ANTHROPIC_BASE_URL 指向你的企业模型网关

ANTHROPIC_BASE_URL 指向私有网关,是企业级落地的关键。常见架构是: claude-code CLI Kong API 网关 Anthropic 官方 API 自托管的 Claude 模型(如通过 vLLM)

Kong 网关配置要点( kong.yml ):

services:
- name: anthropic-proxy
  url: https://api.anthropic.com/v1
  routes:
  - name: anthropic-messages
    paths:
    - /v1/messages
    methods:
    - POST
    # 关键:重写路径,去掉 /v1 前缀,因为 upstream 是 https://api.anthropic.com/v1
    strip_path: true
    # 添加认证头
    plugins:
    - name: key-auth
      config:
        key_names: ["x-api-key"]
        anonymous: null
    - name: request-transformer
      config:
        add:
          headers:
          - "anthropic-version:2023-06-01"
          - "content-type:application/json"

客户端配置:

export ANTHROPIC_BASE_URL="http://your-kong-gateway.com/v1"
export ANHROPIC_AUTH_TOKEN="your-enterprise-api-key"
claude-code init

此时,所有 claude-code 请求都会先到达 Kong,Kong 验证 x-api-key ,添加必要头,再转发给 Anthropic。你可以在 Kong 中实现:

  • 配额控制 :每个 x-api-key 每分钟最多 10 次 /messages 调用。
  • 日志审计 :记录

更多推荐