Detection Signals logo

Detection Signals

CommunityPopular
LinXiaoTao
detection-signals

Add, adjust or remove "China user" detection signals in the FuckClaude project (browser scan + /api/check). Use when adding detection methods, changing signal weights or scorers, or when the user mentions 检测信号 / 检测手段 / 新增检测 / signals / weights / detectors.

Overview

PublisherLinXiaoTao
RepositoryFuckClaude
Skill namedetection-signals
Stars
1K
Forks
94
Bundled files
Instructions only
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by LinXiaoTao on GitHub. Read the source before you install it.

Installation

Install the Detection Signals AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/LinXiaoTao/FuckClaude/tree/master/skills/detection-signals
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/LinXiaoTao/FuckClaude.git /tmp/FuckClaude
mkdir -p .claude/skills
cp -r /tmp/FuckClaude/skills/detection-signals .claude/skills/detection-signals
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Detection Signals in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Detection Signals on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Detection Signals is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

检测信号(Detection Signals)开发

本项目的核心是一组「中国用户」指纹信号:浏览器端跑扫描动画逐项检测,服务端 /api/check 复用同一批纯评分函数做估算。所有检测只读浏览器 API,零上传。

信号解剖(src/config/signals.ts)

ts
export type SignalId = 'timezone' | /* … */ | 'emoji'; // 先扩展联合类型

interface SignalDef {
  id: SignalId;
  weight: number;        // 所有信号权重之和必须恰好 = 100
  claudeUsed?: boolean;  // 仅当 Claude Code 真实机制读取该信号时为 true
  icon: string;          // 内联 SVG(24×24, stroke=currentColor, 复用 ICON 表)
  detect: () => DetectOutcome | Promise<DetectOutcome>; // 支持 async(如 UA-CH 高熵值)
}

interface DetectOutcome {
  raw: string;   // 展示给用户的检测值,如 'Asia/Shanghai'、'none detected'
  score: number; // 0..1 的「中国相似度」;≥0.25 记为命中,≥0.6 为 high
}
  • detect() 内部禁止网络请求;异常无需自行兜底,调用方 detect.ts 已 try/catch。
  • 探测字体用现成的 isFontAvailable(font, ctx)(canvas 宽度探测)。
  • 读 UA-CH 用 uaData() helper;高熵值(model 等)需 await getHighEntropyValues,拿不到时降级为纯 UA 正则。

新增一个信号的完整清单

  1. signals.ts
    • SignalId 联合类型加新 id。
    • 写 detectXxx();若服务端(仅凭请求头)也能测,把纯打分逻辑抽成 export function scoreXxx(probe: string) 供 API 复用(参照 scoreTimezone / scoreLanguages / scoreCnBrowser / scoreCnDevice)。
    • 在 SIGNALS 数组按权重降序插入,并重新分配权重使总和 = 100。
    • 图标加进 ICON 表(线性 stroke 风格,与现有一致)。
  2. i18n/ui.ts(en + zh 两份都要)
    • 新增 signal.<id>.name 与 signal.<id>.desc。
    • 以下文案硬编码了信号数量,改动数量时同步更新: signals.sub(N 项指纹)、how.p2(N-1 项叠加指纹列表)、faq.a2(其余 N-1 项)。
  3. pages/api/check.ts(仅当服务端可测)
    • analyze() 的 measured map 增加条目,复用第 1 步导出的纯评分函数。
    • 更新文件头注释与 note 里的 browser-only 列表及可测权重数(当前 62/100)。
  4. layouts/BaseLayout.astro:JSON-LD featureList 追加 t('signal.<id>.name')。
  5. README.md:英文与中文两张「信号与权重」表、API 段落的可测权重描述。

打分约定

  • 决定性证据(如系统时区命中中国时区、检出国产厂商字体)→ score 接近 1。
  • 全球化品牌 / 弱相关线索(如小米设备、emoji 风格)→ 0.4–0.7,并压低 weight。
  • 检不到 / 不适用 → { raw: 'none detected', score: 0 },不要抛错。
  • 阈值语义:signalVerdict — ≥0.6 high、≥0.25 medium(命中)、其余 low。

验证(必做)

bash
pnpm build                 # tsc + astro 构建必须通过
pnpm dev                   # http://localhost:4321
  • 浏览器打开 /zh/ 点「开始检测」,确认新信号出现、动画逐项走完、总分 ≤100。
  • 服务端可测信号用伪造 UA 验证,例如:
bash
curl -s "http://localhost:4321/api/check?format=json" \
  -H "User-Agent: Mozilla/5.0 (Linux; Android 12; HarmonyOS; NOH-AN00) MicroMessenger/8.0.47" \
  -H "Accept-Language: zh-CN,zh;q=0.9"

检查 JSON 里新信号 measured: true、coverage.measuredWeight 与注释一致。

常见陷阱

  • 权重总和 ≠ 100:总分语义会坏掉(README 与文案都声称满分 100)。
  • 只改了英文文案忘了中文(或反之):ui.ts 是 en/zh 双份字典。
  • 服务端 scorer 与浏览器 detect 各写一套逻辑导致结果漂移:必须共用纯函数。
  • UA 正则过宽误伤(如 /mi/ 会匹配 "Mozilla"):用 \b 边界并放到真机 UA 上验证。

Frequently asked questions

What does the Detection Signals AI skill do?

Add, adjust or remove "China user" detection signals in the FuckClaude project (browser scan + /api/check). Use when adding detection methods, changing signal weights or scorers, or when the user mentions 检测信号 / 检测手段 / 新增检测 / signals / weights / detectors.

Why use Detection Signals on TypingMind?

Because you install it once and use it with any model. Detection Signals is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Detection Signals in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/LinXiaoTao/FuckClaude/tree/master/skills/detection-signals. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Detection Signals?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Detection Signals?

As many as you like. As long as a model supports skills, you can use Detection Signals with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Detection Signals AI skill free?

Yes. It is published on GitHub by LinXiaoTao under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