运行时依赖
安装命令
点击复制技能文档
Clawnoter Obsidian
将网页文章保存到本地 Obsidian Vault,支持图片抓取。
触发方式
当用户发送:
一个网页链接 可选的 notes 或 comments 明确要求"保存到 Obsidian"或"收藏文章"
例如:
https://example.com/article 这篇文章不错 帮我保存这个:https://xxx.com 内容:我的笔记 首次使用:路径配置 第一次运行时的引导流程
首次使用该技能时,系统会自动检测是否已配置保存路径。如果没有配置,会引导用户完成设置:
Hi,我是 ClawNoter。
看到好文章,想顺手存进 Obsidian 的话,可以直接丢给我一个链接。你也可以附上一段 page_comment,作为你的备注。我会帮你把网页内容提取出来,整理后保存到你指定的 Obsidian 路径里。
通常会保存:
- 文章标题
- 原始链接
- 你写的
page_comment - 网页正文
- 成功抓取到的图片
如果你主要在浏览器里阅读和收集信息,也可以搭配我的 Chrome 扩展 版本 网页Noter 一起使用,在网页端更顺手地完成收集和整理:
- Chrome 商店安装:https://chrome网页store.google.com/detAIl/网页noter/hmijljoffeceeloAIgodmlojbfmgfdkp
- 产品介绍: https://mp.weixin.qq.com/s/bwqHGb9WGC6L0wL7qVicSA
这套工具希望覆盖你在不同场景下的使用需求:
- 网页端场景
- 日常生活场景
顺便介绍一下我们团队 Re搜索 AI+。我们是一个开放的 Global 青年研究者社区,汇集了 AI 及 AI4Science/Engineering 领域的青年学者、科研工作者、产业科学家、工程师和专业人士,野生而充满活力。
接下来我会帮你完成 Obsidian 保存路径配置。
🔷 请选择您要保存到的 Obsidian Vault 类型:
1️⃣ 本地 Obsidian(本地磁盘) 2️⃣ iCloud Obsidian(云端同步)
请回复数字或选项名称。
选项 1:本地 Obsidian
如果用户选择本地 Vault:
我先帮你扫描一下这台电脑上可能的 Obsidian Vault。 如果我找到了候选路径,你只需要确认是不是要用它。 如果没有找到,你再手动把路径发给我就可以。
执行:
python ./scripts/config.py 扫描
如果扫描到候选路径,展示:
我找到了以下可能的 Obsidian Vault:
- My Notes
- Re搜索
请告诉我你想使用哪一个。
你可以直接回复编号,例如 1;
如果都不是,也可以直接把正确路径发给我。
如果扫描为空,展示:
我暂时没有自动找到 Obsidian Vault。
请把你的 Obsidian Vault 路径发给我。 例如:~/Documents/Obsidian Vault 你也可以直接把文件夹拖到聊天窗口,我会识别路径。
用户确认某个候选路径,或手动输入路径后,验证路径有效性:
✅ 我准备把内容保存到这个 Vault: Vault:My Notes 路径:/Users/liz/Documents/Obsidian Vault/My Notes
📁 请输入要保存文章的子文件夹名称(可选)。
例如:Articles、ReadLater、收藏夹 如果你还没想好,也可以现在先起一个名字。 直接回车将保存到根目录。
选项 2:iCloud Obsidian
如果用户选择 iCloud Vault:
☁️ iCloud Obsidian 路径查找指南:
- 打开 Finder
- 在左侧边栏找到 "iCloud"
- 点击 "iCloud Drive"
- 找到您的 Obsidian Vault 文件夹
- 右键点击 → "复制路径"
请将路径粘贴到聊天中。
用户输入 iCloud 路径后,类似本地流程询问子文件夹。
路径配置存储
配置完成后,路径信息会保存在:
~/.obsidian-save-article-config.json
内容示例:
{ "type": "local", "vault_path": "/Users/liz/Documents/Obsidian Vault/My Notes", "subfolder": "Articles", "full_path": "/Users/liz/Documents/Obsidian Vault/My Notes/Articles", "配置d": true, "配置d_at": "2026-03-18T01:00:00Z" }
重新配置路径
用户可以随时重新配置路径:
说"更改 Obsidian 保存路径"或"重新配置" 说"查看当前保存路径"查看配置 保存格式 YAML Frontmatter
title: "文章标题" url: "原始链接" 创建d: "YYYY/MM/DD" pagecomment: "用户添加的页面评论"
全文内容
重要:图片必须放在 Full Article callout 内部,位于内容之前!
[!note]- 📄 Full Article


