Token导航 LogoToken导航

Agent Skill · 前端设计

publish-substack-article(发布子堆栈文章)

publish-substack-article 用于处理 GitHub 仓库、Issue、Pull Request 和代码协作信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要围绕仓库状态、代码变更或协作事项进行整理时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

publish-substack-article 是前端设计类 Agent Skill,可用宿主为 Codex、Claude、Cursor、Gemini CLI,通过GitHub 仓库获取,权限为操作浏览器;许可证信息还不明确,第三方扫描已通过,按安装量在前端设计类的 10,216 个 Skill 里排第 1,973。

总安装 3,166周安装 136GitHub Stars 90下载 1,110核验 2026-05-01

安装说明

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

安装方式

通过对话安装

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

请帮我安装这个 Agent Skill:publish-substack-article(发布子堆栈文章)
来源仓库:https://github.com/sugarforever/01coder-agent-skills
仓库路径:skills/publish-substack-article
安装命令:
npx skills add https://github.com/sugarforever/01coder-agent-skills --skill publish-substack-article
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

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

skills.shnpx skills
npx skills add https://github.com/sugarforever/01coder-agent-skills --skill publish-substack-article

这个 Skill 是做什么的

前端设计类 Skill 关注页面结构、视觉规范和组件写法,输出通常是可运行的界面代码。

用于处理 GitHub 仓库、Issue、Pull Request 和代码协作信息。适合在 Codex、Claude、Cursor、Gemini CLI 中围绕仓库状态、代码变更或协作事项进行整理。通过 npx skills add 命令从指定 GitHub 仓库安装使用。

建议确认权限范围和维护状态,注意可能触发联网、命令执行或文件读写操作。publish-substack-article 属于前端设计类 Skill,可作为该场景下的辅助能力补充。

来源仓库内路径:skills/publish-substack-article

上手步骤

4 步
  1. 1

    确认自己的宿主工具

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

  2. 2

    拿到安装命令

    可以直接复制的命令是 npx skills add https://github.com/sugarforever/01coder-agent-skills --skill publ…;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

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

  4. 4

    按最小权限试用

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

常见问题

6 条

publish-substack-article 怎么安装?

在终端执行 npx skills add https://github.com/sugarforever/01coder-agent-skills --skill publish-substa…。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

publish-substack-article 支持哪些 AI 工具?

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

publish-substack-article 需要什么权限?

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

publish-substack-article 是免费的吗?

公开资料没有标注明确许可证,收费和商用限制都无法确认。正式使用前请到来源仓库核对授权说明。

publish-substack-article 用的人多吗?

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

publish-substack-article 安全吗?

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

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

值得选的地方

  • 同时适配 4 种工具,换客户端不用重新找替代品。
  • 第三方扫描已通过,常见的高风险行为没有命中。

先想清楚的地方

  • 许可证没有明确标注,能不能商用、能不能再分发都不确定。
  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 Codex,想直接扩展它能力的人。
  • 需要处理前端设计类任务、又不想每次都手写提示词的人。

不太适合

  • 需要明确授权才能用到公司项目里的场景。
  • 需要厂商级技术支持和 SLA 的生产系统。

前端设计类 Skill 对比

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

前端设计 · Codex、Claude

8,823,360126,072只读MIT通过
vercel-composition-patterns

Vercel 组合模式 · Codex、Claude

3,858,81625,893需要联网MIT通过
vercel-react-native-skills

Vercel React native skills 前端 · Codex、Claude

2,468,66425,878只读MIT通过
adapt

adapt 搜索 · Codex、Claude

2,027,04023,125操作浏览器未明确通过
bolder

bolder 分析 · Codex、Claude

2,004,28823,130只读未明确通过
publish-substack-article

发布子堆栈文章 · 本页

3,16690操作浏览器未明确通过

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

SKILL.md 原文

Publish Substack Article

Publish Markdown content to Substack post editor, converting Markdown to HTML and pasting as rich text. Saves as draft for user review before publishing.

Prerequisites

  • Browser automation MCP (either one):

- Chrome DevTools MCP (mcp__chrome-devtools__*) - Playwright MCP (mcp__playwright__*)

  • User logged into Substack
  • Python 3 with markdown package (pip install markdown)
  • copy_to_clipboard.py script (shared from publish-zsxq-article skill)

