{"id":"7b70ee82-429d-4a1a-8ae3-be821f4e936d","entityType":"agent","slug":"clawhub-webkixi-claw-markdown-preview","name":"Claw Markdown Preview","canonicalUrl":"https://www.xpersona.co/agent/clawhub-webkixi-claw-markdown-preview","canonicalPath":"/agent/clawhub-webkixi-claw-markdown-preview","generatedAt":"2026-10-10T06:43:24.401Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-09T19:25:01.855Z","emptyReason":null},"description":"\"预览这个 markdown 文件\" / \"打开 markdown 预览\" or \"preview this markdown file\", \"open markdown preview\", Skill: Claw Markdown Preview Owner: webkixi Summary: \"预览这个 markdown 文件\" / \"打开 markdown 预览\" or \"preview this markdown file\", \"open markdown preview\", Tags: latest:1.4.15 Version history: v1.4.15 | 2026-07-17T03:20:29.074Z | user - Removed documentation files: README.md and skill-card.md. - No changes to core functionality. v1.4.14 | 2026-07-15T15:10:52.073Z | user - 分离式进程管理现已在 preview_server.py 内部实现，保障跨平台一致性，不再依赖 shel","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 2.1K downloads reported by the source. Last updated 10/9/2026.","installCommand":"clawhub skill install s171neyed37y95yer64vfgs0j9880zss:claw-markdown-preview","sourceUrl":"https://clawhub.ai/webkixi/claw-markdown-preview","homepage":"https://clawhub.ai/webkixi/skills/claw-markdown-preview","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/webkixi/claw-markdown-preview","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/webkixi/skills/claw-markdown-preview","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":66,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"\"预览这个 markdown 文件\" / \"打开 markdown 预览\" or \"preview this markdown file\", \"open markdown preview\", Skill: Claw Markdown Preview Owner: webkixi Summary: \"预览这个 markd"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-09T19:25:01.855Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T19:25:01.855Z","emptyReason":null},"stars":null,"forks":null,"downloads":2081,"packageName":null,"latestVersion":"1.4.15","tractionLabel":"2.1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T19:25:01.855Z","emptyReason":null},"lastUpdatedAt":"2026-10-09T19:25:01.855Z","lastCrawledAt":"2026-10-09T19:25:01.855Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-10T19:25:01.855Z","lastVerifiedAt":null,"highlights":[{"version":"1.4.15","createdAt":"2026-07-17T03:20:29.074Z","changelog":"- Removed documentation files: README.md and skill-card.md. - No changes to core functionality.","fileCount":53,"zipByteSize":1396220},{"version":"1.4.14","createdAt":"2026-07-15T15:10:52.073Z","changelog":"- 分离式进程管理现已在 preview_server.py 内部实现，保障跨平台一致性，不再依赖 shell 层 setsid 或外部会话分离方案。 - 确保预览服务不会因空闲会话清理机制被终止（例如 WorkBuddy 空闲超时）；切换窗口、系统休眠或长时间闲置时服务可持续运行。 - 更新 SKILL.md，说明新版启动方式与进程分离机制。 - 移除示例文件：skill-card.md。 - Detached process management is now handled internally within preview_server.py for cross-platform consistency, instead of relying on shell-level setsid or external session detachment. - Ensures the preview service is not killed by idle session cleanup (e.g., WorkBuddy idle timeout); service remains running regardless of window switches, sleep, or prolonged inactivity. - SKILL.md updated to clarify the new launch and process detachment method. - Removed sample file: skill-card.md.","fileCount":54,"zipByteSize":1397630},{"version":"1.4.13","createdAt":"2026-07-15T06:31:46.646Z","changelog":"- 将预览服务默认心跳超时时长提升至120分钟（7200秒），适配长时间预览场景；避免浏览器后台标签冻结、系统休眠时服务提前终止。 - 会话偏好设置（选定的预览样式与代码样式）现已在多次预览间持久保存，配置存放于系统用户配置目录，重装组件、刷新浏览器后设置依然保留。 - 小幅更新 SKILL.md 内文档说明与相关参数。 - 移除示例文件：skill-card.md。 - Increased default heartbeat timeout to 120 minutes (7200 seconds) for long-running previews; prevents premature service stop during background tab freezing or system sleep. - Session preferences (chosen preview and code styles) now persist across previews and are stored in the system user config directory, surviving reinstalls and browser refreshes. - Minor documentation and parameter updates in SKILL.md. - Removed sample file: skill-card.md.","fileCount":54,"zipByteSize":1397134},{"version":"1.4.12","createdAt":"2026-07-13T16:33:52.306Z","changelog":"- Increased the default heartbeat timeout for the preview server from 30 seconds to 300 seconds for improved browser background tab support. - Updated documentation to recommend a 300-second heartbeat for Agent scenarios. - Removed the sample file skill-card.md.","fileCount":54,"zipByteSize":1395831},{"version":"1.4.11","createdAt":"2026-07-13T13:33:36.185Z","changelog":"- Improved: Refined the step 1 startup command for better compatibility and reliability as a single-line script, ensuring correct background task handling across environments. - Maintenance: Removed unnecessary sample file skill-card.md. - Version bump to 1.4.11.","fileCount":54,"zipByteSize":1396043},{"version":"1.4.10","createdAt":"2026-07-13T03:24:57.939Z","changelog":"- Improved background preview server management: now kills only the previous skill instance based on PID, instead of all preview servers. - Updated startup instructions to use per-instance PID logic for precise cleanup, preventing accidental termination of other markdown preview processes. - Removed sample file skill-card.md. - Bumped version to 1.4.10.","fileCount":54,"zipByteSize":1395969},{"version":"1.4.9","createdAt":"2026-07-11T16:17:56.006Z","changelog":"- Documentation updated: SKILL.md now includes bilingual (Chinese/English) descriptions and trigger instructions. - File cleanup: Removed obsolete sample file skill-card.md. - Improved clarity on usage triggers and skill capabilities for broader audiences. - No changes to core functionality.","fileCount":54,"zipByteSize":1395875},{"version":"1.4.8","createdAt":"2026-07-09T10:54:23.280Z","changelog":"- 改进启动流程，第 2 步端口探测由固定睡眠 2 秒改为循环就绪轮询，更快更稳定地检测服务端口，并提升跨平台兼容性。 - 如果默认端口未就绪，自动从日志提取实际绑定端口，确保浏览器可正确打开预览页。 - 移除 skill-card.md 示例文件，不影响功能使用。","fileCount":54,"zipByteSize":1395682}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s171neyed37y95yer64vfgs0j9880zss:claw-markdown-preview","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-webkixi-claw-markdown-preview/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-webkixi-claw-markdown-preview/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-webkixi-claw-markdown-preview/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-webkixi-claw-markdown-preview/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-webkixi-claw-markdown-preview/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-webkixi-claw-markdown-preview/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T06:43:24.396Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-webkixi-claw-markdown-preview/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-webkixi-claw-markdown-preview/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-webkixi-claw-markdown-preview/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-webkixi-claw-markdown-preview/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-09T19:25:01.855Z","emptyReason":null},"readme":"Skill: Claw Markdown Preview\n\nOwner: webkixi\n\nSummary: \"预览这个 markdown 文件\" / \"打开 markdown 预览\" or   \"preview this markdown file\", \"open markdown preview\",\n\nTags: latest:1.4.15\n\nVersion history:\n\nv1.4.15 | 2026-07-17T03:20:29.074Z | user\n\n- Removed documentation files: README.md and skill-card.md.\n- No changes to core functionality.\n\nv1.4.14 | 2026-07-15T15:10:52.073Z | user\n\n- 分离式进程管理现已在 preview_server.py 内部实现，保障跨平台一致性，不再依赖 shell 层 setsid 或外部会话分离方案。\n- 确保预览服务不会因空闲会话清理机制被终止（例如 WorkBuddy 空闲超时）；切换窗口、系统休眠或长时间闲置时服务可持续运行。\n- 更新 SKILL.md，说明新版启动方式与进程分离机制。\n- 移除示例文件：skill-card.md。\n\n- Detached process management is now handled internally within preview_server.py for cross-platform consistency, instead of relying on shell-level setsid or external session detachment.\n- Ensures the preview service is not killed by idle session cleanup (e.g., WorkBuddy idle timeout); service remains running regardless of window switches, sleep, or prolonged inactivity.\n- SKILL.md updated to clarify the new launch and process detachment method.\n- Removed sample file: skill-card.md.\n\nv1.4.13 | 2026-07-15T06:31:46.646Z | user\n\n- 将预览服务默认心跳超时时长提升至120分钟（7200秒），适配长时间预览场景；避免浏览器后台标签冻结、系统休眠时服务提前终止。\n- 会话偏好设置（选定的预览样式与代码样式）现已在多次预览间持久保存，配置存放于系统用户配置目录，重装组件、刷新浏览器后设置依然保留。\n- 小幅更新 SKILL.md 内文档说明与相关参数。\n- 移除示例文件：skill-card.md。\n- Increased default heartbeat timeout to 120 minutes (7200 seconds) for long-running previews; prevents premature service stop during background tab freezing or system sleep.\n- Session preferences (chosen preview and code styles) now persist across previews and are stored in the system user config directory, surviving reinstalls and browser refreshes.\n- Minor documentation and parameter updates in SKILL.md.\n- Removed sample file: skill-card.md.\n\nv1.4.12 | 2026-07-13T16:33:52.306Z | user\n\n- Increased the default heartbeat timeout for the preview server from 30 seconds to 300 seconds for improved browser background tab support.\n- Updated documentation to recommend a 300-second heartbeat for Agent scenarios.\n- Removed the sample file skill-card.md.\n\nv1.4.11 | 2026-07-13T13:33:36.185Z | user\n\n- Improved: Refined the step 1 startup command for better compatibility and reliability as a single-line script, ensuring correct background task handling across environments.\n- Maintenance: Removed unnecessary sample file skill-card.md.\n- Version bump to 1.4.11.\n\nv1.4.10 | 2026-07-13T03:24:57.939Z | user\n\n- Improved background preview server management: now kills only the previous skill instance based on PID, instead of all preview servers.\n- Updated startup instructions to use per-instance PID logic for precise cleanup, preventing accidental termination of other markdown preview processes.\n- Removed sample file skill-card.md.\n- Bumped version to 1.4.10.\n\nv1.4.9 | 2026-07-11T16:17:56.006Z | user\n\n- Documentation updated: SKILL.md now includes bilingual (Chinese/English) descriptions and trigger instructions.\n- File cleanup: Removed obsolete sample file skill-card.md.\n- Improved clarity on usage triggers and skill capabilities for broader audiences.\n- No changes to core functionality.\n\nv1.4.8 | 2026-07-09T10:54:23.280Z | user\n\n- 改进启动流程，第 2 步端口探测由固定睡眠 2 秒改为循环就绪轮询，更快更稳定地检测服务端口，并提升跨平台兼容性。\n- 如果默认端口未就绪，自动从日志提取实际绑定端口，确保浏览器可正确打开预览页。\n- 移除 skill-card.md 示例文件，不影响功能使用。\n\nv1.4.7 | 2026-07-09T09:29:17.553Z | user\n\n- Added Mermaid.js for diagram rendering in Markdown preview.\n- Updated trigger description to clarify only explicit Markdown preview requests are handled.\n- Added explicit local permissions (filesystem read/write, localhost network, process spawn) to skill metadata.\n- Improved documentation about single-instance service cleanup and auto-save behavior.\n- Removed outdated or redundant documentation files.\n------------------\n- 新增 Mermaid.js，用于在 Markdown 预览中渲染图表。\n- 更新触发规则说明，明确仅处理主动发起 Markdown 预览的请求。\n- 在技能元数据中添加显式本地权限（文件系统读写、本地网络访问、进程创建）。\n- 完善有关单实例服务清理与自动保存机制的文档说明。\n- 删除过时、冗余的文档文件。\n\nv1.4.5 | 2026-07-09T05:28:12.006Z | user\n\n- 改进了服务启动方式，执行入口从单条命令调整为两步流程：先将服务托管为后台常驻任务，再进行端口探测与浏览器自动打开。\n- 明确要求后台任务必须脱离命令进程树，避免因命令返回导致服务被误杀（不再推荐命令内用 nohup … &）。\n- 优化后台运行说明，标注如何托管任务以及命令分拆理由。\n- 其他功能和配置项保持不变。\n\nv1.4.4 | 2026-07-08T19:09:52.281Z | user\n\n- 将心跳超时时间从 300 秒缩短为 30 秒（`--heartbeat-timeout` 默认和推荐值变更）。\n- 相关文档说明同步更新，体现新的默认心跳超时设定。\n- 无功能变动，仅调整服务存活时长的默认行为。\n\nv1.4.3 | 2026-07-08T17:44:11.468Z | user\n\n- 增加了对用户自然语言触发方式的说明，如“预览这个 md”、“看看渲染效果”、“打开预览”等指令现在在文档中有官方描述。\n- 未检测到实际代码或逻辑更改，仅对使用文档进行了补充优化。\n- 版本号升级为 1.4.3。\n\nv1.4.2 | 2026-07-08T16:59:32.817Z | user\n\n- Removed sample file skill-card.md from the skill package.\n- Version bump from 1.4.1 to 1.4.2.\n- No changes to skill functionality or documentation.\n\nv1.4.1 | 2026-07-07T23:24:25.085Z | auto\n\n- 简化执行说明为一条后台自动处理的命令，无需分步操作或手动提取端口。\n- 默认心跳超时参数提升至 300 秒，稳定兼容更多后台/Agent 场景。\n- skill 描述和用法说明精简，突出关键触发词与“浏览器外部预览”用途。\n- 保留全部功能点和参数说明，部分表达更加简洁明了。\n- 推荐只用系统 open/xdg-open/start 命令打开外部浏览器，避免 present_files。\n\nv1.4.0 | 2026-07-07T19:38:29.724Z | auto\n\n- 新增详细的启动流程和参数说明，优化本地 Markdown 预览体验\n- 强化跨平台兼容和后台运行说明，补充进程清理与端口检测方法\n- 明确推荐 `--heartbeat-timeout 60` 及 `PYTHONUNBUFFERED=1`，避免后台服务自动退出及日志不可读问题\n- 丰富富文本复制、图片粘贴、主题切换等功能介绍\n- 新增常见问题与注意事项，提高使用稳定性和易用性\n\nArchive index:\n\nArchive v1.4.15: 53 files, 1396220 bytes\n\nFiles: assets/code-themes/atom-one-dark.css (1372b), assets/code-themes/dracula.css (1062b), assets/code-themes/github-dark.css (1719b), assets/code-themes/github-light.css (1298b), assets/code-themes/github.css (1301b), assets/code-themes/monokai.css (1213b), assets/code-themes/vs2015.css (1831b), assets/code-themes/vscode-light.css (1238b), assets/code-themes/xcode.css (1238b), assets/index.html (21778b), assets/lib/codemirror.bundle.min.js (498838b), assets/lib/converter.js (26450b), assets/lib/highlight.min.js (121727b), assets/lib/markdown-it-deflist.js (7014b), assets/lib/markdown-it-imageflow.js (1771b), assets/lib/markdown-it-implicit-figures.js (4238b), assets/lib/markdown-it-li.js (550b), assets/lib/markdown-it-linkfoot.js (8114b), assets/lib/markdown-it-math.js (4050b), assets/lib/markdown-it-ruby.js (3375b), assets/lib/markdown-it-span.js (1560b), assets/lib/markdown-it-table-container.js (1084b), assets/lib/markdown-it-urlspan.js (781b), assets/lib/markdown-it.min.js (123618b), assets/lib/mermaid.min.js (3565102b), assets/preview.css (11613b), assets/styles/blue-ying.css (11775b), assets/styles/cute-green.css (13509b), assets/styles/cyan-green.css (12315b), assets/styles/docsify.css (4025b), assets/styles/frontend-top.css (13558b), assets/styles/fullstack-blue.css (16361b), assets/styles/geek-black.css (13741b), assets/styles/github-dark.css (3661b), assets/styles/github.css (3726b), assets/styles/green.css (12399b), assets/styles/grid-black.css (14022b), assets/styles/lan-qing.css (12681b), assets/styles/minimalist-black.css (14770b), assets/styles/mountain-blush.css (12443b), assets/styles/notion.css (3665b), assets/styles/orange-blue.css (13442b), assets/styles/orange-heart.css (12046b), assets/styles/purple-red.css (12436b), assets/styles/red-fresh.css (14804b), assets/styles/rose-purple.css (14454b), assets/styles/star-blood.css (5810b), assets/styles/star-planet.css (7462b), assets/styles/star-pure.css (5575b), scripts/preview_server.py (17863b), skill-card.md (2088b), SKILL.md (8950b), _meta.json (141b)\n\nFile v1.4.15:SKILL.md\n\n---\nname: claw-markdown-preview\ndescription: Local Markdown preview skill. Trigger when the user explicitly asks to preview a markdown file — e.g. \"preview this markdown file\", \"open markdown preview\", \"markdown preview\", or the Chinese \"预览这个 markdown 文件\" / \"打开 markdown 预览\" / \"markdown 预览一下\".\nversion: 1.4.15\nmetadata:\n  openclaw:\n    emoji: \"📄\"\n    os: [\"darwin\", \"linux\", \"win32\"]\n    requires:\n      bins: [\"python3\"]\n    install: []\n    permissions:\n      - filesystem:read\n      - filesystem:write\n      - network:localhost\n      - process:spawn\n---\n\n# Markdown 编辑、多风格预览 / Markdown Editing & Multi-style Preview\n\n通过浏览器编辑、预览AI生成的 Markdown 内容、用户本地 MarkDown 文件。支持多主题风格切换、实时编辑、富文本复制（可粘贴到公众号/知乎）、图片粘贴  \n\nEdit & preview AI-generated or local Markdown in the browser. Multi-theme switching, live editing, rich-text copy (for WeChat/Zhihu), and image paste.\n\n## 触发方式 / Trigger\n\n当用户明确请求预览 Markdown 文件时触发，例如：\"预览这个 markdown 文件\" / \"打开 markdown 预览\" / \"markdown 预览一下\"。非 Markdown 预览请求（如普通文本渲染、图片查看）不触发。  \n\nTriggers when the user explicitly asks to preview a Markdown file, e.g. \"预览这个 markdown 文件\" / \"打开 markdown 预览\" / \"markdown 预览一下\". Not for generic text rendering or image viewing.\n\n## 执行入口\n\n**前提检查：**\n- 确认目标文件路径存在且为 `.md` 文件\n- 确认 `scripts/preview_server.py` 存在且可用（路径相对于技能目录）\n\n**执行（两步，替换 `<MD_FILE_PATH>` 后运行）：**\n\n**第 1 步 —— 以独立进程方式启动服务（关键：必须脱离 WorkBuddy 托管后台任务树，否则对话闲置约 20 分钟服务会被回收而\"断开\"。脱离由 python 内部跨平台实现，不依赖 shell `setsid`）：**\n\n```bash\n# 单实例清理：只终止上一次本技能启动的预览实例（PID 文件精确定位），不误伤其他进程。整条命令以 python3 常驻结尾。（脱离托管由 python 内部实现跨平台双 fork/detach，不依赖 shell setsid，多行 if 块部分环境识别不到 python3）。\n[ -f /tmp/claw-markdown-preview.pid ] && OLD_PID=$(cat /tmp/claw-markdown-preview.pid 2>/dev/null) && [ -n \"$OLD_PID\" ] && kill -0 \"$OLD_PID\" 2>/dev/null && kill \"$OLD_PID\" 2>/dev/null; rm -f /tmp/claw-markdown-preview.pid; python3 scripts/preview_server.py --file \"<MD_FILE_PATH>\" --no-open --heartbeat-timeout 7200 > /tmp/claw-md-preview.log 2>&1\n```\n\n> 关键：脱离托管由 `preview_server.py` **内部自行实现**（macOS/Linux 用 `os.fork() + os.setsid()` 双 fork 成为独立 session leader，Windows 用 `subprocess.Popen` + `DETACHED_PROCESS` 启动独立实例），脚本自动判断、不依赖 shell 命令。效果与 shell `setsid` 一致：服务脱离 WorkBuddy 托管后台任务树，不被\"对话闲置回收\"机制杀掉（实测托管任务约 20 分钟闲置即回收子进程）。服务因此常驻，离开多久 / 切窗口 / 睡眠都不受影响。跨平台通用，无需 `setsid` / `start /B` 等 shell 命令。\n\n**第 2 步 —— 探测端口并打开浏览器（普通命令即可）：**\n\n```bash\n# 就绪轮询：服务绑定端口后即可响应，不必固定等待 2 秒（跨平台通用，不依赖任何运行时专属能力）\nPORT=8765\nfor i in $(seq 1 20); do\n  if curl -s -o /dev/null -w '%{http_code}' --max-time 1 \"http://127.0.0.1:$PORT/\" | grep -q 200; then\n    break\n  fi\n  sleep 0.1\ndone\n# 若默认端口仍未就绪（如端口冲突），从日志提取实际端口\nif ! curl -s -o /dev/null -w '%{http_code}' --max-time 1 \"http://127.0.0.1:$PORT/\" | grep -q 200; then\n  PORT=$(grep -oE '127\\.0\\.0\\.1:[0-9]+' /tmp/claw-md-preview.log | head -1 | sed 's/.*://')\nfi\n# 记录本次实例 PID，供下次重启时精准终止（替代 pkill 全杀）\nlsof -iTCP:$PORT -sTCP:LISTEN -t | head -1 > /tmp/claw-markdown-preview.pid\nopen \"http://127.0.0.1:$PORT\"\n```\n\n**说明：**\n- 第 1 步把服务跑成托管后台任务（常驻、脱离启动命令的进程树），第 2 步再探测端口并打开浏览器。两步拆分是为了让服务不被启动命令的进程树回收而误杀。\n- 服务启动后：`curl` 快速探测默认端口 8765 → 被占用时从日志精确提取端口 → 记录 PID → 打开浏览器。\n- 首次运行用默认端口 8765，`curl` 直通不进正则分支；仅端口冲突时才走日志提取降级路径。\n- 心跳 120 分钟（7200 秒）兜底——页面关闭/后台冻结/睡眠后最多等待 120 分钟才自停；正常预览、切窗口、睡眠都不会触发超时，且选中的预览风格会持久化保留。\n\n> **不要用 `present_files`**，内置浏览器窗口太挤，用系统命令 `open` 打开外部浏览器。\n\n## 可选参数\n\n| 参数 | 说明 |\n|------|------|\n| `--file <路径>` | 预览指定 markdown 文件 |\n| `--port <端口>` | 指定端口，默认 `8765` |\n| `--stdin` | 从标准输入读取 markdown 内容 |\n| `--no-open` | 不自动打开系统浏览器（后台/Agent 场景必加） |\n| `--verbose` | 输出访问日志，便于调试 |\n| `--heartbeat-timeout <秒>` | 心跳超时秒数，页面关闭/冻结/睡眠后超时自动停止服务（默认 `7200`，即 120 分钟；刻意设大以彻底避免后台标签页节流与睡眠导致的误杀） |\n\n如果没有指定 `--file` 或 `--stdin`，服务启动后页面显示空编辑器，用户可自行粘贴 markdown。\n\n## 功能说明\n\n1. **编辑模式**：CodeMirror 编辑器，编辑 Markdown 原文\n2. **预览模式**：渲染后的富文本预览，支持主题切换\n3. **双栏模式**：编辑器和预览左右并排，支持滚动同步\n4. **手机预览**：以手机宽度（500px）居中渲染预览\n\n## 主题\n\n22 种预览主题 + 9 种代码高亮主题，可在页面顶部下拉选择。\n\n## 富文本复制\n\n点击预览区的复制按钮，将当前主题样式内联后的 HTML 写入剪贴板，可直接粘贴到公众号编辑器等平台。复制时会 `fetch` 本地预览服务（仅监听 `127.0.0.1`）的图片并内联为 base64，不访问任何其它外部地址，公众号粘贴后自动识别本地图片。\n\n## 粘贴图片\n\n在编辑模式或双栏模式下，可直接粘贴剪贴板中的图片（Ctrl+V / Cmd+V）。预览页会拦截默认粘贴动作，将图片经由本地预览服务（仅监听 `127.0.0.1`）的 `/api/image` 端点写入本地磁盘、保存到被预览 Markdown 同目录的 `images/` 文件夹，并插入本地引用 `![](images/img-xxx.png)`。整个过程不出本机、不经任何外部服务器。\n\n- 单张图片大小限制 5MB\n- 图片以文件形式存储，跟随 md 文件，换浏览器/电脑不丢失\n\n## 注意事项\n\n- 预览服务运行在 `assets/` 子目录上，文件由 `preview_server.py` 自动定位\n- 端口默认 8765，被占用时自动递增寻找空闲端口（+20 以内）\n- **热更新**：使用 `--file` 模式时，页面每 3 秒轮询文件内容变化，在 Agent 中修改文件后页面自动刷新（弹出\"外部内容已更新\"提示）\n- **常驻 + 心跳兜底**：服务脱离 WorkBuddy 托管常驻（跨平台，python 内部实现脱离，不依赖 shell setsid），不会因对话闲置 / 切窗口 / 睡眠被回收；页面每 5 秒心跳仅作兜底，关闭页面后最多等待 `--heartbeat-timeout` 秒（默认 120 分钟）才自停，刻意设长以避免后台标签页冻结 / 睡眠误杀\n- **风格记忆**：顶部选择的预览风格与代码主题会持久化到本机用户目录（`~/.config/claw-markdown-preview/prefs.json`；Windows 为 `%APPDATA%/claw-markdown-preview/prefs.json`，不在技能目录内，重装不丢），刷新页面或下次打开预览自动沿用上次选择，无需重选。\n- **⚠️ 编辑即自动保存并覆盖原文件**：在编辑器中修改后停顿约 5 秒，内容会自动经 `/api/save` 写回被预览的 md 文件并覆盖原内容（无备份）；也可点\"保存\"按钮手动保存。关闭预览页面**不会**自动保存，如有未保存改动会提示确认离开，离开则未保存内容丢弃。\n- `--stdin` 模式不支持热更新和粘贴图片（内容固定）\n- 服务终止方式：`kill $(cat /tmp/claw-markdown-preview.pid)`\n\n## 后台运行说明\n\n执行入口第 1 步以「托管后台任务」方式常驻服务（脱离启动命令的进程树，命令返回也不会被回收）；第 2 步负责端口探测（curl）/ PID 获取（lsof）/ 残留清理（pkill）。若需手动启动，参考上述命令结构，务必使用 `python3`（与 frontmatter `requires: python3` 一致）而非绝对路径；切勿用命令内 `&` 把服务挂到返回命令的进程树下的写法，否则服务会被进程树清理杀掉。\n\nFile v1.4.15:_meta.json\n\n{\n  \"ownerId\": \"kn71ktazf25p4qq9q4m4ekwghx880qkj\",\n  \"slug\": \"claw-markdown-preview\",\n  \"version\": \"1.4.15\",\n  \"publishedAt\": 1784258429074\n}\n\nFile v1.4.15:skill-card.md\n\n## Description:\n\nOpens a local browser-based Markdown editor and previewer for explicitly requested Markdown files, with theme switching, rich-text copy, image paste, and live preview.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[webkixi](https://clawhub.ai/user/webkixi)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers, writers, and agents use this skill to open a local Markdown preview/editor for .md files, inspect rendered output, switch styles, copy themed rich text, and optionally paste images into the Markdown file's images folder.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The local editor can autosave over the original Markdown file.\n\nMitigation: Open only intended files and keep a backup or version-control checkpoint before editing.\n\nRisk: Unauthenticated localhost APIs can save Markdown content and write pasted images to disk.\n\nMitigation: Run the preview server only in trusted local sessions, keep it bound to 127.0.0.1, and stop it when previewing is complete.\n\nRisk: Rendered Markdown can include active HTML.\n\nMitigation: Avoid opening untrusted Markdown until authentication, origin checks, and HTML sanitization are reviewed.\n\n## Reference(s):\n\n- [Claw Markdown Preview on ClawHub](https://clawhub.ai/webkixi/skills/claw-markdown-preview)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown-facing guidance with shell commands and a local browser preview UI]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Starts a localhost preview server that reads the selected Markdown file and can save edits or pasted images back to local disk.]\n\n## Skill Version(s):\n\n1.4.15 (source: frontmatter and server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.4.14: 54 files, 1397630 bytes\n\nFiles: assets/code-themes/atom-one-dark.css (1372b), assets/code-themes/dracula.css (1062b), assets/code-themes/github-dark.css (1719b), assets/code-themes/github-light.css (1298b), assets/code-themes/github.css (1301b), assets/code-themes/monokai.css (1213b), assets/code-themes/vs2015.css (1831b), assets/code-themes/vscode-light.css (1238b), assets/code-themes/xcode.css (1238b), assets/index.html (21778b), assets/lib/codemirror.bundle.min.js (498838b), assets/lib/converter.js (26450b), assets/lib/highlight.min.js (121727b), assets/lib/markdown-it-deflist.js (7014b), assets/lib/markdown-it-imageflow.js (1771b), assets/lib/markdown-it-implicit-figures.js (4238b), assets/lib/markdown-it-li.js (550b), assets/lib/markdown-it-linkfoot.js (8114b), assets/lib/markdown-it-math.js (4050b), assets/lib/markdown-it-ruby.js (3375b), assets/lib/markdown-it-span.js (1560b), assets/lib/markdown-it-table-container.js (1084b), assets/lib/markdown-it-urlspan.js (781b), assets/lib/markdown-it.min.js (123618b), assets/lib/mermaid.min.js (3565102b), assets/preview.css (11613b), assets/styles/blue-ying.css (11775b), assets/styles/cute-green.css (13509b), assets/styles/cyan-green.css (12315b), assets/styles/docsify.css (4025b), assets/styles/frontend-top.css (13558b), assets/styles/fullstack-blue.css (16361b), assets/styles/geek-black.css (13741b), assets/styles/github-dark.css (3661b), assets/styles/github.css (3726b), assets/styles/green.css (12399b), assets/styles/grid-black.css (14022b), assets/styles/lan-qing.css (12681b), assets/styles/minimalist-black.css (14770b), assets/styles/mountain-blush.css (12443b), assets/styles/notion.css (3665b), assets/styles/orange-blue.css (13442b), assets/styles/orange-heart.css (12046b), assets/styles/purple-red.css (12436b), assets/styles/red-fresh.css (14804b), assets/styles/rose-purple.css (14454b), assets/styles/star-blood.css (5810b), assets/styles/star-planet.css (7462b), assets/styles/star-pure.css (5575b), README.md (2089b), scripts/preview_server.py (17863b), skill-card.md (2144b), SKILL.md (8950b), _meta.json (141b)\n\nFile v1.4.14:SKILL.md\n\n---\nname: claw-markdown-preview\ndescription: Local Markdown preview skill. Trigger when the user explicitly asks to preview a markdown file — e.g. \"preview this markdown file\", \"open markdown preview\", \"markdown preview\", or the Chinese \"预览这个 markdown 文件\" / \"打开 markdown 预览\" / \"markdown 预览一下\".\nversion: 1.4.14\nmetadata:\n  openclaw:\n    emoji: \"📄\"\n    os: [\"darwin\", \"linux\", \"win32\"]\n    requires:\n      bins: [\"python3\"]\n    install: []\n    permissions:\n      - filesystem:read\n      - filesystem:write\n      - network:localhost\n      - process:spawn\n---\n\n# Markdown 编辑、多风格预览 / Markdown Editing & Multi-style Preview\n\n通过浏览器编辑、预览AI生成的 Markdown 内容、用户本地 MarkDown 文件。支持多主题风格切换、实时编辑、富文本复制（可粘贴到公众号/知乎）、图片粘贴  \n\nEdit & preview AI-generated or local Markdown in the browser. Multi-theme switching, live editing, rich-text copy (for WeChat/Zhihu), and image paste.\n\n## 触发方式 / Trigger\n\n当用户明确请求预览 Markdown 文件时触发，例如：\"预览这个 markdown 文件\" / \"打开 markdown 预览\" / \"markdown 预览一下\"。非 Markdown 预览请求（如普通文本渲染、图片查看）不触发。  \n\nTriggers when the user explicitly asks to preview a Markdown file, e.g. \"预览这个 markdown 文件\" / \"打开 markdown 预览\" / \"markdown 预览一下\". Not for generic text rendering or image viewing.\n\n## 执行入口\n\n**前提检查：**\n- 确认目标文件路径存在且为 `.md` 文件\n- 确认 `scripts/preview_server.py` 存在且可用（路径相对于技能目录）\n\n**执行（两步，替换 `<MD_FILE_PATH>` 后运行）：**\n\n**第 1 步 —— 以独立进程方式启动服务（关键：必须脱离 WorkBuddy 托管后台任务树，否则对话闲置约 20 分钟服务会被回收而\"断开\"。脱离由 python 内部跨平台实现，不依赖 shell `setsid`）：**\n\n```bash\n# 单实例清理：只终止上一次本技能启动的预览实例（PID 文件精确定位），不误伤其他进程。整条命令以 python3 常驻结尾。（脱离托管由 python 内部实现跨平台双 fork/detach，不依赖 shell setsid，多行 if 块部分环境识别不到 python3）。\n[ -f /tmp/claw-markdown-preview.pid ] && OLD_PID=$(cat /tmp/claw-markdown-preview.pid 2>/dev/null) && [ -n \"$OLD_PID\" ] && kill -0 \"$OLD_PID\" 2>/dev/null && kill \"$OLD_PID\" 2>/dev/null; rm -f /tmp/claw-markdown-preview.pid; python3 scripts/preview_server.py --file \"<MD_FILE_PATH>\" --no-open --heartbeat-timeout 7200 > /tmp/claw-md-preview.log 2>&1\n```\n\n> 关键：脱离托管由 `preview_server.py` **内部自行实现**（macOS/Linux 用 `os.fork() + os.setsid()` 双 fork 成为独立 session leader，Windows 用 `subprocess.Popen` + `DETACHED_PROCESS` 启动独立实例），脚本自动判断、不依赖 shell 命令。效果与 shell `setsid` 一致：服务脱离 WorkBuddy 托管后台任务树，不被\"对话闲置回收\"机制杀掉（实测托管任务约 20 分钟闲置即回收子进程）。服务因此常驻，离开多久 / 切窗口 / 睡眠都不受影响。跨平台通用，无需 `setsid` / `start /B` 等 shell 命令。\n\n**第 2 步 —— 探测端口并打开浏览器（普通命令即可）：**\n\n```bash\n# 就绪轮询：服务绑定端口后即可响应，不必固定等待 2 秒（跨平台通用，不依赖任何运行时专属能力）\nPORT=8765\nfor i in $(seq 1 20); do\n  if curl -s -o /dev/null -w '%{http_code}' --max-time 1 \"http://127.0.0.1:$PORT/\" | grep -q 200; then\n    break\n  fi\n  sleep 0.1\ndone\n# 若默认端口仍未就绪（如端口冲突），从日志提取实际端口\nif ! curl -s -o /dev/null -w '%{http_code}' --max-time 1 \"http://127.0.0.1:$PORT/\" | grep -q 200; then\n  PORT=$(grep -oE '127\\.0\\.0\\.1:[0-9]+' /tmp/claw-md-preview.log | head -1 | sed 's/.*://')\nfi\n# 记录本次实例 PID，供下次重启时精准终止（替代 pkill 全杀）\nlsof -iTCP:$PORT -sTCP:LISTEN -t | head -1 > /tmp/claw-markdown-preview.pid\nopen \"http://127.0.0.1:$PORT\"\n```\n\n**说明：**\n- 第 1 步把服务跑成托管后台任务（常驻、脱离启动命令的进程树），第 2 步再探测端口并打开浏览器。两步拆分是为了让服务不被启动命令的进程树回收而误杀。\n- 服务启动后：`curl` 快速探测默认端口 8765 → 被占用时从日志精确提取端口 → 记录 PID → 打开浏览器。\n- 首次运行用默认端口 8765，`curl` 直通不进正则分支；仅端口冲突时才走日志提取降级路径。\n- 心跳 120 分钟（7200 秒）兜底——页面关闭/后台冻结/睡眠后最多等待 120 分钟才自停；正常预览、切窗口、睡眠都不会触发超时，且选中的预览风格会持久化保留。\n\n> **不要用 `present_files`**，内置浏览器窗口太挤，用系统命令 `open` 打开外部浏览器。\n\n## 可选参数\n\n| 参数 | 说明 |\n|------|------|\n| `--file <路径>` | 预览指定 markdown 文件 |\n| `--port <端口>` | 指定端口，默认 `8765` |\n| `--stdin` | 从标准输入读取 markdown 内容 |\n| `--no-open` | 不自动打开系统浏览器（后台/Agent 场景必加） |\n| `--verbose` | 输出访问日志，便于调试 |\n| `--heartbeat-timeout <秒>` | 心跳超时秒数，页面关闭/冻结/睡眠后超时自动停止服务（默认 `7200`，即 120 分钟；刻意设大以彻底避免后台标签页节流与睡眠导致的误杀） |\n\n如果没有指定 `--file` 或 `--stdin`，服务启动后页面显示空编辑器，用户可自行粘贴 markdown。\n\n## 功能说明\n\n1. **编辑模式**：CodeMirror 编辑器，编辑 Markdown 原文\n2. **预览模式**：渲染后的富文本预览，支持主题切换\n3. **双栏模式**：编辑器和预览左右并排，支持滚动同步\n4. **手机预览**：以手机宽度（500px）居中渲染预览\n\n## 主题\n\n22 种预览主题 + 9 种代码高亮主题，可在页面顶部下拉选择。\n\n## 富文本复制\n\n点击预览区的复制按钮，将当前主题样式内联后的 HTML 写入剪贴板，可直接粘贴到公众号编辑器等平台。复制时会 `fetch` 本地预览服务（仅监听 `127.0.0.1`）的图片并内联为 base64，不访问任何其它外部地址，公众号粘贴后自动识别本地图片。\n\n## 粘贴图片\n\n在编辑模式或双栏模式下，可直接粘贴剪贴板中的图片（Ctrl+V / Cmd+V）。预览页会拦截默认粘贴动作，将图片经由本地预览服务（仅监听 `127.0.0.1`）的 `/api/image` 端点写入本地磁盘、保存到被预览 Markdown 同目录的 `images/` 文件夹，并插入本地引用 `![](images/img-xxx.png)`。整个过程不出本机、不经任何外部服务器。\n\n- 单张图片大小限制 5MB\n- 图片以文件形式存储，跟随 md 文件，换浏览器/电脑不丢失\n\n## 注意事项\n\n- 预览服务运行在 `assets/` 子目录上，文件由 `preview_server.py` 自动定位\n- 端口默认 8765，被占用时自动递增寻找空闲端口（+20 以内）\n- **热更新**：使用 `--file` 模式时，页面每 3 秒轮询文件内容变化，在 Agent 中修改文件后页面自动刷新（弹出\"外部内容已更新\"提示）\n- **常驻 + 心跳兜底**：服务脱离 WorkBuddy 托管常驻（跨平台，python 内部实现脱离，不依赖 shell setsid），不会因对话闲置 / 切窗口 / 睡眠被回收；页面每 5 秒心跳仅作兜底，关闭页面后最多等待 `--heartbeat-timeout` 秒（默认 120 分钟）才自停，刻意设长以避免后台标签页冻结 / 睡眠误杀\n- **风格记忆**：顶部选择的预览风格与代码主题会持久化到本机用户目录（`~/.config/claw-markdown-preview/prefs.json`；Windows 为 `%APPDATA%/claw-markdown-preview/prefs.json`，不在技能目录内，重装不丢），刷新页面或下次打开预览自动沿用上次选择，无需重选。\n- **⚠️ 编辑即自动保存并覆盖原文件**：在编辑器中修改后停顿约 5 秒，内容会自动经 `/api/save` 写回被预览的 md 文件并覆盖原内容（无备份）；也可点\"保存\"按钮手动保存。关闭预览页面**不会**自动保存，如有未保存改动会提示确认离开，离开则未保存内容丢弃。\n- `--stdin` 模式不支持热更新和粘贴图片（内容固定）\n- 服务终止方式：`kill $(cat /tmp/claw-markdown-preview.pid)`\n\n## 后台运行说明\n\n执行入口第 1 步以「托管后台任务」方式常驻服务（脱离启动命令的进程树，命令返回也不会被回收）；第 2 步负责端口探测（curl）/ PID 获取（lsof）/ 残留清理（pkill）。若需手动启动，参考上述命令结构，务必使用 `python3`（与 frontmatter `requires: python3` 一致）而非绝对路径；切勿用命令内 `&` 把服务挂到返回命令的进程树下的写法，否则服务会被进程树清理杀掉。\n\nFile v1.4.14:README.md\n\n# claw-markdown-preview\n\n> 一个 **Agent 技能（Skill）**：在 AI 对话里即时预览 Markdown，让 AI 生成的文档立刻「看得见」。\n\n## 这是什么\n\n`claw-markdown-preview` 是一个可被 AI 助手（Agent）在对话中**直接调用**的技能。当你让 Agent 生成 Markdown 文档后，只需说一句\"预览这个 md\"\"看看渲染效果\"，它就会在浏览器里把文档渲染成精美网页——支持 22 种主题、4 种视图，不切应用、不手动开文件。\n\n## 支持的 Agent 平台\n\n- WorkBuddy\n- QClaw\n- OpenClaw\n- Hermes\n- 任何能提供「执行 `python3` 命令 + 访问 localhost 浏览器预览」能力的 Agent\n\n## 四大能力\n\n1. **即时预览**：AI 写完文档当场看排版、代码高亮、表格效果。\n2. **公众号排版**：22 种主题 + 4 种视图（编辑 / 预览 / 双栏 / 手机）随意切换，排版效果所见即所得，告别手动调格式。\n3. **富文本复制（含图片）**：一键拷贝带样式正文，图片自动 base64 内联，直粘公众号 / 知乎后台，零二次排版。\n4. **实时编辑 + 图片粘贴**：双栏边写边看，编辑器内 `Ctrl+V` 即贴本地图片，自动内联进文档，无需手动存图传图。\n\n## 安装\n\n将本仓库克隆 / 下载到你的 Agent 技能目录即可（如 WorkBuddy 的 `~/.workbuddy/skills/`），或直接从 SkillHub / ClawHub 安装。\n\n```bash\ngit clone https://github.com/webkixi/claw-markdown-preview-skill.git\n```\n\n## 用法\n\n在 Agent 对话中：\n\n- \"预览这个 md\" → 启动本地预览服务并在浏览器打开\n- \"看看渲染效果\" → 同上\n- \"打开预览\" → 同上\n\n技能会自动完成：清理残留进程 → 后台启动预览服务（默认端口 `8765`）→ 用系统浏览器打开预览页。\n\n## 技术说明\n\n- 预览服务 `scripts/preview_server.py` 仅依赖 Python 标准库，跨平台（macOS / Linux / Windows）。\n- 前端 `assets/` 为纯静态资源，提供 22 种预览主题 + 9 种代码高亮主题。\n- 所有文件均为本地处理，不上传任何内容。\n\n## 许可\n\nMIT\n\nFile v1.4.14:_meta.json\n\n{\n  \"ownerId\": \"kn71ktazf25p4qq9q4m4ekwghx880qkj\",\n  \"slug\": \"claw-markdown-preview\",\n  \"version\": \"1.4.14\",\n  \"publishedAt\": 1784128252073\n}\n\nFile v1.4.14:skill-card.md\n\n## Description: <br>\nLocal Markdown preview skill that opens an editable browser preview for explicitly requested Markdown files. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[webkixi](https://clawhub.ai/user/webkixi) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers, writers, and agent users use this skill to preview and edit Markdown documents locally in a browser with theme switching, rich-text copy, live refresh, and pasted-image handling. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Markdown edits can auto-save over the original file without creating a backup. <br>\nMitigation: Use the preview on files that can be overwritten, or create a separate copy before editing important Markdown. <br>\nRisk: Pasted images are written to an images folder beside the Markdown file. <br>\nMitigation: Review generated image files and paths before committing, sharing, or publishing the Markdown directory. <br>\nRisk: The detached localhost preview server may keep running after the browser page is closed. <br>\nMitigation: Stop the server with the recorded PID or wait for the configured heartbeat timeout when previewing is complete. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/webkixi/skills/claw-markdown-preview) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Shell commands, Markdown, Files, Guidance] <br>\n**Output Format:** [Markdown guidance with shell commands and a localhost browser preview] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Requires python3, filesystem read/write access, localhost networking, and process spawning; supports darwin, linux, and win32.] <br>\n\n## Skill Version(s): <br>\n1.4.14 (source: server release metadata and SKILL.md frontmatter) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.4.13: 54 files, 1397134 bytes\n\nFiles: assets/code-themes/atom-one-dark.css (1372b), assets/code-themes/dracula.css (1062b), assets/code-themes/github-dark.css (1719b), assets/code-themes/github-light.css (1298b), assets/code-themes/github.css (1301b), assets/code-themes/monokai.css (1213b), assets/code-themes/vs2015.css (1831b), assets/code-themes/vscode-light.css (1238b), assets/code-themes/xcode.css (1238b), assets/index.html (21778b), assets/lib/codemirror.bundle.min.js (498838b), assets/lib/converter.js (26450b), assets/lib/highlight.min.js (121727b), assets/lib/markdown-it-deflist.js (7014b), assets/lib/markdown-it-imageflow.js (1771b), assets/lib/markdown-it-implicit-figures.js (4238b), assets/lib/markdown-it-li.js (550b), assets/lib/markdown-it-linkfoot.js (8114b), assets/lib/markdown-it-math.js (4050b), assets/lib/markdown-it-ruby.js (3375b), assets/lib/markdown-it-span.js (1560b), assets/lib/markdown-it-table-container.js (1084b), assets/lib/markdown-it-urlspan.js (781b), assets/lib/markdown-it.min.js (123618b), assets/lib/mermaid.min.js (3565102b), assets/preview.css (11613b), assets/styles/blue-ying.css (11775b), assets/styles/cute-green.css (13509b), assets/styles/cyan-green.css (12315b), assets/styles/docsify.css (4025b), assets/styles/frontend-top.css (13558b), assets/styles/fullstack-blue.css (16361b), assets/styles/geek-black.css (13741b), assets/styles/github-dark.css (3661b), assets/styles/github.css (3726b), assets/styles/green.css (12399b), assets/styles/grid-black.css (14022b), assets/styles/lan-qing.css (12681b), assets/styles/minimalist-black.css (14770b), assets/styles/mountain-blush.css (12443b), assets/styles/notion.css (3665b), assets/styles/orange-blue.css (13442b), assets/styles/orange-heart.css (12046b), assets/styles/purple-red.css (12436b), assets/styles/red-fresh.css (14804b), assets/styles/rose-purple.css (14454b), assets/styles/star-blood.css (5810b), assets/styles/star-planet.css (7462b), assets/styles/star-pure.css (5575b), README.md (2089b), scripts/preview_server.py (16750b), skill-card.md (2494b), SKILL.md (8462b), _meta.json (141b)\n\nFile v1.4.13:SKILL.md\n\n---\nname: claw-markdown-preview\ndescription: Local Markdown preview skill. Trigger when the user explicitly asks to preview a markdown file — e.g. \"preview this markdown file\", \"open markdown preview\", \"markdown preview\", or the Chinese \"预览这个 markdown 文件\" / \"打开 markdown 预览\" / \"markdown 预览一下\".\nversion: 1.4.13\nmetadata:\n  openclaw:\n    emoji: \"📄\"\n    os: [\"darwin\", \"linux\", \"win32\"]\n    requires:\n      bins: [\"python3\"]\n    install: []\n    permissions:\n      - filesystem:read\n      - filesystem:write\n      - network:localhost\n      - process:spawn\n---\n\n# Markdown 编辑、多风格预览 / Markdown Editing & Multi-style Preview\n\n通过浏览器编辑、预览AI生成的 Markdown 内容、用户本地 MarkDown 文件。支持多主题风格切换、实时编辑、富文本复制（可粘贴到公众号/知乎）、图片粘贴  \n\nEdit & preview AI-generated or local Markdown in the browser. Multi-theme switching, live editing, rich-text copy (for WeChat/Zhihu), and image paste.\n\n## 触发方式 / Trigger\n\n当用户明确请求预览 Markdown 文件时触发，例如：\"预览这个 markdown 文件\" / \"打开 markdown 预览\" / \"markdown 预览一下\"。非 Markdown 预览请求（如普通文本渲染、图片查看）不触发。  \n\nTriggers when the user explicitly asks to preview a Markdown file, e.g. \"预览这个 markdown 文件\" / \"打开 markdown 预览\" / \"markdown 预览一下\". Not for generic text rendering or image viewing.\n\n## 执行入口\n\n**前提检查：**\n- 确认目标文件路径存在且为 `.md` 文件\n- 确认 `scripts/preview_server.py` 存在且可用（路径相对于技能目录）\n\n**执行（两步，替换 `<MD_FILE_PATH>` 后运行）：**\n\n**第 1 步 —— 以「托管后台任务」方式启动服务（关键：必须是脱离命令进程树的独立任务，绝不能用命令内 `&` 把服务挂到返回命令的进程树下，否则命令一返回、进程树被清理，服务就跟着死）：**\n\n```bash\n# 单实例清理：只终止上一次本技能启动的预览实例（PID 文件精确定位），不误伤其他进程。整条命令以 python3 常驻结尾，确保托管后台任务正确托管（多行 if 块部分环境识别不到 python3）。\n[ -f /tmp/claw-markdown-preview.pid ] && OLD_PID=$(cat /tmp/claw-markdown-preview.pid 2>/dev/null) && [ -n \"$OLD_PID\" ] && kill -0 \"$OLD_PID\" 2>/dev/null && kill \"$OLD_PID\" 2>/dev/null; rm -f /tmp/claw-markdown-preview.pid; python3 scripts/preview_server.py --file \"<MD_FILE_PATH>\" --no-open --heartbeat-timeout 7200 > /tmp/claw-md-preview.log 2>&1\n```\n\n> 用 Bash 工具的后台 / 托管任务模式运行上面整条命令，让服务常驻、不随某条命令返回而结束。若运行环境没有托管任务机制，退而用 `setsid python3 … &` 把服务拆到独立会话，效果等同。\n\n**第 2 步 —— 探测端口并打开浏览器（普通命令即可）：**\n\n```bash\n# 就绪轮询：服务绑定端口后即可响应，不必固定等待 2 秒（跨平台通用，不依赖任何运行时专属能力）\nPORT=8765\nfor i in $(seq 1 20); do\n  if curl -s -o /dev/null -w '%{http_code}' --max-time 1 \"http://127.0.0.1:$PORT/\" | grep -q 200; then\n    break\n  fi\n  sleep 0.1\ndone\n# 若默认端口仍未就绪（如端口冲突），从日志提取实际端口\nif ! curl -s -o /dev/null -w '%{http_code}' --max-time 1 \"http://127.0.0.1:$PORT/\" | grep -q 200; then\n  PORT=$(grep -oE '127\\.0\\.0\\.1:[0-9]+' /tmp/claw-md-preview.log | head -1 | sed 's/.*://')\nfi\n# 记录本次实例 PID，供下次重启时精准终止（替代 pkill 全杀）\nlsof -iTCP:$PORT -sTCP:LISTEN -t | head -1 > /tmp/claw-markdown-preview.pid\nopen \"http://127.0.0.1:$PORT\"\n```\n\n**说明：**\n- 第 1 步把服务跑成托管后台任务（常驻、脱离启动命令的进程树），第 2 步再探测端口并打开浏览器。两步拆分是为了让服务不被启动命令的进程树回收而误杀。\n- 服务启动后：`curl` 快速探测默认端口 8765 → 被占用时从日志精确提取端口 → 记录 PID → 打开浏览器。\n- 首次运行用默认端口 8765，`curl` 直通不进正则分支；仅端口冲突时才走日志提取降级路径。\n- 心跳 120 分钟（7200 秒）兜底——页面关闭/后台冻结/睡眠后最多等待 120 分钟才自停；正常预览、切窗口、睡眠都不会触发超时，且选中的预览风格会持久化保留。\n\n> **不要用 `present_files`**，内置浏览器窗口太挤，用系统命令 `open` 打开外部浏览器。\n\n## 可选参数\n\n| 参数 | 说明 |\n|------|------|\n| `--file <路径>` | 预览指定 markdown 文件 |\n| `--port <端口>` | 指定端口，默认 `8765` |\n| `--stdin` | 从标准输入读取 markdown 内容 |\n| `--no-open` | 不自动打开系统浏览器（后台/Agent 场景必加） |\n| `--verbose` | 输出访问日志，便于调试 |\n| `--heartbeat-timeout <秒>` | 心跳超时秒数，页面关闭/冻结/睡眠后超时自动停止服务（默认 `7200`，即 120 分钟；刻意设大以彻底避免后台标签页节流与睡眠导致的误杀） |\n\n如果没有指定 `--file` 或 `--stdin`，服务启动后页面显示空编辑器，用户可自行粘贴 markdown。\n\n## 功能说明\n\n1. **编辑模式**：CodeMirror 编辑器，编辑 Markdown 原文\n2. **预览模式**：渲染后的富文本预览，支持主题切换\n3. **双栏模式**：编辑器和预览左右并排，支持滚动同步\n4. **手机预览**：以手机宽度（500px）居中渲染预览\n\n## 主题\n\n22 种预览主题 + 9 种代码高亮主题，可在页面顶部下拉选择。\n\n## 富文本复制\n\n点击预览区的复制按钮，将当前主题样式内联后的 HTML 写入剪贴板，可直接粘贴到公众号编辑器等平台。复制时会 `fetch` 本地预览服务（仅监听 `127.0.0.1`）的图片并内联为 base64，不访问任何其它外部地址，公众号粘贴后自动识别本地图片。\n\n## 粘贴图片\n\n在编辑模式或双栏模式下，可直接粘贴剪贴板中的图片（Ctrl+V / Cmd+V）。预览页会拦截默认粘贴动作，将图片经由本地预览服务（仅监听 `127.0.0.1`）的 `/api/image` 端点写入本地磁盘、保存到被预览 Markdown 同目录的 `images/` 文件夹，并插入本地引用 `![](images/img-xxx.png)`。整个过程不出本机、不经任何外部服务器。\n\n- 单张图片大小限制 5MB\n- 图片以文件形式存储，跟随 md 文件，换浏览器/电脑不丢失\n\n## 注意事项\n\n- 预览服务运行在 `assets/` 子目录上，文件由 `preview_server.py` 自动定位\n- 端口默认 8765，被占用时自动递增寻找空闲端口（+20 以内）\n- **热更新**：使用 `--file` 模式时，页面每 3 秒轮询文件内容变化，在 Agent 中修改文件后页面自动刷新（弹出\"外部内容已更新\"提示）\n- **心跳自停**：页面每 5 秒发送心跳，关闭页面后服务自动停止（正常关闭立即停止，异常退出最多等待 `--heartbeat-timeout` 秒——默认 120 分钟——后停止；刻意设长以避免后台标签页冻结/睡眠误杀）\n- **风格记忆**：顶部选择的预览风格与代码主题会持久化到本机用户目录（`~/.config/claw-markdown-preview/prefs.json`；Windows 为 `%APPDATA%/claw-markdown-preview/prefs.json`，不在技能目录内，重装不丢），刷新页面或下次打开预览自动沿用上次选择，无需重选。\n- **⚠️ 编辑即自动保存并覆盖原文件**：在编辑器中修改后停顿约 5 秒，内容会自动经 `/api/save` 写回被预览的 md 文件并覆盖原内容（无备份）；也可点\"保存\"按钮手动保存。关闭预览页面**不会**自动保存，如有未保存改动会提示确认离开，离开则未保存内容丢弃。\n- `--stdin` 模式不支持热更新和粘贴图片（内容固定）\n- 服务终止方式：`kill $(cat /tmp/claw-markdown-preview.pid)`\n\n## 后台运行说明\n\n执行入口第 1 步以「托管后台任务」方式常驻服务（脱离启动命令的进程树，命令返回也不会被回收）；第 2 步负责端口探测（curl）/ PID 获取（lsof）/ 残留清理（pkill）。若需手动启动，参考上述命令结构，务必使用 `python3`（与 frontmatter `requires: python3` 一致）而非绝对路径；切勿用命令内 `&` 把服务挂到返回命令的进程树下的写法，否则服务会被进程树清理杀掉。\n\nFile v1.4.13:README.md\n\n# claw-markdown-preview\n\n> 一个 **Agent 技能（Skill）**：在 AI 对话里即时预览 Markdown，让 AI 生成的文档立刻「看得见」。\n\n## 这是什么\n\n`claw-markdown-preview` 是一个可被 AI 助手（Agent）在对话中**直接调用**的技能。当你让 Agent 生成 Markdown 文档后，只需说一句\"预览这个 md\"\"看看渲染效果\"，它就会在浏览器里把文档渲染成精美网页——支持 22 种主题、4 种视图，不切应用、不手动开文件。\n\n## 支持的 Agent 平台\n\n- WorkBuddy\n- QClaw\n- OpenClaw\n- Hermes\n- 任何能提供「执行 `python3` 命令 + 访问 localhost 浏览器预览」能力的 Agent\n\n## 四大能力\n\n1. **即时预览**：AI 写完文档当场看排版、代码高亮、表格效果。\n2. **公众号排版**：22 种主题 + 4 种视图（编辑 / 预览 / 双栏 / 手机）随意切换，排版效果所见即所得，告别手动调格式。\n3. **富文本复制（含图片）**：一键拷贝带样式正文，图片自动 base64 内联，直粘公众号 / 知乎后台，零二次排版。\n4. **实时编辑 + 图片粘贴**：双栏边写边看，编辑器内 `Ctrl+V` 即贴本地图片，自动内联进文档，无需手动存图传图。\n\n## 安装\n\n将本仓库克隆 / 下载到你的 Agent 技能目录即可（如 WorkBuddy 的 `~/.workbuddy/skills/`），或直接从 SkillHub / ClawHub 安装。\n\n```bash\ngit clone https://github.com/webkixi/claw-markdown-preview-skill.git\n```\n\n## 用法\n\n在 Agent 对话中：\n\n- \"预览这个 md\" → 启动本地预览服务并在浏览器打开\n- \"看看渲染效果\" → 同上\n- \"打开预览\" → 同上\n\n技能会自动完成：清理残留进程 → 后台启动预览服务（默认端口 `8765`）→ 用系统浏览器打开预览页。\n\n## 技术说明\n\n- 预览服务 `scripts/preview_server.py` 仅依赖 Python 标准库，跨平台（macOS / Linux / Windows）。\n- 前端 `assets/` 为纯静态资源，提供 22 种预览主题 + 9 种代码高亮主题。\n- 所有文件均为本地处理，不上传任何内容。\n\n## 许可\n\nMIT\n\nFile v1.4.13:_meta.json\n\n{\n  \"ownerId\": \"kn71ktazf25p4qq9q4m4ekwghx880qkj\",\n  \"slug\": \"claw-markdown-preview\",\n  \"version\": \"1.4.13\",\n  \"publishedAt\": 1784097106646\n}\n\nFile v1.4.13:skill-card.md\n\n## Description: <br>\nLocal Markdown preview skill for opening, editing, and rendering Markdown files in a local browser preview when explicitly requested. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[webkixi](https://clawhub.ai/user/webkixi) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers, writers, and agent users use this skill to preview and lightly edit local Markdown files in a browser, including themed rendering, code highlighting, rich-text copy, and pasted image handling. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The browser editor can overwrite the selected Markdown file after edits. <br>\nMitigation: Use it on files you are comfortable editing, keep separate backups for important documents, and review changes before closing the preview. <br>\nRisk: Pasted images are written beside the Markdown file and the preview server may remain active for up to 120 minutes after heartbeats stop. <br>\nMitigation: Preview in trusted workspaces, check generated image files before sharing, and stop the local process when finished. <br>\nRisk: Raw HTML rendering is enabled for Markdown content, and some visual themes can contact an external image host. <br>\nMitigation: Avoid previewing untrusted Markdown and use network controls or trusted themes when external requests are not acceptable. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/webkixi/skills/claw-markdown-preview) <br>\n- [Publisher profile](https://clawhub.ai/user/webkixi) <br>\n- [Artifact README](artifact/README.md) <br>\n- [Skill definition](artifact/SKILL.md) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [markdown, shell commands, configuration, guidance] <br>\n**Output Format:** [Markdown guidance with shell commands that start a localhost browser preview/editor.] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Runs a local Python preview service, may save edits back to the selected Markdown file, and may store pasted images beside that file.] <br>\n\n## Skill Version(s): <br>\n1.4.13 (source: server release metadata and SKILL.md frontmatter) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.4.12: 54 files, 1395831 bytes\n\nFiles: assets/code-themes/atom-one-dark.css (1372b), assets/code-themes/dracula.css (1062b), assets/code-themes/github-dark.css (1719b), assets/code-themes/github-light.css (1298b), assets/code-themes/github.css (1301b), assets/code-themes/monokai.css (1213b), assets/code-themes/vs2015.css (1831b), assets/code-themes/vscode-light.css (1238b), assets/code-themes/xcode.css (1238b), assets/index.html (20959b), assets/lib/codemirror.bundle.min.js (498838b), assets/lib/converter.js (26450b), assets/lib/highlight.min.js (121727b), assets/lib/markdown-it-deflist.js (7014b), assets/lib/markdown-it-imageflow.js (1771b), assets/lib/markdown-it-implicit-figures.js (4238b), assets/lib/markdown-it-li.js (550b), assets/lib/markdown-it-linkfoot.js (8114b), assets/lib/markdown-it-math.js (4050b), assets/lib/markdown-it-ruby.js (3375b), assets/lib/markdown-it-span.js (1560b), assets/lib/markdown-it-table-container.js (1084b), assets/lib/markdown-it-urlspan.js (781b), assets/lib/markdown-it.min.js (123618b), assets/lib/mermaid.min.js (3565102b), assets/preview.css (11613b), assets/styles/blue-ying.css (11775b), assets/styles/cute-green.css (13509b), assets/styles/cyan-green.css (12315b), assets/styles/docsify.css (4025b), assets/styles/frontend-top.css (13558b), assets/styles/fullstack-blue.css (16361b), assets/styles/geek-black.css (13741b), assets/styles/github-dark.css (3661b), assets/styles/github.css (3726b), assets/styles/green.css (12399b), assets/styles/grid-black.css (14022b), assets/styles/lan-qing.css (12681b), assets/styles/minimalist-black.css (14770b), assets/styles/mountain-blush.css (12443b), assets/styles/notion.css (3665b), assets/styles/orange-blue.css (13442b), assets/styles/orange-heart.css (12046b), assets/styles/purple-red.css (12436b), assets/styles/red-fresh.css (14804b), assets/styles/rose-purple.css (14454b), assets/styles/star-blood.css (5810b), assets/styles/star-planet.css (7462b), assets/styles/star-pure.css (5575b), README.md (2089b), scripts/preview_server.py (13674b), skill-card.md (2014b), SKILL.md (7907b), _meta.json (141b)\n\nFile v1.4.12:SKILL.md\n\n---\nname: claw-markdown-preview\ndescription: Local Markdown preview skill. Trigger when the user explicitly asks to preview a markdown file — e.g. \"preview this markdown file\", \"open markdown preview\", \"markdown preview\", or the Chinese \"预览这个 markdown 文件\" / \"打开 markdown 预览\" / \"markdown 预览一下\".\nversion: 1.4.12\nmetadata:\n  openclaw:\n    emoji: \"📄\"\n    os: [\"darwin\", \"linux\", \"win32\"]\n    requires:\n      bins: [\"python3\"]\n    install: []\n    permissions:\n      - filesystem:read\n      - filesystem:write\n      - network:localhost\n      - process:spawn\n---\n\n# Markdown 编辑、多风格预览 / Markdown Editing & Multi-style Preview\n\n通过浏览器编辑、预览AI生成的 Markdown 内容、用户本地 MarkDown 文件。支持多主题风格切换、实时编辑、富文本复制（可粘贴到公众号/知乎）、图片粘贴  \n\nEdit & preview AI-generated or local Markdown in the browser. Multi-theme switching, live editing, rich-text copy (for WeChat/Zhihu), and image paste.\n\n## 触发方式 / Trigger\n\n当用户明确请求预览 Markdown 文件时触发，例如：\"预览这个 markdown 文件\" / \"打开 markdown 预览\" / \"markdown 预览一下\"。非 Markdown 预览请求（如普通文本渲染、图片查看）不触发。  \n\nTriggers when the user explicitly asks to preview a Markdown file, e.g. \"预览这个 markdown 文件\" / \"打开 markdown 预览\" / \"markdown 预览一下\". Not for generic text rendering or image viewing.\n\n## 执行入口\n\n**前提检查：**\n- 确认目标文件路径存在且为 `.md` 文件\n- 确认 `scripts/preview_server.py` 存在且可用（路径相对于技能目录）\n\n**执行（两步，替换 `<MD_FILE_PATH>` 后运行）：**\n\n**第 1 步 —— 以「托管后台任务」方式启动服务（关键：必须是脱离命令进程树的独立任务，绝不能用命令内 `&` 把服务挂到返回命令的进程树下，否则命令一返回、进程树被清理，服务就跟着死）：**\n\n```bash\n# 单实例清理：只终止上一次本技能启动的预览实例（PID 文件精确定位），不误伤其他进程。整条命令以 python3 常驻结尾，确保托管后台任务正确托管（多行 if 块部分环境识别不到 python3）。\n[ -f /tmp/claw-markdown-preview.pid ] && OLD_PID=$(cat /tmp/claw-markdown-preview.pid 2>/dev/null) && [ -n \"$OLD_PID\" ] && kill -0 \"$OLD_PID\" 2>/dev/null && kill \"$OLD_PID\" 2>/dev/null; rm -f /tmp/claw-markdown-preview.pid; python3 scripts/preview_server.py --file \"<MD_FILE_PATH>\" --no-open --heartbeat-timeout 300 > /tmp/claw-md-preview.log 2>&1\n```\n\n> 用 Bash 工具的后台 / 托管任务模式运行上面整条命令，让服务常驻、不随某条命令返回而结束。若运行环境没有托管任务机制，退而用 `setsid python3 … &` 把服务拆到独立会话，效果等同。\n\n**第 2 步 —— 探测端口并打开浏览器（普通命令即可）：**\n\n```bash\n# 就绪轮询：服务绑定端口后即可响应，不必固定等待 2 秒（跨平台通用，不依赖任何运行时专属能力）\nPORT=8765\nfor i in $(seq 1 20); do\n  if curl -s -o /dev/null -w '%{http_code}' --max-time 1 \"http://127.0.0.1:$PORT/\" | grep -q 200; then\n    break\n  fi\n  sleep 0.1\ndone\n# 若默认端口仍未就绪（如端口冲突），从日志提取实际端口\nif ! curl -s -o /dev/null -w '%{http_code}' --max-time 1 \"http://127.0.0.1:$PORT/\" | grep -q 200; then\n  PORT=$(grep -oE '127\\.0\\.0\\.1:[0-9]+' /tmp/claw-md-preview.log | head -1 | sed 's/.*://')\nfi\n# 记录本次实例 PID，供下次重启时精准终止（替代 pkill 全杀）\nlsof -iTCP:$PORT -sTCP:LISTEN -t | head -1 > /tmp/claw-markdown-preview.pid\nopen \"http://127.0.0.1:$PORT\"\n```\n\n**说明：**\n- 第 1 步把服务跑成托管后台任务（常驻、脱离启动命令的进程树），第 2 步再探测端口并打开浏览器。两步拆分是为了让服务不被启动命令的进程树回收而误杀。\n- 服务启动后：`curl` 快速探测默认端口 8765 → 被占用时从日志精确提取端口 → 记录 PID → 打开浏览器。\n- 首次运行用默认端口 8765，`curl` 直通不进正则分支；仅端口冲突时才走日志提取降级路径。\n- 心跳 30 秒纯为兜底——页面关闭后最多等待 30 秒自停，正常预览流程碰不到超时。\n\n> **不要用 `present_files`**，内置浏览器窗口太挤，用系统命令 `open` 打开外部浏览器。\n\n## 可选参数\n\n| 参数 | 说明 |\n|------|------|\n| `--file <路径>` | 预览指定 markdown 文件 |\n| `--port <端口>` | 指定端口，默认 `8765` |\n| `--stdin` | 从标准输入读取 markdown 内容 |\n| `--no-open` | 不自动打开系统浏览器（后台/Agent 场景必加） |\n| `--verbose` | 输出访问日志，便于调试 |\n| `--heartbeat-timeout <秒>` | 心跳超时秒数，页面关闭后超时自动停止服务（默认 `10`，Agent 场景建议 `300`，以扛住浏览器后台标签页节流） |\n\n如果没有指定 `--file` 或 `--stdin`，服务启动后页面显示空编辑器，用户可自行粘贴 markdown。\n\n## 功能说明\n\n1. **编辑模式**：CodeMirror 编辑器，编辑 Markdown 原文\n2. **预览模式**：渲染后的富文本预览，支持主题切换\n3. **双栏模式**：编辑器和预览左右并排，支持滚动同步\n4. **手机预览**：以手机宽度（500px）居中渲染预览\n\n## 主题\n\n22 种预览主题 + 9 种代码高亮主题，可在页面顶部下拉选择。\n\n## 富文本复制\n\n点击预览区的复制按钮，将当前主题样式内联后的 HTML 写入剪贴板，可直接粘贴到公众号编辑器等平台。复制时会 `fetch` 本地预览服务（仅监听 `127.0.0.1`）的图片并内联为 base64，不访问任何其它外部地址，公众号粘贴后自动识别本地图片。\n\n## 粘贴图片\n\n在编辑模式或双栏模式下，可直接粘贴剪贴板中的图片（Ctrl+V / Cmd+V）。预览页会拦截默认粘贴动作，将图片经由本地预览服务（仅监听 `127.0.0.1`）的 `/api/image` 端点写入本地磁盘、保存到被预览 Markdown 同目录的 `images/` 文件夹，并插入本地引用 `![](images/img-xxx.png)`。整个过程不出本机、不经任何外部服务器。\n\n- 单张图片大小限制 5MB\n- 图片以文件形式存储，跟随 md 文件，换浏览器/电脑不丢失\n\n## 注意事项\n\n- 预览服务运行在 `assets/` 子目录上，文件由 `preview_server.py` 自动定位\n- 端口默认 8765，被占用时自动递增寻找空闲端口（+20 以内）\n- **热更新**：使用 `--file` 模式时，页面每 3 秒轮询文件内容变化，在 Agent 中修改文件后页面自动刷新（弹出\"外部内容已更新\"提示）\n- **心跳自停**：页面每 5 秒发送心跳，关闭页面后服务自动停止（正常关闭立即停止，异常退出最多等待 `--heartbeat-timeout` 秒后停止）\n- **⚠️ 编辑即自动保存并覆盖原文件**：在编辑器中修改后停顿约 5 秒，内容会自动经 `/api/save` 写回被预览的 md 文件并覆盖原内容（无备份）；也可点\"保存\"按钮手动保存。关闭预览页面**不会**自动保存，如有未保存改动会提示确认离开，离开则未保存内容丢弃。\n- `--stdin` 模式不支持热更新和粘贴图片（内容固定）\n- 服务终止方式：`kill $(cat /tmp/claw-markdown-preview.pid)`\n\n## 后台运行说明\n\n执行入口第 1 步以「托管后台任务」方式常驻服务（脱离启动命令的进程树，命令返回也不会被回收）；第 2 步负责端口探测（curl）/ PID 获取（lsof）/ 残留清理（pkill）。若需手动启动，参考上述命令结构，务必使用 `python3`（与 frontmatter `requires: python3` 一致）而非绝对路径；切勿用命令内 `&` 把服务挂到返回命令的进程树下的写法，否则服务会被进程树清理杀掉。\n\nFile v1.4.12:README.md\n\n# claw-markdown-preview\n\n> 一个 **Agent 技能（Skill）**：在 AI 对话里即时预览 Markdown，让 AI 生成的文档立刻「看得见」。\n\n## 这是什么\n\n`claw-markdown-preview` 是一个可被 AI 助手（Agent）在对话中**直接调用**的技能。当你让 Agent 生成 Markdown 文档后，只需说一句\"预览这个 md\"\"看看渲染效果\"，它就会在浏览器里把文档渲染成精美网页——支持 22 种主题、4 种视图，不切应用、不手动开文件。\n\n## 支持的 Agent 平台\n\n- WorkBuddy\n- QClaw\n- OpenClaw\n- Hermes\n- 任何能提供「执行 `python3` 命令 + 访问 localhost 浏览器预览」能力的 Agent\n\n## 四大能力\n\n1. **即时预览**：AI 写完文档当场看排版、代码高亮、表格效果。\n2. **公众号排版**：22 种主题 + 4 种视图（编辑 / 预览 / 双栏 / 手机）随意切换，排版效果所见即所得，告别手动调格式。\n3. **富文本复制（含图片）**：一键拷贝带样式正文，图片自动 base64 内联，直粘公众号 / 知乎后台，零二次排版。\n4. **实时编辑 + 图片粘贴**：双栏边写边看，编辑器内 `Ctrl+V` 即贴本地图片，自动内联进文档，无需手动存图传图。\n\n## 安装\n\n将本仓库克隆 / 下载到你的 Agent 技能目录即可（如 WorkBuddy 的 `~/.workbuddy/skills/`），或直接从 SkillHub / ClawHub 安装。\n\n```bash\ngit clone https://github.com/webkixi/claw-markdown-preview-skill.git\n```\n\n## 用法\n\n在 Agent 对话中：\n\n- \"预览这个 md\" → 启动本地预览服务并在浏览器打开\n- \"看看渲染效果\" → 同上\n- \"打开预览\" → 同上\n\n技能会自动完成：清理残留进程 → 后台启动预览服务（默认端口 `8765`）→ 用系统浏览器打开预览页。\n\n## 技术说明\n\n- 预览服务 `scripts/preview_server.py` 仅依赖 Python 标准库，跨平台（macOS / Linux / Windows）。\n- 前端 `assets/` 为纯静态资源，提供 22 种预览主题 + 9 种代码高亮主题。\n- 所有文件均为本地处理，不上传任何内容。\n\n## 许可\n\nMIT\n\nFile v1.4.12:_meta.json\n\n{\n  \"ownerId\": \"kn71ktazf25p4qq9q4m4ekwghx880qkj\",\n  \"slug\": \"claw-markdown-preview\",\n  \"version\": \"1.4.12\",\n  \"publishedAt\": 1783960432306\n}\n\nFile v1.4.12:skill-card.md\n\n## Description: <br>\nLocal Markdown preview skill for explicit requests to preview Markdown files in a browser. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[webkixi](https://clawhub.ai/user/webkixi) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and agent users use this skill to preview and edit local Markdown files in a browser with theme switching, live preview, rich-text copy, and image paste support. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The local browser preview can overwrite the Markdown file while the user edits. <br>\nMitigation: Preview trusted files, keep source control or backups for important documents, and review changes before relying on the edited Markdown. <br>\nRisk: Untrusted Markdown may include raw HTML or remote images that execute or load in the browser context. <br>\nMitigation: Avoid opening untrusted Markdown and review embedded HTML, images, and links before previewing. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/webkixi/skills/claw-markdown-preview) <br>\n- [Publisher profile](https://clawhub.ai/user/webkixi) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, shell commands, configuration, guidance] <br>\n**Output Format:** [Markdown guidance with inline shell commands and localhost preview instructions] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Starts a local browser preview service, may save Markdown edits back to the source file, and can write pasted images beside the Markdown file.] <br>\n\n## Skill Version(s): <br>\n1.4.12 (source: server release metadata and skill frontmatter) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.4.11: 54 files, 1396043 bytes\n\nFiles: assets/code-themes/atom-one-dark.css (1372b), assets/code-themes/dracula.css (1062b), assets/code-themes/github-dark.css (1719b), assets/code-themes/github-light.css (1298b), assets/code-themes/github.css (1301b), assets/code-themes/monokai.css (1213b), assets/code-themes/vs2015.css (1831b), assets/code-themes/vscode-light.css (1238b), assets/code-themes/xcode.css (1238b), assets/index.html (20959b), assets/lib/codemirror.bundle.min.js (498838b), assets/lib/converter.js (26450b), assets/lib/highlight.min.js (121727b), assets/lib/markdown-it-deflist.js (7014b), assets/lib/markdown-it-imageflow.js (1771b), assets/lib/markdown-it-implicit-figures.js (4238b), assets/lib/markdown-it-li.js (550b), assets/lib/markdown-it-linkfoot.js (8114b), assets/lib/markdown-it-math.js (4050b), assets/lib/markdown-it-ruby.js (3375b), assets/lib/markdown-it-span.js (1560b), assets/lib/markdown-it-table-container.js (1084b), assets/lib/markdown-it-urlspan.js (781b), assets/lib/markdown-it.min.js (123618b), assets/lib/mermaid.min.js (3565102b), assets/preview.css (11613b), assets/styles/blue-ying.css (11775b), assets/styles/cute-green.css (13509b), assets/styles/cyan-green.css (12315b), assets/styles/docsify.css (4025b), assets/styles/frontend-top.css (13558b), assets/styles/fullstack-blue.css (16361b), assets/styles/geek-black.css (13741b), assets/styles/github-dark.css (3661b), assets/styles/github.css (3726b), assets/styles/green.css (12399b), assets/styles/grid-black.css (14022b), assets/styles/lan-qing.css (12681b), assets/styles/minimalist-black.css (14770b), assets/styles/mountain-blush.css (12443b), assets/styles/notion.css (3665b), assets/styles/orange-blue.css (13442b), assets/styles/orange-heart.css (12046b), assets/styles/purple-red.css (12436b), assets/styles/red-fresh.css (14804b), assets/styles/rose-purple.css (14454b), assets/styles/star-blood.css (5810b), assets/styles/star-planet.css (7462b), assets/styles/star-pure.css (5575b), README.md (2089b), scripts/preview_server.py (13674b), skill-card.md (2489b), SKILL.md (7863b), _meta.json (141b)\n\nFile v1.4.11:SKILL.md\n\n---\nname: claw-markdown-preview\ndescription: Local Markdown preview skill. Trigger when the user explicitly asks to preview a markdown file — e.g. \"preview this markdown file\", \"open markdown preview\", \"markdown preview\", or the Chinese \"预览这个 markdown 文件\" / \"打开 markdown 预览\" / \"markdown 预览一下\".\nversion: 1.4.11\nmetadata:\n  openclaw:\n    emoji: \"📄\"\n    os: [\"darwin\", \"linux\", \"win32\"]\n    requires:\n      bins: [\"python3\"]\n    install: []\n    permissions:\n      - filesystem:read\n      - filesystem:write\n      - network:localhost\n      - process:spawn\n---\n\n# Markdown 编辑、多风格预览 / Markdown Editing & Multi-style Preview\n\n通过浏览器编辑、预览AI生成的 Markdown 内容、用户本地 MarkDown 文件。支持多主题风格切换、实时编辑、富文本复制（可粘贴到公众号/知乎）、图片粘贴  \n\nEdit & preview AI-generated or local Markdown in the browser. Multi-theme switching, live editing, rich-text copy (for WeChat/Zhihu), and image paste.\n\n## 触发方式 / Trigger\n\n当用户明确请求预览 Markdown 文件时触发，例如：\"预览这个 markdown 文件\" / \"打开 markdown 预览\" / \"markdown 预览一下\"。非 Markdown 预览请求（如普通文本渲染、图片查看）不触发。  \n\nTriggers when the user explicitly asks to preview a Markdown file, e.g. \"预览这个 markdown 文件\" / \"打开 markdown 预览\" / \"markdown 预览一下\". Not for generic text rendering or image viewing.\n\n## 执行入口\n\n**前提检查：**\n- 确认目标文件路径存在且为 `.md` 文件\n- 确认 `scripts/preview_server.py` 存在且可用（路径相对于技能目录）\n\n**执行（两步，替换 `<MD_FILE_PATH>` 后运行）：**\n\n**第 1 步 —— 以「托管后台任务」方式启动服务（关键：必须是脱离命令进程树的独立任务，绝不能用命令内 `&` 把服务挂到返回命令的进程树下，否则命令一返回、进程树被清理，服务就跟着死）：**\n\n```bash\n# 单实例清理：只终止上一次本技能启动的预览实例（PID 文件精确定位），不误伤其他进程。整条命令以 python3 常驻结尾，确保托管后台任务正确托管（多行 if 块部分环境识别不到 python3）。\n[ -f /tmp/claw-markdown-preview.pid ] && OLD_PID=$(cat /tmp/claw-markdown-preview.pid 2>/dev/null) && [ -n \"$OLD_PID\" ] && kill -0 \"$OLD_PID\" 2>/dev/null && kill \"$OLD_PID\" 2>/dev/null; rm -f /tmp/claw-markdown-preview.pid; python3 scripts/preview_server.py --file \"<MD_FILE_PATH>\" --no-open --heartbeat-timeout 30 > /tmp/claw-md-preview.log 2>&1\n```\n\n> 用 Bash 工具的后台 / 托管任务模式运行上面整条命令，让服务常驻、不随某条命令返回而结束。若运行环境没有托管任务机制，退而用 `setsid python3 … &` 把服务拆到独立会话，效果等同。\n\n**第 2 步 —— 探测端口并打开浏览器（普通命令即可）：**\n\n```bash\n# 就绪轮询：服务绑定端口后即可响应，不必固定等待 2 秒（跨平台通用，不依赖任何运行时专属能力）\nPORT=8765\nfor i in $(seq 1 20); do\n  if curl -s -o /dev/null -w '%{http_code}' --max-time 1 \"http://127.0.0.1:$PORT/\" | grep -q 200; then\n    break\n  fi\n  sleep 0.1\ndone\n# 若默认端口仍未就绪（如端口冲突），从日志提取实际端口\nif ! curl -s -o /dev/null -w '%{http_code}' --max-time 1 \"http://127.0.0.1:$PORT/\" | grep -q 200; then\n  PORT=$(grep -oE '127\\.0\\.0\\.1:[0-9]+' /tmp/claw-md-preview.log | head -1 | sed 's/.*://')\nfi\n# 记录本次实例 PID，供下次重启时精准终止（替代 pkill 全杀）\nlsof -iTCP:$PORT -sTCP:LISTEN -t | head -1 > /tmp/claw-markdown-preview.pid\nopen \"http://127.0.0.1:$PORT\"\n```\n\n**说明：**\n- 第 1 步把服务跑成托管后台任务（常驻、脱离启动命令的进程树），第 2 步再探测端口并打开浏览器。两步拆分是为了让服务不被启动命令的进程树回收而误杀。\n- 服务启动后：`curl` 快速探测默认端口 8765 → 被占用时从日志精确提取端口 → 记录 PID → 打开浏览器。\n- 首次运行用默认端口 8765，`curl` 直通不进正则分支；仅端口冲突时才走日志提取降级路径。\n- 心跳 30 秒纯为兜底——页面关闭后最多等待 30 秒自停，正常预览流程碰不到超时。\n\n> **不要用 `present_files`**，内置浏览器窗口太挤，用系统命令 `open` 打开外部浏览器。\n\n## 可选参数\n\n| 参数 | 说明 |\n|------|------|\n| `--file <路径>` | 预览指定 markdown 文件 |\n| `--port <端口>` | 指定端口，默认 `8765` |\n| `--stdin` | 从标准输入读取 markdown 内容 |\n| `--no-open` | 不自动打开系统浏览器（后台/Agent 场景必加） |\n| `--verbose` | 输出访问日志，便于调试 |\n| `--heartbeat-timeout <秒>` | 心跳超时秒数，页面关闭后超时自动停止服务（默认 `10`，Agent 场景建议 `30`） |\n\n如果没有指定 `--file` 或 `--stdin`，服务启动后页面显示空编辑器，用户可自行粘贴 markdown。\n\n## 功能说明\n\n1. **编辑模式**：CodeMirror 编辑器，编辑 Markdown 原文\n2. **预览模式**：渲染后的富文本预览，支持主题切换\n3. **双栏模式**：编辑器和预览左右并排，支持滚动同步\n4. **手机预览**：以手机宽度（500px）居中渲染预览\n\n## 主题\n\n22 种预览主题 + 9 种代码高亮主题，可在页面顶部下拉选择。\n\n## 富文本复制\n\n点击预览区的复制按钮，将当前主题样式内联后的 HTML 写入剪贴板，可直接粘贴到公众号编辑器等平台。复制时会 `fetch` 本地预览服务（仅监听 `127.0.0.1`）的图片并内联为 base64，不访问任何其它外部地址，公众号粘贴后自动识别本地图片。\n\n## 粘贴图片\n\n在编辑模式或双栏模式下，可直接粘贴剪贴板中的图片（Ctrl+V / Cmd+V）。预览页会拦截默认粘贴动作，将图片经由本地预览服务（仅监听 `127.0.0.1`）的 `/api/image` 端点写入本地磁盘、保存到被预览 Markdown 同目录的 `images/` 文件夹，并插入本地引用 `![](images/img-xxx.png)`。整个过程不出本机、不经任何外部服务器。\n\n- 单张图片大小限制 5MB\n- 图片以文件形式存储，跟随 md 文件，换浏览器/电脑不丢失\n\n## 注意事项\n\n- 预览服务运行在 `assets/` 子目录上，文件由 `preview_server.py` 自动定位\n- 端口默认 8765，被占用时自动递增寻找空闲端口（+20 以内）\n- **热更新**：使用 `--file` 模式时，页面每 3 秒轮询文件内容变化，在 Agent 中修改文件后页面自动刷新（弹出\"外部内容已更新\"提示）\n- **心跳自停**：页面每 5 秒发送心跳，关闭页面后服务自动停止（正常关闭立即停止，异常退出最多等待 `--heartbeat-timeout` 秒后停止）\n- **⚠️ 编辑即自动保存并覆盖原文件**：在编辑器中修改后停顿约 5 秒，内容会自动经 `/api/save` 写回被预览的 md 文件并覆盖原内容（无备份）；也可点\"保存\"按钮手动保存。关闭预览页面**不会**自动保存，如有未保存改动会提示确认离开，离开则未保存内容丢弃。\n- `--stdin` 模式不支持热更新和粘贴图片（内容固定）\n- 服务终止方式：`kill $(cat /tmp/claw-markdown-preview.pid)`\n\n## 后台运行说明\n\n执行入口第 1 步以「托管后台任务」方式常驻服务（脱离启动命令的进程树，命令返回也不会被回收）；第 2 步负责端口探测（curl）/ PID 获取（lsof）/ 残留清理（pkill）。若需手动启动，参考上述命令结构，务必使用 `python3`（与 frontmatter `requires: python3` 一致）而非绝对路径；切勿用命令内 `&` 把服务挂到返回命令的进程树下的写法，否则服务会被进程树清理杀掉。\n\nFile v1.4.11:README.md\n\n# claw-markdown-preview\n\n> 一个 **Agent 技能（Skill）**：在 AI 对话里即时预览 Markdown，让 AI 生成的文档立刻「看得见」。\n\n## 这是什么\n\n`claw-markdown-preview` 是一个可被 AI 助手（Agent）在对话中**直接调用**的技能。当你让 Agent 生成 Markdown 文档后，只需说一句\"预览这个 md\"\"看看渲染效果\"，它就会在浏览器里把文档渲染成精美网页——支持 22 种主题、4 种视图，不切应用、不手动开文件。\n\n## 支持的 Agent 平台\n\n- WorkBuddy\n- QClaw\n- OpenClaw\n- Hermes\n- 任何能提供「执行 `python3` 命令 + 访问 localhost 浏览器预览」能力的 Agent\n\n## 四大能力\n\n1. **即时预览**：AI 写完文档当场看排版、代码高亮、表格效果。\n2. **公众号排版**：22 种主题 + 4 种视图（编辑 / 预览 / 双栏 / 手机）随意切换，排版效果所见即所得，告别手动调格式。\n3. **富文本复制（含图片）**：一键拷贝带样式正文，图片自动 base64 内联，直粘公众号 / 知乎后台，零二次排版。\n4. **实时编辑 + 图片粘贴**：双栏边写边看，编辑器内 `Ctrl+V` 即贴本地图片，自动内联进文档，无需手动存图传图。\n\n## 安装\n\n将本仓库克隆 / 下载到你的 Agent 技能目录即可（如 WorkBuddy 的 `~/.workbuddy/skills/`），或直接从 SkillHub / ClawHub 安装。\n\n```bash\ngit clone https://github.com/webkixi/claw-markdown-preview-skill.git\n```\n\n## 用法\n\n在 Agent 对话中：\n\n- \"预览这个 md\" → 启动本地预览服务并在浏览器打开\n- \"看看渲染效果\" → 同上\n- \"打开预览\" → 同上\n\n技能会自动完成：清理残留进程 → 后台启动预览服务（默认端口 `8765`）→ 用系统浏览器打开预览页。\n\n## 技术说明\n\n- 预览服务 `scripts/preview_server.py` 仅依赖 Python 标准库，跨平台（macOS / Linux / Windows）。\n- 前端 `assets/` 为纯静态资源，提供 22 种预览主题 + 9 种代码高亮主题。\n- 所有文件均为本地处理，不上传任何内容。\n\n## 许可\n\nMIT\n\nFile v1.4.11:_meta.json\n\n{\n  \"ownerId\": \"kn71ktazf25p4qq9q4m4ekwghx880qkj\",\n  \"slug\": \"claw-markdown-preview\",\n  \"version\": \"1.4.11\",\n  \"publishedAt\": 1783949616185\n}\n\nFile v1.4.11:skill-card.md\n\n## Description: <br>\nClaw Markdown Preview lets an agent open a local browser preview and editor for Markdown files with theme switching, live editing, rich-text copy, and pasted-image support. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[webkixi](https://clawhub.ai/user/webkixi) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers, writers, and agent users use this skill to preview and edit local Markdown in a browser, compare rendered themes, copy styled HTML, and paste local images into the document. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Browser edits can overwrite the source Markdown file after a short delay. <br>\nMitigation: Use the preview on trusted files, keep a backup when preserving the original matters, and use stdin mode for preview-only sessions. <br>\nRisk: Pasted images are written to an images folder next to the Markdown file. <br>\nMitigation: Run the skill from an intended project folder and review or clean generated image files after editing. <br>\nRisk: The localhost preview server remains available until the page closes, heartbeat timeout expires, or the process is killed. <br>\nMitigation: Close the browser preview or kill the recorded preview server process when finished. <br>\nRisk: Some themes may request third-party background images. <br>\nMitigation: Use themes without remote image URLs in restricted environments or review outbound browser requests before publication workflows. <br>\n\n\n## Reference(s): <br>\n- [ClawHub Skill Page](https://clawhub.ai/webkixi/skills/claw-markdown-preview) <br>\n- [clawMarkDown Homepage](https://webkixi.github.io/clawmarkdown-home/) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Shell commands, Guidance, Files] <br>\n**Output Format:** [Markdown guidance with inline shell commands and local browser preview output] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Starts a localhost-only preview server; file mode can save Markdown changes and pasted images to disk.] <br>\n\n## Skill Version(s): <br>\n1.4.11 (source: SKILL.md frontmatter and server release metadata) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.4.10: 54 files, 1395969 bytes\n\nFiles: assets/code-themes/atom-one-dark.css (1372b), assets/code-themes/dracula.css (1062b), assets/code-themes/github-dark.css (1719b), assets/code-themes/github-light.css (1298b), assets/code-themes/github.css (1301b), assets/code-themes/monokai.css (1213b), assets/code-themes/vs2015.css (1831b), assets/code-themes/vscode-light.css (1238b), assets/code-themes/xcode.css (1238b), assets/index.html (20959b), assets/lib/codemirror.bundle.min.js (498838b), assets/lib/converter.js (26450b), assets/lib/highlight.min.js (121727b), assets/lib/markdown-it-deflist.js (7014b), assets/lib/markdown-it-imageflow.js (1771b), assets/lib/markdown-it-implicit-figures.js (4238b), assets/lib/markdown-it-li.js (550b), assets/lib/markdown-it-linkfoot.js (8114b), assets/lib/markdown-it-math.js (4050b), assets/lib/markdown-it-ruby.js (3375b), assets/lib/markdown-it-span.js (1560b), assets/lib/markdown-it-table-container.js (1084b), assets/lib/markdown-it-urlspan.js (781b), assets/lib/markdown-it.min.js (123618b), assets/lib/mermaid.min.js (3565102b), assets/preview.css (11613b), assets/styles/blue-ying.css (11775b), assets/styles/cute-green.css (13509b), assets/styles/cyan-green.css (12315b), assets/styles/docsify.css (4025b), assets/styles/frontend-top.css (13558b), assets/styles/fullstack-blue.css (16361b), assets/styles/geek-black.css (13741b), assets/styles/github-dark.css (3661b), assets/styles/github.css (3726b), assets/styles/green.css (12399b), assets/styles/grid-black.css (14022b), assets/styles/lan-qing.css (12681b), assets/styles/minimalist-black.css (14770b), assets/styles/mountain-blush.css (12443b), assets/styles/notion.css (3665b), assets/styles/orange-blue.css (13442b), assets/styles/orange-heart.css (12046b), assets/styles/purple-red.css (12436b), assets/styles/red-fresh.css (14804b), assets/styles/rose-purple.css (14454b), assets/styles/star-blood.css (5810b), assets/styles/star-planet.css (7462b), assets/styles/star-pure.css (5575b), README.md (2089b), scripts/preview_server.py (13674b), skill-card.md (2507b), SKILL.md (7794b), _meta.json (141b)\n\nFile v1.4.10:SKILL.md\n\n---\nname: claw-markdown-preview\ndescription: Local Markdown preview skill. Trigger when the user explicitly asks to preview a markdown file — e.g. \"preview this markdown file\", \"open markdown preview\", \"markdown preview\", or the Chinese \"预览这个 markdown 文件\" / \"打开 markdown 预览\" / \"markdown 预览一下\".\nversion: 1.4.10\nmetadata:\n  openclaw:\n    emoji: \"📄\"\n    os: [\"darwin\", \"linux\", \"win32\"]\n    requires:\n      bins: [\"python3\"]\n    install: []\n    permissions:\n      - filesystem:read\n      - filesystem:write\n      - network:localhost\n      - process:spawn\n---\n\n# Markdown 编辑、多风格预览 / Markdown Editing & Multi-style Preview\n\n通过浏览器编辑、预览AI生成的 Markdown 内容、用户本地 MarkDown 文件。支持多主题风格切换、实时编辑、富文本复制（可粘贴到公众号/知乎）、图片粘贴  \n\nEdit & preview AI-generated or local Markdown in the browser. Multi-theme switching, live editing, rich-text copy (for WeChat/Zhihu), and image paste.\n\n## 触发方式 / Trigger\n\n当用户明确请求预览 Markdown 文件时触发，例如：\"预览这个 markdown 文件\" / \"打开 markdown 预览\" / \"markdown 预览一下\"。非 Markdown 预览请求（如普通文本渲染、图片查看）不触发。  \n\nTriggers when the user explicitly asks to preview a Markdown file, e.g. \"预览这个 markdown 文件\" / \"打开 markdown 预览\" / \"markdown 预览一下\". Not for generic text rendering or image viewing.\n\n## 执行入口\n\n**前提检查：**\n- 确认目标文件路径存在且为 `.md` 文件\n- 确认 `scripts/preview_server.py` 存在且可用（路径相对于技能目录）\n\n**执行（两步，替换 `<MD_FILE_PATH>` 后运行）：**\n\n**第 1 步 —— 以「托管后台任务」方式启动服务（关键：必须是脱离命令进程树的独立任务，绝不能用命令内 `&` 把服务挂到返回命令的进程树下，否则命令一返回、进程树被清理，服务就跟着死）：**\n\n```bash\n# 单实例清理：只终止上一次本技能启动的预览实例（通过 PID 文件精确定位），不误伤其他进程（含其他 markdown 预览）\nif [ -f /tmp/claw-markdown-preview.pid ]; then\n  OLD_PID=$(cat /tmp/claw-markdown-preview.pid 2>/dev/null)\n  if [ -n \"$OLD_PID\" ] && kill -0 \"$OLD_PID\" 2>/dev/null; then\n    kill \"$OLD_PID\" 2>/dev/null\n  fi\n  rm -f /tmp/claw-markdown-preview.pid\nfi\npython3 scripts/preview_server.py --file \"<MD_FILE_PATH>\" --no-open --heartbeat-timeout 30 > /tmp/claw-md-preview.log 2>&1\n```\n\n> 用 Bash 工具的后台 / 托管任务模式运行上面整条命令，让服务常驻、不随某条命令返回而结束。若运行环境没有托管任务机制，退而用 `setsid python3 … &` 把服务拆到独立会话，效果等同。\n\n**第 2 步 —— 探测端口并打开浏览器（普通命令即可）：**\n\n```bash\n# 就绪轮询：服务绑定端口后即可响应，不必固定等待 2 秒（跨平台通用，不依赖任何运行时专属能力）\nPORT=8765\nfor i in $(seq 1 20); do\n  if curl -s -o /dev/null -w '%{http_code}' --max-time 1 \"http://127.0.0.1:$PORT/\" | grep -q 200; then\n    break\n  fi\n  sleep 0.1\ndone\n# 若默认端口仍未就绪（如端口冲突），从日志提取实际端口\nif ! curl -s -o /dev/null -w '%{http_code}' --max-time 1 \"http://127.0.0.1:$PORT/\" | grep -q 200; then\n  PORT=$(grep -oE '127\\.0\\.0\\.1:[0-9]+' /tmp/claw-md-preview.log | head -1 | sed 's/.*://')\nfi\n# 记录本次实例 PID，供下次重启时精准终止（替代 pkill 全杀）\nlsof -iTCP:$PORT -sTCP:LISTEN -t | head -1 > /tmp/claw-markdown-preview.pid\nopen \"http://127.0.0.1:$PORT\"\n```\n\n**说明：**\n- 第 1 步把服务跑成托管后台任务（常驻、脱离启动命令的进程树），第 2 步再探测端口并打开浏览器。两步拆分是为了让服务不被启动命令的进程树回收而误杀。\n- 服务启动后：`curl` 快速探测默认端口 8765 → 被占用时从日志精确提取端口 → 记录 PID → 打开浏览器。\n- 首次运行用默认端口 8765，`curl` 直通不进正则分支；仅端口冲突时才走日志提取降级路径。\n- 心跳 30 秒纯为兜底——页面关闭后最多等待 30 秒自停，正常预览流程碰不到超时。\n\n> **不要用 `present_files`**，内置浏览器窗口太挤，用系统命令 `open` 打开外部浏览器。\n\n## 可选参数\n\n| 参数 | 说明 |\n|------|------|\n| `--file <路径>` | 预览指定 markdown 文件 |\n| `--port <端口>` | 指定端口，默认 `8765` |\n| `--stdin` | 从标准输入读取 markdown 内容 |\n| `--no-open` | 不自动打开系统浏览器（后台/Agent 场景必加） |\n| `--verbose` | 输出访问日志，便于调试 |\n| `--heartbeat-timeout <秒>` | 心跳超时秒数，页面关闭后超时自动停止服务（默认 `10`，Agent 场景建议 `30`） |\n\n如果没有指定 `--file` 或 `--stdin`，服务启动后页面显示空编辑器，用户可自行粘贴 markdown。\n\n## 功能说明\n\n1. **编辑模式**：CodeMirror 编辑器，编辑 Markdown 原文\n2. **预览模式**：渲染后的富文本预览，支持主题切换\n3. **双栏模式**：编辑器和预览左右并排，支持滚动同步\n4. **手机预览**：以手机宽度（500px）居中渲染预览\n\n## 主题\n\n22 种预览主题 + 9 种代码高亮主题，可在页面顶部下拉选择。\n\n## 富文本复制\n\n点击预览区的复制按钮，将当前主题样式内联后的 HTML 写入剪贴板，可直接粘贴到公众号编辑器等平台。复制时会 `fetch` 本地预览服务（仅监听 `127.0.0.1`）的图片并内联为 base64，不访问任何其它外部地址，公众号粘贴后自动识别本地图片。\n\n## 粘贴图片\n\n在编辑模式或双栏模式下，可直接粘贴剪贴板中的图片（Ctrl+V / Cmd+V）。预览页会拦截默认粘贴动作，将图片经由本地预览服务（仅监听 `127.0.0.1`）的 `/api/image` 端点写入本地磁盘、保存到被预览 Markdown 同目录的 `images/` 文件夹，并插入本地引用 `![](images/img-xxx.png)`。整个过程不出本机、不经任何外部服务器。\n\n- 单张图片大小限制 5MB\n- 图片以文件形式存储，跟随 md 文件，换浏览器/电脑不丢失\n\n## 注意事项\n\n- 预览服务运行在 `assets/` 子目录上，文件由 `preview_server.py` 自动定位\n- 端口默认 8765，被占用时自动递增寻找空闲端口（+20 以内）\n- **热更新**：使用 `--file` 模式时，页面每 3 秒轮询文件内容变化，在 Agent 中修改文件后页面自动刷新（弹出\"外部内容已更新\"提示）\n- **心跳自停**：页面每 5 秒发送心跳，关闭页面后服务自动停止（正常关闭立即停止，异常退出最多等待 `--heartbeat-timeout` 秒后停止）\n- **⚠️ 编辑即自动保存并覆盖原文件**：在编辑器中修改后停顿约 5 秒，内容会自动经 `/api/save` 写回被预览的 md 文件并覆盖原内容（无备份）；也可点\"保存\"按钮手动保存。关闭预览页面**不会**自动保存，如有未保存改动会提示确认离开，离开则未保存内容丢弃。\n- `--stdin` 模式不支持热更新和粘贴图片（内容固定）\n- 服务终止方式：`kill $(cat /tmp/claw-markdown-preview.pid)`\n\n## 后台运行说明\n\n执行入口第 1 步以「托管后台任务」方式常驻服务（脱离启动命令的进程树，命令返回也不会被回收）；第 2 步负责端口探测（curl）/ PID 获取（lsof）/ 残留清理（pkill）。若需手动启动，参考上述命令结构，务必使用 `python3`（与 frontmatter `requires: python3` 一致）而非绝对路径；切勿用命令内 `&` 把服务挂到返回命令的进程树下的写法，否则服务会被进程树清理杀掉。\n\nFile v1.4.10:README.md\n\n# claw-markdown-preview\n\n> 一个 **Agent 技能（Skill）**：在 AI 对话里即时预览 Markdown，让 AI 生成的文档立刻「看得见」。\n\n## 这是什么\n\n`claw-markdown-preview` 是一个可被 AI 助手（Agent）在对话中**直接调用**的技能。当你让 Agent 生成 Markdown 文档后，只需说一句\"预览这个 md\"\"看看渲染效果\"，它就会在浏览器里把文档渲染成精美网页——支持 22 种主题、4 种视图，不切应用、不手动开文件。\n\n## 支持的 Agent 平台\n\n- WorkBuddy\n- QClaw\n- OpenClaw\n- Hermes\n- 任何能提供「执行 `python3` 命令 + 访问 localhost 浏览器预览」能力的 Agent\n\n## 四大能力\n\n1. **即时预览**：AI 写完文档当场看排版、代码高亮、表格效果。\n2. **公众号排版**：22 种主题 + 4 种视图（编辑 / 预览 / 双栏 / 手机）随意切换，排版效果所见即所得，告别手动调格式。\n3. **富文本复制（含图片）**：一键拷贝带样式正文，图片自动 base64 内联，直粘公众号 / 知乎后台，零二次排版。\n4. **实时编辑 + 图片粘贴**：双栏边写边看，编辑器内 `Ctrl+V` 即贴本地图片，自动内联进文档，无需手动存图传图。\n\n## 安装\n\n将本仓库克隆 / 下载到你的 Agent 技能目录即可（如 WorkBuddy 的 `~/.workbuddy/skills/`），或直接从 SkillHub / ClawHub 安装。\n\n```bash\ngit clone https://github.com/webkixi/claw-markdown-preview-skill.git\n```\n\n## 用法\n\n在 Agent 对话中：\n\n- \"预览这个 md\" → 启动本地预览服务并在浏览器打开\n- \"看看渲染效果\" → 同上\n- \"打开预览\" → 同上\n\n技能会自动完成：清理残留进程 → 后台启动预览服务（默认端口 `8765`）→ 用系统浏览器打开预览页。\n\n## 技术说明\n\n- 预览服务 `scripts/preview_server.py` 仅依赖 Python 标准库，跨平台（macOS / Linux / Windows）。\n- 前端 `assets/` 为纯静态资源，提供 22 种预览主题 + 9 种代码高亮主题。\n- 所有文件均为本地处理，不上传任何内容。\n\n## 许可\n\nMIT\n\nFile v1.4.10:_meta.json\n\n{\n  \"ownerId\": \"kn71ktazf25p4qq9q4m4ekwghx880qkj\",\n  \"slug\": \"claw-markdown-preview\",\n  \"version\": \"1.4.10\",\n  \"publishedAt\": 1783913097939\n}\n\nFile v1.4.10:skill-card.md\n\n## Description: <br>\nLocal Markdown preview skill that opens an editable browser preview when the user explicitly asks to preview a Markdown file. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[webkixi](https://clawhub.ai/user/webkixi) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers, writers, and agent users use this skill to preview and edit AI-generated or local Markdown in a browser, with theme switching, rich-text copy, local image paste, and live preview workflows. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Edits in the browser can auto-save and overwrite the original Markdown file after a short delay. <br>\nMitigation: Preview files in a version-controlled or backed-up workspace, and use stdin mode when a disposable preview is sufficient. <br>\nRisk: Pasted images are written to an images folder beside the previewed Markdown file. <br>\nMitigation: Paste images only when local file writes are expected, and review generated image files before sharing or committing the workspace. <br>\nRisk: The localhost preview server can remain running briefly until heartbeat timeout or manual termination. <br>\nMitigation: Close the preview page when done or stop the recorded preview server process manually. <br>\nRisk: Markdown with active HTML content may execute in the local browser preview context. <br>\nMitigation: Avoid previewing untrusted Markdown with active HTML, or remove active HTML before opening the preview. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill listing](https://clawhub.ai/webkixi/skills/claw-markdown-preview) <br>\n- [Publisher profile](https://clawhub.ai/user/webkixi) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [shell commands, guidance, markdown, code] <br>\n**Output Format:** [Markdown instructions with bash commands and a local browser-rendered HTML preview.] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Starts a localhost preview server, can edit and save Markdown files, and can write pasted images beside the previewed file.] <br>\n\n## Skill Version(s): <br>\n1.4.10 (source: server release metadata and frontmatter) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.4.9: 54 files, 1395875 bytes\n\nFiles: assets/code-themes/atom-one-dark.css (1372b), assets/code-themes/dracula.css (1062b), assets/code-themes/github-dark.css (1719b), assets/code-themes/github-light.css (1298b), assets/code-themes/github.css (1301b), assets/code-themes/monokai.css (1213b), assets/code-themes/vs2015.css (1831b), assets/code-themes/vscode-light.css (1238b), assets/code-themes/xcode.css (1238b), assets/index.html (20959b), assets/lib/codemirror.bundle.min.js (498838b), assets/lib/converter.js (26450b), assets/lib/highlight.min.js (121727b), assets/lib/markdown-it-deflist.js (7014b), assets/lib/markdown-it-imageflow.js (1771b), assets/lib/markdown-it-implicit-figures.js (4238b), assets/lib/markdown-it-li.js (550b), assets/lib/markdown-it-linkfoot.js (8114b), assets/lib/markdown-it-math.js (4050b), assets/lib/markdown-it-ruby.js (3375b), assets/lib/markdown-it-span.js (1560b), assets/lib/markdown-it-table-container.js (1084b), assets/lib/markdown-it-urlspan.js (781b), assets/lib/markdown-it.min.js (123618b), assets/lib/mermaid.min.js (3565102b), assets/preview.css (11613b), assets/styles/blue-ying.css (11775b), assets/styles/cute-green.css (13509b), assets/styles/cyan-green.css (12315b), assets/styles/docsify.css (4025b), assets/styles/frontend-top.css (13558b), assets/styles/fullstack-blue.css (16361b), assets/styles/geek-black.css (13741b), assets/styles/github-dark.css (3661b), assets/styles/github.css (3726b), assets/styles/green.css (12399b), assets/styles/grid-black.css (14022b), assets/styles/lan-qing.css (12681b), assets/styles/minimalist-black.css (14770b), assets/styles/mountain-blush.css (12443b), assets/styles/notion.css (3665b), assets/styles/orange-blue.css (13442b), assets/styles/orange-heart.css (12046b), assets/styles/purple-red.css (12436b), assets/styles/red-fresh.css (14804b), assets/styles/rose-purple.css (14454b), assets/styles/star-blood.css (5810b), assets/styles/star-planet.css (7462b), assets/styles/star-pure.css (5575b), README.md (2089b), scripts/preview_server.py (13674b), skill-card.md (2286b), SKILL.md (7628b), _meta.json (140b)\n\nFile v1.4.9:SKILL.md\n\n---\nname: claw-markdown-preview\ndescription: Local Markdown preview skill. Trigger when the user explicitly asks to preview a markdown file — e.g. \"preview this markdown file\", \"open markdown preview\", \"markdown preview\", or the Chinese \"预览这个 markdown 文件\" / \"打开 markdown 预览\" / \"markdown 预览一下\".\nversion: 1.4.9\nmetadata:\n  openclaw:\n    emoji: \"📄\"\n    os: [\"darwin\", \"linux\", \"win32\"]\n    requires:\n      bins: [\"python3\"]\n    install: []\n    permissions:\n      - filesystem:read\n      - filesystem:write\n      - network:localhost\n      - process:spawn\n---\n\n# Markdown 编辑、多风格预览 / Markdown Editing & Multi-style Preview\n\n通过浏览器编辑、预览AI生成的 Markdown 内容、用户本地 MarkDown 文件。支持多主题风格切换、实时编辑、富文本复制（可粘贴到公众号/知乎）、图片粘贴  \n\nEdit & preview AI-generated or local Markdown in the browser. Multi-theme switching, live editing, rich-text copy (for WeChat/Zhihu), and image paste.\n\n## 触发方式 / Trigger\n\n当用户明确请求预览 Markdown 文件时触发，例如：\"预览这个 markdown 文件\" / \"打开 markdown 预览\" / \"markdown 预览一下\"。非 Markdown 预览请求（如普通文本渲染、图片查看）不触发。  \n\nTriggers when the user explicitly asks to preview a Markdown file, e.g. \"预览这个 markdown 文件\" / \"打开 markdown 预览\" / \"markdown 预览一下\". Not for generic text rendering or image viewing.\n\n## 执行入口\n\n**前提检查：**\n- 确认目标文件路径存在且为 `.md` 文件\n- 确认 `scripts/preview_server.py` 存在且可用（路径相对于技能目录）\n\n**执行（两步，替换 `<MD_FILE_PATH>` 后运行）：**\n\n**第 1 步 —— 以「托管后台任务」方式启动服务（关键：必须是脱离命令进程树的独立任务，绝不能用命令内 `&` 把服务挂到返回命令的进程树下，否则命令一返回、进程树被清理，服务就跟着死）：**\n\n```bash\npkill -f preview_server.py 2>/dev/null; rm -f /tmp/claw-markdown-preview.pid\n# 注意：上面这行会终止本技能此前运行的所有预览服务实例（若你已在别处开着预览，会被一并关闭）。\n# 这是当前单实例清理逻辑；多实例共存为待办项，启用后改为只终止自身实例。\npython3 scripts/preview_server.py --file \"<MD_FILE_PATH>\" --no-open --heartbeat-timeout 30 > /tmp/claw-md-preview.log 2>&1\n```\n\n> 用 Bash 工具的后台 / 托管任务模式运行上面整条命令，让服务常驻、不随某条命令返回而结束。若运行环境没有托管任务机制，退而用 `setsid python3 … &` 把服务拆到独立会话，效果等同。\n\n**第 2 步 —— 探测端口并打开浏览器（普通命令即可）：**\n\n```bash\n# 就绪轮询：服务绑定端口后即可响应，不必固定等待 2 秒（跨平台通用，不依赖任何运行时专属能力）\nPORT=8765\nfor i in $(seq 1 20); do\n  if curl -s -o /dev/null -w '%{http_code}' --max-time 1 \"http://127.0.0.1:$PORT/\" | grep -q 200; then\n    break\n  fi\n  sleep 0.1\ndone\n# 若默认端口仍未就绪（如端口冲突），从日志提取实际端口\nif ! curl -s -o /dev/null -w '%{http_code}' --max-time 1 \"http://127.0.0.1:$PORT/\" | grep -q 200; then\n  PORT=$(grep -oE '127\\.0\\.0\\.1:[0-9]+' /tmp/claw-md-preview.log | head -1 | sed 's/.*://')\nfi\nlsof -iTCP:$PORT -sTCP:LISTEN -t | head -1 > /tmp/claw-markdown-preview.pid\nopen \"http://127.0.0.1:$PORT\"\n```\n\n**说明：**\n- 第 1 步把服务跑成托管后台任务（常驻、脱离启动命令的进程树），第 2 步再探测端口并打开浏览器。两步拆分是为了让服务不被启动命令的进程树回收而误杀。\n- 服务启动后：`curl` 快速探测默认端口 8765 → 被占用时从日志精确提取端口 → 记录 PID → 打开浏览器。\n- 首次运行用默认端口 8765，`curl` 直通不进正则分支；仅端口冲突时才走日志提取降级路径。\n- 心跳 30 秒纯为兜底——页面关闭后最多等待 30 秒自停，正常预览流程碰不到超时。\n\n> **不要用 `present_files`**，内置浏览器窗口太挤，用系统命令 `open` 打开外部浏览器。\n\n## 可选参数\n\n| 参数 | 说明 |\n|------|------|\n| `--file <路径>` | 预览指定 markdown 文件 |\n| `--port <端口>` | 指定端口，默认 `8765` |\n| `--stdin` | 从标准输入读取 markdown 内容 |\n| `--no-open` | 不自动打开系统浏览器（后台/Agent 场景必加） |\n| `--verbose` | 输出访问日志，便于调试 |\n| `--heartbeat-timeout <秒>` | 心跳超时秒数，页面关闭后超时自动停止服务（默认 `10`，Agent 场景建议 `30`） |\n\n如果没有指定 `--file` 或 `--stdin`，服务启动后页面显示空编辑器，用户可自行粘贴 markdown。\n\n## 功能说明\n\n1. **编辑模式**：CodeMirror 编辑器，编辑 Markdown 原文\n2. **预览模式**：渲染后的富文本预览，支持主题切换\n3. **双栏模式**：编辑器和预览左右并排，支持滚动同步\n4. **手机预览**：以手机宽度（500px）居中渲染预览\n\n## 主题\n\n22 种预览主题 + 9 种代码高亮主题，可在页面顶部下拉选择。\n\n## 富文本复制\n\n点击预览区的复制按钮，将当前主题样式内联后的 HTML 写入剪贴板，可直接粘贴到公众号编辑器等平台。复制时会 `fetch` 本地预览服务（仅监听 `127.0.0.1`）的图片并内联为 base64，不访问任何其它外部地址，公众号粘贴后自动识别本地图片。\n\n## 粘贴图片\n\n在编辑模式或双栏模式下，可直接粘贴剪贴板中的图片（Ctrl+V / Cmd+V）。预览页会拦截默认粘贴动作，将图片经由本地预览服务（仅监听 `127.0.0.1`）的 `/api/image` 端点写入本地磁盘、保存到被预览 Markdown 同目录的 `images/` 文件夹，并插入本地引用 `![](images/img-xxx.png)`。整个过程不出本机、不经任何外部服务器。\n\n- 单张图片大小限制 5MB\n- 图片以文件形式存储，跟随 md 文件，换浏览器/电脑不丢失\n\n## 注意事项\n\n- 预览服务运行在 `assets/` 子目录上，文件由 `preview_server.py` 自动定位\n- 端口默认 8765，被占用时自动递增寻找空闲端口（+20 以内）\n- **热更新**：使用 `--file` 模式时，页面每 3 秒轮询文件内容变化，在 Agent 中修改文件后页面自动刷新（弹出\"外部内容已更新\"提示）\n- **心跳自停**：页面每 5 秒发送心跳，关闭页面后服务自动停止（正常关闭立即停止，异常退出最多等待 `--heartbeat-timeout` 秒后停止）\n- **⚠️ 编辑即自动保存并覆盖原文件**：在编辑器中修改后停顿约 5 秒，内容会自动经 `/api/save` 写回被预览的 md 文件并覆盖原内容（无备份）；也可点\"保存\"按钮手动保存。关闭预览页面**不会**自动保存，如有未保存改动会提示确认离开，离开则未保存内容丢弃。\n- `--stdin` 模式不支持热更新和粘贴图片（内容固定）\n- 服务终止方式：`kill $(cat /tmp/claw-markdown-preview.pid)`\n\n## 后台运行说明\n\n执行入口第 1 步以「托管后台任务」方式常驻服务（脱离启动命令的进程树，命令返回也不会被回收）；第 2 步负责端口探测（curl）/ PID 获取（lsof）/ 残留清理（pkill）。若需手动启动，参考上述命令结构，务必使用 `python3`（与 frontmatter `requires: python3` 一致）而非绝对路径；切勿用命令内 `&` 把服务挂到返回命令的进程树下的写法，否则服务会被进程树清理杀掉。\n\nFile v1.4.9:README.md\n\n# claw-markdown-preview\n\n> 一个 **Agent 技能（Skill）**：在 AI 对话里即时预览 Markdown，让 AI 生成的文档立刻「看得见」。\n\n## 这是什么\n\n`claw-markdown-preview` 是一个可被 AI 助手（Agent）在对话中**直接调用**的技能。当你让 Agent 生成 Markdown 文档后，只需说一句\"预览这个 md\"\"看看渲染效果\"，它就会在浏览器里把文档渲染成精美网页——支持 22 种主题、4 种视图，不切应用、不手动开文件。\n\n## 支持的 Agent 平台\n\n- WorkBuddy\n- QClaw\n- OpenClaw\n- Hermes\n- 任何能提供「执行 `python3` 命令 + 访问 localhost 浏览器预览」能力的 Agent\n\n## 四大能力\n\n1. **即时预览**：AI 写完文档当场看排版、代码高亮、表格效果。\n2. **公众号排版**：22 种主题 + 4 种视图（编辑 / 预览 / 双栏 / 手机）随意切换，排版效果所见即所得，告别手动调格式。\n3. **富文本复制（含图片）**：一键拷贝带样式正文，图片自动 base64 内联，直粘公众号 / 知乎后台，零二次排版。\n4. **实时编辑 + 图片粘贴**：双栏边写边看，编辑器内 `Ctrl+V` 即贴本地图片，自动内联进文档，无需手动存图传图。\n\n## 安装\n\n将本仓库克隆 / 下载到你的 Agent 技能目录即可（如 WorkBuddy 的 `~/.workbuddy/skills/`），或直接从 SkillHub / ClawHub 安装。\n\n```bash\ngit clone https://github.com/webkixi/claw-markdown-preview-skill.git\n```\n\n## 用法\n\n在 Agent 对话中：\n\n- \"预览这个 md\" → 启动本地预览服务并在浏览器打开\n- \"看看渲染效果\" → 同上\n- \"打开预览\" → 同上\n\n技能会自动完成：清理残留进程 → 后台启动预览服务（默认端口 `8765`）→ 用系统浏览器打开预览页。\n\n## 技术说明\n\n- 预览服务 `scripts/preview_server.py` 仅依赖 Python 标准库，跨平台（macOS / Linux / Windows）。\n- 前端 `assets/` 为纯静态资源，提供 22 种预览主题 + 9 种代码高亮主题。\n- 所有文件均为本地处理，不上传任何内容。\n\n## 许可\n\nMIT\n\nFile v1.4.9:_meta.json\n\n{\n  \"ownerId\": \"kn71ktazf25p4qq9q4m4ekwghx880qkj\",\n  \"slug\": \"claw-markdown-preview\",\n  \"version\": \"1.4.9\",\n  \"publishedAt\": 1783786676006\n}\n\nFile v1.4.9:skill-card.md\n\n## Description: <br>\nClaw Markdown Preview lets an agent open a local browser preview and editor for Markdown files with theme switching, live editing, rich-text copy, and image paste support. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[webkixi](https://clawhub.ai/user/webkixi) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers, writers, and agent users use this skill to preview, edit, and copy Markdown content through a local browser interface after an agent creates or modifies a Markdown file. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The local editor can overwrite the Markdown file being previewed. <br>\nMitigation: Preview trusted files, keep a backup or version control copy for important documents, and review edits before saving. <br>\nRisk: Untrusted Markdown with embedded HTML may render unexpected content in the local browser preview. <br>\nMitigation: Avoid previewing untrusted Markdown with embedded HTML, or review and remove active or unfamiliar HTML before opening it. <br>\nRisk: Some optional themes reference decorative images from an external domain. <br>\nMitigation: Use local-only themes or restrict network access when external decorative assets are not acceptable. <br>\n\n\n## Reference(s): <br>\n- [ClawHub Skill Page](https://clawhub.ai/webkixi/skills/claw-markdown-preview) <br>\n- [clawMarkDown Homepage](https://webkixi.github.io/clawmarkdown-home/) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Shell commands, Markdown, Files, Guidance] <br>\n**Output Format:** [Markdown content rendered as a local browser HTML preview, with shell commands for launching the preview server] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Editing can save changes back to the opened Markdown file and pasted images to a local images folder.] <br>\n\n## Skill Version(s): <br>\n1.4.9 (source: frontmatter and release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.4.8: 54 files, 1395682 bytes\n\nFiles: assets/code-themes/atom-one-dark.css (1372b), assets/code-themes/dracula.css (1062b), assets/code-themes/github-dark.css (1719b), assets/code-themes/github-light.css (1298b), assets/code-themes/github.css (1301b), assets/code-themes/monokai.css (1213b), assets/code-themes/vs2015.css (1831b), assets/code-themes/vscode-light.css (1238b), assets/code-themes/xcode.css (1238b), assets/index.html (20959b), assets/lib/codemirror.bundle.min.js (498838b), assets/lib/converter.js (26450b), assets/lib/highlight.min.js (121727b), assets/lib/markdown-it-deflist.js (7014b), assets/lib/markdown-it-imageflow.js (1771b), assets/lib/markdown-it-implicit-figures.js (4238b), assets/lib/markdown-it-li.js (550b), assets/lib/markdown-it-linkfoot.js (8114b), assets/lib/markdown-it-math.js (4050b), assets/lib/markdown-it-ruby.js (3375b), assets/lib/markdown-it-span.js (1560b), assets/lib/markdown-it-table-container.js (1084b), assets/lib/markdown-it-urlspan.js (781b), assets/lib/markdown-it.min.js (123618b), assets/lib/mermaid.min.js (3565102b), assets/preview.css (11613b), assets/styles/blue-ying.css (11775b), assets/styles/cute-green.css (13509b), assets/styles/cyan-green.css (12315b), assets/styles/docsify.css (4025b), assets/styles/frontend-top.css (13558b), assets/styles/fullstack-blue.css (16361b), assets/styles/geek-black.css (13741b), assets/styles/github-dark.css (3661b), assets/styles/github.css (3726b), assets/styles/green.css (12399b), assets/styles/grid-black.css (14022b), assets/styles/lan-qing.css (12681b), assets/styles/minimalist-black.css (14770b), assets/styles/mountain-blush.css (12443b), assets/styles/notion.css (3665b), assets/styles/orange-blue.css (13442b), assets/styles/orange-heart.css (12046b), assets/styles/purple-red.css (12436b), assets/styles/red-fresh.css (14804b), assets/styles/rose-purple.css (14454b), assets/styles/star-blood.css (5810b), assets/styles/star-planet.css (7462b), assets/styles/star-pure.css (5575b), README.md (2089b), scripts/preview_server.py (13674b), skill-card.md (2445b), SKILL.md (7013b), _meta.json (140b)\n\nFile v1.4.8:SKILL.md\n\n---\nname: claw-markdown-preview\ndescription: Markdown 本地预览技能。用户明确请求\"预览这个 markdown 文件\"或\"打开 markdown 预览\"时触发。\nversion: 1.4.8\nmetadata:\n  openclaw:\n    emoji: \"📄\"\n    os: [\"darwin\", \"linux\", \"win32\"]\n    requires:\n      bins: [\"python3\"]\n    install: []\n    permissions:\n      - filesystem:read\n      - filesystem:write\n      - network:localhost\n      - process:spawn\n---\n\n# Markdown 编辑、多风格预览\n\n通过浏览器编辑、预览AI生成的 Markdown 内容、用户本地 MarkDown 文件。支持多主题风格切换、实时编辑、富文本复制（可粘贴到公众号/知乎）、图片粘贴\n\n## 触发方式\n\n当用户明确请求\"预览这个 markdown 文件\"\"打开 markdown 预览\"\"markdown 预览一下\"时触发。非 Markdown 预览请求（如普通文本渲染、图片查看）不触发。\n\n## 执行入口\n\n**前提检查：**\n- 确认目标文件路径存在且为 `.md` 文件\n- 确认 `scripts/preview_server.py` 存在且可用（路径相对于技能目录）\n\n**执行（两步，替换 `<MD_FILE_PATH>` 后运行）：**\n\n**第 1 步 —— 以「托管后台任务」方式启动服务（关键：必须是脱离命令进程树的独立任务，绝不能用命令内 `&` 把服务挂到返回命令的进程树下，否则命令一返回、进程树被清理，服务就跟着死）：**\n\n```bash\npkill -f preview_server.py 2>/dev/null; rm -f /tmp/claw-markdown-preview.pid\n# 注意：上面这行会终止本技能此前运行的所有预览服务实例（若你已在别处开着预览，会被一并关闭）。\n# 这是当前单实例清理逻辑；多实例共存为待办项，启用后改为只终止自身实例。\npython3 scripts/preview_server.py --file \"<MD_FILE_PATH>\" --no-open --heartbeat-timeout 30 > /tmp/claw-md-preview.log 2>&1\n```\n\n> 用 Bash 工具的后台 / 托管任务模式运行上面整条命令，让服务常驻、不随某条命令返回而结束。若运行环境没有托管任务机制，退而用 `setsid python3 … &` 把服务拆到独立会话，效果等同。\n\n**第 2 步 —— 探测端口并打开浏览器（普通命令即可）：**\n\n```bash\n# 就绪轮询：服务绑定端口后即可响应，不必固定等待 2 秒（跨平台通用，不依赖任何运行时专属能力）\nPORT=8765\nfor i in $(seq 1 20); do\n  if curl -s -o /dev/null -w '%{http_code}' --max-time 1 \"http://127.0.0.1:$PORT/\" | grep -q 200; then\n    break\n  fi\n  sleep 0.1\ndone\n# 若默认端口仍未就绪（如端口冲突），从日志提取实际端口\nif ! curl -s -o /dev/null -w '%{http_code}' --max-time 1 \"http://127.0.0.1:$PORT/\" | grep -q 200; then\n  PORT=$(grep -oE '127\\.0\\.0\\.1:[0-9]+' /tmp/claw-md-preview.log | head -1 | sed 's/.*://')\nfi\nlsof -iTCP:$PORT -sTCP:LISTEN -t | head -1 > /tmp/claw-markdown-preview.pid\nopen \"http://127.0.0.1:$PORT\"\n```\n\n**说明：**\n- 第 1 步把服务跑成托管后台任务（常驻、脱离启动命令的进程树），第 2 步再探测端口并打开浏览器。两步拆分是为了让服务不被启动命令的进程树回收而误杀。\n- 服务启动后：`curl` 快速探测默认端口 8765 → 被占用时从日志精确提取端口 → 记录 PID → 打开浏览器。\n- 首次运行用默认端口 8765，`curl` 直通不进正则分支；仅端口冲突时才走日志提取降级路径。\n- 心跳 30 秒纯为兜底——页面关闭后最多等待 30 秒自停，正常预览流程碰不到超时。\n\n> **不要用 `present_files`**，内置浏览器窗口太挤，用系统命令 `open` 打开外部浏览器。\n\n## 可选参数\n\n| 参数 | 说明 |\n|------|------|\n| `--file <路径>` | 预览指定 markdown 文件 |\n| `--port <端口>` | 指定端口，默认 `8765` |\n| `--stdin` | 从标准输入读取 markdown 内容 |\n| `--no-open` | 不自动打开系统浏览器（后台/Agent 场景必加） |\n| `--verbose` | 输出访问日志，便于调试 |\n| `--heartbeat-timeout <秒>` | 心跳超时秒数，页面关闭后超时自动停止服务（默认 `10`，Agent 场景建议 `30`） |\n\n如果没有指定 `--file` 或 `--stdin`，服务启动后页面显示空编辑器，用户可自行粘贴 markdown。\n\n## 功能说明\n\n1. **编辑模式**：CodeMirror 编辑器，编辑 Markdown 原文\n2. **预览模式**：渲染后的富文本预览，支持主题切换\n3. **双栏模式**：编辑器和预览左右并排，支持滚动同步\n4. **手机预览**：以手机宽度（500px）居中渲染预览\n\n## 主题\n\n22 种预览主题 + 9 种代码高亮主题，可在页面顶部下拉选择。\n\n## 富文本复制\n\n点击预览区的复制按钮，将当前主题样式内联后的 HTML 写入剪贴板，可直接粘贴到公众号编辑器等平台。复制时会 `fetch` 本地预览服务（仅监听 `127.0.0.1`）的图片并内联为 base64，不访问任何其它外部地址，公众号粘贴后自动识别本地图片。\n\n## 粘贴图片\n\n在编辑模式或双栏模式下，可直接粘贴剪贴板中的图片（Ctrl+V / Cmd+V）。预览页会拦截默认粘贴动作，将图片经由本地预览服务（仅监听 `127.0.0.1`）的 `/api/image` 端点写入本地磁盘、保存到被预览 Markdown 同目录的 `images/` 文件夹，并插入本地引用 `![](images/img-xxx.png)`。整个过程不出本机、不经任何外部服务器。\n\n- 单张图片大小限制 5MB\n- 图片以文件形式存储，跟随 md 文件，换浏览器/电脑不丢失\n\n## 注意事项\n\n- 预览服务运行在 `assets/` 子目录上，文件由 `preview_server.py` 自动定位\n- 端口默认 8765，被占用时自动递增寻找空闲端口（+20 以内）\n- **热更新**：使用 `--file` 模式时，页面每 3 秒轮询文件内容变化，在 Agent 中修改文件后页面自动刷新（弹出\"外部内容已更新\"提示）\n- **心跳自停**：页面每 5 秒发送心跳，关闭页面后服务自动停止（正常关闭立即停止，异常退出最多等待 `--heartbeat-timeout` 秒后停止）\n- **⚠️ 编辑即自动保存并覆盖原文件**：在编辑器中修改后停顿约 5 秒，内容会自动经 `/api/save` 写回被预览的 md 文件并覆盖原内容（无备份）；也可点\"保存\"按钮手动保存。关闭预览页面**不会**自动保存，如有未保存改动会提示确认离开，离开则未保存内容丢弃。\n- `--stdin` 模式不支持热更新和粘贴图片（内容固定）\n- 服务终止方式：`kill $(cat /tmp/claw-markdown-preview.pid)`\n\n## 后台运行说明\n\n执行入口第 1 步以「托管后台任务」方式常驻服务（脱离启动命令的进程树，命令返回也不会被回收）；第 2 步负责端口探测（curl）/ PID 获取（lsof）/ 残留清理（pkill）。若需手动启动，参考上述命令结构，务必使用 `python3`（与 frontmatter `requires: python3` 一致）而非绝对路径；切勿用命令内 `&` 把服务挂到返回命令的进程树下的写法，否则服务会被进程树清理杀掉。\n\nFile v1.4.8:README.md\n\n# claw-markdown-preview\n\n> 一个 **Agent 技能（Skill）**：在 AI 对话里即时预览 Markdown，让 AI 生成的文档立刻「看得见」。\n\n## 这是什么\n\n`claw-markdown-preview` 是一个可被 AI 助手（Agent）在对话中**直接调用**的技能。当你让 Agent 生成 Markdown 文档后，只需说一句\"预览这个 md\"\"看看渲染效果\"，它就会在浏览器里把文档渲染成精美网页——支持 22 种主题、4 种视图，不切应用、不手动开文件。\n\n## 支持的 Agent 平台\n\n- WorkBuddy\n- QClaw\n- OpenClaw\n- Hermes\n- 任何能提供「执行 `python3` 命令 + 访问 localhost 浏览器预览」能力的 Agent\n\n## 四大能力\n\n1. **即时预览**：AI 写完文档当场看排版、代码高亮、表格效果。\n2. **公众号排版**：22 种主题 + 4 种视图（编辑 / 预览 / 双栏 / 手机）随意切换，排版效果所见即所得，告别手动调格式。\n3. **富文本复制（含图片）**：一键拷贝带样式正文，图片自动 base64 内联，直粘公众号 / 知乎后台，零二次排版。\n4. **实时编辑 + 图片粘贴**：双栏边写边看，编辑器内 `Ctrl+V` 即贴本地图片，自动内联进文档，无需手动存图传图。\n\n## 安装\n\n将本仓库克隆 / 下载到你的 Agent 技能目录即可（如 WorkBuddy 的 `~/.workbuddy/skills/`），或直接从 SkillHub / ClawHub 安装。\n\n```bash\ngit clone https://github.com/webkixi/claw-markdown-preview-skill.git\n```\n\n## 用法\n\n在 Agent 对话中：\n\n- \"预览这个 md\" → 启动本地预览服务并在浏览器打开\n- \"看看渲染效果\" → 同上\n- \"打开预览\" → 同上\n\n技能会自动完成：清理残留进程 → 后台启动预览服务（默认端口 `8765`）→ 用系统浏览器打开预览页。\n\n## 技术说明\n\n- 预览服务 `scripts/preview_server.py` 仅依赖 Python 标准库，跨平台（macOS / Linux / Windows）。\n- 前端 `assets/` 为纯静态资源，提供 22 种预览主题 + 9 种代码高亮主题。\n- 所有文件均为本地处理，不上传任何内容。\n\n## 许可\n\nMIT\n\nFile v1.4.8:_meta.json\n\n{\n  \"ownerId\": \"kn71ktazf25p4qq9q4m4ekwghx880qkj\",\n  \"slug\": \"claw-markdown-preview\",\n  \"version\": \"1.4.8\",\n  \"publishedAt\": 1783594463280\n}\n\nFile v1.4.8:skill-card.md\n\n## Description: <br>\nProvides a local browser preview and editor for Markdown files when the user explicitly asks to preview Markdown. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[webkixi](https://clawhub.ai/user/webkixi) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and agent users use this skill to open a local Markdown preview workflow, inspect rendered formatting, edit content, copy styled rich text, and paste local images into the document. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The preview editor can autosave changes and overwrite the Markdown file being previewed. <br>\nMitigation: Use the skill only on files intended for editing, keep normal backups or version control for important documents, and review changes before relying on the saved file. <br>\nRisk: The skill starts a local process and grants localhost plus filesystem read/write access for the preview workflow. <br>\nMitigation: Grant only the permissions needed for the target Markdown file, verify the file path before launch, and stop the preview server when finished. <br>\nRisk: Security evidence notes a prompt-injection indicator without artifact-backed unsafe behavior. <br>\nMitigation: Review visible instructions before use and do not treat encoded or embedded content in Markdown as agent instructions. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/webkixi/skills/claw-markdown-preview) <br>\n- [README](artifact/README.md) <br>\n- [Skill instructions](artifact/SKILL.md) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [shell commands, markdown, code, files, guidance] <br>\n**Output Format:** [Markdown guidance with bash commands and a localhost browser preview] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Starts a local Python HTTP server on localhost, renders Markdown in the browser, and may write edits or pasted images beside the previewed Markdown file.] <br>\n\n## Skill Version(s): <br>\n1.4.8 (source: frontmatter and server release evidence, released 2026-07-09T10:54:23Z) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.4.7: 54 files, 1395478 bytes\n\nFiles: assets/code-themes/atom-one-dark.css (1372b), assets/code-themes/dracula.css (1062b), assets/code-themes/github-dark.css (1719b), assets/code-themes/github-light.css (1298b), assets/code-themes/github.css (1301b), assets/code-themes/monokai.css (1213b), assets/code-themes/vs2015.css (1831b), assets/code-themes/vscode-light.css (1238b), assets/code-themes/xcode.css (1238b), assets/index.html (20959b), assets/lib/codemirror.bundle.min.js (498838b), assets/lib/converter.js (26450b), assets/lib/highlight.min.js (121727b), assets/lib/markdown-it-deflist.js (7014b), assets/lib/markdown-it-imageflow.js (1771b), assets/lib/markdown-it-implicit-figures.js (4238b), assets/lib/markdown-it-li.js (550b), assets/lib/markdown-it-linkfoot.js (8114b), assets/lib/markdown-it-math.js (4050b), assets/lib/markdown-it-ruby.js (3375b), assets/lib/markdown-it-span.js (1560b), assets/lib/markdown-it-table-container.js (1084b), assets/lib/markdown-it-urlspan.js (781b), assets/lib/markdown-it.min.js (123618b), assets/lib/mermaid.min.js (3565102b), assets/preview.css (11613b), assets/styles/blue-ying.css (11775b), assets/styles/cute-green.css (13509b), assets/styles/cyan-green.css (12315b), assets/styles/docsify.css (4025b), assets/styles/frontend-top.css (13558b), assets/styles/fullstack-blue.css (16361b), assets/styles/geek-black.css (13741b), assets/styles/github-dark.css (3661b), assets/styles/github.css (3726b), assets/styles/green.css (12399b), assets/styles/grid-black.css (14022b), assets/styles/lan-qing.css (12681b), assets/styles/minimalist-black.css (14770b), assets/styles/mountain-blush.css (12443b), assets/styles/notion.css (3665b), assets/styles/orange-blue.css (13442b), assets/styles/orange-heart.css (12046b), assets/styles/purple-red.css (12436b), assets/styles/red-fresh.css (14804b), assets/styles/rose-purple.css (14454b), assets/styles/star-blood.css (5810b), assets/styles/star-planet.css (7462b), assets/styles/star-pure.css (5575b), README.md (2089b), scripts/preview_server.py (13674b), skill-card.md (2354b), SKILL.md (6644b), _meta.json (140b)\n\nFile v1.4.7:SKILL.md\n\n---\nname: claw-markdown-preview\ndescription: Markdown 本地预览技能。用户明确请求\"预览这个 markdown 文件\"或\"打开 markdown 预览\"时触发。\nversion: 1.4.7\nmetadata:\n  openclaw:\n    emoji: \"📄\"\n    os: [\"darwin\", \"linux\", \"win32\"]\n    requires:\n      bins: [\"python3\"]\n    install: []\n    permissions:\n      - filesystem:read\n      - filesystem:write\n      - network:localhost\n      - process:spawn\n---\n\n# Markdown 编辑、多风格预览\n\n通过浏览器编辑、预览AI生成的 Markdown 内容、用户本地 MarkDown 文件。支持多主题风格切换、实时编辑、富文本复制（可粘贴到公众号/知乎）、图片粘贴\n\n## 触发方式\n\n当用户明确请求\"预览这个 markdown 文件\"\"打开 markdown 预览\"\"markdown 预览一下\"时触发。非 Markdown 预览请求（如普通文本渲染、图片查看）不触发。\n\n## 执行入口\n\n**前提检查：**\n- 确认目标文件路径存在且为 `.md` 文件\n- 确认 `scripts/preview_server.py` 存在且可用（路径相对于技能目录）\n\n**执行（两步，替换 `<MD_FILE_PATH>` 后运行）：**\n\n**第 1 步 —— 以「托管后台任务」方式启动服务（关键：必须是脱离命令进程树的独立任务，绝不能用命令内 `&` 把服务挂到返回命令的进程树下，否则命令一返回、进程树被清理，服务就跟着死）：**\n\n```bash\npkill -f preview_server.py 2>/dev/null; rm -f /tmp/claw-markdown-preview.pid\n# 注意：上面这行会终止本技能此前运行的所有预览服务实例（若你已在别处开着预览，会被一并关闭）。\n# 这是当前单实例清理逻辑；多实例共存为待办项，启用后改为只终止自身实例。\npython3 scripts/preview_server.py --file \"<MD_FILE_PATH>\" --no-open --heartbeat-timeout 30 > /tmp/claw-md-preview.log 2>&1\n```\n\n> 用 Bash 工具的后台 / 托管任务模式运行上面整条命令，让服务常驻、不随某条命令返回而结束。若运行环境没有托管任务机制，退而用 `setsid python3 … &` 把服务拆到独立会话，效果等同。\n\n**第 2 步 —— 探测端口并打开浏览器（普通命令即可）：**\n\n```bash\nsleep 2\nif curl -s -o /dev/null -w '%{http_code}' --max-time 2 http://127.0.0.1:8765/ | grep -q 200; then\n  PORT=8765\nelse\n  PORT=$(grep -oE '127\\.0\\.0\\.1:[0-9]+' /tmp/claw-md-preview.log | head -1 | sed 's/.*://')\nfi\nlsof -iTCP:$PORT -sTCP:LISTEN -t | head -1 > /tmp/claw-markdown-preview.pid\nopen \"http://127.0.0.1:$PORT\"\n```\n\n**说明：**\n- 第 1 步把服务跑成托管后台任务（常驻、脱离启动命令的进程树），第 2 步再探测端口并打开浏览器。两步拆分是为了让服务不被启动命令的进程树回收而误杀。\n- 服务启动后：`curl` 快速探测默认端口 8765 → 被占用时从日志精确提取端口 → 记录 PID → 打开浏览器。\n- 首次运行用默认端口 8765，`curl` 直通不进正则分支；仅端口冲突时才走日志提取降级路径。\n- 心跳 30 秒纯为兜底——页面关闭后最多等待 30 秒自停，正常预览流程碰不到超时。\n\n> **不要用 `present_files`**，内置浏览器窗口太挤，用系统命令 `open` 打开外部浏览器。\n\n## 可选参数\n\n| 参数 | 说明 |\n|------|------|\n| `--file <路径>` | 预览指定 markdown 文件 |\n| `--port <端口>` | 指定端口，默认 `8765` |\n| `--stdin` | 从标准输入读取 markdown 内容 |\n| `--no-open` | 不自动打开系统浏览器（后台/Agent 场景必加） |\n| `--verbose` | 输出访问日志，便于调试 |\n| `--heartbeat-timeout <秒>` | 心跳超时秒数，页面关闭后超时自动停止服务（默认 `10`，Agent 场景建议 `30`） |\n\n如果没有指定 `--file` 或 `--stdin`，服务启动后页面显示空编辑器，用户可自行粘贴 markdown。\n\n## 功能说明\n\n1. **编辑模式**：CodeMirror 编辑器，编辑 Markdown 原文\n2. **预览模式**：渲染后的富文本预览，支持主题切换\n3. **双栏模式**：编辑器和预览左右并排，支持滚动同步\n4. **手机预览**：以手机宽度（500px）居中渲染预览\n\n## 主题\n\n22 种预览主题 + 9 种代码高亮主题，可在页面顶部下拉选择。\n\n## 富文本复制\n\n点击预览区的复制按钮，将当前主题样式内联后的 HTML 写入剪贴板，可直接粘贴到公众号编辑器等平台。复制时会 `fetch` 本地预览服务（仅监听 `127.0.0.1`）的图片并内联为 base64，不访问任何其它外部地址，公众号粘贴后自动识别本地图片。\n\n## 粘贴图片\n\n在编辑模式或双栏模式下，可直接粘贴剪贴板中的图片（Ctrl+V / Cmd+V）。预览页会拦截默认粘贴动作，将图片经由本地预览服务（仅监听 `127.0.0.1`）的 `/api/image` 端点写入本地磁盘、保存到被预览 Markdown 同目录的 `images/` 文件夹，并插入本地引用 `![](images/img-xxx.png)`。整个过程不出本机、不经任何外部服务器。\n\n- 单张图片大小限制 5MB\n- 图片以文件形式存储，跟随 md 文件，换浏览器/电脑不丢失\n\n## 注意事项\n\n- 预览服务运行在 `assets/` 子目录上，文件由 `preview_server.py` 自动定位\n- 端口默认 8765，被占用时自动递增寻找空闲端口（+20 以内）\n- **热更新**：使用 `--file` 模式时，页面每 3 秒轮询文件内容变化，在 Agent 中修改文件后页面自动刷新（弹出\"外部内容已更新\"提示）\n- **心跳自停**：页面每 5 秒发送心跳，关闭页面后服务自动停止（正常关闭立即停止，异常退出最多等待 `--heartbeat-timeout` 秒后停止）\n- **⚠️ 编辑即自动保存并覆盖原文件**：在编辑器中修改后停顿约 5 秒，内容会自动经 `/api/save` 写回被预览的 md 文件并覆盖原内容（无备份）；也可点\"保存\"按钮手动保存。关闭预览页面**不会**自动保存，如有未保存改动会提示确认离开，离开则未保存内容丢弃。\n- `--stdin` 模式不支持热更新和粘贴图片（内容固定）\n- 服务终止方式：`kill $(cat /tmp/claw-markdown-preview.pid)`\n\n## 后台运行说明\n\n执行入口第 1 步以「托管后台任务」方式常驻服务（脱离启动命令的进程树，命令返回也不会被回收）；第 2 步负责端口探测（curl）/ PID 获取（lsof）/ 残留清理（pkill）。若需手动启动，参考上述命令结构，务必使用 `python3`（与 frontmatter `requires: python3` 一致）而非绝对路径；切勿用命令内 `&` 把服务挂到返回命令的进程树下的写法，否则服务会被进程树清理杀掉。\n\nFile v1.4.7:README.md\n\n# claw-markdown-preview\n\n> 一个 **Agent 技能（Skill）**：在 AI 对话里即时预览 Markdown，让 AI 生成的文档立刻「看得见」。\n\n## 这是什么\n\n`claw-markdown-preview` 是一个可被 AI 助手（Agent）在对话中**直接调用**的技能。当你让 Agent 生成 Markdown 文档后，只需说一句\"预览这个 md\"\"看看渲染效果\"，它就会在浏览器里把文档渲染成精美网页——支持 22 种主题、4 种视图，不切应用、不手动开文件。\n\n## 支持的 Agent 平台\n\n- WorkBuddy\n- QClaw\n- OpenClaw\n- Hermes\n- 任何能提供「执行 `python3` 命令 + 访问 localhost 浏览器预览」能力的 Agent\n\n## 四大能力\n\n1. **即时预览**：AI 写完文档当场看排版、代码高亮、表格效果。\n2. **公众号排版**：22 种主题 + 4 种视图（编辑 / 预览 / 双栏 / 手机）随意切换，排版效果所见即所得，告别手动调格式。\n3. **富文本复制（含图片）**：一键拷贝带样式正文，图片自动 base64 内联，直粘公众号 / 知乎后台，零二次排版。\n4. **实时编辑 + 图片粘贴**：双栏边写边看，编辑器内 `Ctrl+V` 即贴本地图片，自动内联进文档，无需手动存图传图。\n\n## 安装\n\n将本仓库克隆 / 下载到你的 Agent 技能目录即可（如 WorkBuddy 的 `~/.workbuddy/skills/`），或直接从 SkillHub / ClawHub 安装。\n\n```bash\ngit clone https://github.com/webkixi/claw-markdown-preview-skill.git\n```\n\n## 用法\n\n在 Agent 对话中：\n\n- \"预览这个 md\" → 启动本地预览服务并在浏览器打开\n- \"看看渲染效果\" → 同上\n- \"打开预览\" → 同上\n\n技能会自动完成：清理残留进程 → 后台启动预览服务（默认端口 `8765`）→ 用系统浏览器打开预览页。\n\n## 技术说明\n\n- 预览服务 `scripts/preview_server.py` 仅依赖 Python 标准库，跨平台（macOS / Linux / Windows）。\n- 前端 `assets/` 为纯静态资源，提供 22 种预览主题 + 9 种代码高亮主题。\n- 所有文件均为本地处理，不上传任何内容。\n\n## 许可\n\nMIT\n\nFile v1.4.7:_meta.json\n\n{\n  \"ownerId\": \"kn71ktazf25p4qq9q4m4ekwghx880qkj\",\n  \"slug\": \"claw-markdown-preview\",\n  \"version\": \"1.4.7\",\n  \"publishedAt\": 1783589357553\n}\n\nFile v1.4.7:skill-card.md\n\n## Description: <br>\nProvides a local browser preview and editor for Markdown files, with themes, synchronized editing, rich-text copy, Mermaid diagrams, and pasted-image support. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[webkixi](https://clawhub.ai/user/webkixi) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers, writers, and agent users can use this skill to inspect and edit generated or local Markdown in a browser before sharing or publishing it. It is especially useful for checking formatting, code highlighting, tables, diagrams, mobile layout, and rich-text copy output. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Preview editing can overwrite the target Markdown file when changes are saved. <br>\nMitigation: Use the skill on files where local edits are intended, keep version control or backups for important documents, and use stdin mode for non-saving previews when appropriate. <br>\nRisk: The workflow starts a local HTTP server and spawns or stops preview processes. <br>\nMitigation: Run it in a trusted local user session, keep the service bound to localhost, and stop the preview service after use. <br>\nRisk: Pasted images are written to an images directory beside the target Markdown file. <br>\nMitigation: Use workspaces where local file writes are acceptable and review generated image files before sharing the document. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/webkixi/skills/claw-markdown-preview) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [shell commands, guidance, files] <br>\n**Output Format:** [Markdown guidance with shell commands and a local browser preview workflow] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Runs a localhost preview server, can write pasted images beside the target Markdown file, and can save edits back to that file.] <br>\n\n## Skill Version(s): <br>\n1.4.7 (source: server release metadata and SKILL.md frontmatter) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.4.5: 53 files, 383794 bytes\n\nFiles: assets/code-themes/atom-one-dark.css (1372b), assets/code-themes/dracula.css (1062b), assets/code-themes/github-dark.css (1719b), assets/code-themes/github-light.css (1298b), assets/code-themes/github.css (1301b), assets/code-themes/monokai.css (1213b), assets/code-themes/vs2015.css (1831b), assets/code-themes/vscode-light.css (1238b), assets/code-themes/xcode.css (1238b), assets/index.html (20860b), assets/lib/codemirror.bundle.min.js (498838b), assets/lib/converter.js (25868b), assets/lib/highlight.min.js (121727b), assets/lib/markdown-it-deflist.js (7014b), assets/lib/markdown-it-imageflow.js (1771b), assets/lib/markdown-it-implicit-figures.js (4238b), assets/lib/markdown-it-li.js (550b), assets/lib/markdown-it-linkfoot.js (8114b), assets/lib/markdown-it-math.js (4050b), assets/lib/markdown-it-ruby.js (3375b), assets/lib/markdown-it-span.js (1560b), assets/lib/markdown-it-table-container.js (1084b), assets/lib/markdown-it-urlspan.js (781b), assets/lib/markdown-it.min.js (123618b), assets/preview.css (11613b), assets/styles/blue-ying.css (11775b), assets/styles/cute-green.css (13509b), assets/styles/cyan-green.css (12315b), assets/styles/docsify.css (4025b), assets/styles/frontend-top.css (13558b), assets/styles/fullstack-blue.css (16361b), assets/styles/geek-black.css (13741b), assets/styles/github-dark.css (3661b), assets/styles/github.css (3726b), assets/styles/green.css (12399b), assets/styles/grid-black.css (14022b), assets/styles/lan-qing.css (12681b), assets/styles/minimalist-black.css (14770b), assets/styles/mountain-blush.css (12443b), assets/styles/notion.css (3665b), assets/styles/orange-blue.css (13442b), assets/styles/orange-heart.css (12046b), assets/styles/purple-red.css (12436b), assets/styles/red-fresh.css (14804b), assets/styles/rose-purple.css (14454b), assets/styles/star-blood.css (5810b), assets/styles/star-planet.css (7462b), assets/styles/star-pure.css (5575b), README.md (2089b), scripts/preview_server.py (13674b), skill-card.md (2291b), SKILL.md (6165b), _meta.json (140b)\n\nFile v1.4.5:SKILL.md\n\n---\nname: claw-markdown-preview\ndescription: Markdown 预览——用户说出\"预览这个 md\"、\"看看渲染效果\"、\"打开预览\"、\"复制富文本到公众号\"、\"markdown 预览\"等时触发技能。\nversion: 1.4.5\nagent_created: true\nmetadata:\n  openclaw:\n    emoji: \"📄\"\n    os: [\"darwin\", \"linux\", \"win32\"]\n    requires:\n      bins: [\"python3\"]\n    install: []\n  workbuddy:\n    emoji: \"📄\"\n    os: [\"darwin\", \"linux\", \"win32\"]\n    requires:\n      bins: [\"python3\"]\n    install: []\n  qclaw:\n    emoji: \"📄\"\n    os: [\"darwin\", \"linux\", \"win32\"]\n    requires:\n      bins: [\"python3\"]\n    install: []\n  hermes:\n    emoji: \"📄\"\n    os: [\"darwin\", \"linux\", \"win32\"]\n    requires:\n      bins: [\"python3\"]\n    install: []\n---\n\n# Markdown 编辑、多风格预览\n\n通过浏览器编辑、预览AI生成的 Markdown 内容、用户本地 MarkDown 文件。支持多主题风格切换、实时编辑、富文本复制（可粘贴到公众号/知乎）、图片粘贴\n\n## 触发方式\n\n当用户说出\"预览这个 md\"\"看看渲染效果\"\"打开预览\"\"markdown 预览\"\"预览一下\"等时触发。\n\n## 执行入口\n\n**前提检查：**\n- 确认目标文件路径存在且为 `.md` 文件\n- 确认 `scripts/preview_server.py` 存在且可用（路径相对于技能目录）\n\n**执行（两步，替换 `<MD_FILE_PATH>` 后运行）：**\n\n**第 1 步 —— 以「托管后台任务」方式启动服务（关键：必须是脱离命令进程树的独立任务，绝不能用命令里 `nohup … &` 这种挂在返回命令下的写法，否则命令一返回、进程树被清理，服务就跟着死）：**\n\n```bash\npkill -f preview_server.py 2>/dev/null; rm -f /tmp/claw-markdown-preview.pid\npython3 scripts/preview_server.py --file \"<MD_FILE_PATH>\" --no-open --heartbeat-timeout 30 > /tmp/claw-md-preview.log 2>&1\n```\n\n> 用 Bash 工具的后台 / 托管任务模式运行上面整条命令，让服务常驻、不随某条命令返回而结束。若运行环境没有托管任务机制，退而用 `setsid nohup python3 … &` 把服务拆到独立会话，效果等同。\n\n**第 2 步 —— 探测端口并打开浏览器（普通命令即可）：**\n\n```bash\nsleep 2\nif curl -s -o /dev/null -w '%{http_code}' --max-time 2 http://127.0.0.1:8765/ | grep -q 200; then\n  PORT=8765\nelse\n  PORT=$(grep -oE '127\\.0\\.0\\.1:[0-9]+' /tmp/claw-md-preview.log | head -1 | sed 's/.*://')\nfi\nlsof -iTCP:$PORT -sTCP:LISTEN -t | head -1 > /tmp/claw-markdown-preview.pid\nopen \"http://127.0.0.1:$PORT\"\n```\n\n**说明：**\n- 第 1 步把服务跑成托管后台任务（常驻、脱离启动命令的进程树），第 2 步再探测端口并打开浏览器。两步拆分是为了让服务不被启动命令的进程树回收而误杀。\n- 服务启动后：`curl` 快速探测默认端口 8765 → 被占用时从日志精确提取端口 → 记录 PID → 打开浏览器。\n- 首次运行用默认端口 8765，`curl` 直通不进正则分支；仅端口冲突时才走日志提取降级路径。\n- 心跳 30 秒纯为兜底——页面关闭后最多等待 30 秒自停，正常预览流程碰不到超时。\n\n> **不要用 `present_files`**，内置浏览器窗口太挤，用系统命令 `open` 打开外部浏览器。\n\n## 可选参数\n\n| 参数 | 说明 |\n|------|------|\n| `--file <路径>` | 预览指定 markdown 文件 |\n| `--port <端口>` | 指定端口，默认 `8765` |\n| `--stdin` | 从标准输入读取 markdown 内容 |\n| `--no-open` | 不自动打开系统浏览器（后台/Agent 场景必加） |\n| `--verbose` | 输出访问日志，便于调试 |\n| `--heartbeat-timeout <秒>` | 心跳超时秒数，页面关闭后超时自动停止服务（默认 `10`，Agent 场景建议 `30`） |\n\n如果没有指定 `--file` 或 `--stdin`，服务启动后页面显示空编辑器，用户可自行粘贴 markdown。\n\n## 功能说明\n\n1. **编辑模式**：CodeMirror 编辑器，编辑 Markdown 原文\n2. **预览模式**：渲染后的富文本预览，支持主题切换\n3. **双栏模式**：编辑器和预览左右并排，支持滚动同步\n4. **手机预览**：以手机宽度（500px）居中渲染预览\n\n## 主题\n\n22 种预览主题 + 9 种代码高亮主题，可在页面顶部下拉选择。\n\n## 富文本复制\n\n点击预览区的复制按钮，将当前主题样式内联后的 HTML 写入剪贴板，可直接粘贴到公众号编辑器等平台。复制时本地图片会自动转换为 base64 内联，公众号粘贴后自动识别。\n\n## 粘贴图片\n\n在编辑模式或双栏模式下，可直接粘贴剪贴板中的图片（Ctrl+V / Cmd+V）。图片会自动保存到 md 文件同目录的 `images/` 子目录，并在编辑器中插入标准 Markdown 图片语法 `![](images/img-xxx.png)`。\n\n- 单张图片大小限制 5MB\n- 图片以文件形式存储，跟随 md 文件，换浏览器/电脑不丢失\n- 关闭页面时自动保存编辑器内容回 md 文件\n\n## 注意事项\n\n- 预览服务运行在 `assets/` 子目录上，文件由 `preview_server.py` 自动定位\n- 端口默认 8765，被占用时自动递增寻找空闲端口（+20 以内）\n- **热更新**：使用 `--file` 模式时，页面每 3 秒轮询文件内容变化，在 Agent 中修改文件后页面自动刷新（弹出\"外部内容已更新\"提示）\n- **心跳自停**：页面每 5 秒发送心跳，关闭页面后服务自动停止（正常关闭立即停止，异常退出最多等待 `--heartbeat-timeout` 秒后停止）\n- **关闭保存**：关闭页面时自动将编辑器内容写回 md 文件\n- `--stdin` 模式不支持热更新和粘贴图片（内容固定）\n- 服务终止方式：`kill $(cat /tmp/claw-markdown-preview.pid)`\n\n## 后台运行说明\n\n执行入口第 1 步以「托管后台任务」方式常驻服务（脱离启动命令的进程树，命令返回也不会被回收）；第 2 步负责端口探测（curl）/ PID 获取（lsof）/ 残留清理（pkill）。若需手动启动，参考上述命令结构，务必使用 `python3`（与 frontmatter `requires: python3` 一致）而非绝对路径；切勿用命令内 `nohup … &` 这类挂在返回命令下的写法，否则服务会被进程树清理杀掉。\n\nFile v1.4.5:README.md\n\n# claw-markdown-preview\n\n> 一个 **Agent 技能（Skill）**：在 AI 对话里即时预览 Markdown，让 AI 生成的文档立刻「看得见」。\n\n## 这是什么\n\n`claw-markdown-preview` 是一个可被 AI 助手（Agent）在对话中**直接调用**的技能。当你让 Agent 生成 Markdown 文档后，只需说一句\"预览这个 md\"\"看看渲染效果\"，它就会在浏览器里把文档渲染成精美网页——支持 22 种主题、4 种视图，不切应用、不手动开文件。\n\n## 支持的 Agent 平台\n\n- WorkBuddy\n- QClaw\n- OpenClaw\n- Hermes\n- 任何能提供「执行 `python3` 命令 + 访问 localhost 浏览器预览」能力的 Agent\n\n## 四大能力\n\n1. **即时预览**：AI 写完文档当场看排版、代码高亮、表格效果。\n2. **公众号排版**：22 种主题 + 4 种视图（编辑 / 预览 / 双栏 / 手机）随意切换，排版效果所见即所得，告别手动调格式。\n3. **富文本复制（含图片）**：一键拷贝带样式正文，图片自动 base64 内联，直粘公众号 / 知乎后台，零二次排版。\n4. **实时编辑 + 图片粘贴**：双栏边写边看，编辑器内 `Ctrl+V` 即贴本地图片，自动内联进文档，无需手动存图传图。\n\n## 安装\n\n将本仓库克隆 / 下载到你的 Agent 技能目录即可（如 WorkBuddy 的 `~/.workbuddy/skills/`），或直接从 SkillHub / ClawHub 安装。\n\n```bash\ngit clone https://github.com/webkixi/claw-markdown-preview-skill.git\n```\n\n## 用法\n\n在 Agent 对话中：\n\n- \"预览这个 md\" → 启动本地预览服务并在浏览器打开\n- \"看看渲染效果\" → 同上\n- \"打开预览\" → 同上\n\n技能会自动完成：清理残留进程 → 后台启动预览服务（默认端口 `8765`）→ 用系统浏览器打开预览页。\n\n## 技术说明\n\n- 预览服务 `scripts/preview_server.py` 仅依赖 Python 标准库，跨平台（macOS / Linux / Windows）。\n- 前端 `assets/` 为纯静态资源，提供 22 种预览主题 + 9 种代码高亮主题。\n- 所有文件均为本地处理，不上传任何内容。\n\n## 许可\n\nMIT\n\nFile v1.4.5:_meta.json\n\n{\n  \"ownerId\": \"kn71ktazf25p4qq9q4m4ekwghx880qkj\",\n  \"slug\": \"claw-markdown-preview\",\n  \"version\": \"1.4.5\",\n  \"publishedAt\": 1783574892006\n}\n\nFile v1.4.5:skill-card.md\n\n## Description: <br>\nClaw Markdown Preview launches a local browser-based Markdown editor and previewer with themes, rich-text copy, live editing, and pasted-image handling. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[webkixi](https://clawhub.ai/user/webkixi) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nAgents and users who generate Markdown use this skill to open a local browser preview, adjust formatting, copy styled rich text, and optionally edit and save the Markdown file. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The local preview server can overwrite the Markdown file opened for preview. <br>\nMitigation: Use the skill only on files intended for editing, keep a backup or version control checkpoint for important documents, and close or kill the preview server when finished. <br>\nRisk: Mermaid diagram blocks may be sent to kroki.io for rendering. <br>\nMitigation: Avoid using the skill on confidential documents unless remote Mermaid rendering is removed or disabled. <br>\nRisk: Pasted images can be written into an images directory beside the Markdown file. <br>\nMitigation: Review generated image files before sharing or committing the document directory. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill listing](https://clawhub.ai/webkixi/skills/claw-markdown-preview) <br>\n- [Publisher profile](https://clawhub.ai/user/webkixi) <br>\n- [Kroki Mermaid SVG endpoint](https://kroki.io/mermaid/svg) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Shell commands, Guidance, Markdown, Files] <br>\n**Output Format:** [Markdown guidance with shell commands and a browser-rendered Markdown preview] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Runs a localhost preview server that can save Markdown edits and pasted images beside the opened file.] <br>\n\n## Skill Version(s): <br>\n1.4.5 (source: server release evidence and skill frontmatter) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>","readmeExcerpt":"Skill: Claw Markdown Preview Owner: webkixi Summary: \"预览这个 markdown 文件\" / \"打开 markdown 预览\" or \"preview this markdown file\", \"open markdown preview\", Tags: latest:1.4.15 Version history: v1.4.15 | 2026-07-17T03:20:29.074Z | user - Removed documentation files: README.md and skill-card.md. - No changes to core functionality. v1.4.14 | 2026-07-15T15:10:52.073Z | user - 分离式进程管理现已在 preview_server.py 内部实现，保障跨平台一致性，不再依赖 shel","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"# 单实例清理：只终止上一次本技能启动的预览实例（PID 文件精确定位），不误伤其他进程。整条命令以 python3 常驻结尾。（脱离托管由 python 内部实现跨平台双 fork/detach，不依赖 shell setsid，多行 if 块部分环境识别不到 python3）。\n[ -f /tmp/claw-markdown-preview.pid ] && OLD_PID=$(cat /tmp/claw-markdown-preview.pid 2>/dev/null) && [ -n \"$OLD_PID\" ] && kill -0 \"$OLD_PID\" 2>/dev/null && kill \"$OLD_PID\" 2>/dev/null; rm -f /tmp/claw-markdown-preview.pid; python3 scripts/preview_server.py --file \"<MD_FILE_PATH>\" --no-open --heartbeat-timeout 7200 > /tmp/claw-md-preview.log 2>&1"},{"language":"bash","snippet":"# 就绪轮询：服务绑定端口后即可响应，不必固定等待 2 秒（跨平台通用，不依赖任何运行时专属能力）\nPORT=8765\nfor i in $(seq 1 20); do\n  if curl -s -o /dev/null -w '%{http_code}' --max-time 1 \"http://127.0.0.1:$PORT/\" | grep -q 200; then\n    break\n  fi\n  sleep 0.1\ndone\n# 若默认端口仍未就绪（如端口冲突），从日志提取实际端口\nif ! curl -s -o /dev/null -w '%{http_code}' --max-time 1 \"http://127.0.0.1:$PORT/\" | grep -q 200; then\n  PORT=$(grep -oE '127\\.0\\.0\\.1:[0-9]+' /tmp/claw-md-preview.log | head -1 | sed 's/.*://')\nfi\n# 记录本次实例 PID，供下次重启时精准终止（替代 pkill 全杀）\nlsof -iTCP:$PORT -sTCP:LISTEN -t | head -1 > /tmp/claw-markdown-preview.pid\nopen \"http://127.0.0.1:$PORT\""},{"language":"bash","snippet":"# 单实例清理：只终止上一次本技能启动的预览实例（PID 文件精确定位），不误伤其他进程。整条命令以 python3 常驻结尾。（脱离托管由 python 内部实现跨平台双 fork/detach，不依赖 shell setsid，多行 if 块部分环境识别不到 python3）。\n[ -f /tmp/claw-markdown-preview.pid ] && OLD_PID=$(cat /tmp/claw-markdown-preview.pid 2>/dev/null) && [ -n \"$OLD_PID\" ] && kill -0 \"$OLD_PID\" 2>/dev/null && kill \"$OLD_PID\" 2>/dev/null; rm -f /tmp/claw-markdown-preview.pid; python3 scripts/preview_server.py --file \"<MD_FILE_PATH>\" --no-open --heartbeat-timeout 7200 > /tmp/claw-md-preview.log 2>&1"},{"language":"bash","snippet":"# 就绪轮询：服务绑定端口后即可响应，不必固定等待 2 秒（跨平台通用，不依赖任何运行时专属能力）\nPORT=8765\nfor i in $(seq 1 20); do\n  if curl -s -o /dev/null -w '%{http_code}' --max-time 1 \"http://127.0.0.1:$PORT/\" | grep -q 200; then\n    break\n  fi\n  sleep 0.1\ndone\n# 若默认端口仍未就绪（如端口冲突），从日志提取实际端口\nif ! curl -s -o /dev/null -w '%{http_code}' --max-time 1 \"http://127.0.0.1:$PORT/\" | grep -q 200; then\n  PORT=$(grep -oE '127\\.0\\.0\\.1:[0-9]+' /tmp/claw-md-preview.log | head -1 | sed 's/.*://')\nfi\n# 记录本次实例 PID，供下次重启时精准终止（替代 pkill 全杀）\nlsof -iTCP:$PORT -sTCP:LISTEN -t | head -1 > /tmp/claw-markdown-preview.pid\nopen \"http://127.0.0.1:$PORT\""},{"language":"bash","snippet":"git clone https://github.com/webkixi/claw-markdown-preview-skill.git"},{"language":"bash","snippet":"# 单实例清理：只终止上一次本技能启动的预览实例（PID 文件精确定位），不误伤其他进程。整条命令以 python3 常驻结尾，确保托管后台任务正确托管（多行 if 块部分环境识别不到 python3）。\n[ -f /tmp/claw-markdown-preview.pid ] && OLD_PID=$(cat /tmp/claw-markdown-preview.pid 2>/dev/null) && [ -n \"$OLD_PID\" ] && kill -0 \"$OLD_PID\" 2>/dev/null && kill \"$OLD_PID\" 2>/dev/null; rm -f /tmp/claw-markdown-preview.pid; python3 scripts/preview_server.py --file \"<MD_FILE_PATH>\" --no-open --heartbeat-timeout 7200 > /tmp/claw-md-preview.log 2>&1"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: claw-markdown-preview\ndescription: Local Markdown preview skill. Trigger when the user explicitly asks to preview a markdown file — e.g. \"preview this markdown file\", \"open markdown preview\", \"markdown preview\", or the Chinese \"预览这个 markdown 文件\" / \"打开 markdown 预览\" / \"markdown 预览一下\".\nversion: 1.4.15\nmetadata:\n  openclaw:\n    emoji: \"📄\"\n    os: [\"darwin\", \"linux\", \"win32\"]\n    requires:\n      bins: [\"python3\"]\n    install: []\n    permissions:\n      - filesystem:read\n      - filesystem:write\n      - network:localhost\n      - process:spawn\n---\n\n# Markdown 编辑、多风格预览 / Markdown Editing & Multi-style Preview\n\n通过浏览器编辑、预览AI生成的 Markdown 内容、用户本地 MarkDown 文件。支持多主题风格切换、实时编辑、富文本复制（可粘贴到公众号/知乎）、图片粘贴  \n\nEdit & preview AI-generated or local Markdown in the browser. Multi-theme switching, live editing, rich-text copy (for WeChat/Zhihu), and image paste.\n\n## 触发方式 / Trigger\n\n当用户明确请求预览 Markdown 文件时触发，例如：\"预览这个 markdown 文件\" / \"打开 markdown 预览\" / \"markdown 预览一下\"。非 Markdown 预览请求（如普通文本渲染、图片查看）不触发。  \n\nTriggers when the user explicitly asks to preview a Markdown file, e.g. \"预览这个 markdown 文件\" / \"打开 markdown 预览\" / \"markdown 预览一下\". Not for generic text rendering or image viewing.\n\n## 执行入口\n\n**前提检查：**\n- 确认目标文件路径存在且为 `.md` 文件\n- 确认 `scripts/preview_server.py` 存在且可用（路径相对于技能目录）\n\n**执行（两步，替换 `<MD_FILE_PATH>` 后运行）：**\n\n**第 1 步 —— 以独立进程方式启动服务（关键：必须脱离 WorkBuddy 托管后台任务树，否则对话闲置约 20 分钟服务会被回收而\"断开\"。脱离由 python 内部跨平台实现，不依赖 shell `setsid`）：**\n\n```bash\n# 单实例清理：只终止上一次本技能启动的预览实例（PID 文件精确定位），不误伤其他进程。整条命令以 python3 常驻结尾。（脱离托管由 python 内部实现跨平台双 fork/detach，不依赖 shell setsid，多行 if 块部分环境识别不到 python3）。\n[ -f /tmp/claw-markdown-preview.pid ] && OLD_PID=$(cat /tmp/claw-markdown-preview.pid 2>/dev/null) && [ -n \"$OLD_PID\" ] && kill -0 \"$OLD_PID\" 2>/dev/null && kill \"$OLD_PID\" 2>/dev/null; rm -f /tmp/claw-markdown-preview.pid; python3 scripts/preview_server.py --file \"<MD_FILE_PATH>\" --no-open --heartbeat-timeout 7200 > /tmp/claw-md-preview.log 2>&1\n```\n\n> 关键：脱离托管由 `preview_server.py` **内部自行实现**（macOS/Linux 用 `os.fork() + os.setsid()` 双 fork 成为独立 session leader，Windows 用 `subprocess.Popen` + `DETACHED_PROCESS` 启动独立实例），脚本自动判断、不依赖 shell 命令。效果与 shell `setsid` 一致：服务脱离 WorkBuddy 托管后台任务树，不被\"对话闲置回收\"机制杀掉（实测托管任务约 20 分钟闲置即回收子进程）。服务因此常驻，离开多久 / 切窗口 / 睡眠都不受影响。跨平台通用，无需 `setsid` / `start /B` 等 shell 命令。\n\n**第 2 步 —— 探测端口并打开浏览器（普通命令即可）：**\n\n```bash\n# 就绪轮询：服务绑定端口后即可响应，不必固定等待 2 秒（跨平台通用，不依赖任何运行时专属能力）\nPORT=8765\nfor i in $(seq 1 20); do\n  if curl -s -o /dev/null -w '%{http_code}' --max-time 1 \"http://127.0.0.1:$PORT/\" | grep -q 200; then\n    break\n  fi\n  sleep 0.1\ndone\n# 若默认端口仍未就绪（如端口冲突），从日志提取实际端口\nif ! curl -s -o /dev/null -w '%{http_code}' --max-time 1 \"http://127.0.0.1:$PORT/\" | grep -q 200; then\n  PORT=$(grep -oE '127\\.0\\.0\\.1:[0-9]+' /tmp/claw-md-preview.log | head -1 | sed 's/.*://')\nfi\n# 记录本次实例 PID，供下次重启时精准终止（替代 pkill 全杀）\nlsof -iTCP:$PORT -sTCP:LISTEN -t | head -1 > /tmp/claw-markdown-preview.pid\nopen \"http://127.0.0.1:$PORT\"\n```\n\n**说明：**\n- 第 1 步把服务跑成托管后台任务（常驻、脱离启动命令的进程树），第 2 步再探测端口并打开浏览器。两步拆分是为了让服务不被启动命令的进程树回收而误杀。\n- 服务启动"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn71ktazf25p4qq9q4m4ekwghx880qkj\",\n  \"slug\": \"claw-markdown-preview\",\n  \"version\": \"1.4.15\",\n  \"publishedAt\": 1784258429074\n}"},{"path":"skill-card.md","content":"## Description:\n\nOpens a local browser-based Markdown editor and previewer for explicitly requested Markdown files, with theme switching, rich-text copy, image paste, and live preview.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[webkixi](https://clawhub.ai/user/webkixi)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers, writers, and agents use this skill to open a local Markdown preview/editor for .md files, inspect rendered output, switch styles, copy themed rich text, and optionally paste images into the Markdown file's images folder.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The local editor can autosave over the original Markdown file.\n\nMitigation: Open only intended files and keep a backup or version-control checkpoint before editing.\n\nRisk: Unauthenticated localhost APIs can save Markdown content and write pasted images to disk.\n\nMitigation: Run the preview server only in trusted local sessions, keep it bound to 127.0.0.1, and stop it when previewing is complete.\n\nRisk: Rendered Markdown can include active HTML.\n\nMitigation: Avoid opening untrusted Markdown until authentication, origin checks, and HTML sanitization are reviewed.\n\n## Reference(s):\n\n- [Claw Markdown Preview on ClawHub](https://clawhub.ai/webkixi/skills/claw-markdown-preview)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown-facing guidance with shell commands and a local browser preview UI]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Starts a localhost preview server that reads the selected Markdown file and can save edits or pasted images back to local disk.]\n\n## Skill Version(s):\n\n1.4.15 (source: frontmatter and server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"\"预览这个 markdown 文件\" / \"打开 markdown 预览\" or \"preview this markdown file\", \"open markdown preview\", Skill: Claw Markdown Preview Owner: webkixi Summary: \"预览这个 markdown 文件\" / \"打开 markdown 预览\" or \"preview this markdown file\", \"open markdown preview\", Tags: latest:1.4.15 Version history: v1.4.15 | 2026-07-17T03:20:29.074Z | user - Removed documentation files: README.md and skill-card.md. - No changes to core functionality. v1.4.14 | 2026-07-15T15:10:52.073Z | user - 分离式进程管理现已在 preview_server.py 内部实现，保障跨平台一致性，不再依赖 shel","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1158,"uniquenessScore":51,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-09T19:25:01.855Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-09T19:25:01.855Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T06:43:24.401Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}