你的編輯器正在回報身分:huggingface_hub 低調指紋辨識 26 款 AI 編碼代理
一份網路流量稽核發現,huggingface_hub SDK 會掃描環境變數以辨識 26 款編碼代理——從 Claude Code、Cursor 到 Warp 與 Zed——並在每次 Hub 請求加上 agent/<名稱> 的 user-agent 標記。Hugging Face 每月公開彙整數據,但多數開發者根本不知道這套遙測存在。
你的編輯器正在回報身分:huggingface_hub 低調指紋辨識 26 款 AI 編碼代理
2026 年 9 月 12 日,一份網路流量稽核報告登上 r/LocalLLaMA,在機器學習社群投下一枚小小的隱私震撼彈:huggingface_hub Python SDK——它是 transformers、datasets、gradio、faster-whisper 以及數百個下游函式庫的底層依賴——會悄悄掃描你的環境變數,判斷你正在使用哪一款 AI 編碼代理,然後把這個身分蓋章在它發往 Hugging Face Hub 的每一個請求上。
只要你是用 Cursor、Claude Code、OpenAI Codex、GitHub Copilot、Zed、Warp、Replit 或其他約二十幾款代理工具在寫程式,而且曾經下載過模型或資料集,Hub 很可能早就知道——而且自 2026 年 4 月起,這些知識一直被彙整成公開資料集。
稽核發現了什麼
檢視 huggingface_hub 原始碼後可以確認,整個機制簡單得令人意外。SDK 發出的每個 HTTP 請求都會先透過 build_hf_headers() 組裝標頭。在這個呼叫內部,_http_user_agent() 函式負責拼湊 user-agent 字串——Python 版本、hf_hub 版本、選擇性附加的 PyTorch 版本——然後,除非遙測被明確停用,再多加一段:
agent/<harness-id>
<harness-id> 來自 detect_agent(),一個定義在 utils/_detect_agent.py 的常式,它唯一的職責就是對你的程序做指紋辨識。它分兩層運作。第一層檢查「標準」環境變數 AI_AGENT 與 AGENT,任何工具都可以設定它們來自我標識。第二層——也就是讓大家吃驚的部分——它會走訪一份收錄 26 款已知框架(harness)的登錄檔,每一款都有自己的特徵簽名,然後拿你的程序環境逐一比對。
26 款框架的登錄檔
這份登錄檔甚至不是寫死在客戶端裡。它由 Hub 即時供應,端點是 /api/agent-harnesses,在本機快取最多 24 小時,因此清單可以在不出新版的情況下持續擴充。截至本週,它包含 26 個條目:
Antigravity、Augment CLI、Cline、Claude Code(含 Cowork 變體)、Codex、Crush、Gemini CLI、GitHub Copilot、Goose、Hermes Agent、Hi、Kilo Code、Kiro、OpenClaw、Sandbase Harness、OpenCode、Pi、Replit、Trae、VTCode、Warp、Zed、Cursor CLI、Cursor,以及 Devin。
偵測簽名是環境變數萬用字元比對。Cursor 透過 CURSOR_TRACE_ID 偵測;Cursor 的 CLI 版透過 CURSOR_AGENT;Claude Code 透過 CLAUDECODE 或 CLAUDE_CODE;Codex 透過 CODEX_SANDBOX、CODEX_CI 或 CODEX_THREAD_ID;Warp 則是 TERM_PROGRAM 設為 WarpTerminal——多數終端機使用者根本不知道這個變數能如此精確地標識自己。Replit 透過 REPL_ID 偵測。有幾款(包括 Devin)只要簽名變數為任何非空值就會命中。如果標準變數被設成登錄檔以外 的值,SDK 會回報 agent/unknown——而「unknown」本身就是一個被追蹤的類別。
讓一切變得具體的資料集
讓這件事從「小怪癖」升級成「新聞事件」的關鍵在於:Hugging Face 不只是收集這些訊號——它還公開發布。由排程工作更新的 huggingface/agent-usage 資料集,逐月報告每款框架在代理歸因流量中的占比。
2026 年 8 月的數字,是少有市調能匹敵的編碼代理市場縮影:
| 代理 | 請求占比 | 不重複使用者占比 |
|---|---|---|
| claude-code | 46.53 | 38.71 |
| codex | 17.52 | 23.34 |
| unknown | 14.13 | 16.15 |
| cursor-cli | 14.04 | 5.38 |
| hermes-agent | 3.88 | 5.83 |
| antigravity | 1.62 | 5.08 |
光 Claude Code 一家就占掉近半的代理標記請求。另一個耐人尋味的細節:Cursor CLI 以僅 5.4% 的使用者貢獻了 14% 的請求——自動化重度用途的每席位流量遠高於互動式編碼。而占 14% 流量的「unknown」桶,規模大到本身就能算一款中游代理;這些是將 AI_AGENT 設為登錄檔以外之值的工具,或者尚未註冊的框架。
7 月呈現相同格局(Claude Code 44.2%、Codex 20.7%、unknown 23.2%),且 Claude Code 的占比逐月仍在攀升。
為什麼大家不高興
Hugging Face 的文件把這套機制定位為「選擇加入的可觀測性」:在公開登錄檔(對 @huggingface/tasks 套件中的 agent-harnesses.ts 提交 pull request)註冊你的框架,流量就會「以你的工具名義歸因」,換取友好顯示名稱與文件連結,並被計入公開資料集,而不是落入匿名的「unknown」統計。從平台角度,這是開發者關係,不是監控——這些數據確實回答了「ML 社群實際上在用哪些工具」這個真問題。
社群的反對點不在於資料保密與否——它是公開的——而在於蒐集行為從未被告知。每一個 pip install transformers 然後透過代理工具拉模型的開發者,都被自動加入了某種遙測計畫,沒有提示、沒有核取方塊,多數人甚至毫無所覺。指紋辨識沿著依賴樹隱式傳播:你互動的對象是 transformers 或 faster-whisper,它們匯入 huggingface_hub,你的編輯器身分就作為下載模型的副作用飛向 Hub。這裡不存在同意對話框,因為同意的主體——開發者的 shell 環境——從頭到尾沒被問過。
如何退出
想徹底關掉遙測的人,開關是有文件的,只是不顯眼:
export HF_HUB_DISABLE_TELEMETRY=1 # 停用代理指紋與使用遙測
export HF_HUB_OFFLINE=1 # 完全離線模式;停用所有 Hub 呼叫
HF_HUB_DISABLE_TELEMETRY=1 是外科手術式的選項——user-agent 會完全省略 agent/ 段落(以及 torch/ 版本段落)。改用本機路徑載入模型、不向 Hub 解析,也能在該工作流達到同樣效果。另注意離線模式下遙測也會自動抑制,因為根本沒有請求發生。
更大的圖像
這起事件與其說是針對 Hugging Face,不如說是整個產業預設值漂移的縮影。套件管理器、建置工具、如今再加上 ML 函式庫,都把背景遙測常態化了;新的是粒度——不是「某個 Python 開發者下載了模型」,而是「某個 Cursor 使用者、在這台機器上、透過這條依賴鏈、在此時此刻抓取了這個檢查點」。
對在專有技術棧上運行編碼代理的企業而言,這次揭露帶有合規稜角:流向第三方平台的環境衍生遙測,可能需要列入資料處理清單。對個人開發者,它則是一記提醒:你的 shell 環境本身就是一個廣播面——你的工具所設定的變數,比任何 cookie 都更能唯一標識你。
Hugging Face 過去對回饋反應積極,而公開資料集的事實也說明公司將此視為透明化而非榨取。但 r/LocalLLaMA 討論串的主流情緒,大概會形塑下一版設計:要彙整沒問題,但請在安裝時告訴大家,而不是等到稽核時才被發現。
Sources
- [1] https://www.reddit.com/r/LocalLLM/comments/1wehgvc/huggingface_hub_silently_fingerprints_which_ai/
- [2] https://huggingface.co/docs/huggingface_hub/en/package_reference/environment_variables
- [3] https://huggingface.co/docs/hub/en/agents-overview
- [4] https://huggingface.co/datasets/huggingface/agent-usage
- [5] https://github.com/huggingface/huggingface_hub/blob/main/src/huggingface_hub/utils/_detect_agent.py