npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

claude-cn-flag-check

v0.1.0

Published

Check whether Claude Code would covertly flag your environment as a China user (timezone + relay-hostname region marking). Reproduces the client's bundled detection logic for self-audit.

Readme

claude-cn-flag-check

Claude Code 会不会把的环境悄悄标记成「中国用户」?一条命令就能自查。

English →

2026 年年中,有人逆向发现 Claude Code(@anthropic-ai/claude-code CLI,自 v2.1.91 起)会静默判断一条请求是否来自中国大陆,并用 Unicode 隐写术把结果编码进 system prompt——不走任何遥测字段,发布日志里也只字未提。Anthropic 随后承认这是一项「实验性」的防转售 / 防蒸馏措施,并称将移除。

本工具默认进行真实检测:实际运行一次 Claude Code、指向本地端点,读取它真正 发出的隐写标记——不是预测;也可退回本地复刻逻辑做计算估算(--no-capture)。只读取 你自己的环境,不上传任何数据。

已针对 @anthropic-ai/[email protected] 验证:域名 / 关键词清单在运行时直接从你已安装的二进制里去混淆解出,因此结论与你实际运行的版本一致。

检测机制到底是怎样的

只有当你通过 ANTHROPIC_BASE_URL 把 Claude Code 指向第三方端点(中转站 / 代理)时才会触发。走官方 api.anthropic.com、或没设 base URL 时完全跳过——那种情况下时区无所谓。触发时会计算三个正交信号:

| 信号 | 来源 | 如何编码进 Today's date is … | |---|---|---| | cnTZ | 系统时区为 Asia/ShanghaiAsia/Urumqi | 日期分隔符 -/(如 2026-07-032026/07/03) | | known | 中转 hostname 命中内置 147 条域名清单(精确或子域;清单含裸 cn,所以任何 *.cn 主机都命中) | 撇号 → U+2019 | | labKw | 中转 hostname 含中国 AI 实验室关键词(deepseekmoonshotdashscope 等) | 撇号 → U+02BC | | known + labKw 同时命中 | — | 撇号 → U+02B9 |

Today's 里的撇号 + 日期分隔符共同构成一个 2–3 bit 标记,服务器侧读回——在任何编辑器里都和正常那行长得一模一样。

安装

npm install -g claude-cn-flag-check
# 或免安装直接跑一次:
npx claude-cn-flag-check

需要 Node.js ≥ 18(装了 Claude Code 就一定有 Node)。

使用

自查当前环境:

claude-cn-flag-check

CLI 会先把所有检测项列出来,再用扫描动画逐项刷新结果(像网页扫描器),最后给出 0–100 风险分与判定。输出为中文;--json 保留英文结构化字段。示例(中国时区 + 命中清单的中转,最坏情况,已省略部分):

检测项(4 项区域信号)
  ⚑ 端点类型  第三方中转 · 触发地区检测
  ✗ 系统时区 (权重 40)  命中 · 中国时区,把日期分隔符 - 改成 /
  ✗ 中转域名清单 (权重 35)  命中 · 撇号被改成 U+2019
  ✓ AI 实验室关键词 (权重 25)  未命中

  风险分  75/100  ██████████████████░░░░░░  [高]

✗ 会被识别为中国大陆请求。
  进入封号风控队列的可能性:高

风险分

只有三个真正影响 CLI 的信号计入评分(字体、navigator.language 等浏览器信号对 CLI 无意义,已剔除)。marked 仍是确定性的是/否,评分只表示严重程度:

| 信号 | 权重 | |---|---| | cnTZ — 中国时区(挂代理也会泄露) | 40 | | known — 中转主机命中域名清单 | 35 | | labKw — 中转主机含 AI 实验室关键词 | 25 |

分档:安全(0)· (1–30)· (31–60)· (61–100)。第一方端点恒为 0。

会被标记时进程退出码为 1,干净时为 0,便于接进启动脚本做环境门禁:

claude-cn-flag-check >/dev/null || echo "⚠️  当前 shell 会被 Claude Code 打标记"

假设性检查(What-if)

不改动环境,测试某个中转或时区:

