01 · 一句話
vibe-hardening 在你的機器上跑。你的程式碼、密鑰、檔案路徑、repo 名稱 — 通通不會離開你的筆電。
只有在你對首次執行的 prompt 明確說 yes 之後,CLI 才會在每次 scan 結束時送一個小小的匿名事件:哪些 rule ID 觸發了、scan 跑多久、偵測到的 AI 平台指紋、CLI 版本、一個隨機產生的 UUID。就這些。
隨時可以關。設 DO_NOT_TRACK=1、CI=1,或在任何 CI 環境執行,都會自動停用。
我們收什麼、不收什麼、怎麼關掉。
vibe-hardening 在你的機器上跑。你的程式碼、密鑰、檔案路徑、repo 名稱 — 通通不會離開你的筆電。
只有在你對首次執行的 prompt 明確說 yes 之後,CLI 才會在每次 scan 結束時送一個小小的匿名事件:哪些 rule ID 觸發了、scan 跑多久、偵測到的 AI 平台指紋、CLI 版本、一個隨機產生的 UUID。就這些。
隨時可以關。設 DO_NOT_TRACK=1、CI=1,或在任何 CI 環境執行,都會自動停用。
每次 scan 就傳這幾個欄位、不會多:
anonymous_id — 第一次執行時隨機產生的 UUID v4。存在你本機;讓我們可以去重複而不識別你。consent_version — 你同意的 schema 版本,目前是 1。未來如果擴大收集範圍會 bump 這個版本、重新詢問你。vh_version — 你的 CLI 版本(例如 0.3.0)。platform_fingerprint — 偵測到的 AI 工具,例如 cursor、lovable、claude-code。只送公開標籤、絕不送偵測時匹配到的檔案路徑。files_scanned — 掃描器看過的檔案數量(整數)。duration_ms — scan 跑多久,毫秒。score / grade — 0–100 分數跟 A–F 等級。rules_fired — ruleId → 觸發次數 的 map,例如 {"vh-secret-openai": 2}。Rule ID 都是 open source 規則的公開識別碼,除了「哪些規則匹配」之外不會洩漏任何程式碼資訊。os — darwin / linux / win32。node_version — 你的 Node 版本(例如 v20.10.0)。送出的 payload 是固定 schema。CLI 沒有任何 code path 會送以下任何一樣 — 而且 public repo 裡有一條 regression test 鎖死,這些字串無論如何都不會出現在 wire payload:
三種,由廣到窄:
vibe-hardening config set telemetry off — 持久關閉、跨次執行有效。VH_TELEMETRY=off env 變數 — 單次覆寫;適合 VH_TELEMETRY=off npx vibe-hardening scan。DO_NOT_TRACK=1 或 CI=1 — 通用 opt-out(yarn、pnpm、Gatsby 都認)。即使你 local config 寫 telemetry on,這兩個變數也會強制關閉。事件 POST 到一個 Cloudflare Worker、寫進我們管理的資料庫(Supabase 或 D1)。我們是一人 indie 團隊 — 沒接 Mixpanel、Segment、Amplitude、Google Analytics、行銷追蹤像素,通通沒有。
我們不賣、不分享、不授權這份資料。只有我們會看,而且只在決定哪條規則需要強化時才會看。
保存期間:12 個月。彙總的規則觸發數可能保留更久做趨勢分析,但任何含 anonymous_id 的列 12 個月後會刪除。
vibe-hardening 是 MIT、免費、用 npm 發佈的 CLI。我們看不到誰裝了、看不到客服 ticket、不打 sales call。
沒有一點 telemetry,launch 後前 1,500 個安裝就是黑箱。我們無法知道哪些規則觸發最多(要深化)、哪些 0× 觸發(要重做或移除)、用戶最在意哪個 AI 平台、scan 是 3 秒還是 30 秒。
Telemetry 就是「ship 出去、希望有人用」跟「ship 出去、第二週看數字決定怎麼改」的差別。
上面每一條主張都對應到 public 程式碼:
src/core/telemetry.ts → buildEvent(約 290 行)。test/telemetry.test.ts → "NEVER includes PII"(鎖死沒有檔案路徑、snippet、密鑰、平台偵測 signal 路徑會出現在 wire)。src/core/telemetry.ts → isUniversallyOptedOut。src/core/telemetry.ts → getEndpoint。GitHub repo 開 issue,或直接打開 CLI 原始碼自己讀 — 整個 telemetry 表面才 ~350 行 TypeScript、有完整註解。