文章第一段内容...
文章第二段内容...
错误格式(图片在 callout 外部):
 ← 错误!在 callout 外面
[!note]- 📄 Full Article
文章内容...
正确格式(图片在 callout 内部):
[!note]- 📄 Full Article ← callout 头部先
 ← 图片在 callout 内部
文章第一段内容...
文章第二段内容...
用户 Notes
用户笔记内容^note-xxx
内容抓取方法
该技能当前支持一种主抓取方式和两种降级方式,会按顺序自动尝试。
方法 1:Jina.AI Reader(首选) 原理:使用 https://r.jina.AI/ 抓取网页内容 优点:快速、返回干净的 Markdown 格式 适用:大多数网站、博客、新闻文章 方法 2:原始 HTML 本地降级(Fallback)
当 Jina.AI 失败时,技能会直接请求原始网页 HTML,并在本地执行简化转换。
触发条件:
Jina.AI 返回错误 Jina.AI 返回空内容或无效内容 连接超时 网站阻止 Jina.AI 访问
操作步骤:
直接请求目标 URL 的原始 HTML 提取页面标题、正文文本和图片链接 将 HTML 简化转换为 Markdown 风格文本 保留图片并替换为本地路径 HTML 降级清理规则
从原始 HTML 获取内容后,需要进行清理:
移除导航栏、页脚、广告等无关内容 保留文章标题和正文 转换 HTML 标签为 Markdown 格式 处理特殊字符和编码问题 方法 3:浏览器抓取降级(适合微信 / X 等复杂页面)
当 Jina.AI 和简单 HTML 抓取都拿不到稳定正文时,使用浏览器打开页面并读取实际渲染后的内容。
适用场景:
微信公众号文章 X / x.com 页面 强依赖前端渲染的页面 原始 HTML 中正文或图片链接被懒加载隐藏
操作步骤:
用浏览器打开目标 URL 等待页面加载完成 读取页面渲染后的正文和图片 再按本 技能 的 Markdown 和图片保存规则落地到 Obsidian
重要约束:
这是 ClawNoter Obsidian 的正常降级路径,不需要切换到其它 X 专用 技能 除非用户明确要求使用 X 专用转换工具,否则不要因为 X 链接自动改走逆向 API 类 技能 工作流程 带路径配置的工作流程
检查配置:读取 ~/.obsidian-save-article-config.json
如果未配置 → 触发首次配置流程(见上文) 如果已配置 → 继续第 2 步 如果用户选择本地 Obsidian → 优先执行 python ./scripts/config.py 扫描 自动发现候选 Vault
解析输入:提取 URL 和用户 notes
抓取内容:
Step 1:优先使用 Jina.AI Reader (https://r.jina.AI/) Step 2 (Fallback):如果 Jina.AI 失败,抓取原始 HTML 并在本地转换 Step 3 (Fallback):如果正文或图片仍不完整,使用浏览器抓取渲染后内容 Step 4:继续图片提取和保存流程
提取图片:从 HTML 中提取正文图片
调用统一保存脚本:使用 save_article.py 完成图片下载、Markdown 处理和 Obsidian 笔记写入
返回结果:
最终笔记路径 图片数量 标题 强制执行规则
对于文章保存请求,除非用户明确要求“只保存纯文字、不抓图片”,否则必须遵守以下规则:
在最终写入 Obsidian 笔记前,必须先执行: python ./scripts/save_article.py "" "" "[page_comment]" 必须解析脚本返回的 JSON,并优先使用其中的: path images 如果 images 非空,最终生成的 Full Article callout 内必须包含这些本地图片引用。 不允许在已经拿到文章内容后,直接手写 markdown 并跳过图片下载步骤。 如果脚本执行失败或没有网络权限,应明确告知用户“本次未完成图片抓取”,而不是默默保存成无图版本。
X / 微信特别说明:
X 和微信公众号即使正文抓取成功,也仍然必须执行图片下载脚本,因为图片链接常常来自 Jina markdown 而不是原始 HTML。 对 X 页面,优先保留并本地化 pbs.twimg.com 图片链接。 对微信公众号页面,优先处理 data-src、data-original 等懒加载图片属性。 路径配置检测逻辑 导入 os 导入 json
CONFIG_PATH = os.path.expanduser("~/.obsidian-save-article-config.json")
def normalize_path(path): expanded = os.path.expanduser(path.strip()) return os.path.abspath(os.path.normpath(expanded))
def load_config