Browser MCP Tool Mapping

This skill works with both Chrome DevTools MCP and Playwright MCP. Use whichever is available:

ActionChrome DevTools MCPPlaywright MCP
Navigatenavigate_pagebrowser_navigate
Take snapshottake_snapshotbrowser_snapshot
Take screenshottake_screenshotbrowser_take_screenshot
Click elementclickbrowser_click
Fill textfillbrowser_type
Press keypress_keybrowser_press_key
Evaluate JSevaluate_scriptbrowser_evaluate

Detection: Check available tools at runtime. If mcp__chrome-devtools__navigate_page exists, use Chrome DevTools MCP. If mcp__playwright__browser_navigate exists, use Playwright MCP.

Key URLs

  • Substack dashboard: https://{publication}.substack.com/publish
  • Post editor: https://{publication}.substack.com/publish/post/{postId}
  • Default publication: verysmallwoods

Editor Interface

The Substack post editor uses Tiptap (ProseMirror-based WYSIWYG editor).

Key Elements

  • Title input: textbox "title" (placeholder: "Title")
  • Subtitle input: textbox "Add a subtitle…"
  • Content area: .ProseMirror (Tiptap editor, "Start writing...")
  • Save status: button "Saved" (auto-saves)
  • Preview button: button "Preview"
  • Continue button: button "Continue" (publish flow - DO NOT USE)
  • Settings sidebar: button "Settings" (title, description, thumbnail)

Settings Sidebar (left panel)

When "Settings" or "File Settings" is open:

  • Title: textbox "Add a title..."
  • Description: textbox "Add a description..."
  • Thumbnail: Upload button (3:2 aspect ratio)

Toolbar

Bold, Italic, Strikethrough, Code, Link, Image, Audio, Video, Quote, Lists (bullet/ordered), Button, More (Code block, Divider, Footnote, LaTeX, etc.)

Content Insertion Method

CRITICAL: Use clipboard paste with HTML content, NOT direct fill or plain Markdown paste.

The Tiptap editor handles HTML paste natively and renders it as rich content. The workflow is:

  1. Convert Markdown to HTML using Python's markdown library
  2. Copy HTML to system clipboard using copy_to_clipboard.py html
  3. Focus the editor content area
  4. Press Cmd+V (macOS) or Ctrl+V (Windows/Linux) to paste

Why HTML paste?

  • fill tool → Content treated as plain text, no formatting
  • Plain Markdown paste → Tiptap does NOT parse Markdown on paste
  • HTML paste → Tiptap renders HTML as rich content (headings, code blocks, links, bold, etc.)

Known limitation: Substack's editor does NOT support HTML tables. Tables will be collapsed into plain text. See Step 0: Pre-Processing for converting tables to images.

Main Workflow

Step 0: Pre-Processing — Convert Tables to Images

Substack does NOT render HTML tables. They collapse into plain text. Any Markdown table must be converted to a PNG image and uploaded separately.

Workflow:

  1. Detect tables in the Markdown file (lines with | forming table structure)
  2. Convert each table to PNG using the diagram-to-image skill:
# Extract table to temp file
cat > /tmp/table1.md << 'TABLE_EOF'
| Column 1 | Column 2 | Column 3 |
|----------|----------|----------|
| Data 1   | Data 2   | Data 3   |
TABLE_EOF

