Obsidian CLI
对于依赖 Obsidian 正在运行的应用程序、索引、设置、命令注册表或开发者运行时环境的行为,请使用 CLI。对于普通的文件操作,请使用正常的文件系统工具。
解析和探测 CLI
不要假定只有一个可执行文件名。Obsidian 的注册和打包方式因平台和版本而异,且不相关的第三方二进制文件可能使用相同的名称。仅在其 version 探测成功时选择一个候选。
在 macOS/Linux 上:
resolve_obsidian_cli() {
local candidate
for candidate in \
"${COPILOT_OBSIDIAN_CLI:-}" \
/Applications/Obsidian.app/Contents/MacOS/obsidian-cli \
"$(command -v obsidian 2>/dev/null || true)" \
"$(command -v obsidian-cli 2>/dev/null || true)"
do
[[ -n "$candidate" && -x "$candidate" ]] || continue
if "$candidate" version >/dev/null 2>&1; then
printf '%s\n' "$candidate"
return 0
fi
done
return 1
}
OBSIDIAN_CLI=$(resolve_obsidian_cli) || {
echo "Obsidian CLI 不可用" >&2
exit 1
}
"$OBSIDIAN_CLI" version
在 PowerShell 上:
$candidates = @(
$env:COPILOT_OBSIDIAN_CLI,
(Get-Command obsidian -ErrorAction SilentlyContinue).Source,
(Get-Command obsidian-cli -ErrorAction SilentlyContinue).Source
) | Where-Object { $_ }
$OBSIDIAN_CLI = $candidates | Where-Object {
try { & $_ version *> $null; $LASTEXITCODE -eq 0 } catch { $false }
} | Select-Object -First 1
if (-not $OBSIDIAN_CLI) { throw "Obsidian CLI 不可用" }
& $OBSIDIAN_CLI version
如果探测失败,请要求用户打开兼容的 Obsidian 版本,启用 设置 > 通用 > 命令行界面,完成注册,然后重启终端。不要在未明确获得用户意图的情况下安装 Obsidian、修改 PATH 或注册 CLI。
在所有参考示例中使用已解析的可执行文件代替 obsidian:
"$OBSIDIAN_CLI" vaults
"$OBSIDIAN_CLI" help search
精确定位仓库
只要目标已知,就使用 vault="<名称或ID>"。切勿在此技能中嵌入个人仓库名称或机器路径。
"$OBSIDIAN_CLI" vault="<仓库名称>" search query="项目截止日期" format=json
"$OBSIDIAN_CLI" vault="<仓库名称>" backlinks path="Projects/Plan.md" format=json
对于精确的仓库相对路径,使用 path=。仅当需要 Obsidian 的 wiki 链接式名称解析时,才使用 file=。对包含空格或 shell 特殊字符的值使用引号。在依赖已安装版本未显示的语法之前,先检查实时帮助:
"$OBSIDIAN_CLI" help <command>
核心操作
# 读取和写入
"$OBSIDIAN_CLI" vault="<仓库名称>" read path="Projects/Roadmap.md"
"$OBSIDIAN_CLI" vault="<仓库名称>" append path="Journal.md" content="- 新条目"
# 搜索和元数据
"$OBSIDIAN_CLI" vault="<仓库名称>" search query="API" limit=10 format=json
"$OBSIDIAN_CLI" vault="<仓库名称>" properties path="Projects/Roadmap.md"
# 配置的每日笔记和索引任务
"$OBSIDIAN_CLI" vault="<仓库名称>" daily:append content="- 下午2点:打电话" silent
"$OBSIDIAN_CLI" vault="<仓库名称>" tasks all todo
# 实时工作区
"$OBSIDIAN_CLI" vault="<仓库名称>" tabs ids
"$OBSIDIAN_CLI" vault="<仓库名称>" workspace ids
保护宿主会话
切勿在智能体会话中重新加载或重启 Obsidian 应用/窗口。切勿重新加载、禁用或卸载托管当前智能体会话的插件。避免等效的命令、JavaScript 或开发者工具操作。这些操作可能会终止会话并丢弃正在进行的工作。
在以下操作之前需要明确的用户意图:永久删除、本地历史记录或同步恢复、发布或取消发布、安装或移除插件/主题、更改受限模式、或执行会修改的 JavaScript/开发者调用。优先使用可逆操作。命令参考描述了功能;它们不授权修改操作。
参考指南
仅阅读与任务相关的指南。将其示例中的 obsidian 视为已解析的 $OBSIDIAN_CLI 可执行文件,并在目标已知时添加 vault="<名称或ID>"。
| 任务 | 参考文档 |
|---|---|
| 笔记操作、大纲、字数统计、唯一笔记 | references/note-operations.md |
| 搜索、标签、属性、反向链接、孤立笔记、未解析链接 | references/search-metadata.md |
| 每日笔记、任务、模板 | references/daily-tasks-templates.md |
| 仓库、工作区、书签、插件、主题、同步、发布、库、开发者工具 | references/vault-management.md |