一個用於設計跨平台桌面應用程式的Agent Skill,使其感覺像原生應用 — 提煉自Raycast 2.0的技術深入探討,並基於對出貨的Raycast Beta.app 二進位檔進行逆向工程。
兩個目標通常互相矛盾:便利的跨平台開發與接近原生的效能。這項技能捕捉了結構性的選擇——八個架構原則、四層架構、WebKit/WebView2 生存指南、75項出貨審核清單——讓應用程式能兩者兼得。
這是什麼
為需要建置以下特性桌面應用程式的架構師、技術主管和工程師提供的參考:
從單一UI程式碼庫在macOS + Windows(可選Linux)上執行,
在500毫秒內啟動,常駐記憶體低於500 MB,
對使用者來說與原生應用程式無異(沒有
cursor: pointer的痕跡、啟動時沒有白閃、沒有WebKit右鍵選單、沒有平滑滾動的JS),支援外掛/擴充套件生態系統(使用TypeScript),
可與iOS和伺服器後端共享效能關鍵的程式碼。
這是四層架構:原生殼層 → 系統WebView(WKWebView/WebView2)→ Node後端 → Rust核心,透過一個統一的型別化IPC schema連接,並為每個執行時期生成客戶端。
這不是什麼
非為單一OS的應用程式(直接用原生開發即可)。
非為Electron那種「夠用就好」的應用程式(這裡的打磨預算高出5–10倍)。
非為嚴格要求低於150 MB或低於100毫秒冷啟動的應用程式(底線是真實存在的)。
非為遊戲、文件編輯器或媒體播放器。
執行checklists/decision-tree.md 來判斷這個架構是否適合你的專案。它已經排除了幾個常見案例——直接說出來比過度調整建議更有用。
理念
這個架構解決的核心矛盾:當便利的跨平台開發與接近原生的效能通常互相矛盾時,桌面應用程式要如何兩者兼得? 八個原則說明了結構性的調整:
將接縫放在渲染層 — 在WebView之上共享,在之下分歧;這是唯一能同時兼顧開發體驗與原生感的層級。
一個schema,多種語言 — 多語言成本只在宣告時支付一次,不在呼叫端支付。
順應平台,而非與之競爭 — 作業系統繪製的模糊、滾動、材質和深色模式比你自己做的更好。
效能是感知的屬性 — 使用者感受到的,而不是Activity Monitor報告的。
短迭代循環就是產品 — 200毫秒的熱重載 vs 30秒的原生重建,這是一個150倍的複合優勢。
有意識地跨越邊界 — IPC有成本;將每次跨越設計為非同步、批次、schema型別。
身份就是肌肉記憶 — 快捷鍵、排序順序、動詞就是應用程式;其他都是實作細節。
將基準與邊際分離 — WebView+Node的底層是租來的;只有你的髒頁才值得最佳化。
先閱讀references/01-philosophy.md。其他一切都是推論結果。
關於Agent Skill
Agent Skills 是新興的標準,用於包裝領域知識,讓任何相容的代理(Claude Code、Claude Agent SDK或其他支援Agent Skill的執行環境)都能發現並載入。透過README頂部的提示安裝後,當代理對話涉及到跨平台桌面架構、WebView細節或Raycast風格的應用程式時,該技能會自動啟用——觸發條件在SKILL.md 的前置元資料中宣告。
資料來源
Raycast的公開技術文章:A Technical Deep Dive into the New Raycast
對
Raycast Beta.appv0.60.0(macOS 26+版本,Xcode 17,arm64)的逆向工程——參見references/07-evidence-raycast.md了解發現的內容與方法。