终于知道怎么让AI稳定使用obsidian-cli了!
大家好,这期内容是对《普通人如何驾驭AI——维护人脉关系》视频中AI的执行问题复盘…
关于《普通人如何驾驭AI》的问题复盘
大家好,这期内容是对《普通人如何驾驭AI——维护人脉关系》视频中AI的执行问题复盘。
对视频演示感兴趣的小伙伴请移步B站或小红书观看原视频。

原视频封面
前情提要
下面的这些是在视频里让AI执行的三个指令:
1 | `# 指令1 创建人物档案 |
问题1 AI不会用obsidian-cli
问题描述:虽然知识库根目录的CLAUDE文档里要求AI看obsidian-cli文档,但总被忽略执行,AI靠自己试错猜测走了不少弯路。
问题排查:CLAUDE文件性质依旧是提示词,约束力不强,AI有可能不遵守。
解决办法:考虑到现阶段AI对obsidian-cli命令语法训练不够,且该命令在知识库里使用频率较高,决定用hook机制,强制AI在对话开始时(SessionStart)读取obsidian-cli文档(1157字,token消耗尚可接受)。等未来AI模型熟悉obsidian-cli命令之后再删除该hook,以节约token。
下图是hook的生命周期,让AI在SessionStart时触发读取文档,整个会话读一遍文档就够了。

hook生命周期
这里我踩了一个坑。
我写代码比较保守,在没确认AI提供的代码有效之前会用//注释源代码而不是直接删除。
当我在settings.json文件里使用//之后,这个举动会让整个json文件失效,导致我在settings.json里添加的hook无法正常被触发。
问题2 取消任务语法错误
问题描述:取消任务AI做对了一半,我在演示视频里也只说对了一半。视频里我介绍的方式可以将任务标记为删除,而AI的做法则是标记任务取消的时间。正确的做法是将两者结合。
1 | `# 我在视频里的做法 → 没有取消日期 |
解决办法:在行动管理(CLAUDE.md)规则里介绍教任务规则的时候,附上一个取消任务的示例。
问题3 滥用任务标签
背景信息:为了跟踪我的知识来源,我允许AI在创建任务的时候使用任务标签,默认有以下两种:
- •
[#学习]():侧重理论学习,例如看书、看教程 - •
[#实践]():侧重实践学习,例如科学实验、上机实操
问题描述:我发现AI将[#实践]()标签滥用在张三拜访这件事上。拜访任务根本不需要用到实践标签。
解决办法:在行动管理(CLAUDE.md)规则里提供两种标签的具体示例。
问题4 报错日志漏报
问题描述:报错日志里看不到obsidian-cli命令的报错记录。
问题排查:一开始我尝试用 hook 去捕获非 0 退出码,想用这个办法记录错误日志,但这里有个坑。因为退出码为0并不代表任务执行成功,这会漏掉很多错误日志。
背景信息:在计算机程序里,退出码(Exit Code)是程序在执行命令之后告知主程序执行结果用的。在 bash 脚本里,0 代表成功,而除了 0 之外的其他退出码则代表失败,例如:
- • 126 → 无法执行(权限不够)
- • 127 → 命令未找到
- • 130 → 程序被中断。
以下图为例,虽然我们看到 Bashobsidian.com note create 命令的返回结果是 Error: Command "note" not found...,但右侧的 status 却显示 completed。

使用obsidian-cli创建笔记
这说明,在 AI 的眼里,这个任务是已经执行完了,至于结果怎么样,那是另一个问题。
我举一个例子大家就明白了。
假如你的老板让你去楼下买蜜雪冰城给大家当下午茶,你下楼之后发现奶茶店倒闭了,只好无功而返。那么:
- • 下楼再回来这个动作,你确实执行完了 → 对应的
status是completed - • 但由于店铺倒闭,你没买到奶茶 → 对应的
ERROR是The shop has closed
这就是退出码和报错信息的区别:
• 退出码只告诉你:程序有没有正常跑完(0 = 跑完了,非0 = 中途崩了)
• 报错信息才告诉你:事情到底办没办成
所以0 退出码 ≠ 结果正确。这就是为什么不能只靠检查退出码来捕获所有报错,因为程序可能返回 0(事情没办成,但程序觉得自己跑完了),真正的错误信息只写在屏幕日志里。
解决办法:用hook捕获错误不是很完美,在执行结束之后让AI自己总结又费token。现阶段还是人工看操作记录分析问题吧,这个问题留给以后处理。
一个注意事项
obsidian-cli在创建笔记的时候支持传入template=<template name>参数,在创建笔记后自动应用特定模板。
实现这个效果的前提是需要在obsidian核心插件里启用模板功能,启用社区插件市场的Templater是行不通的。
附录:Claude hook事件触发时机
下表是Claude Code官网上的hook事件及触发时机,已经帮大家翻译校对过了,给想用hook的朋友提供一些参考。
事件
触发时机SessionStart
当会话开始或恢复时UserPromptSubmit
当提交提示词后,Claude处理之前PreToolUse
在工具调用执行之前。可以阻止它PermissionRequest
当权限对话框出现时PermissionDenied
当工具调用被拒绝时。返回 {retry: true} 用于告诉模型允许重试调用工具PostToolUse
在工具调用成功之后PostToolUseFailure
在工具调用失败后Notification
当 Claude Code 发送通知时SubagentStart
当子代理被生成时SubagentStop
当子代理完成时务后TaskCreated
当通过 TaskCreate 创建任务时TaskCompleted
当某项任务被标记为已完成时Stop
当Claude回复完毕时StopFailure
当由于 API 错误导致轮次结束时。输出的内容和退出码将被忽略TeammateIdle
当代理团队中的队友即将处于闲置状态时InstructionsLoaded
当 CLAUDE.md 或 .claude/rules/*.md 文件被加载到上下文中时。在会话开始时还有在会话期间文件被延迟加载时触发。ConfigChange
当会话进行过程中配置文件发生更改时CwdChanged
当工作目录发生变化时,例如当 Claude 执行 cd 命令时。这对于使用 direnv 等工具进行动态环境管理非常有用。FileChanged
当磁盘上被监控的文件发生更改时。 matcher 字段用于指定需要监控的文件名。WorktreeCreate
当通过 --worktree 或 isolation: "worktree" 创建工作树时。会替代 Git 的默认行为。WorktreeRemove
当工作树被移除时,可能发生在会话退出时,或者当某个子代理完成任务后。PreCompact
在上下文压缩之前PostCompact
在上下文压缩完成后Elicitation
当 MCP 服务器在调用工具期间请求用户输入信息时ElicitationResult
用户在响应 MCP 的请求后、但在响应被发送回服务器之前SessionEnd
当会话终止时
#obsidian #claudian #claude #skill #hook #harness #析径任务管理系统 #笔记软件 #个人知识库
💬 本文评论区已开启,但暂无读者留言。
本文转载自微信公众号,如有侵权请联系删除。
- 标题: 终于知道怎么让AI稳定使用obsidian-cli了!
- 作者: lxiol
- 创建于 : 2026-04-29 20:24:01
- 更新于 : 2026-05-12 16:32:44
- 链接: https://blog.lxiol.cn/2026/04/29/终于知道怎么让AI稳定使用obsidian-cli了/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。