Token导航 LogoToken导航

Agent Skill · 开发

wechat-to-obsidian(wechat TO Obsidian 文档)

wechat-to-obsidian 用于整理文档、README、Markdown 和说明材料,适合在 OpenClaw 中需要把零散信息整理成结构清晰的文档时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

wechat-to-obsidian 是开发类 Agent Skill,可用宿主为 OpenClaw,通过ClawHub获取,权限为操作浏览器;许可证为 MIT-0,第三方扫描已通过,按安装量在开发类的 21,746 个 Skill 里排第 4,561。

总安装 7,985周安装 343GitHub Stars 2下载 2,799核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
MIT-0
版本
1.0.3

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:wechat-to-obsidian(wechat TO Obsidian 文档)
来源仓库:https://github.com/dw1161/wechat-to-obsidian
安装命令:
openclaw skills install wechat-to-obsidian
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 OpenClaw 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

ClawHubOpenClaw
openclaw skills install wechat-to-obsidian

这个 Skill 是做什么的

开发类 Skill 面向写代码、改代码和排查问题,一般会读写仓库文件,部分还会执行构建或测试命令。

将微信公众号文章剪藏到 Obsidian:使用真实无头浏览器加载页面,按原文顺序保留文字、图片和 Markdown 标题层级,图片自动下载到 attachments 目录。

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 OpenClaw;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 openclaw skills install wechat-to-obsidian;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    它需要操作浏览器,先在测试目录或测试账号里跑,确认没问题再放到正式项目。

常见问题

6 条

wechat-to-obsidian 怎么安装?

在终端执行 openclaw skills install wechat-to-obsidian。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

wechat-to-obsidian 支持哪些 AI 工具?

公开资料标注支持 OpenClaw。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

wechat-to-obsidian 需要什么权限?

权限级别是操作浏览器。该 Skill 可能涉及浏览器控制能力,使用时可能读取或操作网页内容,需要在受控环境中确认权限边界。

wechat-to-obsidian 是免费的吗?

来源标注的许可证是 MIT-0。本站不代收任何费用,也不托管安装包;能否商用、要不要署名,以许可证原文为准。

wechat-to-obsidian 用的人多吗?

公开数据是累计安装 7,985 次,近一周安装 343 次,下载 2,799 次,GitHub 2 星。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

wechat-to-obsidian 安全吗?

第三方扫描结果为通过,但这只覆盖已知的静态检查项,不能替代自己读一遍源码和安装命令。

值得选的地方和要先想清楚的地方

值得选的地方

  • 专注 OpenClaw 一种宿主,触发方式和使用习惯不用来回切换。
  • 许可证明确为 MIT-0,商用和分发边界好判断。
  • 第三方扫描已通过,常见的高风险行为没有命中。

先想清楚的地方

  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 OpenClaw,想直接扩展它能力的人。
  • 需要处理开发类任务、又不想每次都手写提示词的人。
  • 需要许可证清楚、并且有第三方扫描结果的团队项目。

不太适合

  • 需要厂商级技术支持和 SLA 的生产系统。

开发类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
skill-vetter

技能审查员 · OpenClaw

8,779,018986操作浏览器MIT-0通过
ontology

本体论 · OpenClaw

6,636,960576只读MIT-0通过
entra-app-registration

内部应用程序注册 · Codex、Claude

6,631,872764接触敏感数据未明确通过
entra-app-registration

内部应用程序注册 · Codex、Claude

3,757,680201接触敏感数据未明确通过
nano-banana-pro

纳米香蕉专业版 · OpenClaw

3,526,898364接触敏感数据MIT-0有提醒
wechat-to-obsidian

wechat TO Obsidian 文档 · 本页

7,9852操作浏览器MIT-0通过

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

name
wechat-to-obsidian
version
1.0.3
description
将微信公众号文章剪藏到 Obsidian:使用真实无头浏览器加载页面,按原文顺序保留文字、图片和 Markdown 标题层级,图片自动下载到 attachments 目录。
metadata
openclaw
requires
bins
install
kind
node
package
agent-browser
bins
[agent-browser]
label
Install agent-browser (headless browser CLI)

微信公众号 → Obsidian 剪藏

这个 Skill 用来把 mp.weixin.qq.com 微信公众号文章保存成 Obsidian Markdown 笔记。

核心目标:

  • 真实浏览器加载:用 agent-browser 打开页面,避免普通 curl / web_fetch 被微信反爬拦截。
  • 图文顺序保留:按 DOM 顺序提取正文和图片,图片插入位置尽量贴近原文。
  • 图片本地化:正文图片下载到笔记同级 attachments/ 目录。
  • Markdown 标题层级保留:识别原生 h1-h6 和微信常见“视觉标题”,输出 ## / ###。
  • 写入前确认:除非用户已经明确指定路径,否则必须先询问保存目录,确认后再写文件。

触发场景

