Obsidian CLI

Obsidian 1.9+ 內建的命令列工具——讓任何外部程式(特別是 Claude Code)以 wikilink-aware、frontmatter-aware 的方式對 vault 動手,遠比裸 Read / Edit

為什麼重要(給 Claude Code 用的差別)

跟「直接拿 Read / Edit / Write 操作 vault 檔」對照:

維度裸 Read/EditObsidian CLI
wikilink 解析(file=X 不需 path)❌ 要自己算✅ 跟 Obsidian 同 resolver
frontmatter 修改❌ 自己 parse YAMLproperty:set 一行
Daily note 路徑❌ 要自己算當天daily:append 直接
即時生效(Obsidian UI 同步)❌ 需 reload✅ 自動
跑 Obsidian command(譬如執行 plugin)❌ 不可能command id=...
任意 JS(操作 app.vault API)❌ 不可能eval code=...

→ 結論:vault 維護的所有寫入動作,優先用 Obsidian CLI;Read / Grep 仍用原生工具(更快)。

安裝 / 啟動

需 Obsidian 1.9+ 開著。CLI 通過 IPC 跟正在跑的 Obsidian 講話,Obsidian 沒開 = CLI 無作用

# macOS(Homebrew)
brew install obsidian-cli
 
# 確認
obsidian version
obsidian vault   # 顯示當前 vault 名稱 + 路徑 + 檔數

命令分類速查(v1.12.7,~70 commands)

📖 讀取

命令用途
obsidian read file="X"讀檔內容
obsidian backlinks file="X"該頁的 inlinks
obsidian links file="X"該頁的 outlinks
obsidian outline當前檔的標題大綱
obsidian wordcount file="X"字數 / 字元統計

🔍 搜尋 / 列舉

命令用途
obsidian search query="..."全文搜尋
obsidian search:context query="..."含 context 的搜尋
obsidian files / obsidian folders列檔 / 列資料夾
obsidian orphans / obsidian deadends孤兒頁 / 終點頁
obsidian unresolvedvault 內 broken wikilink
obsidian tags / obsidian propertiestag / property 列表

✏️ 寫入

命令用途
obsidian create name="X" content="..." silent建新檔
obsidian append file="X" content="..."追加
obsidian prepend file="X" content="..."前綴插入
obsidian rename / obsidian move / obsidian delete改名 / 移動 / 刪除

🏷 frontmatter(property)

命令用途
obsidian property:set name=status value=stable file="X"設 property
obsidian property:read name=status file="X"讀 property
obsidian property:remove name=status file="X"刪 property

📅 Daily note

命令用途
obsidian daily:read讀今日 daily
obsidian daily:append content="..."追加
obsidian daily:path取今日 daily 路徑

✅ Tasks

命令用途
obsidian tasks列全 vault tasks
obsidian task看 / 改某個 task

🔌 Plugin / Theme / Snippet

命令用途
obsidian plugin:reload id=X重載 plugin(dev cycle 必用)
obsidian plugin:enable / disable / installplugin 管理
obsidian theme:set / obsidian snippet:enableUI 個人化

🛠 Dev(plugin / theme 開發者用)

命令用途
obsidian dev:errors看捕捉到的錯誤
obsidian dev:console看 console output
obsidian dev:screenshot path=...視覺驗證
obsidian dev:dom selector=...DOM 查詢
obsidian dev:cssCSS 規則 inspect
obsidian eval code="app.vault.getFiles().length"任意 JS

📚 其他高用價值

命令用途
obsidian command id=X跑任意 Obsidian command(包括 plugin command)
obsidian commands filter=X列可用 command(找 id 用)
obsidian hotkey / hotkeys看快捷鍵
obsidian recents最近開過的檔
obsidian random隨機開檔
obsidian sync:statusObsidian Sync 狀態

Claude Code 的賦能(跟 Claude Code 操作 Obsidian Vault 結合)

Claude Code 操作 Obsidian Vault 描述了 LLM 透過檔案系統操作 vault 的範式。Obsidian CLI 補上最後一里路

場景沒 CLI有 CLI
ingest 後 bump entity 的 updated:自己 sed YAML(易壞)property:set name=updated value=2026-05-03 file="X"
批次找 status: draftstable找全 vault → parse YAML → 改eval 跑 Dataview-like JS 一次處理
寫今日 daily(CLAUDE §15 v1.3.5 規則)wiki/daily/YYYY/MM/YYYY-MM-DD.md 路徑daily:append content="..."
開發 karpathy-wiki-pattern plugin 改 codereload 要手動plugin:reload id=karpathy-wiki-pattern
確認 vault 整體孤兒自己 grepobsidian orphansunresolved

→ 配合 CLAUDE.md(專案手冊):把「優先用 obsidian CLI」寫進 vault rules,未來 Claude session 自動採用。

限制 / 反模式

  • ❌ Obsidian 沒開:CLI 全部失效(IPC 連不上)。腳本需先檢查 obsidian vault 是否回應
  • ❌ 大量讀取:CLI 比直接 fs Read 慢(多一層 IPC)。讀 → 用 Read;寫 → 用 CLI
  • ❌ 跑長腳本:每個 command 是獨立 IPC call。批次操作要避開 N×IPC overhead,改用 eval 寫 JS 一次處理
  • ❌ vault 切換頻繁:用 vault=<name> 明確指定,否則跑到錯 vault 上

已知坑

  • plugin:reload 後 hot reload 不總是徹底:偶爾要 restart 整個 Obsidian
  • eval 有 sandbox:能存取 app 但不能 import,複雜邏輯要先寫成 plugin
  • property:set 對複雜 YAML(list / nested):簡單 string / number / bool 沒問題,深層結構建議直接 Edit YAML

相關概念

強連結

推斷連結

  • Obsidian Dataview ?? — 跟 CLI 的 eval / search 互補(Dataview = inline query;CLI = batch script)
  • karpathy-wiki-pattern plugin 開發 ?? — vault wiki plugin 測試用得上 dev:* 系列

深入閱讀(外部資源)

← 回到 wiki