Obsidian 多仓库路由中心,管理所有已注册仓库,并维护当前激活仓库的单一真理来源。 通过 ~/.claude/ob-router.json 为所有 ob-* skills 提供统一的仓库解析入口,解耦各 skill 与具体仓库路径的绑定。
触发词:
- ob-router
- ob-router list
- ob-router use <name>
- ob-router add <name> <path>
- ob-router remove <name>
- ob-router init
- 切换仓库 / 切换知识库
- 设置当前 Obsidian 仓库
示例:
- "ob-router" — 查看当前激活仓库
- "ob-router list" — 列出所有已注册仓库
- "ob-router use work" — 切换到 work 仓库
- "ob-router add personal ~/Documents/personal-vault" — 注册新仓库
- "ob-router init" — 从 CLAUDE.md 中的 OBSIDIAN_REPO 初始化
Obsidian 多仓库路由 (ob-router)
管理本地多个 Obsidian 仓库,作为所有 ob-* skills 的仓库解析中心。
配置文件
路径:~/.claude/ob-router.json
{
"active": "personal",
"repos": {
"personal": "/path/to/personal-vault",
"work": "/path/to/work-vault"
}
}
| 字段 | 说明 |
|---|---|
active |
当前激活仓库的名称(对应 repos 的 key) |
repos |
已注册仓库的名称 → 绝对路径映射 |
命令详解
ob-router(无参数)— 查看当前状态
读取 ~/.claude/ob-router.json,展示当前激活仓库:
当前激活仓库:personal
路径:/path/to/personal-vault
已注册仓库(2 个):
★ personal /path/to/personal-vault
work /path/to/work-vault
若配置文件不存在,提示用户运行 ob-router init 初始化。
ob-router list — 列出所有仓库
同无参数模式,额外展示每个仓库的 wiki 文章数(扫描 {path}/wiki/**/*.md 文件数):
已注册仓库(2 个):
★ personal /path/to/personal-vault (128 篇文章)
work /path/to/work-vault (43 篇文章)
ob-router use <name> — 切换激活仓库
- 读取配置文件,确认
<name>存在于repos中 - 如果不存在,列出所有可用名称并报错
- 将
active字段更新为<name>,写入配置文件 - 确认展示:
✅ 已切换至:work
路径:/path/to/work-vault
所有 ob-* skills 现在将使用此仓库。
ob-router add <name> <path> — 注册新仓库
- 验证
<path>是否为合法绝对路径且目录存在 - 如果
<name>已存在,询问用户是否覆盖(使用 AskUserQuestion) - 将新仓库追加到
repos并写入配置文件 - 询问用户是否立即切换到新仓库
✅ 已注册仓库:research → /path/to/research-vault
是否立即切换到 research?
ob-router remove <name> — 移除仓库注册
- 确认
<name>存在 - 如果是当前
active仓库,警告并要求用户先切换到其他仓库 - 从
repos中删除该条目并写入配置文件 - 提示:仅移除注册信息,不删除实际仓库目录
ob-router init — 从现有配置初始化
当用户首次使用 ob-router,但已有 OBSIDIAN_REPO 配置在 ~/.claude/CLAUDE.md 时:
- 读取全局
~/.claude/CLAUDE.md,提取OBSIDIAN_REPO变量值 - 如果找到,询问用户为这个仓库起一个名字(默认:
main) - 创建
~/.claude/ob-router.json,将其注册为active仓库 - 如果用户本地还有其他 Obsidian 仓库,可继续追加(使用 AskUserQuestion 引导)
✅ 初始化完成
已将 CLAUDE.md 中的 OBSIDIAN_REPO 导入:
★ main /path/to/my-vault
还有其他 Obsidian 仓库需要注册吗?(可继续添加)
其他 ob-* skills 如何读取
所有 ob-* skills 在执行前按以下优先级获取 $OBSIDIAN_REPO:
优先级 1:读取 ~/.claude/ob-router.json
→ 取 repos[active] 的路径
优先级 2:读取全局 ~/.claude/CLAUDE.md 中的 OBSIDIAN_REPO 变量
(向下兼容旧配置)
优先级 3:AskUserQuestion 询问用户
→ 询问是否同时保存到 ob-router(运行 ob-router add)
异常处理
| 场景 | 处理 |
|---|---|
| 配置文件不存在 | 提示运行 ob-router init 初始化 |
active 对应路径目录不存在 |
警告路径失效,列出其他可用仓库请用户切换 |
active 字段为空或缺失 |
回退到 CLAUDE.md 的 OBSIDIAN_REPO |
| JSON 格式损坏 | 展示损坏内容,引导用户修复或重新初始化 |
| 用户指定了不存在的仓库名 | 列出所有已注册名称 |