Mori 想幫你「打開 Slack」前,要先知道 Slack 在哪。早期版本 open_app 是 LLM 猜 binary 名(slack / Slack / com.tinyspeck.slackmacgap?),經常猜錯。Phase C 改成:Mori 開機掃本機已裝的 app,寫進 installed-apps catalog,LLM 拿到「Slack」就照表查 exec。
~/.mori/installed-apps.linux.json # Linux
~/.mori/installed-apps.windows.json # Windows
~/.mori/installed-apps.macos.json # macOS(未支援)
檔名帶 OS 後綴是因為 Mori 可能跨多機(同 vault sync),catalog 跟本機綁。
| OS | 掃哪些路徑 |
|---|---|
| Linux |
/usr/share/applications//usr/local/share/applications/~/.local/share/applications//var/lib/flatpak/exports/share/applications/(Flatpak)~/.local/share/flatpak/exports/share/applications/
|
| Windows |
%PROGRAMDATA%\Microsoft\Windows\Start Menu\Programs%APPDATA%\Microsoft\Windows\Start Menu\Programs遞迴掃 .lnk shortcut 抓 target
|
{
"os": "linux",
"scanned_at": "2026-05-19T08:00:00Z",
"apps": [
{
"name": "Slack",
"exec": "/usr/bin/slack",
"aliases": ["slack"],
"categories": ["Network", "InstantMessaging"]
},
{
"name": "Firefox Web Browser",
"exec": "/usr/bin/firefox",
"aliases": ["firefox", "Firefox"],
"categories": ["Network", "WebBrowser"]
}
]
}
aliases 含 .desktop 的 X-AppName / GenericName / 中文名等多種寫法,LLM 拿到使用者口語(「火狐」/「FF」)有更大機會 match。
三種觸發:
scanned_at 超過 24h),下次開機重掃LLM 看到使用者說「打開 Slack」,呼叫 open_app(name: "Slack")。skill 內部:
xdg-open / Windows ShellExecuteExW)Catalog 是純本機檔,Mori 不會上傳。LLM 看到的是 catalog snippet 不是全部資料 — system prompt 只塞「app 名 + 是否安裝」,不塞 exec 路徑(那會洩漏系統結構)。
不想 Mori 知道某個 app → 手動編輯 catalog 刪掉那行(下次開機可能重新加回來,要永久排除可加到 ~/.mori/installed-apps.ignore,一行一個正則,catalog 規劃中)。