Featured image of post WSL + OpenCode + Obsidian CLI 配置指南

WSL + OpenCode + Obsidian CLI 配置指南

在 WSL 下运行 OpenCode(配置 oh-my-openagent)时,如何访问 Windows 侧的 Obsidian CLI,以及如何正确加载 obsidian-skills。

在 WSL 环境下运行 OpenCode(配置了 oh-my-openagent),访问 Windows 下运行的 Obsidian 及其 CLI,需要解决两个独立问题:CLI 命令不可用Skills 无法加载


问题一:WSL 中 obsidian CLI 命令不可用

原因

Obsidian CLI 是 Windows 原生程序,运行在 Windows 侧。WSL 的 PATH 中没有 obsidian 命令,直接调用会报错。

解决方案:通过 PowerShell 转发命令

WSL 可以直接调用 powershell.exe,而 Windows 的 obsidian 命令在 PowerShell 中可用。因此可以写一个 shell 函数作为透明代理。

⚠️ 必须写入 ~/.zshenv,而非 ~/.zshrc

OpenCode 启动的是 non-interactive shell,只会读取 ~/.zshenv,不会读取 ~/.zshrc

~/.zshenv 中添加:

1
2
3
4
5
# Obsidian CLI wrapper — 将命令透传给 Windows PowerShell 执行,并过滤启动噪音
obsidian() {
  powershell.exe -Command "obsidian $*" 2>/dev/null \
    | grep -v "Loading updated app package\|out of date\|Please download\|obsidian-.*\.asar"
}

验证

1
2
obsidian vaults             # 应列出所有 vault
obsidian vault="Demo" files # 应列出 vault 内文件

💡 为什么同时写入 ~/.zshrc

终端交互式 shell 只读 ~/.zshrc,建议两个文件都加入,或在 ~/.zshrcsource ~/.zshenv


问题二:obsidian-skills 无法通过 skill() 工具加载

原因

oh-my-openagent(omo)的 skill 扫描逻辑(getOpenCodeSkillDirs)实际扫描的路径是:

1
~/.config/opencode/skills/

而 obsidian-skills 官方文档的 OpenCode 安装说明将仓库克隆到:

1
~/.opencode/skills/   ← omo 不扫描此路径

两者不是同一个目录,导致 skill 文件存在但无法被注册。这一结论通过直接阅读 oh-my-openagent 的打包产物(~/.cache/opencode/packages/oh-my-openagent@latest/node_modules/oh-my-openagent/dist/index.js)中的 getOpenCodeSkillDirs 函数源码确认。

解决方案:克隆到正确路径

将 obsidian-skills 克隆到 omo 实际扫描的目录:

1
2
git clone https://github.com/kepano/obsidian-skills.git \
  ~/.config/opencode/skills/obsidian-skills

重启 OpenCode 后生效。

ℹ️ Skill 名称会带路径前缀

由于克隆了整个仓库(结构为 obsidian-skills/skills/<name>/SKILL.md),omo 注册后的 skill 名称会是:

  • obsidian-skills/skills/obsidian-cli
  • obsidian-skills/skills/obsidian-markdown
  • 以此类推

如需简洁名称(直接用 obsidian-cli),可将内层各 skill 目录直接复制到根下:

1
2
3
cp -r ~/.config/opencode/skills/obsidian-skills/skills/* \
       ~/.config/opencode/skills/
rm -rf ~/.config/opencode/skills/obsidian-skills

Skill 列表与使用方式

obsidian-skills 包含以下 skill:

Skill 用途
obsidian-cli 通过 CLI 与运行中的 Obsidian 交互(需 Obsidian 开启)
obsidian-markdown 创建和编辑 Obsidian Flavored Markdown(wikilinks、callouts、frontmatter 等)
obsidian-bases 创建和编辑 .base 文件(Bases 数据库视图)
json-canvas 创建和编辑 .canvas 文件
defuddle 从网页提取干净的 Markdown 内容

在 OpenCode 中调用 Skill

1
2
skill(name="obsidian-skills/skills/obsidian-cli")
skill(name="obsidian-skills/skills/obsidian-markdown")

或在委托任务时传入:

1
task(category="unspecified-high", load_skills=["obsidian-skills/skills/obsidian-cli"], ...)

诊断速查

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 确认 CLI wrapper 工作
obsidian vaults

# 确认 skills 目录结构
ls ~/.config/opencode/skills/

# 确认 SKILL.md 存在
ls ~/.config/opencode/skills/obsidian-skills/skills/obsidian-cli/

# 确认 omo 配置
cat ~/.config/opencode/opencode.json

更新 obsidian-skills:

1
cd ~/.config/opencode/skills/obsidian-skills && git pull

重启 OpenCode 后生效。

comments powered by Disqus
本博客已稳定运行
使用 Hugo 构建
主题 StackJimmy 设计