agentsclimarketplace

Obsidian search

Skill 21noises/agent-skills/plugins/obsidian/skills/obsidian-search

Agent Skills 的插件市场(Claude Code marketplace):市场登记若干插件,每个插件自带若干通用格式的 skill,也可脱离市场手动装进任意支持 Agent Skills 的 Agent。目前主要是操作 Obsidian vault 的 obsidian 插件。

Install
npx -y skills add 21noises/agent-skills --skill obsidian-search

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

通过 `obsidian` CLI 只读检索 Obsidian vault,也把它当作一处外部记忆来查。两种情况都走本 skill:一是用户明确要在 vault 里找笔记、搜文本或厘清结构;二是回答或行动需要用户记在 vault 里的事实、决定、偏好或既往工作,凭空作答不如先去查。触发示例:「找我关于 X 的笔记」「我在哪篇写过 Y」「我之前怎么决定 Z 的」「按我记下的偏好做 W」「先补上这个项目的背景再动手」。可选地用第一个参数指定要检索的 vault,不传则用当前活跃的 vault。

SKILL.md

9.4 KB, as published. Nobody here has run it

前置条件

Obsidian 1.12.7 及以上,并已启用 CLI:Settings → General → Command line interface(一次性注册后会生成 obsidian 命令)。若命令报「command not found」,说明 CLI 尚未注册,请如实报告,不要改用其他工具绕开。

命令依赖 Obsidian 应用运行,但不必手动先开;首条命令会自动把它启动起来,可能略有延迟。

总则

你在这里只运行查询与读取类命令,绝不修改笔记。

步骤一到步骤三的任务是定向和检索,三步都绝不打开整篇笔记读正文。读全文是步骤四定位到具体文件之后才做的事。

必须一步一步执行,不能跳过任何一个步骤。在执行到每一个大小步骤之前,都要先陈述该步骤的目的。

绝不把命令包进 forwhileif 这类控制结构,也不用变量、命令替换这类 shell 语法。需要跑多个查询时,拆成多条命令逐条执行,不要用循环一次跑完。

步骤一:定向

定向的目的是侦察而非取答案。

先判断有没有候选 vault,这一步只看用户给的东西,先不跑命令。候选 vault 要么来自参数 $ARGUMENTS[0],要么是用户在请求里指名的 vault。据此分两条路:

  • 没有候选时,目标就是当前活跃 vault,绝对不要擅自改选别的 vault,也不要去拉 vault 清单看。跑 obsidian vault 拿默认 vault 的详细信息。此后针对当前 vault 的命令一律不带 vault=
  • 有候选时,直接跑 obsidian vault="<vault 名>" vault。返回详细信息就说明连上了,目标 vault 就是它,此后每条 obsidian 命令都在子命令前加 vault="<vault 名>"。返回 Vault not found. 就说明这个 vault 不存在,如实告知用户,不再继续搜。

围绕检索目标,从下表挑至少三条最相关的命令执行。

命令典型用法
tagsobsidian tags counts sort=count
aliasesobsidian aliases verbose
foldersobsidian folders folder=X
filesobsidian files folder=X ext=md
backlinksobsidian backlinks path=X counts
outlineobsidian outline path=X format=tree

foldersfiles 摸清目录的命名约定,认出哪些只是模板、附件、配置这类噪声目录,哪些目录装内容则记下。别凭目录名印象就跳过某个内容目录,更不要提前押注某一个目录,拿不准就用 files 抽样文件名来定。

aliases 收录同一概念的不同叫法,弥合用户用词与笔记术语的落差。

tags 列出整个 vault 的标签,露出这个 vault 用哪些词组织主题。

backlinks 找出被大量引用的枢纽笔记,outline 看其骨架,顺结构定位而非全文盲搜。

步骤二:语义联想

候选词不能凭通用常识顺着用户这轮请求的 prompt 和对话 context 想出来,也不是照抄定向清单,而是由「用户要什么」和「这个 vault 实际怎么组织这块内容」两者共同推出。从下面三个角度推:

  • 真实意图:表层用词背后用户到底在找什么主题,最该先想。
  • 近义与改写、上位与下位:vault 里可能换的说法,更抽象的主题或更具体的实例。
  • 关联实体与概念:相关的人物、组织、作品、地点,以及常与该主题共现的概念,或与之对立的观点、流派。

