包装器
当你运行claude 时,实际执行的是 cac 的包装器 ~/.cac/bin/claude(它在 PATH 中排在最前面)。包装器的工作流程:
指纹伪装层
第一层:Shell 代理脚本
~/.cac/shim-bin/ 包含拦截系统命令的脚本:
| 代理脚本 | 拦截对象 | 平台 |
|---|---|---|
hostname | hostname 命令 → 返回伪装主机名 | 全部 |
ifconfig | ifconfig 输出 → 替换 MAC 地址 | 全部 |
ioreg | ioreg -rd1 -c IOPlatformExpertDevice → 伪装 UUID | macOS |
cat | cat /etc/machine-id → 伪装机器 ID | Linux |
第二层: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 个环境变量以在多个框架中禁用遥测:| 变量 | 值 | 目标 |
|---|---|---|
DO_NOT_TRACK | 1 | 通用标准 |
OTEL_SDK_DISABLED | true | OpenTelemetry |
OTEL_TRACES_EXPORTER | none | OpenTelemetry |
SENTRY_DSN | (空) | Sentry |
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC | 1 | Claude 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 work 和 cac personal 切换环境,会给你完全独立的 Claude Code 体验。