Skip to main content

包装器

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

指纹伪装层

第一层:Shell 代理脚本

~/.cac/shim-bin/ 包含拦截系统命令的脚本: 代理脚本仅拦截特定调用。所有其他调用会透传到真正的命令。

第二层: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 个环境变量以在多个框架中禁用遥测:

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 体验。