Problem
使用者原文(2026-04-14 對話中發現):
「archive mail沒有順便把附件抓下來嗎?」
現有 commands/archive-mail.md 的 Step 5 生成 Markdown 時,只把附件檔名寫進 Markdown 正文(例如 Attachments: Taxometric_Analysis_Submission_v3_20260408.docx, Figures & Tables20260408.docx),沒有實際下載附件到本地磁碟。
2026-04-08 歸檔的 Tatsuma 信件即為例證:communications/2026-04-08_Re--Shall-we-resume-work-on-the-Taxometric-Analysis-paper-al-1.md 原本最後一行只有檔名字串,原始 .docx 仍停留在 Apple Mail.app 內部儲存區;使用者若日後要存取,必須手動從 Mail 取出。
MCP server 本身有附件能力但 command 完全沒用:
mcp__plugin_che-apple-mail-mcp_mail__list_attachments
mcp__plugin_che-apple-mail-mcp_mail__list_attachments_batch
mcp__plugin_che-apple-mail-mcp_mail__save_attachment
Type
feature
Baseline from manual backfill (2026-04-14)
2026-04-14 session 已在 tatsuma 專案手動實作整套 pattern 一次,驗證 7 個附件、3 個 email、跨 thread 2 週時間範圍。commits: bcac7ee (init), 784eac6 (backfill)。以下是已驗證可行的約定,正式實作時應直接採用:
1. 目錄結構(確定)
{output_dir}/attachments/{主郵件 markdown stem}/{原檔名}
其中 markdown stem 是主信歸檔 md 的檔名去掉 .md。例如:
| 主信 md |
附件目錄 |
2026-04-08_Re--Shall-we-resume-work-on-the-Taxometric-Analysis-paper-al-1.md |
attachments/2026-04-08_Re--Shall-we-resume-work-on-the-Taxometric-Analysis-paper-al-1/ |
2026-03-17_Re--Shall-we-resume-work-on-the-Taxometric-Analysis-paper-Ab.md |
attachments/2026-03-17_Re--Shall-we-resume-work-on-the-Taxometric-Analysis-paper-Ab/ |
好處:一對一對應、可 ls 查找、支援回填(md 已存在、附件後補)。
2. 檔名保留原始(確定)
附件檔名不套 #16 的 subject hyphenation rule,保留原始 bytes(含空白、&、中日文、emoji)。磁碟 I/O 用原字串寫入,在 Markdown link URL 才做 URL encoding。
3. URL encoding(確定)
Markdown 的 [label](url) 裡只需要處理:
- 空白 →
%20
& → %26
- 其他一律保留(中日文 Unicode 不動,GitHub/VS Code 都能 render)
顯示文字([label])保留原檔名完整可讀。範例:
- [Figures & Tables20260408.docx](attachments/2026-04-08_.../Figures%20%26%20Tables20260408.docx) (93 KB)
4. Attachments 區塊在 md 中的位置(確定)
原信簽名結束後(例如 Tatsuma 的 ∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞ 分隔線之後),引用 thread history(差出人: / 寄件者: 段落)之前。這樣邏輯上屬於「這封信」而非被混到 thread quote 裡。
... Tatsuma's body ...
Kind regards,
Tatsuma
∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞
... signature ...
∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞
Attachments:
- [file1](...) (146 KB)
- [file2](...) (93 KB)
差出人: Lay, Keng-Ling <kllay@ntu.edu.tw>
... thread history ...
5. 回信無附件時的處理(確定)
回信引用原信時,原信的附件標記(例如 <Taxometric_Analysis_Submission_v3.docx>)會被 Mail client 留在 text quote 裡,但 list_attachments(reply_email) 會回傳空陣列。兩者不一致時以 list_attachments 為準。回信 md 的 Attachments: 區塊建議寫 cross-reference:
(Attachments on the original email from Tatsuma — see `2026-04-08_..._al-1.md`)
6. Backfill(既有歸檔補附件)(確定)
若歷史 md 已歸檔但附件沒抓,可以後補:
- 從
list_attachments 取得檔案清單
save_attachment 到 attachments/{既有 md stem}/
- Edit md 在簽名後插入
Attachments: 區塊
本次 backfill 範例:2026-03-17 的 v2 原稿(4 檔 882 KB)+ 2026-03-23 的 Keng-Ling track-changes 版(1 檔 143 KB)。
7. Thread 覆蓋度檢查(新發現)
執行 /archive-mail 後,若要保證附件完整,應對已歸檔的同 thread email 全部跑 list_attachments_batch 檢查是否有漏抓的附件。今天發現 3/23 整封 email 漏歸檔(date_from=2026-03-24 太晚),需要擴大 thread scope。
Expected(spec)
在 Step 5 生成 Markdown 前新增 Step 4.5「下載附件」:
list_attachments_batch([所有待歸檔 email]) → 一次取得所有附件元資料
- 對每個有附件的 email:
mkdir -p {output_dir}/attachments/{主郵件 markdown stem}/
- 對每個附件
save_attachment(...) 到該目錄(保留原檔名)
- Step 5 生成 Markdown 時在簽名後插入 Attachments 區塊(見 baseline §4)
Actual
Step 5 只描述 Markdown 內容格式,完全沒提附件下載。
Impact
- 歸檔的價值打折:幾年後想看當時討論 "draft v3" 具體內容,需要回 Apple Mail 找,Mail 若已清理或帳號異動就失去附件
- 對合作者來說歸檔不完整
- 與
/archive-mail 的「完整歸檔到本地」語意不符
Open Questions
Baseline 已回答 Q1 (目錄)、Q4 (檔名)、新增了 position / encoding / backfill 規則。剩下 3 個需在 diagnose 階段決定:
Q1 目錄結構 → Decided: attachments/{main-email-markdown-stem}/
- Q2 去重:同一附件被多封信 forward 時如何處理(hash 檢查 / 忽略 / 每封信各存一份)?
- Q3 大小限制:超過 N MB 的附件是否跳過?是否接 git-lfs?(baseline 實作的最大檔案為 439 KB,未踩到限制)
Q4 附件檔名 → Decided: 保留原檔名,僅 URL encoding
- Q5 跳過規則:簽名檔裡的 logo 圖片、email client 的 inline image 是否要歸檔?
- Q6
.claude/emails.md 新增欄位:archive_attachments: bool(預設 true)、attachment_size_limit_mb: int(預設 25)、skip_inline_images: bool(預設 true)?
- Q7 (新)Thread 覆蓋度:/archive-mail 是否該自動對同 thread 已歸檔 email 做 backfill 檢查?或另外提供
/archive-mail --backfill-attachments?
Dependencies
Reference implementation
Tatsuma 專案 2026-04-14 backfill:
PsychQuant/collaborations_tatsuma commits bcac7ee (init) + 784eac6 (backfill)
- 3 個目錄、7 個附件、2 個 md 更新 + 1 個新 md
- 檔名從 54 KB docx 到 439 KB pdf 皆驗證 OK
Problem
現有
commands/archive-mail.md的 Step 5 生成 Markdown 時,只把附件檔名寫進 Markdown 正文(例如Attachments: Taxometric_Analysis_Submission_v3_20260408.docx, Figures & Tables20260408.docx),沒有實際下載附件到本地磁碟。2026-04-08 歸檔的 Tatsuma 信件即為例證:
communications/2026-04-08_Re--Shall-we-resume-work-on-the-Taxometric-Analysis-paper-al-1.md原本最後一行只有檔名字串,原始.docx仍停留在 Apple Mail.app 內部儲存區;使用者若日後要存取,必須手動從 Mail 取出。MCP server 本身有附件能力但 command 完全沒用:
mcp__plugin_che-apple-mail-mcp_mail__list_attachmentsmcp__plugin_che-apple-mail-mcp_mail__list_attachments_batchmcp__plugin_che-apple-mail-mcp_mail__save_attachmentType
feature
Baseline from manual backfill (2026-04-14)
2026-04-14 session 已在 tatsuma 專案手動實作整套 pattern 一次,驗證 7 個附件、3 個 email、跨 thread 2 週時間範圍。commits:
bcac7ee(init),784eac6(backfill)。以下是已驗證可行的約定,正式實作時應直接採用:1. 目錄結構(確定)
{output_dir}/attachments/{主郵件 markdown stem}/{原檔名}其中
markdown stem是主信歸檔 md 的檔名去掉.md。例如:2026-04-08_Re--Shall-we-resume-work-on-the-Taxometric-Analysis-paper-al-1.mdattachments/2026-04-08_Re--Shall-we-resume-work-on-the-Taxometric-Analysis-paper-al-1/2026-03-17_Re--Shall-we-resume-work-on-the-Taxometric-Analysis-paper-Ab.mdattachments/2026-03-17_Re--Shall-we-resume-work-on-the-Taxometric-Analysis-paper-Ab/好處:一對一對應、可
ls查找、支援回填(md 已存在、附件後補)。2. 檔名保留原始(確定)
附件檔名不套 #16 的 subject hyphenation rule,保留原始 bytes(含空白、
&、中日文、emoji)。磁碟 I/O 用原字串寫入,在 Markdown link URL 才做 URL encoding。3. URL encoding(確定)
Markdown 的
[label](url)裡只需要處理:%20&→%26顯示文字(
[label])保留原檔名完整可讀。範例:4. Attachments 區塊在 md 中的位置(確定)
原信簽名結束後(例如 Tatsuma 的
∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞分隔線之後),引用 thread history(差出人:/寄件者:段落)之前。這樣邏輯上屬於「這封信」而非被混到 thread quote 裡。5. 回信無附件時的處理(確定)
回信引用原信時,原信的附件標記(例如
<Taxometric_Analysis_Submission_v3.docx>)會被 Mail client 留在 text quote 裡,但list_attachments(reply_email)會回傳空陣列。兩者不一致時以list_attachments為準。回信 md 的Attachments:區塊建議寫 cross-reference:6. Backfill(既有歸檔補附件)(確定)
若歷史 md 已歸檔但附件沒抓,可以後補:
list_attachments取得檔案清單save_attachment到attachments/{既有 md stem}/Attachments:區塊本次 backfill 範例:
2026-03-17的 v2 原稿(4 檔 882 KB)+2026-03-23的 Keng-Ling track-changes 版(1 檔 143 KB)。7. Thread 覆蓋度檢查(新發現)
執行
/archive-mail後,若要保證附件完整,應對已歸檔的同 thread email 全部跑list_attachments_batch檢查是否有漏抓的附件。今天發現 3/23 整封 email 漏歸檔(date_from=2026-03-24太晚),需要擴大 thread scope。Expected(spec)
在 Step 5 生成 Markdown 前新增 Step 4.5「下載附件」:
list_attachments_batch([所有待歸檔 email])→ 一次取得所有附件元資料mkdir -p {output_dir}/attachments/{主郵件 markdown stem}/save_attachment(...)到該目錄(保留原檔名)Actual
Step 5 只描述 Markdown 內容格式,完全沒提附件下載。
Impact
/archive-mail的「完整歸檔到本地」語意不符Open Questions
Baseline 已回答 Q1 (目錄)、Q4 (檔名)、新增了 position / encoding / backfill 規則。剩下 3 個需在 diagnose 階段決定:
Q1 目錄結構→ Decided:attachments/{main-email-markdown-stem}/Q4 附件檔名→ Decided: 保留原檔名,僅 URL encoding.claude/emails.md新增欄位:archive_attachments: bool(預設 true)、attachment_size_limit_mb: int(預設 25)、skip_inline_images: bool(預設 true)?/archive-mail --backfill-attachments?Dependencies
.claude/emails.mdschema 定稿後再實作(需要新增 attachment 相關 config 欄位)Attachments:欄位設計)Reference implementation
Tatsuma 專案 2026-04-14 backfill:
PsychQuant/collaborations_tatsumacommitsbcac7ee(init) +784eac6(backfill)