Communitygithub.com

gmickel/obsidian-skill

适用于 Obsidian CLI(1.12+)的智能体技能。可在 Obsidian 仓库中读取、创建、搜索和整理笔记。

obsidian-skill 是什么?

该技能使 AI 智能体(如 Claude Code、Cursor、Codex 等)能够通过 Obsidian CLI 与 Obsidian 仓库进行交互。它提供了一种结构化的方式来读取、写入、搜索和组织笔记,而无需依赖普通文件系统操作。该技能包含用于跨平台解析 CLI 二进制文件的逻辑(macOS/Linux 和 PowerShell),并带有优雅的回退和错误处理。它强调精确的仓库定位,使用 `vault=` 参数,并确保不嵌入个人配置或机器路径。核心操作包括读写笔记、搜索、管理属性以及处理每日笔记或任务等预设功能。此外,该技能通过禁止重新加载或重启 Obsidian 应用以及需要明确用户意图才能执行删除或修改等不可逆操作,来保障宿主会话的完整性。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add gmickel/obsidian-skill

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

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

相关技能