AI Agent 與公開邊界
APBSC 研究計畫・對外整合版
版本 1.0 · 2026-10-13 · Neo.K,EveMissLab
計畫網站:privacy.evemisslab.com · 演算法、協定、釋出特徵與報告:github.com/EveMissLab/apbsc-rbpm · English:APBSC_Integrated_Public_Edition_v1.0.en.md
本版取代第一階段的十篇內部草稿(v0.1,2026-09-21),作為計畫的對外正式文本。它依據那十篇草稿與量測報告,在作者的指導下由 AI(Claude)協助撰寫。內容未經同儕審查。
摘要
告訴 coding agent 越多關於它所在機器的事,它就做得越好:專案放在哪裡、用哪個執行環境、認證怎麼設定、要呼叫哪個內部服務。這些脈絡會被寫進 CLAUDE.md、AGENTS.md、編輯器規則與代理設定檔,然後跟著專案一起被 commit。APBSC 計畫問的是:當這些檔案變成公開的,會發生什麼事。
第一階段(十篇論文,2026 年 9 月)建立了詞彙與論證:通過所有自動檢查,不等於守住公開邊界;agent 需要的脈絡本身就是資訊離開的出口;secret scanning 回答的問題比隱私窄;而這一切,都不能靠去讀別人的外洩來誠實地研究。第一階段以 RBPM 收束:一個研究者盲測的量測演算法,倉庫內容的第一個、也是唯一的觀察者,是一個封閉的機器程序,它只輸出編碼過的特徵。
第二階段(2026 年 10 月)把演算法用在新抽的公開樣本上:236 個同時帶有 agent 指示檔、README 與治理檔的倉庫,以及 400 個由個人帳號擁有、近兩年建立的倉庫。在每一個族群裡,演算法都看到了公開邊界的訊號。在個人倉庫中,2.75% 公開了 .claude/settings.local.json,那是 Claude Code 自己會排除在版本控制之外的檔案;10.5% 公開了 AI 代理設定檔;而最具體的發現,是寫在這些設定檔裡的家目錄路徑。
本計畫沒有任何人、也沒有任何 AI 模型讀過被量測的倉庫。數字是演算法回報的,可能失真;研究也刻意停在這裡,因為再往下就等於去讀人們不打算公開的東西。
1. 問題
一條交付流程可以生成程式碼、通過測試、通過 secret scanner、通過審查、成功 push。這些各是一個獨立的命題,其中沒有一個等於「公開出去的結果守住了它的隱私與安全邊界」。
計畫始於一個有紀錄的案例。一個交付流程有隱私規範,也有自動檢查器;檢查器回報 PASS。但被排除的私人值仍然可以被恢復:它就存在檢查器本身裡,被拆成幾個分開的字串常數,連續字串搜尋看不見,簡單串接就能重建。流程裡沒有任何東西壞掉,只是證據沒有覆蓋到真正重要的那個結果。
於是工作問題變成:當 AI agent 參與建造與發布軟體時,什麼東西離開了私人工作環境、經由哪些表面離開,以及要怎樣量測它,而不讓量測本身變成又一次外洩。
2. 詞彙
資訊鏈。 一則資訊會經過五個狀態:已觀察、已授權、已持久化、已公開、可外部取得。每一個箭頭都是一個獨立的權限。計畫的簡寫是:agent 可以觀察,不代表可以存下來;可以存下來,不代表可以公開。
公開邊界閉包。 當有證據顯示到達公開端的內容正是原本要公開的、而且沒有多出任何東西時,這次交付才算閉合。閉包是證據與覆蓋範圍的性質,不是檢查跑了幾次。
綠燈謬誤。 把各項檢查寫成 V₁ … Vₙ、真正的後置條件寫成 G:除非 G 被映射進它們的覆蓋範圍,否則 V₁ ∧ … ∧ Vₙ = PASS 推不出 G = PASS。讀同一個來源、共用同一個生成 oracle 的檢查彼此並不獨立,所以綠燈越多,增加的可能只是信心而不是保證。檢查看不到的表面,回傳 NOT MEASURED,永遠不是 PASS。
Agent 脈絡即出口面。 九個脈絡類別讓問題可以被量測,而不是被爭論:C1 工作站或本機路徑、C2 執行環境或工具拓撲、C3 認證或 session 脈絡、C4 私有網路或內部端點、C5 即時的營運安全狀態、C6 組織或專案關係拓撲、C7 個人或身分脈絡、C8 類 secret 內容、C9 生成的診斷脈絡。敏感度與風險是兩條獨立的軸:具體的路徑可能無害,認證的說明可能是必要的文件。
可恢復性。 「有或沒有」對隱私來說太粗。R0 不可恢復、R1 弱可推論、R2 強可推論、R3 可直接重建、R4 字面存在。
警示等級。 L0 一般;L1 操作性、非敏感;L2 具體脈絡,但尚未證明不應公開;L3 可能的邊界事件,即具體、公開、在其脈絡中必要性低,且經獨立確認;L4 嚴重,即疑似有效的憑證或金鑰,永遠不驗證。
知識狀態。 每個命題都帶一個:O 已觀察、H 假說、E 已確立、NM 未量測。截至本文,計畫中沒有任何命題達到 E。
3. 第一階段的論證
統合框架(論文 00)。 交付是否正確,看的是它留下的世界狀態,而不是程式是否正確。Hash 證明這些位元組就是被雜湊的那些,不說明它們揭露了什麼。私有倉庫不是保險箱,現行版本清乾淨也不代表歷史乾淨。
綠燈謬誤(論文 01)。 宣稱的保證不應超過已展示的覆蓋。不完整規格的正確實作,會通過它收到的每一個測試;生成出來的測試,與生成它的程式碼共用盲點。論文區分 detector 的偽陰性與「範圍偽 PASS」:detector 運作正確,卻被指向錯誤的表面。
Agent 脈絡即出口面(論文 02)。 專案根目錄、本機執行環境、瀏覽器 profile、內部端點與憑證載入慣例,會被寫進指示檔、設定、fixture 與生成的文件;一旦這些檔案被公開,它們就越過了原本不是為之而寫的那條線。規則檔與反例甚至可能暴露它們要守護的值。
從 Secret Scanning 到語義隱私(論文 03)。 模式偵測回答的是「有沒有已知形式的 secret」。交付物仍可能帶著本機身分、工作站路徑、網路配置或組織關係,卻沒有任何一處字面命中;也可能把一個值拆散在常數與檔案之間。論文同樣堅定地拒絕另一個極端:語義 AI detector 不是神諭,它自己的解釋也可能外洩。模式證據、語義證據、政策脈絡與獨立反證要合併使用,UNKNOWN 也要保留為一個答案。
組織層級的傳播(論文 04,假說)。 共用的規則、模板、skill 與 scanner 是供應鏈的根。一個脈絡錯誤可能被每一個複製它的倉庫繼承;被廣泛共用的 scanner,它的 PASS 看起來比它實際賺到的更有權威;同一份政策的各個副本,會以不同速度老化。
建造與攻擊的不對稱(論文 05,假說)。 AI 降低「做出能用的東西」的成本,快過降低「做出安全的東西」的成本,也可能降低找到弱目標的成本。這個假說很窄,論文也不主張現在的 AI 是萬能的攻擊者。
供應商與平台的責任(論文 08)。 觀察、執行、持久化、發布是四條不能合併的邊界:執行安全不等於發布安全,secret 安全不等於語義上的隱私。平台在前三者已經建立了實在的控制。審閱中沒有找到通用的、語義層的公開邊界治理層;審閱中沒找到,不等於不存在。責任分層落在供應商、平台、組織、倉庫與使用者身上。
4. 不看,也能量
方法為什麼重要(論文 06)。 可以公開取得,不等於可以毫無倫理摩擦地觀察、聚合、保存與再發布。為了證明路徑與身分外洩而去讀它們的研究者,就成了第二個觀察者與新的聚合點,而這正是被研究的那種失敗。
演算法(論文 09,RBPM)。 倉庫當下的公開狀態,依序經過正規化、detector 組合、敏感值壓制、特徵抽取與裁決,得到研究安全的輸出:X → N → D → S → F → A → O。O 之前的一切都在封閉程序內執行;離開的只有封閉詞彙中的類別、等級、計數與級距。
不可放寬的規則:
- UNKNOWN 不是 PASS,NOT MEASURED 是獨立的結果。
- 永遠不驗證任何憑證。
- 只看當下的公開狀態:不看歷史、不看已刪除的 commit、不碰私有倉庫。
- 特徵算完後,倉庫身分即丟棄。
- 揭露任何分組之前,先鎖定標籤,並先寫下對鎖定資料的判讀。
- 嚴重發現只建立不透明的票據,流程不再往下挖。
- 倉庫文字是資料,永遠不是指令。
- 驗證者本身也是被驗證的表面:detector、log 與報告同樣要稽核是否外洩。
研究協定(論文 07)。 一份可預先登錄的設計,有配對對照、以不重複倉庫為單位抽樣、保留 UNKNOWN 狀態,用來回答 pilot 回答不了的盛行率與差異問題。計畫沒有執行這份驗證性設計,第 7 節說明原因。
第二階段怎麼套用它。 每一輪的協定都在抓取任何資料之前提交凍結。候選來自 GitHub 程式碼搜尋。篩選、抓取與分類都在同一個封閉程序裡完成,主控台只印計數。每一輪都有中性識別碼、記錄釋出檔雜湊的鎖定檔、一份對鎖定資料的書面判讀,以及一個完全不匯入執行器程式碼的獨立稽核器。之後才接上擁有者類型或 AI 工具組合等分組屬性。
5. 演算法看到了什麼
所有樣本都是探索性、非機率的。區間是精確 95%(Clopper–Pearson)。以下沒有任何數字是盛行率。
5.1 第一階段,2026 年 9 月
| 量測 | 結果 |
|---|---|
| 程式碼搜尋 pilot,2026-09-20 | 含 /Users/ 前綴的檔案原始搜尋比例:CLAUDE.md 3.55%、AGENTS.md 2.13%、.cursor/rules 1.45%。是搜尋數,不是外洩率。 |
| AI 原生公司存在性檢查,N = 12 | 11 家有公開的 AI 協作面;2 家出現有界的脈絡訊號;沒有升級。 |
| 兩次極小盲測,N = 6 + 6 | 盲化邊界在真實資料上連續兩次成立。 |
| 60 個倉庫的橋接量測,三個商業分層 | L0 43、L1 15、L3 2;兩個 L3 都在 AI 原生公司的 agent 指示檔上。 |
| 同一組樣本,三種表面 | 高警示:agent 指示檔 40 格中 2 格,README 59 格中 0 格,治理檔 51 格中 0 格。 |
5.2 第二階段:組織與個人,三種表面(N = 236)
四輪倉庫都同時帶有根目錄的 AGENTS.md 或 CLAUDE.md、README 與治理檔,讓任何表面都不會在結構上缺席。規則為第一輪凍結時的版本。
| 表面 | 高警示格 | 比例 | 95% 區間 | L3 |
|---|---|---|---|---|
| README | 233 格中 8 格 | 3.4% | 1.5–6.7% | 2 |
| Agent 指示檔 | 236 格中 7 格 | 3.0% | 1.2–6.0% | 4 |
| 治理檔 | 235 格中 2 格 | 0.9% | 0.1–3.0% | 1 |
236 個倉庫中有 16 個(6.8%,3.9–10.8%)至少有一格高警示。各輪約 60 個倉庫,高警示格從 1 格到 9 格不等。
5.3 第二階段:帶有 AI 協作標記的個人倉庫(N = 400)
兩輪各 200 個由個人帳號擁有、近兩年建立的公開倉庫,從五種 AI 指令檔平均抽樣:CLAUDE.md、AGENTS.md、GEMINI.md、.github/copilot-instructions.md、.cursorrules。其中 292 個沒有任何星數。每個倉庫的 AI 協作輪廓(檔案樹中的工具家族、目前 head commit 上的 AI 共同作者標記、README 中的聲明)都在封閉程序內記錄,標籤鎖定後才接上。
| 觀察 | 倉庫 | 比例 | 95% 區間 |
|---|---|---|---|
.claude/settings.local.json 被公開 | 400 個中 11 個 | 2.75% | 1.4–4.9% |
| AI 代理設定檔被公開 | 400 個中 42 個 | 10.5% | 7.7–13.9% |
| AI 對話紀錄被公開 | 400 個中 0 個 | 0% | 0–0.9% |
| 至少一格高警示,個人時期規則 | 400 個中 34 個 | 8.5% | 6.0–11.7% |
| 至少一格高警示,企業時期規則 | 400 個中 17 個 | 4.25% | 2.5–6.7% |
.claude/settings.local.json 是 Claude Code 存放使用者個人專案設定的檔案,「不再詢問」的權限核准也寫在裡面;Claude Code 建立它時會自己把它排除在 git 之外。它被公開,是工具自己的文件所定義的越界,不是這個演算法的判斷。在 192 個帶有任何 Claude 標記的倉庫中,有 11 個(5.7%)公開了它。
按表面看,代理狀態檔的高警示比例最高(66 格中 6 格,9.1%,3.4–18.7%),README 為 360 格中 21 格(5.8%),指示檔為 400 格中 12 格(3.0%)。代理狀態檔的 6 格高警示中有 5 格是 L3:具體的家目錄路徑被寫在 .cursor/mcp.json(兩格)、.gemini/settings.json(兩格)或 .vscode/mcp.json(一格)裡。沒有任何星數的倉庫,至少一格高警示的比例最高(292 個中 30 個,10.3%)。
為個人而寫的規則,找到的高警示倉庫大約是企業時期規則的兩倍,因為舊規則看不到聯絡用語之外的個人電子郵件、操作行上的私有網路位址,以及設定檔裡的路徑。
5.4 重現
凍結的第一階段套件被重新執行:212 項測試通過(1 項跳過),它自帶的六個獨立稽核器全部通過,上述表面矩陣的主要數字也只用它釋出的格子就重算回來。
6. 成立的、不成立的,以及演算法做錯的
成立。 在量測過的每一個族群裡,都出現了與 agent 相關的公開邊界訊號:企業、組織與個人。個人會公開自己的工具視為私人的檔案。代理設定檔帶著具體的本機路徑。
不成立。 第一階段「高警示集中在 agent 指示檔」的現象,在表面平衡的第二階段樣本上沒有重現;README 一樣高。第一輪個人樣本看起來像是「同時用三種以上 AI 工具的人洩漏更多」,這在打開第二輪之前就被寫成預測,結果第二輪不支持。擁有者類型之間的差異,始終落在彼此重疊的區間裡。
公開處理的缺陷。
- 凍結儀器遇到
key = value形式的祕密會整格失敗,而不是升級。一條預先登錄的包裝規則接住了它們;沒有那條規則,第二階段全部三格嚴重發現都會變成 UNKNOWN 而消失。 - 第一輪新樣本的協定只確認一格的「主要」發現類別,導致一格帶有具體、低必要性路徑的 README 未經檢查就被降級;它修正後的結果記為 UNKNOWN。
- 必要性是對整個檔案判斷的,任何地方出現一個範例字詞,就可能讓具體路徑停在 L3 之下;後來的規則改為判斷每個實例周圍七行的視窗。
- 凍結的偵測器漏抓單反斜線的 Windows 路徑、沒有個人身分偵測器,也看不到 JSON 引號形式的祕密。後來的規則為每一項都加了獨立偵測器。
- 一份報告誇大了哪些字詞會觸發必要性規則;已加上標明日期的勘誤。
有三格符合憑證的形狀。它們從未被測試;定位紀錄一直封存、從未被打開,並於 2026-10-13 刪除。整個過程沒有聯絡任何個人或組織。
第二階段後的知識狀態。 三個族群中都存在這個現象,屬於 O。所有比較性與因果性的陳述(AI 輔助對非 AI 倉庫、組織層級的放大、建造與攻擊的不對稱、轉型期風險)仍是 H。盛行率與治理落差仍是 NM。沒有任何命題達到 E。
7. 倫理,以及研究為什麼停在這裡
我們沒有直接去看他們的 GitHub,是用演算法的,所以數據可能是失真的。我必須承認。但我絕不會為了數據跟資訊的完整性,真的去看他們不想讓人看到的。——Neo.K
計畫要證明的是:這個問題在個人、組織與企業都存在,而且研究者盲測的演算法能把它呈現出來。兩者現在都已觀察到。下一個自然的步驟,是直接以代理狀態檔為抽樣對象,看看公開的設定與對話紀錄裡寫了什麼;那等於去讀人們不打算公開的東西,而他們當中很多人也可能已經自己處理好了。所以計畫停在間接觀察。
同樣的理由也決定了發布的方式。標籤鎖定後才接上的逐倉庫屬性(擁有者類型、AI 工具組合、星數級距)只以彙總形式公開,因為罕見的組合可能指向某個特定倉庫。代價是兩份合併計算無法從公開版完整重跑,這個代價是有意接受的。
數據為什麼可能失真。
- 沒有任何發現經過人工確認,偽陽性(刻意的範例、公開的聯絡地址)與偽陰性都還在。
- 「疑似祕密」指的是形狀,沒有任何東西被測試過。
- 抽樣框架不是隨機樣本:程式碼搜尋會排序結果、每個查詢最多只開放一千筆,而且每個框架都要求特定檔案。
- 儀器有已知缺陷,而修補其中一部分的後續規則,本身也是未經人工驗證的啟發式方法。
- 60 個倉庫一輪,各輪之間波動很大。
- 後續規則由同一個 AI 系統設計並判讀輸出;還沒有另一套獨立撰寫的儀器在同一個框架上執行過。
- 每個倉庫只在它當下的狀態被觀察一次,之後可能已經改變。
- 程式碼搜尋給的檔案總數是索引的近似值,不是外洩的數量。
8. 這意味著什麼
以下各點都來自觀察本身,不依賴任何盛行率數字。
給使用 coding agent 的人。 把工具的本機檔案當成永不提交:.claude/settings.local.json、CLAUDE.local.md、本機的 agent 對話紀錄。如果檔案是工具建立的,它可能已經被排除;如果是你自己建立或複製的,請自己把它加進 .gitignore。MCP 與編輯器設定請用環境變數或專案相對路徑,而不是你的家目錄。公開之前,看一看實際要離開的檔案,而不只是 scanner 的結論。
給團隊。 把本機與共享的 agent 脈絡放在不同檔案。描述認證怎麼運作,永遠不要寫出 token 或 session 在某台機器上的位置。回讀實際到達遠端的內容:本機 PASS 不是遠端證據。檢查看不到的地方,記為 NOT MEASURED。
給工具與平台的開發者。 把某個檔案定義為本機專用的那個工具,最有條件在那個檔案即將被提交或公開時察覺。只比對 key = value 的祕密偵測,會漏掉 JSON 設定裡帶引號的鍵值形式。執行沙盒與 secret scanning 保護的是真實的邊界;agent 脈絡的公開,是另一條自成一格的邊界。
9. 限制
本版是整合,不是經同儕審查的論文。它所依據的第一階段草稿仍是內部文件。它的量測只在特定框架中、以探索性強度確立「存在」,對盛行率什麼也沒說。第一階段設計的驗證性研究,經決定不執行。凍結的 v0.8.3 核心之外的儀器規則,是在研究過程中撰寫的;每一輪之前都有文件、版本並先凍結,但沒有經過外部驗證。
10. 取得、作者與授權
- 演算法、協定、釋出特徵、各輪報告、合併計算與重現紀錄:github.com/EveMissLab/apbsc-rbpm。
verify.py會檢查每個檔案的雜湊、每一輪的鎖定與獨立稽核。 - 計畫網站,含論文摘要、證據帳與方法:privacy.evemisslab.com。
- 研究主導:Neo.K,EveMissLab。第一階段儀器(v0.8.3)在 ChatGPT 協助下完成。第二階段的協定、執行器、稽核器、報告與本版,由 AI(Claude)在作者指導下撰寫。
- 程式碼:MIT。文字、協定與釋出資料:CC BY 4.0。
附錄 A:第二階段後的命題帳
| 編號 | 狀態 | 命題 |
|---|---|---|
| O1 | O | AI 協作檔本身可能成為公開出口。 |
| O2 | O | 至少在一個有紀錄的流程中,檢查器回報 PASS,而可被恢復的排除資訊就存在檢查器本身裡。 |
| O3 | O | 公開的 AI 協作檔可能含有具體的工作站、執行環境、session 與內部網路脈絡。 |
| O4 | O | 真實的公開檔案可以被化約成有界的研究特徵,過程中不輸出倉庫身分或原文。 |
| O5 | O | 在凍結的 60 個企業倉庫樣本中,兩個高警示結果都在 agent 指示檔上。 |
| O6 | O | 個人會公開自己的 AI 工具視為本機專用的檔案,例如 .claude/settings.local.json。 |
| O7 | O | 被公開的代理設定檔可能帶有具體的家目錄路徑。 |
| O8 | O | 與 agent 相關的公開邊界訊號,同樣出現在個人、組織與企業。 |
| H1 | H | AI 輔助的倉庫比配對的非 AI 倉庫外洩更多。 |
| H2 | H | 組織共享的脈絡,會把同一種外洩模式放大到許多倉庫。 |
| H3 | H | 共用證據根的多個 AI 審查者,高估了驗證的獨立性。 |
| H4 | H | 傳統 secret scanning 的統計,低估了語義層的隱私外洩。 |
| H5 | H | AI 輔助建造讓低成熟度目標增加的速度,快過防禦自動化讓它減少的速度。 |
| HT | H | 正在轉向 AI 的組織,比 AI 原生組織風險更高。橋接量測沒有支持,也沒有否定。 |
| NM1 | NM | 任何外洩類別的母體盛行率,以及它的趨勢。 |
| NM2 | NM | 脈絡表面與其周圍控制之間的治理落差。 |
附錄 B:第一階段論文
皆為 v0.1,2026-09-21,內部研究草稿。摘要見計畫網站。
| 編號 | 標題 |
|---|---|
| 00 | AI Agent 公開邊界與安全閉包:統合框架 |
| 01 | 綠燈謬誤:代理驗證成功與真實安全後置條件的落差 |
| 02 | AI 協作物即出口面:Agent Context 的資訊外逸問題 |
| 03 | 從 Secret Scanning 到 Semantic Privacy:模式檢測無法覆蓋的公開邊界 |
| 04 | 組織尺度的 Agent Context 傳播:共享規則、模板與供應鏈風險猜想 |
| 05 | AI 建造—攻擊不對稱:Vibe Coding、低垂果實與自動化攻擊面 |
| 06 | 研究隱私外洩而不重演隱私外洩:Researcher-Blind Privacy Measurement |
| 07 | AI 協作公開邊界的實證研究協議:Sampling、Matched Control 與 Prevalence Estimation |
| 08 | 供應商與平台責任:AI Coding Tool 的 Publication-Boundary Governance |
| 09 | Researcher-Blind Publication-Boundary Measurement Algorithm |