在 Windows 上, SessionStart/Stop 钩子经常超时 — 热心的 CLI 导入 + 禁用字节码缓存使每次调用都需要支付完整的解释器和导入成本

作者: ppuri2创建于 2026年8月17日更新于 2026年9月10日
  1. scripts/Claude-obsidian.py 中设置 sys.dont_write_bytecode = True 可禁用 Python 的 .pyc 缓存,因此每次调用钩子都会从源代码重新编译所有导入的模块,而不是在第一次运行后重新使用缓存。
  2. claude_obsidian/cli.py 中,无论调用哪个子命令,都会积极导入约 13 个子模块capturecheckpointcontractsextensionsgatesledgerslint_enginemode_configpackage_validationreleasetransactionvault_ops,以及 hook_adapter)。hook session-start/hook stop 路径只需要 hook_adapter,其他约 12 个模块在该路径上是多余的负担。
  3. 在 Windows 上,python3 通常会优先解析到 Store 应用执行别名代理...\AppData\Local\Microsoft\WindowsApps\python3.exe),而不是在 PATH 上的真实解释器,这在 Python 启动之前就增加了自己的启动开销。通过 where python3Get-Command python3 -All 在我的机器上验证了此解析顺序。 以上任何一个因素都无法完全解释 5-21 秒的实际时间超时(我的独立运行保持在 1.5 秒以内),因此我怀疑存在竞争:在实际的会话开始时,此钩子与 Claude Code 连接 MCP 服务器并加载其他插件/钩子同时运行。如果涉及防病毒实时扫描(考虑到与墙时长相比 CPU 时间几乎为零,并且已禁用 .pyc 缓存,因此每次都会新鲜读取文件),则这种竞争会显著加剧。

内容来源: AgriciDaniel/claude-obsidian