当用户发来微信公众号链接,并表达以下意图时使用本 Skill:

  • “存 Obsidian”
  • “剪藏”
  • “帮我存”
  • “保存到这个路径”
  • “把这篇公众号文章放进 Obsidian”

链接通常长这样:

https://mp.weixin.qq.com/s/xxxxx

依赖

  • agent-browser ≥ 0.17
  • curl
  • 本地可访问的 Obsidian Vault

安装 agent-browser:

npm install -g agent-browser
agent-browser install

总体流程

  1. 用 agent-browser 打开微信公众号文章。
  2. 等待页面加载。
  3. 滚动全文,触发懒加载图片。
  4. 按 DOM 顺序提取标题、正文和图片。
  5. 如果用户未明确指定保存路径,先询问并等待确认。
  6. 下载图片到 <note_dir>/attachments/。
  7. 写入 Markdown 笔记。
  8. 关闭浏览器。
  9. 向用户汇报保存路径、图片数量、失败项。

Step 1 — 打开页面

agent-browser open "<wechat_url>"
agent-browser wait --load networkidle

如果 networkidle 等待失败,但页面正文已经可见,可以继续执行下一步。


Step 2 — 获取文章标题

agent-browser get title

优先从页面里的 #activity-name 读取标题;如果失败,再用浏览器标题兜底。


Step 3 — 滚动全文,触发懒加载图片

微信图片大量使用懒加载。必须滚动全文后再提取图片 URL,否则图片 src 可能为空。

agent-browser eval "
(async () => {
  window.scrollTo(0, document.body.scrollHeight);
  await new Promise(r => setTimeout(r, 2000));
  const step = 600;
  for (let y = 0; y < document.body.scrollHeight; y += step) {
    window.scrollTo(0, y);
    await new Promise(r => setTimeout(r, 300));
  }
  return 'done';
})()"

Step 4 — 按 DOM 顺序提取内容,并保留 Markdown 结构

重要规则:

  • agent-browser eval 内部尽量使用经典 function(){} 语法。
  • 不要在 JSON.stringify() 包裹的大段 JS 里混用复杂 shell 引号。
  • 提取结果要保留 type:heading / text / img。
  • 写笔记时必须把 heading 渲染成 Markdown 标题,而不是普通文本。