# Convert via diagramless.xyz API (auto-detects as table)
node ~/.claude/skills/diagram-to-image/scripts/diagram-to-image.mjs /tmp/table1.md -o /tmp/table1.png
  1. Note the position of each table in the article for later insertion (after which heading/paragraph)
  2. Remove table Markdown from the content before HTML conversion (so it won't appear as plain text in the pasted content)

Image upload happens after pasting the main content — see Step 7.

Step 1: Prepare Content

Read the Markdown file and extract:

  • Title: from YAML frontmatter title field, or H1 header # Title, or filename
  • Subtitle: from YAML frontmatter excerpt or description field
  • Content: full Markdown body (strip YAML frontmatter and any cross-reference links)

Step 2: Convert Markdown to HTML

Use Python's markdown library with tables and fenced_code extensions:

import markdown
import re

with open('/path/to/article.md', 'r') as f:
    content = f.read()

# Strip YAML frontmatter
content = re.sub(r'^---\n.*?\n---\n', '', content, flags=re.DOTALL)

# Strip cross-reference links (e.g., English version link)
# Adjust pattern as needed for your articles
content = re.sub(r'^> .* available at.*\n\n?', '', content, flags=re.MULTILINE)

# Convert to HTML
html = markdown.markdown(content, extensions=['tables', 'fenced_code'])

# Write to temp file
with open('/tmp/substack_article.html', 'w') as f:
    f.write(html)

IMPORTANT: Do NOT use nl2br extension - it converts single newlines to <br> tags, causing extra line breaks in the editor.

Step 3: Navigate to Substack

Navigate to the Substack dashboard and create a new post:

# Navigate to Substack dashboard
navigate to: https://verysmallwoods.substack.com/publish

If not logged in, prompt user to log in:

请先登录 Substack,登录完成后告诉我。
Please log in to Substack first, then let me know.

Step 4: Create New Post

From the dashboard, create a new text post:

  1. Click "Create new" in the sidebar
  2. Select "Text post" (or navigate directly to a new post URL)

Alternatively, if the editor is already open with an empty post, proceed directly.

Step 5: Fill Title and Subtitle

  1. Click the title textbox (textbox "title")
  2. Type the article title
  3. Click the subtitle textbox (textbox "Add a subtitle…")
  4. Type the subtitle/excerpt
click: title textbox
fill/type: article title

click: subtitle textbox
fill/type: article subtitle

Step 6: Insert HTML Content (via Clipboard Paste)

CRITICAL: Do NOT use fill tool - it inserts plain text without formatting.

  1. Copy HTML to system clipboard:
python3 /path/to/copy_to_clipboard.py html --file /tmp/substack_article.html
  1. Click the editor content area (.ProseMirror or paragraph element inside it)
  2. Press Cmd+V to paste:
press_key: Meta+v  (macOS)
press_key: Control+v  (Windows/Linux)

This triggers Tiptap's HTML paste handler, which renders the content as rich text with proper formatting.

Step 7: Insert Table Images

If the article had tables converted to images in Step 0, insert them now:

  1. Navigate to the correct position in the editor — click on the paragraph or empty line where the table should appear (after the relevant heading/text)
  2. Click the Image toolbar button (button "Image") — a dropdown menu appears with options: Image, Gallery, Stock photos, Generate image
  3. Click "Image" menuitem from the dropdown — a file chooser dialog opens
  4. Upload the image via file chooser:

- Playwright MCP: browser_file_upload with the image path - Chrome DevTools MCP: upload_file with the image path

Important notes:

  • File path restriction: Playwright MCP only allows file uploads from within allowed roots (project directories). If your image is in /tmp/, copy it to the project directory first
  • Repeat for each table: Position cursor at the correct location, then upload each table image
  • Delete residual text: If table content was pasted as plain text (because it wasn't removed in pre-processing), select it (triple-click to select paragraph) and delete before inserting the image

Step 8: Verify Draft

After pasting:

  1. Check the "Saved" status indicator (green dot + "Saved" text)
  2. Take a snapshot to verify content structure
  3. Optionally take a screenshot for visual verification

The editor auto-saves, so no explicit save action is needed.

Step 9: Report Completion

草稿已保存到 Substack。请在 Substack 中预览并手动发布。
Draft saved to Substack. Please preview and publish manually.

Post URL: https://verysmallwoods.substack.com/publish/post/{postId}

Complete Example Flow

User: "把 /path/to/my-article.md 发布到 Substack"

0. Pre-process tables (if any)
   - Detect Markdown tables
   - Create styled HTML for each table
   - Render to screenshots (open in browser, screenshot, close tab)
   - Remove table Markdown from content
   - Note insertion positions

1. Read /path/to/my-article.md
   - Extract title from frontmatter or H1
   - Extract subtitle from frontmatter excerpt
   - Get full Markdown content (with tables removed)

2. Convert Markdown to HTML
   - Strip frontmatter
   - Use markdown.markdown() with ['tables', 'fenced_code']
   - Write to /tmp/substack_article.html

3. Navigate to Substack dashboard or new post

4. Check if logged in
   - If not, prompt user to login

5. Fill title and subtitle

6. Copy HTML to clipboard + Paste
   - python3 copy_to_clipboard.py html --file /tmp/substack_article.html
   - Click editor content area
   - Press Cmd+V

7. Insert table images at correct positions
   - For each table: click position → Image button → Image menuitem → file upload

8. Verify draft saved
   - Check "Saved" status

9. Report success
   - "草稿已保存,请手动预览并发布"

Critical Rules

  1. NEVER click "Continue" - This starts the publish flow. Only save as draft (auto-save handles this)
  2. Always convert to HTML first - Plain Markdown will not be parsed by the Tiptap editor
  3. Use clipboard paste - The only reliable way to insert formatted content
  4. Check login status - Prompt user to login if needed
  5. Preserve original file - Never modify the source Markdown file
  6. Report completion - Tell user the draft is saved and needs manual review
  7. No nl2br extension - Causes double line breaks
  8. Tables → images - Pre-process tables before pasting content; upload images after paste
  9. Playwright file paths - Playwright MCP restricts file uploads to allowed roots; copy temp files to project directory before uploading

Troubleshooting

Content Shows as Plain Text (No Formatting)

If you see raw HTML tags or unformatted text:

  • Cause: Content was inserted using fill tool instead of clipboard paste
  • Solution: Use the copy_to_clipboard.py + Cmd+V method (see Step 6)

Tables Not Rendering (Shows Plain Text)

Substack's Tiptap editor does not support HTML tables. They collapse into inline plain text.

  • Solution: Convert tables to PNG via diagram-to-image skill → upload as images (see Step 0 and Step 7)
  • Alternative: Restructure simple tables as formatted lists
  • If plain text already pasted: Triple-click the plain text paragraph to select it, press Backspace to delete, then insert the table image at that position

Login Required

If page shows login prompt:

请先登录 Substack: https://verysmallwoods.substack.com
登录完成后告诉我。

Editor Not Loading

If editor elements are not visible:

  1. Wait for page to fully load
  2. Take a new snapshot
  3. If still not loading, refresh the page

Clipboard Copy Fails

If copy_to_clipboard.py fails:

  • Ensure dependencies: pip install pyobjc-framework-Cocoa (macOS)
  • Check the HTML file exists and is readable
  • Try copying a smaller test string first

Element Reference

ElementSelector/IdentifierDescription
Title inputtextbox "title"Post title
Subtitle inputtextbox "Add a subtitle…"Post subtitle
Content area.ProseMirror (Tiptap editor)Post content
Save statusbutton "Saved"Auto-save indicator
Preview buttonbutton "Preview"Preview post
Continue buttonbutton "Continue"DO NOT USE - starts publish flow
Settings buttonbutton "Settings"Open settings sidebar
Exit buttonbutton "Exit"Exit editor
Image buttonbutton "Image"Opens image upload dropdown
Image menuitemmenuitem "Image"Opens file chooser for image upload
Author buttonbutton "{PublicationName}"Author/publication selector

Technical Details

Editor Stack

  • Tiptap: A headless, framework-agnostic rich-text editor built on ProseMirror
  • ProseMirror: The underlying rich-text editing framework
  • Paste handling: Tiptap natively parses HTML from clipboard and converts to its internal document model

Content Conversion Pipeline

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

Supported Formatting

The following Markdown elements are correctly rendered after HTML conversion and paste:

Markdown ElementSubstack SupportNotes
Headings (H2-H6)YesH1 not recommended (title is separate)
Bold / ItalicYes
Inline codeYes
Code blocksYesSyntax highlighting may vary
LinksYes
BlockquotesYes
Bullet listsYes
Ordered listsYes
Horizontal rulesYes
TablesNo → ImageConvert via diagram-to-image skill, upload as image
ImagesManualUpload via Image toolbar button → file chooser

平台分布

Codex

35.73%
按下载量换算397

Claude

32.14%
按下载量换算357

Cursor

18.19%
按下载量换算202

Gemini CLI

9.57%
按下载量换算106

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

操作浏览器

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

安装前确认

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

继续浏览同类 Skills