用途:把 canvas 视为仓库范围内的 JSON Canvas 文档,用于创建、检查和更新 Obsidian 画布,支持 text、file、link、group 节点及 edge 连线;也用于查询画布状态、列出画布、生成可视化地图与分区。
用法与约束:先从技能自身位置解析已安装产品根目录,而非从仓库或当前工作目录: PRODUCT_ROOT=/absolute/path/to/installed/claude-obsidian CORE="$PRODUCT_ROOT/scripts/claude-obsidian.py" test -f "$CORE"
格式细节优先使用单独安装的 kepano/obsidian-skills json-canvas 技能,否则读取 references/canvas-spec.md;开放标准为 JSON Canvas 1.0。使用前先解析用户仓库,画布存放于 wiki/canvases/,默认 main.canvas;index.md 作为可选目录,仅在创建、重命名或删除时更新。file 与 background 使用仓库相对路径,拒绝绝对路径、.. 穿越、家目录快捷方式及经符号链接逃逸的路径,只引用仓库内已有文件。链接节点仅接受 HTTPS URL,且需说明在 Obsidian 中打开可能触发对目标主机的 Open Graph 元数据请求,否则改用含 URL 的 text 节点。
操作方式:状态或列表请求为只读,解析选定 .canvas 并报告节点数、分组标签、断开的边端点和缺失的仓库相对文件目标;默认画布不存在时只报告并提供创建预览,不创建。修改需读取整个画布并记录各文件预期 SHA-256(应缺失则为 null),保留未知 JSON 字段与数组顺序,节点数组为自下而上的 z 序;每个节点与边需唯一 ID(建议随机 16 位小写十六进制并校验未占用),节点需整数 x、y、width、height;group 是视觉容器而非父级,内边距 20px、间距 40px。预览前校验 JSON 可解析、ID 唯一、边端点存在、尺寸为正整数、路径安全且存在、无意外重叠或溢出。修改封装为 claude-obsidian.transaction.v1 事务,含 canvas 操作,目录变更时一并纳入;先 inspect 再 apply:
python3 "$CORE" transaction inspect BUNDLE --vault VAULT
python3 "$CORE" transaction apply BUNDLE --vault VAULT
--approved-plan-sha256 "$APPROVAL_SHA256"
删除、替换、重命名等破坏性变更需在展示预览后获得明确同意,并报告操作 ID、变更路径、画板名、节点 ID 与最终位置;不要提交 Git。