Communitygithub.com

noambrand/gmail-label-cleanup

AI 代理技能:將龐大的 Gmail 收件匣根據你既有的標籤分類整理,並建立篩選器讓新郵件自動歸類。包含一鍵安裝 Gmail MCP 的功能。

gmail-label-cleanup 是什麼?

此技能為 AI 代理(如 Claude Code、Cursor、Codex 等)提供一套系統化的方法,來解決 Gmail 收件匣大量未分類郵件的問題。與大多數內建 Gmail 連接器一次只能處理一個執行緒、且缺乏篩選器 API 不同,此技能透過一個完整的 Gmail MCP 伺服器,實現批次處理(每批 50 封郵件)與真實的伺服器端篩選器,大幅提升效率。其核心原則是「從使用者過去的標籤行為中學習規則,而非憑空發明」,確保分類準確。技能支援多個平台(Claude Code、Coder、Codex 等),並提供詳細的逐步操作指南,包括安裝 MCP 伺服器、建立規則檔案、執行批次處理、以及可復原的日誌系統,讓使用者能安全、有條理地清理 Gmail 收件匣。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add noambrand/gmail-label-cleanup

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

Gmail 標籤清理

將大量的 Gmail 收件匣根據使用者自己的標籤進行分類,並讓未來的郵件自動歸類。

大多數助手的內建 Gmail 連接器一次只能為一個執行緒加上標籤,而且沒有篩選器 API。這對於數千封郵件來說太慢了,也無法阻止郵件繼續堆積。這個技能使用一個完整的 Gmail MCP 伺服器,它提供真正的伺服器端篩選器和 50 封郵件批次處理功能。

初次執行前

  1. 安裝 MCP 伺服器。 請參閱 install/INSTALL.md。它需要一個 Google Cloud OAuth 桌面客戶端和一次瀏覽器登入。大約需要十分鐘,一次即可。
  2. 建立規則檔案。 將 references/rules-TEMPLATE.md 複製到一個私人檔案(範本建議使用 my-rules.md,該檔案已包含在 .gitignore 中),並根據帳戶本身的歷史記錄填寫。切勿憑空發明規則。 請參閱「學習規則」一節。

讓此技能運作的一條規則

規則是從使用者過去的標籤行為中學習的,絕不憑空發明。

對於每個寄件者或主旨,查看此人過去已將該寄件者歸類到哪個標籤,然後複製。只有當某個寄件者完全未出現在其歷史記錄中時,才允許做出判斷,並且必須記錄在「猜測」部分,以便日後修正。錯誤的標籤很容易修正;而悄悄對 300 封郵件套用錯誤的標籤則不然。

第二條規則是從經驗中學到的:內容很重要,而不僅僅是寄件者。 寄件者只是一個維度。來自健康出版商的理財電子報應該獲得理財標籤。一個執行緒可以帶有多個標籤。

學習規則

詢問帳戶,而不是人。對於每個標籤,讀取裡面已有的內容:

search_emails: label:"<標籤名稱>"

讀取 30 到 50 個結果,然後記下寄件者。那個列表就是規則。對每個標籤重複此步驟。然後使用 list_email_labels 取得標籤 ID,因為 batch_modify_emails 實際上是使用這些 ID。

執行一次,將其寫入規則檔案,並在每次執行時持續附加。每次執行都會發現上一次未見到的寄件者。

執行一次處理

一次處理是一個有界限、有記錄、可逆轉的工作區塊。目標是 200 到 300 封郵件。不要試圖在一次執行中完成所有事情。

1. 確認篩選器存在。

list_filters

如果規則檔案中的篩選器遺失,請先使用 create_filter 建立它們,每個標籤群組建立一個,使用 from: 條件。篩選器是防止問題再次發生的關鍵。

2. 尋找未標籤的郵件。

先找收件匣:

search_emails: has:nouserlabels in:inbox

一旦收件匣只剩下那些故意不標籤的郵件,剩下的工作就是封存。按日期逐頁處理,每次移動最舊的邊界:

search_emails: has:nouserlabels -in:inbox -in:sent -in:draft -in:trash -in:spam -in:chats before:YYYY/MM/DD

每次取 50 到 60 封。將 before: 設定為剛剛處理過的最舊結果的日期,下一個呼叫就會從你停止的地方繼續。這比分頁 token 更可靠,而且能夠承受中斷。

3. 按標籤分組,然後批次處理。

將該頁郵件按每個標籤整理成一個郵件 ID 列表,然後對每個標籤呼叫一次 batch_modify_emails,並使用 addLabelIds。切勿對每封郵件進行一次呼叫。

如果一個批次傳回 Too many concurrent requests for user,則僅重試失敗的 ID。該呼叫會準確報告哪些 ID 失敗。

4. 記錄它。 在復原日誌中附加一個帶有日期的條目。請參閱下面的「復原日誌」。

絕不觸碰

  • 一次性登入驗證碼、魔法連結、密碼重設和安全性警示。 這些保持未標籤狀態,也絕不丟入垃圾桶。如果某人需要快速找到登入驗證碼,標籤沒有幫助,而垃圾桶規則則會造成嚴重損害。
  • 使用者自己的「永不標籤」清單上的任何內容。 人們有一些他們希望保持不標籤的刊物和寄件者,他們會告訴你。一旦他們說出來,就立刻用他們的話寫入規則檔案。
  • 家庭和個人郵件,除非使用者自己已經為該寄件者加上了標籤。

丟入垃圾桶

僅在使用者明確授權的情況下才丟入垃圾桶,並且僅按主旨比對。安全預設集合是服務條款和隱私權政策更新通知:

subject:("terms of service" OR "terms and conditions" OR "terms of use"
         OR "privacy policy" OR "user agreement")
negatedQuery: subject:(code OR verification OR verify OR "security alert" OR password)

否定查詢不是可選的。沒有它,一封「驗證您的帳戶 - 已更新條款」的郵件就會被丟入垃圾桶。

Gmail 的垃圾桶在 30 天內可以復原。此技能絕不會永久刪除任何內容。

復原日誌

每次處理都會附加一個帶有日期的條目。它是使工作可逆轉和可審查的記錄:

  • 日期和處理編號。
  • 篩選器是否存在,以及任何建立的篩選器。
  • 已標籤的數量,以及每個標籤的數量。
  • 判斷決定,具體命名。哪些寄件者沒有前例,決定了什麼,以及原因。這是之後需要更正的部分。
  • 已確認保持不標籤且未觸碰的內容。

請參閱 examples/undo-log-EXAMPLE.md。即使處理過程很無聊也要記錄。尤其是那種時候。

篩選器不會觸碰舊郵件

這經常讓人困惑,所以請大聲對使用者說:

Gmail 篩選器只會對建立之後送達的郵件生效。 它永遠不會回頭處理舊郵件。因此這項工作的兩個部分實際上是分開的:篩選器自動處理未來,而封存郵件的積壓必須按照上述方法手動逐批處理。

這意味著:在幾次處理發現了真正的高量寄件者之後,請回頭也為它們新增篩選器。否則這些寄件者的郵件會繼續未標籤地送達,積壓問題就會在你身後重新產生。

反轉一次處理

讀取該批次處理的復原日誌條目,然後對相同的郵件 ID 使用 removeLabelIds 呼叫 batch_modify_emails。對於任何被丟入垃圾桶的內容,untrash 在 30 天內有效。這就是為什麼日誌記錄的是數量和原因,而不僅僅是「完成」。

相關技能