claude-cn-flag-check --base-url https://my-relay.example.com --tz Asia/Tokyo

选项

| 参数 | 含义 | |---|---| | --base-url <url> | 检查一个假设的 ANTHROPIC_BASE_URL | | --tz <zone> | 检查一个假设的 IANA 时区 | | --assume-first-party | 模拟 _CLAUDE_CODE_ASSUME_FIRST_PARTY_BASE_URL=1 | | --snapshot | 用内置清单快照,跳过实时提取 | | --binary <path> | 指定用于提取清单的 claude 二进制路径 | | --show-list | 打印解码出的域名 / 关键词清单 | | --json | 机器可读输出 | | -h, --help / -v, --version | — |

如何降低风控值

  • 时区(cnTZ)——用非中国时区启动:TZ=Asia/Tokyo claude。这是最有效的一招,因为系统时区即使挂了代理也会泄露。
  • 中转 hostname(known / labKw)——换一个不在清单、且不含 AI 实验室关键词、也不是 .cn 后缀的中转;用中性域名自建可同时避开两者。
  • 彻底关闭——_CLAUDE_CODE_ASSUME_FIRST_PARTY_BASE_URL=1 可关掉整套机制(让客户端把你的 base URL 当作第一方)。依赖前请了解其影响。

作为库调用

const { check, isClaudeChinaUser } = require('claude-cn-flag-check');

isClaudeChinaUser();                                  // 布尔,当前环境
check({ baseUrl: 'https://r.example.com', timezone: 'Asia/Shanghai' });
// → { marked, signals: { cnTZ, known, labKw }, carrier: { dateLine, ... }, features: [...] }

真实检测(默认)

默认做的是真实捕获,不是预测:

  1. 从配置解析出你真实的中转主机(见下节)。
  2. 写一个临时 CLAUDE_CONFIG_DIR,把 ANTHROPIC_BASE_URL 指向本地捕获服务器,并 临时在 /etc/hosts 里把真实中转主机映射到 127.0.0.1(自动备份+还原+信号兜底), 这样 Claude Code 仍看到真实主机名,而请求落到本地。
  3. 运行一次 claude -p,从真实请求体里读出 Today's date is … 那行,提取观测到的 撇号 + 日期分隔符。

这需要 root(改 /etc/hosts)和可用的 claude不使用真实凭证(本地拦截), 不修改你真实的 ~/.claude。报告会标注 真实捕获 ✓(观测)或 计算预测

  • --no-capture——不运行 claude,改用复刻逻辑做计算。
  • what-if(--base-url / --tz)与第一方端点始终为计算 / 确定(无可观测对象)。

配置解析(基于依据)

工具不只信当前进程的环境变量——那反映的是启动它的那个 shell,所以从不同 shell 跑 claudeclaude-cn-flag-check 可能不一致。它会解析 Claude Code 实际会用的 配置,并把检查过的每个来源都打印出来:

  • ANTHROPIC_BASE_URL——合并企业管理设置、~/.claude/settings.json、项目 .claude/settings.json.claude/settings.local.jsonenv 块,再叠加进程环境 变量(会话相关,已标注)。所以只在 settings.json 里配了中转、交互 shell 没 export 的情况,也能被正确检出。
  • 时区——先看上述 env 块里的 TZ 覆盖,否则读系统 /etc/localtime(或 /etc/timezone)。

--base-url / --tz 仍可覆盖一切做假设检查。--json 输出包含完整的 resolution 依据链。(ANTHROPIC_AUTH_TOKEN 等密钥永远不读取、不打印。)

准确性如何保证

默认在运行时从你已安装的二进制提取清单:扫描 XOR 编码的 base64 blob,暴力破解单字节密钥,再用已知哨兵域名校验解码结果——因此在混淆变量名逐版本变化的情况下依然可用。提取失败时回退到打了版本戳的内置快照(当前 2.1.170:147 域名、11 关键词)。

免责声明

仅用于透明性与自查。基于公开逆向分析,非 Anthropic 官方结论,且行为可能随 Claude Code 版本变化(Anthropic 已宣布将移除该机制)。请用 --show-list 对照你自己安装的版本。

许可证

MIT © shellus