Claude Counter 隐私与安全设计:零服务器、零追踪、只请求 claude.ai 的最小权限扩展实践
【免费下载链接】claude-counterA minimal browser extension that shows token count, cache timer, and usage bars on claude.ai.项目地址: https://gitcode.com/gh_mirrors/cl/claude-counter
Claude Counter 是一款专为 claude.ai 打造的免费浏览器扩展(browser extension),在页面上显示 Token 用量、缓存倒计时和使用率进度条。它的隐私设计可以用三个词概括:零服务器、零追踪、最小权限——所有数据只在本地浏览器内流转,扩展发出的唯一网络请求指向claude.ai官方接口,不携带任何遥测代码。
为什么扩展的隐私设计值得你关注 🔍
浏览器扩展运行在网页旁边,天然拥有访问你浏览内容的"近距离权限"。一个不负责任的扩展可以:
- 把你的对话内容偷偷发到第三方服务器
- 收集你的账号、浏览习惯做追踪
- 申请与功能无关的权限(如读取全部网站数据)
Claude Counter 的做法恰恰相反:用最少的权限,完成最窄的功能。下面带你逐一拆解它的设计决策,适合想了解"好扩展长什么样"的新手。
权限清单极简:manifest 里没有 permissions 字段
打开项目的清单文件 manifest.json,你会注意到一个罕见的事实:整个文件里没有permissions声明。
| 权限 | 是否申请 | 说明 |
|---|---|---|
storage存储 | ❌ | 不持久化任何用户数据 |
tabs/history标签页 | ❌ | 无法窥探你的其他标签 |
background后台常驻 | ❌ | 没有后台脚本,无跨站活动 |
cookiesCookie | ❌ | 仅在页面内读取,见下文 |
在 Firefox 端还额外声明了 manifest.json 中的data_collection_permissions: { "required": ["none"] },等于向浏览器明示:本扩展不采集任何数据。
💡 新手判断口诀:一个"看用量"的工具,如果要求
unlimitedStorage或跨站权限,那就要打问号了。
只注入 claude.ai,其他网站零存在感
在 manifest.json 中,内容脚本与可访问资源的注入范围被严格锁死:
- 内容脚本:
"matches": ["https://claude.ai/*"]—— 只有访问 claude.ai 时才会加载 src/content/main.js 等脚本 - 资源白名单:src/injected/bridge.js 同样只对 claude.ai 可见
这意味着:你打开新闻站、网银、Gmail 时,Claude Counter一行代码都不会执行。权限最小化不是口号,而是由清单文件(manifest)强制保证的。
零服务器架构:数据从哪里来,又回到哪里?
这是理解 Claude Counter 安全性的关键。它不建立自己的后端,而是"顺路"读取 claude.ai 本就要加载的数据:
┌─ 你的浏览器(全部发生在这里)──────────────────┐ │ │ │ claude.ai 页面 ←→ 注入脚本 bridge.js │ │ │ │ │ │ │ 拦截官方 API 响应 │ 本地 postMessage│ │ ▼ ▼ │ │ token 统计 / 缓存计时 / 使用率 → 页面 UI │ └─────────────────────────────────────────────────┘具体分工(见 src/injected/bridge.js):
- 会话数据:拦截 claude.ai 自己拉取的会话树响应(
/api/organizations/.../chat_conversations/...),用于本地估算 token 数 - 使用率数据:监听页面自带的 SSE 事件流中的
message_limit消息,获取比 /usage 页面更精确的百分比 - 主动请求:仅在刷新时请求
https://claude.ai/api/organizations/{orgId}/usage,且必须带着你已登录的会话凭据
换句话说,扩展发出的每一个请求,和你自己手动打开 claude.ai 的 /usage 页面发出去的请求完全一样——同样的域名、同样的会话、同样的数据。
唯一的"敏感操作":读一个 cookie
整个项目中唯一涉及凭据的代码在 src/content/main.js:
- 读取页面 cookie 中的
lastActiveOrg字段 - 用途:拼出
claude.ai/api/organizations/{orgId}/usage这个请求的组织 ID - 该值只用于向 claude.ai 发请求,不写入任何存储、不离开浏览器
配合 src/content/tokens.js 的本地 token 统计(基于内置的o200k_base分词器,纯本地计算),扩展完成了全部功能,而你的对话文本从未被打包发往任何地方——分词统计完全发生在浏览器内存里。
第三方代码透明:只有一份 MIT 分词器
项目对第三方依赖做了完整披露(见 THIRD_PARTY_NOTICES.md):
- 唯一内置的第三方代码:
gpt-tokenizer(MIT 协议),被固化在 src/vendor/o200k_base.js 中 - 没有任何远程加载:扩展包内所有 JS 文件都在安装时本地化,不存在运行时从 CDN 拉取代码的情况
这避免了"扩展本体无害、但运行时偷偷加载外部脚本"的经典风险。
不想装扩展?用户脚本版本同样最小化
项目还提供 userscript/claude-counter.user.js 用户脚本版本,其头部声明了@grant none(不申请 Tampermonkey 扩展 API)和@match https://claude.ai/*(仅匹配 claude.ai),安全边界与扩展版一致。
安全设计速查表 ✅
| 设计点 | Claude Counter 的做法 | 新手启示 |
|---|---|---|
| 网络请求 | 仅claude.ai官方接口 | 装扩展前先看它访问哪些域名 |
| 数据持久化 | 无(无 storage、无 localStorage) | 关掉标签页即无残留 |
| 权限申请 | 0 项权限声明 | 权限越少越安全 |
| 注入范围 | 仅https://claude.ai/* | 功能越窄,攻击面越小 |
| 第三方依赖 | 1 个 MIT 分词器,全部本地内置 | 警惕运行时远程加载 |
| 后台组件 | 无 background 脚本 | 无常驻进程 = 无跨站窥探 |
一句话总结:Claude Counter 用"零权限 + 单域名 + 纯本地计算"的组合,证明了一个展示工具型扩展可以做到无服务器、无追踪、无持久化。如果你正在评估一个浏览器扩展是否值得信任,不妨把它上面的安全清单当作你的检查模板。
【免费下载链接】claude-counterA minimal browser extension that shows token count, cache timer, and usage bars on claude.ai.项目地址: https://gitcode.com/gh_mirrors/cl/claude-counter
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考