包装器
当你运行claude 时,实际执行的是 cac 的包装器 ~/.cac/bin/claude(它在 PATH 中排在最前面)。包装器的工作流程:
指纹伪装层
第一层:Shell 代理脚本
~/.cac/shim-bin/ 包含拦截系统命令的脚本:
代理脚本仅拦截特定调用。所有其他调用会透传到真正的命令。
第二层:Node.js 钩子
fingerprint-hook.js 通过 NODE_OPTIONS --require 注入,对以下方法进行猴子补丁:
os.hostname()→CAC_HOSTNAMEos.networkInterfaces()→ 来自CAC_MAC的伪装 MACos.userInfo()→CAC_USERNAMEfs.readFileSync('/etc/machine-id')→CAC_MACHINE_ID
第三层:环境变量
身份值也作为环境变量导出(CAC_HOSTNAME、CAC_MAC、CAC_MACHINE_ID、CAC_USERNAME),以便任何子进程都可以访问。
遥测拦截
DNS 级别
cac-dns-guard.js 拦截 Node.js DNS 解析和 fetch() 以阻止:
statsig.anthropic.comsentry.io/sentry-cdn.comsegment.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 work 和 cac personal 切换环境,会给你完全独立的 Claude Code 体验。