跳转到主要内容

包装器

当你运行 claude 时,实际执行的是 cac 的包装器 ~/.cac/bin/claude(它在 PATH 中排在最前面)。包装器的工作流程:
claude(用户输入)


~/.cac/bin/claude(包装器)

  ├─ 读取 ~/.cac/current → 活跃环境名称
  ├─ 读取 ~/.cac/envs/<name>/ → 身份、代理、版本

  ├─ 设置 CLAUDE_CONFIG_DIR → 隔离的 .claude 目录
  ├─ 解析版本化二进制文件 → ~/.cac/versions/<ver>/claude

  ├─ [如有代理] 预检 TCP 连接
  ├─ [如有代理] 注入 HTTPS_PROXY、HTTP_PROXY、ALL_PROXY
  ├─ [如有代理] 清除 ANTHROPIC_API_KEY(强制 OAuth)
  ├─ [如无代理] 保留 ANTHROPIC_API_KEY(API Key 认证)

  ├─ 将 ~/.cac/shim-bin 添加到 PATH 最前面
  ├─ 设置 NODE_OPTIONS → fingerprint-hook.js + dns-guard.js
  ├─ 设置 12 个遥测屏蔽环境变量
  ├─ 设置 TZ、LANG、HOSTNAME、CAC_* 身份变量
  ├─ 注入 mTLS 证书环境变量

  ├─ 自动同步 relay.js + JS 钩子(升级后无需重新 setup)
  ├─ [如有代理] 健康检查绕过(进程内拦截)
  ├─ [如有代理 + TUN] 启动自动中继(自动绕过 TUN)


~/.cac/versions/<ver>/claude(真正的二进制文件)

指纹伪装层

第一层:Shell 代理脚本

~/.cac/shim-bin/ 包含拦截系统命令的脚本:
代理脚本拦截对象平台
hostnamehostname 命令 → 返回伪装主机名全部
ifconfigifconfig 输出 → 替换 MAC 地址全部
ioregioreg -rd1 -c IOPlatformExpertDevice → 伪装 UUIDmacOS
catcat /etc/machine-id → 伪装机器 IDLinux
代理脚本仅拦截特定调用。所有其他调用会透传到真正的命令。

第二层:Node.js 钩子

fingerprint-hook.js 通过 NODE_OPTIONS --require 注入,对以下方法进行猴子补丁:
  • os.hostname()CAC_HOSTNAME
  • os.networkInterfaces() → 来自 CAC_MAC 的伪装 MAC
  • os.userInfo()CAC_USERNAME
  • fs.readFileSync('/etc/machine-id')CAC_MACHINE_ID

第三层:环境变量

身份值也作为环境变量导出(CAC_HOSTNAMECAC_MACCAC_MACHINE_IDCAC_USERNAME),以便任何子进程都可以访问。

遥测拦截

DNS 级别

cac-dns-guard.js 拦截 Node.js DNS 解析和 fetch() 以阻止:
  • statsig.anthropic.com
  • sentry.io / sentry-cdn.com
  • segment.io / segment.com
  • 其他已知遥测端点

环境变量级别

设置 12 个环境变量以在多个框架中禁用遥测:
变量目标
DO_NOT_TRACK1通用标准
OTEL_SDK_DISABLEDtrueOpenTelemetry
OTEL_TRACES_EXPORTERnoneOpenTelemetry
SENTRY_DSN(空)Sentry
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC1Claude Code

HOSTALIASES

~/.cac/blocked_hosts 通过 HOSTALIASES 环境变量将遥测域名映射到 0.0.0.0

mTLS

每个环境都有一个由 cac 自签名 CA 签发的客户端证书。CA 证书通过 NODE_EXTRA_CA_CERTS 设为受信任。这在包装器和任何验证客户端证书的服务之间提供了额外的认证层。

配置隔离

CLAUDE_CONFIG_DIR 被设置为 ~/.cac/envs/<name>/.claude/。这意味着:
  • 会话按环境隔离
  • 设置按环境隔离
  • 项目记忆按环境隔离
  • 认证令牌按环境隔离
使用 cac workcac personal 切换环境,会给你完全独立的 Claude Code 体验。