重要前提
安装AI Skills的关键前提是:必须科学上网,且开启TUN模式,这一点至关重要,直接决定安装能否顺利完成,在此郑重提醒三遍:科学上网,科学上网,科学上网。查看完整安装教程 →
publish-substack-article by sugarforever/01coder-agent-skills
npx skills add https://github.com/sugarforever/01coder-agent-skills --skill publish-substack-article将 Markdown 内容发布到 Substack 文章编辑器,将 Markdown 转换为 HTML 并作为富文本粘贴。保存为草稿供用户审核后再发布。
mcp__chrome-devtools__*)mcp__playwright__*)markdown 包 (pip install markdown)copy_to_clipboard.py 脚本(从 publish-zsxq-article 技能共享)此技能可与 Chrome DevTools MCP 和 Playwright MCP 配合使用。使用可用的任一工具:
| 操作 | Chrome DevTools MCP |
|---|
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
| Playwright MCP |
|---|
| 导航 | navigate_page | browser_navigate |
| 获取快照 | take_snapshot | browser_snapshot |
| 截图 | take_screenshot | browser_take_screenshot |
| 点击元素 | click | browser_click |
| 填充文本 | fill | browser_type |
| 按键 | press_key | browser_press_key |
| 执行 JS | evaluate_script | browser_evaluate |
检测:在运行时检查可用工具。如果存在 mcp__chrome-devtools__navigate_page,则使用 Chrome DevTools MCP。如果存在 mcp__playwright__browser_navigate,则使用 Playwright MCP。
https://{publication}.substack.com/publishhttps://{publication}.substack.com/publish/post/{postId}verysmallwoodsSubstack 文章编辑器使用 Tiptap(基于 ProseMirror 的所见即所得编辑器)。
textbox "title"(占位符:"Title")textbox "Add a subtitle…".ProseMirror(Tiptap 编辑器,"Start writing...")button "Saved"(自动保存)button "Preview"button "Continue"(发布流程 - 请勿使用)button "Settings"(标题、描述、缩略图)当"Settings"或"File Settings"打开时:
textbox "Add a title..."textbox "Add a description..."粗体、斜体、删除线、代码、链接、图片、音频、视频、引用、列表(项目符号/有序)、按钮、更多(代码块、分隔线、脚注、LaTeX 等)
关键:使用剪贴板粘贴 HTML 内容,而非直接填充或粘贴纯 Markdown。
Tiptap 编辑器原生处理 HTML 粘贴并将其渲染为富内容。工作流程如下:
markdown 库将 Markdown 转换为 HTMLcopy_to_clipboard.py html 将 HTML 复制到系统剪贴板为何使用 HTML 粘贴?
fill 工具 → 内容被视为纯文本,无格式已知限制:Substack 的编辑器不支持 HTML 表格。表格将被折叠为纯文本。请参阅步骤 0:预处理以将表格转换为图片。
Substack 不渲染 HTML 表格。它们会被折叠为纯文本。任何 Markdown 表格都必须转换为 PNG 图片并单独上传。
工作流程:
检测 Markdown 文件中的表格(包含构成表格结构的 | 的行)
使用 diagram-to-image 技能将每个表格转换为 PNG:
# 提取表格到临时文件
cat > /tmp/table1.md << 'TABLE_EOF'
| Column 1 | Column 2 | Column 3 |
|----------|----------|----------|
| Data 1 | Data 2 | Data 3 |
TABLE_EOF
# 通过 diagramless.xyz API 转换(自动检测为表格)
node ~/.claude/skills/diagram-to-image/scripts/diagram-to-image.mjs /tmp/table1.md -o /tmp/table1.png
3. 记录每个表格在文章中的位置以便稍后插入(在哪个标题/段落之后)
图片上传在主内容粘贴之后进行 — 参见步骤 7。
读取 Markdown 文件并提取:
title 字段,或 H1 标题 # Title,或文件名excerpt 或 description 字段使用 Python 的 markdown 库及 tables 和 fenced_code 扩展:
import markdown
import re
with open('/path/to/article.md', 'r') as f:
content = f.read()
# 去除 YAML frontmatter
content = re.sub(r'^---\n.*?\n---\n', '', content, flags=re.DOTALL)
# 去除交叉引用链接(例如,英文版本链接)
# 根据您的文章需要调整模式
content = re.sub(r'^> .* available at.*\n\n?', '', content, flags=re.MULTILINE)
# 转换为 HTML
html = markdown.markdown(content, extensions=['tables', 'fenced_code'])
# 写入临时文件
with open('/tmp/substack_article.html', 'w') as f:
f.write(html)
重要:请勿使用 nl2br 扩展 — 它会将单个换行符转换为 <br> 标签,导致编辑器中出现额外的换行。
导航到 Substack 仪表板并创建新文章:
# 导航到 Substack 仪表板
navigate to: https://verysmallwoods.substack.com/publish
如果未登录,提示用户登录:
请先登录 Substack,登录完成后告诉我。
Please log in to Substack first, then let me know.
从仪表板创建新的文本文章:
或者,如果编辑器已打开且文章为空,则直接进行下一步。
textbox "title")textbox "Add a subtitle…")click: title textbox
fill/type: article title
click: subtitle textbox
fill/type: article subtitle
关键:请勿使用 fill 工具 — 它会插入无格式的纯文本。
python3 /path/to/copy_to_clipboard.py html --file /tmp/substack_article.html
点击编辑器内容区域(.ProseMirror 或其内部的段落元素)
按 Cmd+V 粘贴:
press_key: Meta+v (macOS)
press_key: Control+v (Windows/Linux)
这会触发 Tiptap 的 HTML 粘贴处理器,将内容渲染为具有正确格式的富文本。
如果文章中的表格在步骤 0 已转换为图片,现在插入它们:
导航到编辑器中的正确位置 — 点击表格应出现的段落或空行(在相关标题/文本之后)
点击图片工具栏按钮 (button "Image") — 出现下拉菜单,包含选项:Image, Gallery, Stock photos, Generate image
点击下拉菜单中的"Image"菜单项 — 打开文件选择器对话框
通过文件选择器上传图片:
browser_file_uploadupload_file重要说明:
/tmp/ 中,请先将其复制到项目目录粘贴后:
编辑器会自动保存,因此不需要显式的保存操作。
草稿已保存到 Substack。请在 Substack 中预览并手动发布。
Draft saved to Substack. Please preview and publish manually.
Post URL: https://verysmallwoods.substack.com/publish/post/{postId}
用户:"把 /path/to/my-article.md 发布到 Substack"
0. 预处理表格(如果有)
- 检测 Markdown 表格
- 为每个表格创建带样式的 HTML
- 渲染为截图(在浏览器中打开、截图、关闭标签页)
- 从内容中移除表格 Markdown
- 记录插入位置
1. 读取 /path/to/my-article.md
- 从 frontmatter 或 H1 提取标题
- 从 frontmatter 摘要提取副标题
- 获取完整的 Markdown 内容(已移除表格)
2. 将 Markdown 转换为 HTML
- 去除 frontmatter
- 使用 markdown.markdown() 及 ['tables', 'fenced_code']
- 写入 /tmp/substack_article.html
3. 导航到 Substack 仪表板或新文章
4. 检查是否已登录
- 如果未登录,提示用户登录
5. 填写标题和副标题
6. 复制 HTML 到剪贴板 + 粘贴
- python3 copy_to_clipboard.py html --file /tmp/substack_article.html
- 点击编辑器内容区域
- 按 Cmd+V
7. 在正确位置插入表格图片
- 对于每个表格:点击位置 → Image 按钮 → Image 菜单项 → 文件上传
8. 验证草稿已保存
- 检查"Saved"状态
9. 报告成功
- "草稿已保存,请手动预览并发布"
nl2br 扩展 — 会导致双倍换行如果看到原始 HTML 标签或无格式文本:
fill 工具插入,而非剪贴板粘贴copy_to_clipboard.py + Cmd+V 方法(参见步骤 6)Substack 的 Tiptap 编辑器不支持 HTML 表格。它们会被折叠为内联纯文本。
如果页面显示登录提示:
请先登录 Substack: https://verysmallwoods.substack.com
登录完成后告诉我。
如果编辑器元素不可见:
如果 copy_to_clipboard.py 失败:
pip install pyobjc-framework-Cocoa (macOS)| 元素 | 选择器/标识符 | 描述 |
|---|---|---|
| 标题输入框 | textbox "title" | 文章标题 |
| 副标题输入框 | textbox "Add a subtitle…" | 文章副标题 |
| 内容区域 | .ProseMirror (Tiptap 编辑器) | 文章内容 |
| 保存状态 | button "Saved" | 自动保存指示器 |
| 预览按钮 | button "Preview" | 预览文章 |
| 继续按钮 | button "Continue" | 请勿使用 - 启动发布流程 |
| 设置按钮 | button "Settings" | 打开设置侧边栏 |
| 退出按钮 | button "Exit" | 退出编辑器 |
| 图片按钮 | button "Image" | 打开图片上传下拉菜单 |
| 图片菜单项 | menuitem "Image" | 打开文件选择器以上传图片 |
| 作者按钮 | button "{PublicationName}" | 作者/出版物选择器 |
Markdown file
↓ (Python markdown library)
HTML string
↓ (copy_to_clipboard.py)
System clipboard (text/html + text/plain)
↓ (Cmd+V keyboard shortcut)
Tiptap ProseMirror editor
↓ (auto-save)
Substack draft
以下 Markdown 元素在 HTML 转换和粘贴后能正确渲染:
| Markdown 元素 | Substack 支持 | 说明 |
|---|---|---|
| 标题 (H2-H6) | 是 | 不建议使用 H1(标题是独立的) |
| 粗体 / 斜体 | 是 | |
| 行内代码 | 是 | |
| 代码块 | 是 | 语法高亮可能有所不同 |
| 链接 | 是 | |
| 引用块 | 是 | |
| 项目符号列表 | 是 | |
| 有序列表 | 是 | |
| 水平线 | 是 | |
| 表格 | 否 → 图片 | 通过 diagram-to-image 技能转换,作为图片上传 |
| 图片 | 手动 | 通过图片工具栏按钮 → 文件选择器上传 |
每周安装数
63
仓库
GitHub 星标数
75
首次出现
Feb 10, 2026
安全审计
安装于
codex57
opencode56
cursor56
gemini-cli56
github-copilot55
kimi-cli54
通过 LiteLLM 代理让 Claude Code 对接 GitHub Copilot 运行 | 高级变通方案指南
48,700 周安装