用途
obsidian-direct 用于对 Obsidian 库(vault)进行直接的程序化访问,面向文件创建、文件编辑、模板插入、Dataview 查询和插件 API 调用等任务,从而自动化笔记工作流。
适用场景包括:在脚本中自动化 Obsidian 交互(例如根据外部数据生成每日笔记、根据用户输入更新文件、运行 Dataview 查询获取元数据);在手动管理库效率较低的场景中使用,例如 CI/CD 流水线或由 AI 驱动的内容创作。
主要能力
- 使用指定路径和内容在库中创建新文件或文件夹。
- 编辑已有文件:追加、覆盖,或在指定行插入文本。
- 插入模板(例如来自预定义的 .md 模板文件)到新建或已有笔记中。
- 执行 Dataview 查询,以获取或操作笔记元数据。
- 调用 Obsidian 插件 API,用于自定义扩展,例如查询插件特定数据。
使用方式
通过函数调用形式调用该技能:call_skill('obsidian-direct', subcommand, params),其中 subcommand 为以下之一:create-file、edit-file、insert-template、run-query、plugin-call。始终以字典形式提供必需参数,例如 {'path': 'notes/file.md', 'content': 'Text here'}。对于需要认证的操作,通过环境变量 $OBSIDIAN_API_KEY 传入 API 密钥。调用应顺序执行:先创建文件,再编辑它。复杂参数使用 JSON,例如 {'query': '{"from": "folder", "where": "file.name contains 'key'"}'}。避免并发调用,以防库冲突。
常见命令与 API:
- API 端点:对文件操作使用 POST 请求
https://api.openclaw.com/v1/obsidian/vault/{vault-id}/files,JSON 请求体形如{"path": "notes/file.md", "content": "Hello"}。 - CLI 等价命令:
obsidian-direct create-file --vault-id myvault --path "notes/file.md" --content "Hello" --api-key $OBSIDIAN_API_KEY。 - 代码片段:
params = {'path': 'Daily/daily.md', 'content': 'Today\'s notes'}
result = call_skill('obsidian-direct', 'create-file', params)
print(result['file_path']) # Outputs: Daily/daily.md
- Dataview 查询:
obsidian-direct run-query --vault-id myvault --query "LIST file.name FROM \"folder\" WHERE file.mtime > date(2023-01-01)" --api-key $OBSIDIAN_API_KEY。 - 配置格式:params 必须为 JSON 对象,例如 insert-template 使用
{"template": "path/to/template.md", "insert_at": 5}。可用标志:--vault-id(必需)、--dry-run(模拟执行但不做更改)、--force(覆盖文件)。
集成说明
可与其他技能配合,将一个技能的输出作为本技能的输入,例如把搜索技能的结果作为 create-file 的内容。认证方式:在环境中设置 $OBSIDIAN_API_KEY,例如 export OBSIDIAN_API_KEY=your_api_key,并在调用中包含它。若为远程库,需通过 Obsidian 的同步插件确保库已同步。多技能工作流中,可使用返回的文件路径作为参数,与文件系统类技能串联。建议先在本地库中测试集成,以避免数据丢失。
错误处理
始终用 try-except 包裹技能调用,以捕获例如 VaultError(如文件缺失的 404)或 AuthError(如 API 密钥无效的 403)等异常。检查响应码:若 result['status'] == 'error',记录消息并使用指数退避重试。常见问题:用 --force 标志处理文件冲突,或解析 Dataview 错误以排查查询语法。示例:
try:
call_skill('obsidian-direct', 'edit-file', {'path': 'notes/file.md', 'content': 'Updated text'})
except VaultError as e:
if e.code == 404:
call_skill('obsidian-direct', 'create-file', {'path': 'notes/file.md', 'content': 'Default'})
else:
raise
具体使用示例
- 自动化每日笔记创建:先用另一技能获取当前日期,再调用
obsidian-direct create-file --vault-id myvault --path "Daily/{date}.md" --content "Notes for {date}" --api-key $OBSIDIAN_API_KEY。这会创建类似 Daily/2023-10-01.md 的新文件并写入初始内容。 - 运行并插入 Dataview 结果:用
obsidian-direct run-query --vault-id myvault --query "TASK FROM \"Tasks\" WHERE !completed"查询任务,然后用obsidian-direct edit-file --path "Summary.md" --append result['query_output']将结果追加到摘要笔记中。
关联关系
与社区集群相关(例如与文件管理类技能共享标签);与 obsidian 相关技能(如用于库同步的 obsidian-sync)相连;与通用 API 技能连接以处理认证;与笔记类集群在内容操作上存在重叠。
限制
资料未说明该技能的收费、价格、平台支持范围、性能效果等具体信息,暂未提供。