每个概念都要一并收齐各种写法:不同译名、别名、跨语言的中英对照都算,凡有通用英文说法都要收齐,普通概念词也不例外。写法两种及以上就当场写成能直接用作查询的概念组,如「大语言模型」写成 (大语言模型 OR LLM OR "large language model"),只有一种写法的(如 Memex)写裸词即可。组内必须用 OR 连接,绝不用空格,漏掉 OR 会让同一概念的多个写法变成必须同时出现。一组只装同一概念的可替换写法,不同概念分属不同组。

把三个角度的候选词按下面的格式列出,每个概念组紧跟它自己的来源:连到步骤一定向到的哪条别名、标签、目录、文件名或大纲小标题,确实没有对应的才标「纯语义」。

  • 真实意图:
    • (写法一 OR 写法二)(来源)
    • (写法)(来源)
    • ……
  • 近义与改写、上位与下位:
    • (写法一 OR 写法二)(来源)
    • ……
  • 关联实体与概念:
    • (写法一 OR 写法二)(来源)
    • ……

步骤三:搜内容

这一步是个回路:从最严的查询起步,每级先用带 totalsearch 数出命中,照命中数决定是收口去读还是放宽重来;没拿到本级结果,绝不预跑下一级更宽的命令。严格度指多词共现的要求有多紧,由两件事一起定,一是要几个概念组同时出现,二是它们挤在多窄的范围里;两者都收到最紧是第一级,之后逐级放宽,每次只松一级:

  1. 最严:两个概念组在同一段落内共现。从步骤二取区分度最高的两个概念组,整组逐字搬来,绝不拆成单词、绝不跨组重拼,概念组之间留空格表示共现,再用 block:(……) 限在同一段落。完整命令形如 obsidian search query='block:((大语言模型 OR LLM OR "large language model") (智能体 OR agent))' total
  2. 放宽范围:去掉 block:,两组从同一段落放宽到同一篇笔记内共现。
  3. 放弃共现:减到一个概念组,不再要求多词共现,只要这个词出现。

三级走完仍不行,回步骤二另配一对,换掉其中一个或两个都行,配成尚未试过的新组合,重走这条阶梯。

每级照 total 命中数分三种走法:

  • 太少:放宽一级,到底了就换词。
  • 合适:用 search:context 取匹配行,输出接 | sort -u 去重,从中定位要读的文件。
  • 过多:把本级查询的 total 去掉重跑,让 search 返回命中的文件路径,从路径前缀看命中集中在哪些目录,再用 path=<folder>search:context 限定到那里。

步骤四:读内容

定位到具体文件后,读全文用内置 Read 工具直接读那个 .md。注意 search 返回的是相对目标 vault 根目录的路径,若当前目录恰好就是目标 vault 时,相对路径可直接交给 Read;否则拼上目标 vault 根目录的绝对路径再读,该路径取自步骤一获取的 vault path。只想先看标题层级再决定是否细读时,用 obsidian outline path=X

检索命令与查询语法参考

obsidian searchobsidian search:context

search 只返回匹配的文件路径,适合判断某些词出现在哪些笔记里;search:context 返回 grep 风格的 path:line: text,适合需要看到匹配行内容的场景。先按需要选命令,再拼 query

参数必填含义默认
query=<text>搜索查询,语法见下文
path=<folder>限定到某个文件夹(注意此选项值不是文件路径)整个 vault
limit=<n>最多返回的文件数
format=text|json输出格式text
total只返回匹配数量,仅 search 支持,search:context 会忽略此参数关闭
case区分大小写关闭

以下查询语法用于 query= 取值,默认只检索笔记内容。

词与短语

基础搜索独立匹配每个词。精确短语用引号包裹,如 "star wars"。短语内部的引号用反斜杠转义,如 "they said \"hello\" to each other"

布尔逻辑

  • meeting work:同时匹配两个词。
  • meeting OR work:匹配其中任一。
  • meeting work OR meetup personal:与、或混合。
  • meeting (work OR meetup) personal:用括号设优先级。
  • meeting -work:用负号排除。
  • meeting -(work meetup):用括号一次排除一组。

搜索运算符

运算符用途
match-case: ignore-case:控制大小写,如 match-case:HappyCat
section:匹配同一小节内(两标题之间)共现范围
block:匹配同一块内(同一段落或列表项),因需解析而较慢共现范围
line:匹配同一行内,可用 -line: 取反共现范围

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.