agent-browser eval "
(function() {
  function textOf(node) {
    return (node.innerText || '').replace(/\ /g, ' ').trim();
  }
  function maxFontSize(node) {
    var max = 0;
    var els = [node].concat(Array.prototype.slice.call(node.querySelectorAll('*')));
    els.forEach(function(el) {
      var n = parseFloat(getComputedStyle(el).fontSize || '0');
      if (n > max) max = n;
    });
    return max;
  }
  function hasBold(node) {
    if (node.querySelector('strong,b')) return true;
    var els = [node].concat(Array.prototype.slice.call(node.querySelectorAll('*')));
    return els.some(function(el) {
      var fw = getComputedStyle(el).fontWeight || '400';
      return fw === 'bold' || parseInt(fw, 10) >= 600;
    });
  }
  function headingLevel(node, text) {
    var tag = node.tagName;
    if (/^H[1-6]$/.test(tag)) return parseInt(tag.slice(1), 10);
    var size = maxFontSize(node);
    var bold = hasBold(node);
    var short = text.length <= 40;

    // 微信常把视觉标题做成带样式的 p / section,而不是 h2 / h3。
    // 这里保守识别常见中文大纲标题和数字小标题。
    if (/^[一二三四五六七八九十]+[\..、]\s*/.test(text) && (bold || size >= 19 || short)) return 2;
    if (/^\d+[\..、]\s*/.test(text) && (bold || size >= 19 || short)) return 3;
    if (short && bold && size >= 20) return 3;
    return 0;
  }
  function inlineMarkdown(node) {
    var text = textOf(node);
    if (!text) return '';
    if (node.querySelector('code')) return text.replace(/`/g, '\\`');
    return text;
  }

  var nodes = document.querySelectorAll('#js_content h1,#js_content h2,#js_content h3,#js_content h4,#js_content h5,#js_content h6,#js_content p,#js_content section,#js_content img');
  var result = [];
  var imgIdx = 0;
  nodes.forEach(function(node) {
    if (node.tagName === 'IMG') {
      var src = node.currentSrc || node.src || node.dataset.src || '';
      if (src && src.includes('mmbiz') &&
          !src.includes('mmbiz.qlogo') &&
          !src.includes('profile')) {
        var h = node.naturalHeight || node.height || 0;
        var alt = (node.alt || '').toLowerCase();
        if ((h >= 50 || h === 0) &&
            !alt.includes('二维码') &&
            !alt.includes('引导') &&
            !alt.includes('赞赏')) {
          result.push({ type: 'img', idx: imgIdx++, src: src });
        }
      }
    } else {
      if (node.tagName === 'SECTION' && node.querySelector('p,img,section')) return;
      var text = textOf(node);
      if (text && text.length > 3) {
        var level = headingLevel(node, text);
        if (level) result.push({ type: 'heading', level: level, text: text });
        else result.push({ type: 'text', text: inlineMarkdown(node) });
      }
    }
  });
  return JSON.stringify(result);
})()"

Markdown 标题规则

  • 原生 h1-h6 → # 到 ######
  • 一. / 一、 / 二. 这类章节标题 → ##
  • 1. Mac / 2. Windows 这类数字小标题 → ###
  • 短文本 + 加粗 + 20px 以上字号 → ###

写入时示例:

## 一. Claude Code 安装

### 1. Mac

图片仍然必须保持在 DOM 原始位置,不要统一堆到文末。


图片过滤规则

跳过这些图片:

  • mmbiz.qlogo:公众号头像
  • mp_profile:账号资料图
  • 高度小于 50px:装饰线、分割线
  • alt 包含 二维码 / 引导 / 赞赏:二维码、引导关注、赞赏图

Step 5 — 确认保存位置

如果用户已经明确给出保存路径,可以直接进入 Step 6。

如果用户没有明确路径,必须停下来询问:

📂 建议保存到:<vault_root>/<topic_directory>/
📄 文件名:<title-keywords-YYYY-MM-DD>.md
🖼 图片目录:同级 attachments/
确认保存到这里吗?还是换个位置?

HARD STOP:用户确认前,不要下载图片,不要写入笔记。


Step 6 — 下载图片

只在用户确认保存路径后执行。

mkdir -p "<note_dir>/attachments"

curl -s -L --fail \
  -A 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36' \
  -e 'https://mp.weixin.qq.com/' \
  "<image_url>" -o "<note_dir>/attachments/<filename>"

关键点:

  • 微信图片下载必须带 Referer:-e 'https://mp.weixin.qq.com/'
  • 文件名建议:<slug>-图00.png、<slug>-图01.jpg
  • 如果 URL 里有 wx_fmt=jpeg,扩展名用 .jpg;否则默认 .png
  • 批量下载时用 shell function,不要用 declare -A,因为 zsh 不支持关联数组

批量下载函数示例:

download_img() {
  local idx=$1 url=$2
  local ext="png"
  echo "$url" | grep -q "wx_fmt=jpeg" && ext="jpg"
  local fname=$(printf "<slug>-图%02d.%s" "$idx" "$ext")
  curl -s -L --fail \
    -A 'Mozilla/5.0' \
    -e 'https://mp.weixin.qq.com/' \
    "$url" -o "$fname" \
    && echo "OK $fname" || echo "FAIL $fname"
}

Step 7 — 写入 Markdown 笔记

必须严格使用 Step 4 的 DOM 顺序。

# {文章标题}

**Source:** WeChat — {作者 / 公众号名}
**Original URL:** {URL}
**Clipped:** {YYYY-MM-DD}
**Tags:** #{tag1} #{tag2}

---

{正文段落}

![[slug-图00.jpg]]

## {二级标题}

{更多正文}

![[slug-图01.png]]

---

**References:**
- {原文链接或正文链接}

注意:

  • { type: 'heading', level: 2, text: '...' } 必须写成 ## ...
  • { type: 'heading', level: 3, text: '...' } 必须写成 ### ...
  • 图片使用 Obsidian 格式:![[filename]]
  • 图片放在笔记同级 attachments/ 目录

Step 8 — 关闭浏览器

agent-browser close

Step 9 — 汇报结果

向用户说明:

  • 笔记路径
  • 图片目录
  • 成功下载图片数量
  • 失败图片数量(如有)
  • 提醒:如果移动笔记,最好连同同级 attachments/ 一起移动

常见问题与修复

问题修复
图片 src 为空先滚动全文,触发懒加载
微信图片下载 403curl 必须带 -e 'https://mp.weixin.qq.com/'
图片顺序错乱按 DOM 单次遍历,不要文字和图片分开收集
zsh 报 bad substitution不要用 declare -A;改用 shell function
SyntaxError: missing ) after argument listagent-browser eval 里少用复杂箭头函数和嵌套引号
async eval 卡住用 (async () => { ... })() 包住
标题变成普通文字使用 heading 类型并在写入时转成 ## / ###

输出质量要求

  • 不要遗漏标题层级。
  • 不要把图片集中放到开头或结尾。
  • 不要在未确认路径时写文件。
  • 不要把二维码、公众号头像、赞赏码当正文图片。
  • 不要把本地绝对路径、账号、token 写进公开输出。

平台分布

OpenClaw

98.27%
按下载量换算2,751

安全审计

VirusTotal

通过

ClawScan

通过

Static analysis

通过

权限和风险

操作浏览器

该 Skill 可能涉及浏览器控制能力,使用时可能读取或操作网页内容,需要在受控环境中确认权限边界。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。目前只有一个公开来源,建议同时核对源仓库。

继续浏览同类 Skills