Web Article Extractor
dongbeixiaohuo/writing-agent
使用隔离的 Chrome DevTools MCP 从博客、新闻、公众号等网页提取正文,返回结构化内容,或保存 Markdown 和远程图片。用户要求提取文章、抓取网页正文、保存为 Markdown、下载文章图片或排查正文选择器时调用。
Publish Markdown articles to Zsxq (知识星球) as drafts. An agent skill from sugarforever/01coder-agent-skills.
$ npx skills add sugarforever/01coder-agent-skills --skill publish-zsxq-article -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install sugarforever/01coder-agent-skills publish-zsxq-article --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/sugarforever/01coder-agent-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/publish-zsxq-article .claude/skills/publish-zsxq-article && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "publish-zsxq-article" agent skill from https://github.com/sugarforever/01coder-agent-skills/tree/main/skills/publish-zsxq-article into .claude/skills/publish-zsxq-article/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "publish-zsxq-article", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/sugarforever/01coder-agent-skills/tree/main/skills/publish-zsxq-articleType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add sugarforever/01coder-agent-skills --skill publish-zsxq-article -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install sugarforever/01coder-agent-skills publish-zsxq-article --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sugarforever/01coder-agent-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/publish-zsxq-article .agents/skills/publish-zsxq-article && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "publish-zsxq-article" agent skill from https://github.com/sugarforever/01coder-agent-skills/tree/main/skills/publish-zsxq-article into .agents/skills/publish-zsxq-article/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "publish-zsxq-article", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add sugarforever/01coder-agent-skills --skill publish-zsxq-article -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install sugarforever/01coder-agent-skills publish-zsxq-article --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sugarforever/01coder-agent-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/publish-zsxq-article .cursor/skills/publish-zsxq-article && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "publish-zsxq-article" agent skill from https://github.com/sugarforever/01coder-agent-skills/tree/main/skills/publish-zsxq-article into .cursor/skills/publish-zsxq-article/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "publish-zsxq-article", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/sugarforever/01coder-agent-skills.git --path skills/publish-zsxq-article--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add sugarforever/01coder-agent-skills --skill publish-zsxq-article -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install sugarforever/01coder-agent-skills publish-zsxq-article --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sugarforever/01coder-agent-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/publish-zsxq-article .gemini/skills/publish-zsxq-article && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "publish-zsxq-article" agent skill from https://github.com/sugarforever/01coder-agent-skills/tree/main/skills/publish-zsxq-article into .gemini/skills/publish-zsxq-article/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "publish-zsxq-article", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install sugarforever/01coder-agent-skills publish-zsxq-articleInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add sugarforever/01coder-agent-skills --skill publish-zsxq-article -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/sugarforever/01coder-agent-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/publish-zsxq-article .github/skills/publish-zsxq-article && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "publish-zsxq-article" agent skill from https://github.com/sugarforever/01coder-agent-skills/tree/main/skills/publish-zsxq-article into .github/skills/publish-zsxq-article/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "publish-zsxq-article", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add sugarforever/01coder-agent-skills --skill publish-zsxq-article -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install sugarforever/01coder-agent-skills publish-zsxq-article --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sugarforever/01coder-agent-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/publish-zsxq-article .opencode/skills/publish-zsxq-article && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "publish-zsxq-article" agent skill from https://github.com/sugarforever/01coder-agent-skills/tree/main/skills/publish-zsxq-article into .opencode/skills/publish-zsxq-article/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "publish-zsxq-article", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
publish-zsxq-articlePublish Markdown articles to Zsxq (知识星球) as drafts. An agent skill from sugarforever/01coder-agent-skills.
Publish Zsxq Article is an agent skill from sugarforever/01coder-agent-skills. Publish Markdown articles to Zsxq (知识星球) as drafts. Use when user wants to publish a Markdown file to Zsxq, or mentions "发布到知识星球", "星球文章", "zsxq article". Handles Markdown content input and saves as draft (never auto-publish).
Its SKILL.md is about 3.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including scripts (for example `scripts/copy_to_clipboard.py`).
It sits in Documents & Office, covering Markdown and Browser testing. It works with Model Context Protocol, Playwright and Chrome DevTools. The licence is MIT.
8 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit e51fb6e. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/ (Python), which the agent can run.
From the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
wx.zsxq.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Publish Zsxq Article loads about 3.2k tokens when it runs. Until then it costs about 62 tokens; SKILL.md has 1,262 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from sugarforever/01coder-agent-skills at commit e51fb6e, republished under its MIT licence (© sugarforever). 1,262 words, ~3,246 tokens.
.claude/skills/publish-zsxq-article/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.Publish Markdown content to Zsxq (知识星球) article editor in Markdown mode, saving as draft for user review before publishing.
mcp__chrome-devtools__*)mcp__playwright__*)This skill works with both Chrome DevTools MCP and Playwright MCP:
| Action | Chrome DevTools MCP | Playwright MCP |
|---|---|---|
| Navigate | navigate_page | browser_navigate |
| Take snapshot | take_snapshot | browser_snapshot |
| Take screenshot | take_screenshot | browser_take_screenshot |
| Click element | click | browser_click |
| Fill text | fill | browser_type |
| Upload file | upload_file | browser_file_upload |
| Press key | press_key | browser_press_key |
| Evaluate JS | evaluate_script | browser_evaluate |
Priority: Default to Playwright MCP. Use Chrome DevTools MCP only when Playwright MCP is unavailable.
Detection: At runtime, prefer mcp__playwright__browser_navigate. Fall back to mcp__chrome-devtools__navigate_page only if Playwright tools are not available.
https://wx.zsxq.com/loginhttps://wx.zsxq.com/article?groupId={groupId}The Zsxq group ID is required to navigate to the article editor (the groupId= URL parameter). Do not hardcode a default.
Before any navigation, resolve the group ID in this order:
ZSXQ_GROUP_ID (optional, for users who publish repeatedly to the same group).请提供知识星球的 group ID(在星球 URL 里
groupId=之后那串数字)。
Do not proceed to Step 2 (Navigate) without a resolved group ID.
The Zsxq article editor has two modes:
IMPORTANT: Content Insertion Method The Milkdown editor requires content to be inserted via paste event, NOT direct fill:
fill tool → Content treated as plain text, Markdown NOT rendered.ProseMirror class)Read the Markdown file and extract:
title field, or H1 header # Title, or filename--- delimited block at the top)<!-- ... -->)---) — Milkdown's paste handler misparses ---, causing subsequent headings and formatting to break (e.g., ## rendered as bold ** text instead of H2). Remove all --- lines before pasting.# Read the markdown file
cat /path/to/article.md# Navigate to the article editor with the resolved group ID (see Group ID Resolution above)
navigate_page: https://wx.zsxq.com/article?groupId={groupId}If not logged in, the page will redirect to login. Prompt user to log in manually:
请先登录知识星球,登录完成后告诉我。
Login URL: https://wx.zsxq.com/loginAfter page loads, check if already in Markdown mode by looking for "切换到富文本模式" text.
If in Rich Text mode (shows "切换到 Markdown 模式"):
// Check current mode
const switchBtn = document.querySelector('[class*="switch"]');
if (switchBtn && switchBtn.innerText.includes('切换到 Markdown')) {
// Need to switch to Markdown mode
}click: title textbox
fill: title textbox with article titleCRITICAL: Do NOT use fill tool - it inserts plain text without Markdown rendering.
Instead, use evaluate_script to simulate a paste event:
// Simulate paste event to trigger Milkdown's Markdown parsing
() => {
const markdownContent = `YOUR_MARKDOWN_CONTENT_HERE`;
const editorEl = document.querySelector('.ProseMirror');
if (!editorEl) return { error: 'Editor not found' };
// Focus the editor
editorEl.focus();
// Create and dispatch paste event
const clipboardData = new DataTransfer();
clipboardData.setData('text/plain', markdownContent);
const pasteEvent = new ClipboardEvent('paste', {
bubbles: true,
cancelable: true,
clipboardData: clipboardData
});
editorEl.dispatchEvent(pasteEvent);
return { success: true, charCount: markdownContent.length };
}This method:
IMPORTANT: Always save as draft, NEVER click "发布" (Publish)
click: "保存" buttonAfter saving:
草稿已保存。请在知识星球中预览并手动发布。
Draft saved. Please review in Zsxq and publish manually.User: "把 /path/to/my-article.md 发布到知识星球"
1. Read /path/to/my-article.md
- Extract title from frontmatter or H1
- Strip frontmatter, H1 title, HTML comments, and horizontal rules (`---`)
- Get cleaned content
2. Navigate to https://wx.zsxq.com/article?groupId={resolved groupId}
3. Check if logged in
- If not, prompt user to login
4. Switch to Markdown mode if needed
- Click "切换到 Markdown 模式 (内测)"
- Confirm dialog
5. Fill title
- Click title input
- Use `fill` tool to set title text
6. Insert content via paste event
- Use `evaluate_script` to simulate paste event
- This triggers Milkdown to parse and render Markdown
7. Save as draft
- Click "保存"
8. Report success
- "草稿已保存,请手动预览并发布"ZSXQ_GROUP_ID env var, or user prompt before any navigation (see Group ID Resolution)If you see raw Markdown syntax like **bold** or [link](url) instead of rendered formatting:
fill tool instead of paste eventevaluate_script method to simulate a paste event (see Step 5)The Milkdown editor only parses Markdown when content is pasted, not when directly set.
---) Break FormattingIf headings appear as bold text with ** markers, or formatting is garbled after a --- line:
--- (horizontal rule), corrupting subsequent Markdown elements--- lines from the content before pasting. The article can use headings for section separation instead.If page redirects or shows login prompt:
请先登录知识星球: https://wx.zsxq.com/login
登录完成后告诉我。Zsxq has a 100,000 character limit. If content exceeds:
文章内容超过100000字符限制,请考虑拆分文章。When switching to Markdown mode, a confirmation dialog appears:
If editor elements are not visible:
| Element | Selector/Identifier | Description |
|---|---|---|
| Title input | textbox "请在这里输入标题" | Article title (max 60 chars) |
| Content area | .ProseMirror (Milkdown editor) | Markdown content (max 100000 chars) |
| Save button | "保存" | Save as draft |
| Preview button | "预览" | Preview article |
| Publish button | "发布" | DO NOT USE |
| Mode switch | "切换到 Markdown 模式" / "切换到富文本模式" | Toggle editor mode |
| Tags | "添加标签" | Add article tags |
| Word count | "正文字数:X /100000" | Character counter |
Image upload works in both Rich Text mode and Markdown mode using the upload_file tool.
ls -la /path/to/image.png to check file sizeImage upload works with the image button in both editor modes:
Take snapshot to find the image button ref/uid
button "image"generic description="Add image"Upload image
Chrome DevTools MCP:
upload_file:
uid: <image button uid>
filePath: /path/to/image.pngPlaywright MCP:
browser_file_upload:
ref: <image button ref>
paths: ["/path/to/image.png"]Verify upload - take screenshot to confirm image appears in editor
| Mode | Image Button | Selector in Snapshot |
|---|---|---|
| Rich Text | button "image" | button "image" |
| Markdown | Add image | generic description="Add image" |
# 1. Take verbose snapshot to find image button
take_snapshot(verbose=true)
# 2. Find "Add image" button (e.g., uid=26_59)
# Look for: generic description="Add image"
# 3. Upload image directly to the button
upload_file:
uid: 26_59 # (example uid for "Add image" button)
filePath: /Users/user/Downloads/image.png
# 4. Verify with screenshot
take_screenshot# 1. Take snapshot to find image button
take_snapshot
# 2. Find image button (e.g., uid=12_7)
# Look for: button "image"
# 3. Upload image to the button
upload_file:
uid: 12_7 # (example uid for image button)
filePath: /Users/user/Downloads/image.png
# 4. Verify with screenshot
take_screenshot# Check size
ls -la /path/to/image.png
# Compress if needed (macOS)
sips -s format jpeg -s formatOptions 80 /path/to/image.png --out /path/to/image_compressed.jpgImage not appearing after upload:
Finding the correct button uid:
take_snapshot(verbose=true) to see element descriptionsgeneric description="Add image"button "image"The Zsxq article editor uses two different editors:
upload_file tool to button "image"upload_file tool to generic description="Add image"This is why the user's workflow via md.bytenote.net works - pasting from any source triggers Milkdown's Markdown parser, resulting in properly rendered content.
© sugarforever, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file (scripts) in skills/publish-zsxq-article of sugarforever/01coder-agent-skills.
Open the folder on GitHubat commit e51fb6e
Publish Zsxq Article next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Publish Zsxq Article this skillsugarforever/01coder-agent-skills | 137 | — | ~3.2k | Automated safety check: Pass | MIT | |
| Web Article Extractordongbeixiaohuo/writing-agent | 434 | — | ~740 | Automated safety check: Pass | MIT | |
| Mirroir Onboardjfarcand/mirroir-mcp | 247 | — | ~4.4k | Automated safety check: Notes | Apache-2.0 | |
| Browser NavigationFactory-AI/factory-plugins | 111 | — | ~2.7k | Automated safety check: Pass | None | |
| Record E2E Giflablup/backend.ai-webui | 133 | — | ~907 | Automated safety check: Notes | LGPL-3.0 | |
| Chrome Devtoolstech-leads-club/agent-skills | 7k | — | ~1.3k | Automated safety check: Pass | MIT |
dongbeixiaohuo/writing-agent
使用隔离的 Chrome DevTools MCP 从博客、新闻、公众号等网页提取正文,返回结构化内容,或保存 Markdown 和远程图片。用户要求提取文章、抓取网页正文、保存为 Markdown、下载文章图片或排查正文选择器时调用。
jfarcand/mirroir-mcp
Onboard a consumer web app to mirroir's .mirroir/ dotfile by EXPLORING the running app (chrome-devtools-mcp) — derive real selectors from the accessibility tree, exercise each surface's primary…
Factory-AI/factory-plugins
Automate browser interactions for web testing, form filling, screenshots, and data extraction.
lablup/backend.ai-webui
Record Playwright e2e tests as one GIF per test case (video → ffmpeg palette GIF) and return a markdown table for a PR description.
tech-leads-club/agent-skills
Browser debugging, performance profiling, and automation via Chrome DevTools MCP.
PostHog/posthog
Internal PostHog developer frontend/browser QA skill. An agent skill from PostHog/posthog.
sugarforever/01coder-agent-skills
Designs typography-driven video covers and thumbnails in HTML/CSS and screenshots them with Chrome DevTools at 16:9, 16:10, 9:16 and 3:4.
sugarforever/01coder-agent-skills
Reviews one finished Claude Code session from its exported markdown and decides whether a skill is worth creating, updating or reusing for similar work.
sugarforever/01coder-agent-skills
Fixes speech-recognition mistakes in .srt subtitle files, in Chinese or English, using terms you supply and leaving every timestamp untouched.
sugarforever/01coder-agent-skills
Lists Claude Code session transcripts and exports them to organized Markdown with a digest, a clean conversation and linked tool-call details.
sugarforever/01coder-agent-skills
Lists, filters and exports local Codex session transcripts to organized Markdown with a digest, timeline and tool-call details, in full or pick-one mode.
sugarforever/01coder-agent-skills
Converts Mermaid diagrams and markdown tables into PNG images through a hosted rendering API, for platforms without rich formatting.
Categories
Publish Markdown articles to Zsxq (知识星球) as drafts. An agent skill from sugarforever/01coder-agent-skills. Publish Zsxq Article is an agent skill from sugarforever/01coder-agent-skills. Publish Markdown articles to Zsxq (知识星球) as drafts.
Publish Zsxq Article fits situations like: user wants to publish a Markdown file to Zsxq; mentions 发布到知识星球.
Run `npx skills add sugarforever/01coder-agent-skills --skill publish-zsxq-article -a claude-code`. Or copy the skill folder (skills/publish-zsxq-article in sugarforever/01coder-agent-skills) into .claude/skills/publish-zsxq-article in your project. Claude Code loads it when a task matches its description.
Run `npx skills add sugarforever/01coder-agent-skills --skill publish-zsxq-article -a codex`. Or copy the skill folder (skills/publish-zsxq-article in sugarforever/01coder-agent-skills) into .agents/skills/publish-zsxq-article in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add sugarforever/01coder-agent-skills --skill publish-zsxq-article -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/publish-zsxq-article, .gemini/skills/publish-zsxq-article, .github/skills/publish-zsxq-article and .opencode/skills/publish-zsxq-article in your project.
Going by SKILL.md and its folder, Publish Zsxq Article needs Python for the scripts in its folder. Our summary lists: Python 3.
SKILL.md names 1 domain. In commands or code: wx.zsxq.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Publish Zsxq Article is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.2k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Publish Zsxq Article: Web Article Extractor (dongbeixiaohuo/writing-agent, 434 stars), Mirroir Onboard (jfarcand/mirroir-mcp, 247 stars), Browser Navigation (Factory-AI/factory-plugins, 111 stars) and Record E2E Gif (lablup/backend.ai-webui, 133 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
sugarforever (a GitHub user) maintains it in sugarforever/01coder-agent-skills, which has 137 GitHub stars. The repository holds 21 skills in this directory. The repository was last updated on June 19, 2026.
Source: sugarforever/01coder-agent-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.