Mori

DOCS

Installed Apps Catalog

PHASE C · OPEN_APP 不亂猜

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

Catalog 結構

{
  "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。

重新掃描

三種觸發:

open_app skill 怎麼用 catalog

LLM 看到使用者說「打開 Slack」,呼叫 open_app(name: "Slack")。skill 內部:

  1. 讀 catalog 找名稱 / alias match(含 fuzzy)
  2. 找到 → 用平台 API 啟動(Linux xdg-open / Windows ShellExecuteExW)
  3. 找不到 → 回 LLM「Mori 沒看到這個 app,要不要先裝?」,不亂猜 binary

隱私

Catalog 是純本機檔,Mori 不會上傳。LLM 看到的是 catalog snippet 不是全部資料 — system prompt 只塞「app 名 + 是否安裝」,不塞 exec 路徑(那會洩漏系統結構)。

不想 Mori 知道某個 app → 手動編輯 catalog 刪掉那行(下次開機可能重新加回來,要永久排除可加到 ~/.mori/installed-apps.ignore,一行一個正則,catalog 規劃中)。