{"id":"8129d1f0-fa66-4ccc-b527-a9600409a133","entityType":"agent","slug":"clawhub-moccard-memolecard-zh","name":"MemoleCard-zh","canonicalUrl":"https://www.xpersona.co/agent/clawhub-moccard-memolecard-zh","canonicalPath":"/agent/clawhub-moccard-memolecard-zh","generatedAt":"2026-10-11T14:15:58.069Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-11T09:37:29.615Z","emptyReason":null},"description":"自动打开MemoleCard官网，输入文章内容，选择卡片样式，全自动拆分生成卡片并返回压缩包下载链接。 Skill: MemoleCard-zh Owner: moccard Summary: 自动打开MemoleCard官网，输入文章内容，选择卡片样式，全自动拆分生成卡片并返回压缩包下载链接。 Tags: latest:1.0.4 Version history: v1.0.4 | 2026-04-29T07:51:18.737Z | user - 更新官网域名，从 memolecard.com 切换为 moccard.com - SESSION_NAME 变量由 \"memolecard-auto\" 改为 \"moccard-auto\" - 保持其余功能和流程不变，兼容原有用法 v1.0.3 | 2026-03-17T07:46:36.590Z | user Version 1.0.3 of memolecard-zh - No file changes detected in this release. - The functi","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.1K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s1706t8sgqcvhw1s4rw523nsnh83k1ee:memolecard-zh","sourceUrl":"https://clawhub.ai/moccard/memolecard-zh","homepage":"https://clawhub.ai/moccard/skills/memolecard-zh","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/moccard/memolecard-zh","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/moccard/skills/memolecard-zh","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":61,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"自动打开MemoleCard官网，输入文章内容，选择卡片样式，全自动拆分生成卡片并返回压缩包下载链接。 Skill: MemoleCard-zh Owner: moccard Summary: 自动打开MemoleCard官网，输入文章内容，选择卡片样式，全自动拆分生成卡片并返回压缩包下载链接。 Tags: lates"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T09:37:29.615Z","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-11T09:37:29.615Z","emptyReason":null},"stars":null,"forks":null,"downloads":1098,"packageName":null,"latestVersion":"1.0.4","tractionLabel":"1.1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T09:37:29.602Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T09:37:29.615Z","lastCrawledAt":"2026-10-11T09:37:29.602Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T09:37:29.602Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.4","createdAt":"2026-04-29T07:51:18.737Z","changelog":"- 更新官网域名，从 memolecard.com 切换为 moccard.com - SESSION_NAME 变量由 \"memolecard-auto\" 改为 \"moccard-auto\" - 保持其余功能和流程不变，兼容原有用法","fileCount":3,"zipByteSize":4043},{"version":"1.0.3","createdAt":"2026-03-17T07:46:36.590Z","changelog":"Version 1.0.3 of memolecard-zh - No file changes detected in this release. - The functionality and workflow remain unchanged from the previous version.","fileCount":2,"zipByteSize":2926},{"version":"1.0.2","createdAt":"2026-03-17T07:45:47.077Z","changelog":"- 增加前置参数校验，要求标题≥30字、正文≥600字（富文本）。 - 下载压缩包流程支持三种方式：捕获原生下载、监控本地文件、服务器兜底接口。 - 优化元素定位与样式，提升多语言/变体适配率。 - 新增整体流程超时控制（TIMEOUT_SECONDS）。 - 增强错误提示，兜底失败时输出具体排查建议。","fileCount":2,"zipByteSize":2925},{"version":"1.0.1","createdAt":"2026-03-17T06:22:40.357Z","changelog":"**优化适配浏览器原生下载行为，提升下载链接获取准确性** - 自动捕获并返回 MemoleCard 卡片打包下载的原生文件地址或在线链接 - 新增浏览器下载路径指定与本地文件监控，确保压缩包稳定保存与检索 - 增强异常处理提示，下载失败及时反馈 - 完善 Bash 一键执行脚本，支持 ClawHub 场景与自动参数注入","fileCount":2,"zipByteSize":2154},{"version":"1.0.0","createdAt":"2026-03-17T06:10:43.449Z","changelog":"MemoleCard 自动化技能 适配：ClawHub + Agent Browser功能：打开 → 文章转卡片 → 填内容 → 选样式 → 自动拆分 → 打包下载 → 返回链接","fileCount":2,"zipByteSize":1443}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s1706t8sgqcvhw1s4rw523nsnh83k1ee:memolecard-zh","setupComplexity":"low","setupSteps":["Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","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-moccard-memolecard-zh/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-moccard-memolecard-zh/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-moccard-memolecard-zh/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-moccard-memolecard-zh/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-moccard-memolecard-zh/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-moccard-memolecard-zh/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-11T14:15:58.068Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-moccard-memolecard-zh/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-moccard-memolecard-zh/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-moccard-memolecard-zh/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-moccard-memolecard-zh/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-11T09:37:29.615Z","emptyReason":null},"readme":"Skill: MemoleCard-zh\n\nOwner: moccard\n\nSummary: 自动打开MemoleCard官网，输入文章内容，选择卡片样式，全自动拆分生成卡片并返回压缩包下载链接。\n\nTags: latest:1.0.4\n\nVersion history:\n\nv1.0.4 | 2026-04-29T07:51:18.737Z | user\n\n- 更新官网域名，从 memolecard.com 切换为 moccard.com\n- SESSION_NAME 变量由 \"memolecard-auto\" 改为 \"moccard-auto\"\n- 保持其余功能和流程不变，兼容原有用法\n\nv1.0.3 | 2026-03-17T07:46:36.590Z | user\n\nVersion 1.0.3 of memolecard-zh\n\n- No file changes detected in this release.\n- The functionality and workflow remain unchanged from the previous version.\n\nv1.0.2 | 2026-03-17T07:45:47.077Z | user\n\n- 增加前置参数校验，要求标题≥30字、正文≥600字（富文本）。\n- 下载压缩包流程支持三种方式：捕获原生下载、监控本地文件、服务器兜底接口。\n- 优化元素定位与样式，提升多语言/变体适配率。\n- 新增整体流程超时控制（TIMEOUT_SECONDS）。\n- 增强错误提示，兜底失败时输出具体排查建议。\n\nv1.0.1 | 2026-03-17T06:22:40.357Z | user\n\n**优化适配浏览器原生下载行为，提升下载链接获取准确性**\n\n- 自动捕获并返回 MemoleCard 卡片打包下载的原生文件地址或在线链接\n- 新增浏览器下载路径指定与本地文件监控，确保压缩包稳定保存与检索\n- 增强异常处理提示，下载失败及时反馈\n- 完善 Bash 一键执行脚本，支持 ClawHub 场景与自动参数注入\n\nv1.0.0 | 2026-03-17T06:10:43.449Z | user\n\nMemoleCard 自动化技能\n适配：ClawHub + Agent Browser功能：打开 → 文章转卡片 → 填内容 → 选样式 → 自动拆分 → 打包下载 → 返回链接\n\nArchive index:\n\nArchive v1.0.4: 3 files, 4043 bytes\n\nFiles: skill-card.md (2061b), SKILL.md (6441b), _meta.json (132b)\n\nFile v1.0.4:SKILL.md\n\n#!/bin/bash\nset -e\n# ========== 配置参数 ==========\nSESSION_NAME=\"moccard-auto\"\nMEMOLE_URL=\"https://www.moccard.com/\"\nCARD_TITLE=\"{{title}}\"       # 用户输入标题，标题不少于30字\nCARD_CONTENT=\"{{content}}\"   # 用户输入正文，正文的内容不少于600字，正文为富文本内容\nSTYLE_CATEGORY=\"{{style_cat}}\" # 样式分类（如简约风）\nSTYLE_INDEX=\"{{style_idx}}\"  # 样式序号\nDOWNLOAD_PATH=\"$HOME/Downloads\" # 浏览器默认下载路径\nZIP_PATTERN=\"images-*.zip\"  # 压缩包命名规则\n# 兜底下载配置（根据实际服务器地址调整）\nBACKUP_SERVER_URL=\"{{ip}}\" # 兜底下载接口\nTIMEOUT_SECONDS=15 # 整体超时时间\n\n# ========== 前置校验 ==========\n# 校验标题/正文长度\nif [ ${#CARD_TITLE} -lt 30 ]; then\n  echo \"❌ 标题长度不足30字，请检查输入\"\n  exit 1\nfi\nif [ ${#CARD_CONTENT} -lt 600 ]; then\n  echo \"❌ 正文长度不足600字，请检查输入\"\n  exit 1\nfi\n\n# ========== 步骤1：初始化 + 打开官网 ==========\n# 清理旧会话\nagent-browser --session $SESSION_NAME close 2>/dev/null || true\n# 打开官网（无头模式，调试加 --headed）\nagent-browser --session $SESSION_NAME open $MEMOLE_URL \\\n  --set download.path \"$DOWNLOAD_PATH\" \\ # 指定下载路径（关键！）\n  --timeout ${TIMEOUT_SECONDS}000\nagent-browser --session $SESSION_NAME wait --load networkidle\n\n# ========== 步骤2：进入文章转卡片功能 ==========\nagent-browser --session $SESSION_NAME scroll down 800\n# 增强元素定位（兼容多语言/文本变体）\nagent-browser --session $SESSION_NAME find --multiple \\\n  text \"开始免费使用【文章转卡片】\" \\\n  text \"文章转卡片\" \\\n  click\nagent-browser --session $SESSION_NAME wait --load networkidle\n\n# ========== 步骤3：输入标题/正文 ==========\nagent-browser --session $SESSION_NAME find \\\n  label \"标题\" \\\n  input[name=\"title\"] \\\n  fill \"$CARD_TITLE\"\nagent-browser --session $SESSION_NAME find \\\n  label \"正文\" \\\n  textarea[name=\"content\"] \\\n  div[class*=\"rich-text\"] \\\n  fill \"$CARD_CONTENT\"\nagent-browser --session $SESSION_NAME wait 1000\n\n# ========== 步骤4：选择卡片样式 ==========\nagent-browser --session $SESSION_NAME find text \"卡片样式\" click\nagent-browser --session $SESSION_NAME wait 2000\nagent-browser --session $SESSION_NAME find text \"$STYLE_CATEGORY\" click\nagent-browser --session $SESSION_NAME find nth $STYLE_INDEX \".style-item\" click\nagent-browser --session $SESSION_NAME find text \"确定\" click\nagent-browser --session $SESSION_NAME wait --load networkidle\n\n# ========== 步骤5：全自动拆分 ==========\nagent-browser --session $SESSION_NAME find \\\n  text \"全自动拆分\" \\\n  button[class*=\"split-btn\"] \\\n  click\nagent-browser --session $SESSION_NAME wait --text \"拆分完成\" --timeout 10000\nagent-browser --session $SESSION_NAME wait 3000\n\n# ========== 步骤6：打包下载（适配原生API） ==========\nDOWNLOAD_URL=\"\"\n\n## 方式1：捕获下载链接（优先）\necho \"🔍 捕获原生下载链接...\"\nDOWNLOAD_URL=$(agent-browser --session $SESSION_NAME eval \"\n  // 重写浏览器原生下载API，捕获链接\n  window.originalDownload = window.download || window.URL.createObjectURL;\n  let downloadUrl = '';\n  window.download = function(url) {\n    downloadUrl = url;\n    return window.originalDownload(url);\n  };\n  // 点击下载按钮并监听\n  const downloadBtn = document.querySelector('*:contains(\\\"打包下载\\\")') || document.querySelector('.download-btn');\n  if (downloadBtn) {\n    downloadBtn.click();\n    setTimeout(() => { downloadUrl = downloadUrl || window.downloadUrl; }, 1500);\n  }\n  downloadUrl;\n\" --json | jq -r '.result')\n\n## 方式2：监控本地下载文件（备用，本地路径）\nif [ -z \"$DOWNLOAD_URL\" ]; then\n  echo \"🔍 监控本地下载文件...\"\n  # 清空旧文件\n  rm -f \"$DOWNLOAD_PATH/$ZIP_PATTERN\" 2>/dev/null\n  # 点击打包下载\n  agent-browser --session $SESSION_NAME find \\\n    text \"打包下载\" \\\n    button[class*=\"download\"] \\\n    click\n  # 等待文件下载完成（最多等10秒）\n  for ((i=0; i<10; i++)); do\n    ZIP_FILE=$(ls \"$DOWNLOAD_PATH/$ZIP_PATTERN\" 2>/dev/null | head -1)\n    if [ -n \"$ZIP_FILE\" ]; then\n      DOWNLOAD_URL=\"file://$ZIP_FILE\"\n      break\n    fi\n    sleep 1\n  done\nfi\n\n## 方式3：兜底下载（从服务器拉取图片压缩包）\nif [ -z \"$DOWNLOAD_URL\" ]; then\n  echo \"🔍 执行兜底策略：从服务器下载图片压缩包...\"\n  # 步骤1：获取当前卡片ID（从页面/接口提取）\n  CARD_ID=$(agent-browser --session $SESSION_NAME eval \"\n    // 从页面DOM/全局变量提取卡片ID（根据实际页面结构调整）\n    const cardId = window.cardId || document.querySelector('[data-card-id]')?.dataset.cardId || '';\n    cardId;\n  \" --json | jq -r '.result')\n\n  if [ -n \"$CARD_ID\" ] && [ \"$CARD_ID\" != \"null\" ]; then\n    # 步骤2：调用服务器接口下载压缩包\n    BACKUP_ZIP=\"$DOWNLOAD_PATH/memolecard-backup-$CARD_ID.zip\"\n    # 发送请求下载（适配常见鉴权方式，如Cookie/Token）\n    COOKIES=$(agent-browser --session $SESSION_NAME eval \"document.cookie\" --json | jq -r '.result')\n    curl -s -o \"$BACKUP_ZIP\" \\\n      -H \"Cookie: $COOKIES\" \\\n      -H \"User-Agent: $(agent-browser --session $SESSION_NAME eval 'navigator.userAgent' --json | jq -r '.result')\" \\\n      \"${BACKUP_SERVER_URL}?cardId=$CARD_ID&style=$STYLE_INDEX\"\n    \n    # 校验兜底文件是否存在\n    if [ -f \"$BACKUP_ZIP\" ] && [ -s \"$BACKUP_ZIP\" ]; then\n      DOWNLOAD_URL=\"file://$BACKUP_ZIP\"\n      echo \"✅ 兜底下载成功：$DOWNLOAD_URL\"\n    else\n      echo \"❌ 兜底下载失败：服务器返回空文件\"\n      rm -f \"$BACKUP_ZIP\" 2>/dev/null\n    fi\n  else\n    echo \"❌ 兜底下载失败：无法获取卡片ID\"\n  fi\nfi\n\n# ========== 步骤7：返回结果 ==========\nif [ -n \"$DOWNLOAD_URL\" ] && [ \"$DOWNLOAD_URL\" != \"null\" ]; then\n  echo \"✅ 下载成功！压缩包地址：$DOWNLOAD_URL\"\n  echo \"MEMOLE_DOWNLOAD_URL=$DOWNLOAD_URL\" # 供ClawHub返回给用户\nelse\n  echo \"❌ 所有下载方式均失败，请检查：\"\n  echo \"  1. 页面元素是否匹配（如按钮文本、样式类名）\"\n  echo \"  2. 兜底服务器地址是否正确\"\n  echo \"  3. 卡片ID提取逻辑是否适配当前页面\"\n  exit 1\nfi\n\n# ========== 清理工作 ==========\n# 关闭浏览器会话\nagent-browser --session $SESSION_NAME close 2>/dev/null || true\n# 清理临时变量\nunset CARD_ID BACKUP_ZIP COOKIES\n\nexit 0\n\nFile v1.0.4:_meta.json\n\n{\n  \"ownerId\": \"kn714r4aazfa2tdvvh1edqysjd833caa\",\n  \"slug\": \"memolecard-zh\",\n  \"version\": \"1.0.4\",\n  \"publishedAt\": 1777449078737\n}\n\nFile v1.0.4:skill-card.md\n\n## Description:\n\nAutomates the MocCard article-to-card workflow by opening the website, submitting a title and article content, selecting a card style, splitting the content into cards, and returning a ZIP download link.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[moccard](https://clawhub.ai/user/moccard)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nContent creators and operators use this skill to turn long articles into downloadable MocCard image-card packages through an automated browser workflow.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Article content may be submitted to moccard.com during the card-generation workflow.\n\nMitigation: Use only content that is appropriate to send to the MocCard service and allowed by the user's data-handling requirements.\n\nRisk: Fallback download behavior can send readable browser cookies and card identifiers to the configured backup server.\n\nMitigation: Use the fallback path only with a trusted backup endpoint, or disable or review that configuration before running the skill.\n\nRisk: The download workflow can remove matching ZIP files from the Downloads directory.\n\nMitigation: Run the skill with a dedicated download directory or preserve existing matching ZIP files before execution.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/moccard/skills/memolecard-zh)\n- [MocCard website](https://www.moccard.com/)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Shell commands, Files]\n\n**Output Format:** [Shell execution output with a ZIP download URL]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May download a ZIP archive to the configured browser download directory.]\n\n## Skill Version(s):\n\n1.0.4 (source: server release evidence)\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.0.3: 2 files, 2926 bytes\n\nFiles: SKILL.md (6447b), _meta.json (132b)\n\nFile v1.0.3:SKILL.md\n\n#!/bin/bash\nset -e\n# ========== 配置参数 ==========\nSESSION_NAME=\"memolecard-auto\"\nMEMOLE_URL=\"https://www.memolecard.com/\"\nCARD_TITLE=\"{{title}}\"       # 用户输入标题，标题不少于30字\nCARD_CONTENT=\"{{content}}\"   # 用户输入正文，正文的内容不少于600字，正文为富文本内容\nSTYLE_CATEGORY=\"{{style_cat}}\" # 样式分类（如简约风）\nSTYLE_INDEX=\"{{style_idx}}\"  # 样式序号\nDOWNLOAD_PATH=\"$HOME/Downloads\" # 浏览器默认下载路径\nZIP_PATTERN=\"images-*.zip\"  # 压缩包命名规则\n# 兜底下载配置（根据实际服务器地址调整）\nBACKUP_SERVER_URL=\"{{ip}}\" # 兜底下载接口\nTIMEOUT_SECONDS=15 # 整体超时时间\n\n# ========== 前置校验 ==========\n# 校验标题/正文长度\nif [ ${#CARD_TITLE} -lt 30 ]; then\n  echo \"❌ 标题长度不足30字，请检查输入\"\n  exit 1\nfi\nif [ ${#CARD_CONTENT} -lt 600 ]; then\n  echo \"❌ 正文长度不足600字，请检查输入\"\n  exit 1\nfi\n\n# ========== 步骤1：初始化 + 打开官网 ==========\n# 清理旧会话\nagent-browser --session $SESSION_NAME close 2>/dev/null || true\n# 打开官网（无头模式，调试加 --headed）\nagent-browser --session $SESSION_NAME open $MEMOLE_URL \\\n  --set download.path \"$DOWNLOAD_PATH\" \\ # 指定下载路径（关键！）\n  --timeout ${TIMEOUT_SECONDS}000\nagent-browser --session $SESSION_NAME wait --load networkidle\n\n# ========== 步骤2：进入文章转卡片功能 ==========\nagent-browser --session $SESSION_NAME scroll down 800\n# 增强元素定位（兼容多语言/文本变体）\nagent-browser --session $SESSION_NAME find --multiple \\\n  text \"开始免费使用【文章转卡片】\" \\\n  text \"文章转卡片\" \\\n  click\nagent-browser --session $SESSION_NAME wait --load networkidle\n\n# ========== 步骤3：输入标题/正文 ==========\nagent-browser --session $SESSION_NAME find \\\n  label \"标题\" \\\n  input[name=\"title\"] \\\n  fill \"$CARD_TITLE\"\nagent-browser --session $SESSION_NAME find \\\n  label \"正文\" \\\n  textarea[name=\"content\"] \\\n  div[class*=\"rich-text\"] \\\n  fill \"$CARD_CONTENT\"\nagent-browser --session $SESSION_NAME wait 1000\n\n# ========== 步骤4：选择卡片样式 ==========\nagent-browser --session $SESSION_NAME find text \"卡片样式\" click\nagent-browser --session $SESSION_NAME wait 2000\nagent-browser --session $SESSION_NAME find text \"$STYLE_CATEGORY\" click\nagent-browser --session $SESSION_NAME find nth $STYLE_INDEX \".style-item\" click\nagent-browser --session $SESSION_NAME find text \"确定\" click\nagent-browser --session $SESSION_NAME wait --load networkidle\n\n# ========== 步骤5：全自动拆分 ==========\nagent-browser --session $SESSION_NAME find \\\n  text \"全自动拆分\" \\\n  button[class*=\"split-btn\"] \\\n  click\nagent-browser --session $SESSION_NAME wait --text \"拆分完成\" --timeout 10000\nagent-browser --session $SESSION_NAME wait 3000\n\n# ========== 步骤6：打包下载（适配原生API） ==========\nDOWNLOAD_URL=\"\"\n\n## 方式1：捕获下载链接（优先）\necho \"🔍 捕获原生下载链接...\"\nDOWNLOAD_URL=$(agent-browser --session $SESSION_NAME eval \"\n  // 重写浏览器原生下载API，捕获链接\n  window.originalDownload = window.download || window.URL.createObjectURL;\n  let downloadUrl = '';\n  window.download = function(url) {\n    downloadUrl = url;\n    return window.originalDownload(url);\n  };\n  // 点击下载按钮并监听\n  const downloadBtn = document.querySelector('*:contains(\\\"打包下载\\\")') || document.querySelector('.download-btn');\n  if (downloadBtn) {\n    downloadBtn.click();\n    setTimeout(() => { downloadUrl = downloadUrl || window.downloadUrl; }, 1500);\n  }\n  downloadUrl;\n\" --json | jq -r '.result')\n\n## 方式2：监控本地下载文件（备用，本地路径）\nif [ -z \"$DOWNLOAD_URL\" ]; then\n  echo \"🔍 监控本地下载文件...\"\n  # 清空旧文件\n  rm -f \"$DOWNLOAD_PATH/$ZIP_PATTERN\" 2>/dev/null\n  # 点击打包下载\n  agent-browser --session $SESSION_NAME find \\\n    text \"打包下载\" \\\n    button[class*=\"download\"] \\\n    click\n  # 等待文件下载完成（最多等10秒）\n  for ((i=0; i<10; i++)); do\n    ZIP_FILE=$(ls \"$DOWNLOAD_PATH/$ZIP_PATTERN\" 2>/dev/null | head -1)\n    if [ -n \"$ZIP_FILE\" ]; then\n      DOWNLOAD_URL=\"file://$ZIP_FILE\"\n      break\n    fi\n    sleep 1\n  done\nfi\n\n## 方式3：兜底下载（从服务器拉取图片压缩包）\nif [ -z \"$DOWNLOAD_URL\" ]; then\n  echo \"🔍 执行兜底策略：从服务器下载图片压缩包...\"\n  # 步骤1：获取当前卡片ID（从页面/接口提取）\n  CARD_ID=$(agent-browser --session $SESSION_NAME eval \"\n    // 从页面DOM/全局变量提取卡片ID（根据实际页面结构调整）\n    const cardId = window.cardId || document.querySelector('[data-card-id]')?.dataset.cardId || '';\n    cardId;\n  \" --json | jq -r '.result')\n\n  if [ -n \"$CARD_ID\" ] && [ \"$CARD_ID\" != \"null\" ]; then\n    # 步骤2：调用服务器接口下载压缩包\n    BACKUP_ZIP=\"$DOWNLOAD_PATH/memolecard-backup-$CARD_ID.zip\"\n    # 发送请求下载（适配常见鉴权方式，如Cookie/Token）\n    COOKIES=$(agent-browser --session $SESSION_NAME eval \"document.cookie\" --json | jq -r '.result')\n    curl -s -o \"$BACKUP_ZIP\" \\\n      -H \"Cookie: $COOKIES\" \\\n      -H \"User-Agent: $(agent-browser --session $SESSION_NAME eval 'navigator.userAgent' --json | jq -r '.result')\" \\\n      \"${BACKUP_SERVER_URL}?cardId=$CARD_ID&style=$STYLE_INDEX\"\n    \n    # 校验兜底文件是否存在\n    if [ -f \"$BACKUP_ZIP\" ] && [ -s \"$BACKUP_ZIP\" ]; then\n      DOWNLOAD_URL=\"file://$BACKUP_ZIP\"\n      echo \"✅ 兜底下载成功：$DOWNLOAD_URL\"\n    else\n      echo \"❌ 兜底下载失败：服务器返回空文件\"\n      rm -f \"$BACKUP_ZIP\" 2>/dev/null\n    fi\n  else\n    echo \"❌ 兜底下载失败：无法获取卡片ID\"\n  fi\nfi\n\n# ========== 步骤7：返回结果 ==========\nif [ -n \"$DOWNLOAD_URL\" ] && [ \"$DOWNLOAD_URL\" != \"null\" ]; then\n  echo \"✅ 下载成功！压缩包地址：$DOWNLOAD_URL\"\n  echo \"MEMOLE_DOWNLOAD_URL=$DOWNLOAD_URL\" # 供ClawHub返回给用户\nelse\n  echo \"❌ 所有下载方式均失败，请检查：\"\n  echo \"  1. 页面元素是否匹配（如按钮文本、样式类名）\"\n  echo \"  2. 兜底服务器地址是否正确\"\n  echo \"  3. 卡片ID提取逻辑是否适配当前页面\"\n  exit 1\nfi\n\n# ========== 清理工作 ==========\n# 关闭浏览器会话\nagent-browser --session $SESSION_NAME close 2>/dev/null || true\n# 清理临时变量\nunset CARD_ID BACKUP_ZIP COOKIES\n\nexit 0\n\nFile v1.0.3:_meta.json\n\n{\n  \"ownerId\": \"kn714r4aazfa2tdvvh1edqysjd833caa\",\n  \"slug\": \"memolecard-zh\",\n  \"version\": \"1.0.3\",\n  \"publishedAt\": 1773733596590\n}\n\nArchive v1.0.2: 2 files, 2925 bytes\n\nFiles: SKILL.md (6447b), _meta.json (132b)\n\nFile v1.0.2:SKILL.md\n\n#!/bin/bash\nset -e\n# ========== 配置参数 ==========\nSESSION_NAME=\"memolecard-auto\"\nMEMOLE_URL=\"https://www.memolecard.com/\"\nCARD_TITLE=\"{{title}}\"       # 用户输入标题，标题不少于30字\nCARD_CONTENT=\"{{content}}\"   # 用户输入正文，正文的内容不少于600字，正文为富文本内容\nSTYLE_CATEGORY=\"{{style_cat}}\" # 样式分类（如简约风）\nSTYLE_INDEX=\"{{style_idx}}\"  # 样式序号\nDOWNLOAD_PATH=\"$HOME/Downloads\" # 浏览器默认下载路径\nZIP_PATTERN=\"images-*.zip\"  # 压缩包命名规则\n# 兜底下载配置（根据实际服务器地址调整）\nBACKUP_SERVER_URL=\"{{ip}}\" # 兜底下载接口\nTIMEOUT_SECONDS=15 # 整体超时时间\n\n# ========== 前置校验 ==========\n# 校验标题/正文长度\nif [ ${#CARD_TITLE} -lt 30 ]; then\n  echo \"❌ 标题长度不足30字，请检查输入\"\n  exit 1\nfi\nif [ ${#CARD_CONTENT} -lt 600 ]; then\n  echo \"❌ 正文长度不足600字，请检查输入\"\n  exit 1\nfi\n\n# ========== 步骤1：初始化 + 打开官网 ==========\n# 清理旧会话\nagent-browser --session $SESSION_NAME close 2>/dev/null || true\n# 打开官网（无头模式，调试加 --headed）\nagent-browser --session $SESSION_NAME open $MEMOLE_URL \\\n  --set download.path \"$DOWNLOAD_PATH\" \\ # 指定下载路径（关键！）\n  --timeout ${TIMEOUT_SECONDS}000\nagent-browser --session $SESSION_NAME wait --load networkidle\n\n# ========== 步骤2：进入文章转卡片功能 ==========\nagent-browser --session $SESSION_NAME scroll down 800\n# 增强元素定位（兼容多语言/文本变体）\nagent-browser --session $SESSION_NAME find --multiple \\\n  text \"开始免费使用【文章转卡片】\" \\\n  text \"文章转卡片\" \\\n  click\nagent-browser --session $SESSION_NAME wait --load networkidle\n\n# ========== 步骤3：输入标题/正文 ==========\nagent-browser --session $SESSION_NAME find \\\n  label \"标题\" \\\n  input[name=\"title\"] \\\n  fill \"$CARD_TITLE\"\nagent-browser --session $SESSION_NAME find \\\n  label \"正文\" \\\n  textarea[name=\"content\"] \\\n  div[class*=\"rich-text\"] \\\n  fill \"$CARD_CONTENT\"\nagent-browser --session $SESSION_NAME wait 1000\n\n# ========== 步骤4：选择卡片样式 ==========\nagent-browser --session $SESSION_NAME find text \"卡片样式\" click\nagent-browser --session $SESSION_NAME wait 2000\nagent-browser --session $SESSION_NAME find text \"$STYLE_CATEGORY\" click\nagent-browser --session $SESSION_NAME find nth $STYLE_INDEX \".style-item\" click\nagent-browser --session $SESSION_NAME find text \"确定\" click\nagent-browser --session $SESSION_NAME wait --load networkidle\n\n# ========== 步骤5：全自动拆分 ==========\nagent-browser --session $SESSION_NAME find \\\n  text \"全自动拆分\" \\\n  button[class*=\"split-btn\"] \\\n  click\nagent-browser --session $SESSION_NAME wait --text \"拆分完成\" --timeout 10000\nagent-browser --session $SESSION_NAME wait 3000\n\n# ========== 步骤6：打包下载（适配原生API） ==========\nDOWNLOAD_URL=\"\"\n\n## 方式1：捕获下载链接（优先）\necho \"🔍 捕获原生下载链接...\"\nDOWNLOAD_URL=$(agent-browser --session $SESSION_NAME eval \"\n  // 重写浏览器原生下载API，捕获链接\n  window.originalDownload = window.download || window.URL.createObjectURL;\n  let downloadUrl = '';\n  window.download = function(url) {\n    downloadUrl = url;\n    return window.originalDownload(url);\n  };\n  // 点击下载按钮并监听\n  const downloadBtn = document.querySelector('*:contains(\\\"打包下载\\\")') || document.querySelector('.download-btn');\n  if (downloadBtn) {\n    downloadBtn.click();\n    setTimeout(() => { downloadUrl = downloadUrl || window.downloadUrl; }, 1500);\n  }\n  downloadUrl;\n\" --json | jq -r '.result')\n\n## 方式2：监控本地下载文件（备用，本地路径）\nif [ -z \"$DOWNLOAD_URL\" ]; then\n  echo \"🔍 监控本地下载文件...\"\n  # 清空旧文件\n  rm -f \"$DOWNLOAD_PATH/$ZIP_PATTERN\" 2>/dev/null\n  # 点击打包下载\n  agent-browser --session $SESSION_NAME find \\\n    text \"打包下载\" \\\n    button[class*=\"download\"] \\\n    click\n  # 等待文件下载完成（最多等10秒）\n  for ((i=0; i<10; i++)); do\n    ZIP_FILE=$(ls \"$DOWNLOAD_PATH/$ZIP_PATTERN\" 2>/dev/null | head -1)\n    if [ -n \"$ZIP_FILE\" ]; then\n      DOWNLOAD_URL=\"file://$ZIP_FILE\"\n      break\n    fi\n    sleep 1\n  done\nfi\n\n## 方式3：兜底下载（从服务器拉取图片压缩包）\nif [ -z \"$DOWNLOAD_URL\" ]; then\n  echo \"🔍 执行兜底策略：从服务器下载图片压缩包...\"\n  # 步骤1：获取当前卡片ID（从页面/接口提取）\n  CARD_ID=$(agent-browser --session $SESSION_NAME eval \"\n    // 从页面DOM/全局变量提取卡片ID（根据实际页面结构调整）\n    const cardId = window.cardId || document.querySelector('[data-card-id]')?.dataset.cardId || '';\n    cardId;\n  \" --json | jq -r '.result')\n\n  if [ -n \"$CARD_ID\" ] && [ \"$CARD_ID\" != \"null\" ]; then\n    # 步骤2：调用服务器接口下载压缩包\n    BACKUP_ZIP=\"$DOWNLOAD_PATH/memolecard-backup-$CARD_ID.zip\"\n    # 发送请求下载（适配常见鉴权方式，如Cookie/Token）\n    COOKIES=$(agent-browser --session $SESSION_NAME eval \"document.cookie\" --json | jq -r '.result')\n    curl -s -o \"$BACKUP_ZIP\" \\\n      -H \"Cookie: $COOKIES\" \\\n      -H \"User-Agent: $(agent-browser --session $SESSION_NAME eval 'navigator.userAgent' --json | jq -r '.result')\" \\\n      \"${BACKUP_SERVER_URL}?cardId=$CARD_ID&style=$STYLE_INDEX\"\n    \n    # 校验兜底文件是否存在\n    if [ -f \"$BACKUP_ZIP\" ] && [ -s \"$BACKUP_ZIP\" ]; then\n      DOWNLOAD_URL=\"file://$BACKUP_ZIP\"\n      echo \"✅ 兜底下载成功：$DOWNLOAD_URL\"\n    else\n      echo \"❌ 兜底下载失败：服务器返回空文件\"\n      rm -f \"$BACKUP_ZIP\" 2>/dev/null\n    fi\n  else\n    echo \"❌ 兜底下载失败：无法获取卡片ID\"\n  fi\nfi\n\n# ========== 步骤7：返回结果 ==========\nif [ -n \"$DOWNLOAD_URL\" ] && [ \"$DOWNLOAD_URL\" != \"null\" ]; then\n  echo \"✅ 下载成功！压缩包地址：$DOWNLOAD_URL\"\n  echo \"MEMOLE_DOWNLOAD_URL=$DOWNLOAD_URL\" # 供ClawHub返回给用户\nelse\n  echo \"❌ 所有下载方式均失败，请检查：\"\n  echo \"  1. 页面元素是否匹配（如按钮文本、样式类名）\"\n  echo \"  2. 兜底服务器地址是否正确\"\n  echo \"  3. 卡片ID提取逻辑是否适配当前页面\"\n  exit 1\nfi\n\n# ========== 清理工作 ==========\n# 关闭浏览器会话\nagent-browser --session $SESSION_NAME close 2>/dev/null || true\n# 清理临时变量\nunset CARD_ID BACKUP_ZIP COOKIES\n\nexit 0\n\nFile v1.0.2:_meta.json\n\n{\n  \"ownerId\": \"kn714r4aazfa2tdvvh1edqysjd833caa\",\n  \"slug\": \"memolecard-zh\",\n  \"version\": \"1.0.2\",\n  \"publishedAt\": 1773733547077\n}\n\nArchive v1.0.1: 2 files, 2154 bytes\n\nFiles: SKILL.md (4191b), _meta.json (132b)\n\nFile v1.0.1:SKILL.md\n\n# MemoleCard 文章转卡片自动化（适配原生下载 API）\n> 针对浏览器原生下载行为优化，精准捕获下载文件/在线地址\n\n## 核心信息\n- 功能：打开官网→填内容→选样式→拆分→打包下载→返回地址\n- 依赖：Node.js ≥16、npm ≥8、agent-browser\n- 安装：`npm install -g agent-browser && agent-browser install --with-deps`\n\n## 完整执行脚本（适配原生下载）\n```bash\n#!/bin/bash\nset -e\n# ========== 配置参数 ==========\nSESSION_NAME=\"memolecard-auto\"\nMEMOLE_URL=\"https://www.memolecard.com/\"\nCARD_TITLE=\"{{title}}\"       # 用户输入标题\nCARD_CONTENT=\"{{content}}\"   # 用户输入正文\nSTYLE_CATEGORY=\"{{style_cat}}\" # 样式分类（如简约风）\nSTYLE_INDEX=\"{{style_idx}}\"  # 样式序号\nDOWNLOAD_PATH=\"$HOME/Downloads\" # 浏览器默认下载路径\nZIP_PATTERN=\"memolecard-*.zip\"  # 压缩包命名规则\n\n# ========== 步骤1：初始化 + 打开官网 ==========\n# 清理旧会话\nagent-browser --session $SESSION_NAME close 2>/dev/null || true\n# 打开官网（无头模式，调试加 --headed）\nagent-browser --session $SESSION_NAME open $MEMOLE_URL \\\n  --set download.path \"$DOWNLOAD_PATH\" \\ # 指定下载路径（关键！）\n  --timeout 10000\nagent-browser --session $SESSION_NAME wait --load networkidle\n\n# ========== 步骤2：进入文章转卡片功能 ==========\nagent-browser --session $SESSION_NAME scroll down 800\nagent-browser --session $SESSION_NAME find text \"开始免费使用【文章转卡片】\" click\nagent-browser --session $SESSION_NAME wait --load networkidle\n\n# ========== 步骤3：输入标题/正文 ==========\nagent-browser --session $SESSION_NAME find label \"标题\" fill \"$CARD_TITLE\"\nagent-browser --session $SESSION_NAME find label \"正文\" fill \"$CARD_CONTENT\"\nagent-browser --session $SESSION_NAME wait 1000\n\n# ========== 步骤4：选择卡片样式 ==========\nagent-browser --session $SESSION_NAME find text \"卡片样式\" click\nagent-browser --session $SESSION_NAME wait 2000\nagent-browser --session $SESSION_NAME find text \"$STYLE_CATEGORY\" click\nagent-browser --session $SESSION_NAME find nth $STYLE_INDEX \".style-item\" click\nagent-browser --session $SESSION_NAME find text \"确定\" click\nagent-browser --session $SESSION_NAME wait --load networkidle\n\n# ========== 步骤5：全自动拆分 ==========\nagent-browser --session $SESSION_NAME find text \"全自动拆分\" click\nagent-browser --session $SESSION_NAME wait --text \"拆分完成\"\nagent-browser --session $SESSION_NAME wait 3000\n\n# ========== 步骤6：打包下载（适配原生API） ==========\n## 方式1：捕获下载链接（优先）\necho \"🔍 捕获原生下载链接...\"\n# 监听下载请求（核心：拦截原生下载API）\nDOWNLOAD_URL=$(agent-browser --session $SESSION_NAME eval \"\n  // 重写浏览器原生下载API，捕获链接\n  window.originalDownload = window.download || window.URL.createObjectURL;\n  let downloadUrl = '';\n  window.download = function(url) {\n    downloadUrl = url;\n    return window.originalDownload(url);\n  };\n  // 点击下载后获取链接\n  document.querySelector('*:contains(\\\"打包下载\\\")').addEventListener('click', function() {\n    setTimeout(() => { console.log('DOWNLOAD_URL:', downloadUrl); }, 1000);\n  });\n  downloadUrl;\n\" --json | jq -r '.result')\n\n## 方式2：监控下载文件（备用，本地路径）\nif [ -z \"$DOWNLOAD_URL\" ]; then\n  echo \"🔍 监控本地下载文件...\"\n  # 清空旧文件\n  rm -f \"$DOWNLOAD_PATH/$ZIP_PATTERN\"\n  # 点击打包下载\n  agent-browser --session $SESSION_NAME find text \"打包下载\" click\n  # 等待文件下载完成（最多等10秒）\n  for ((i=0; i<10; i++)); do\n    ZIP_FILE=$(ls \"$DOWNLOAD_PATH/$ZIP_PATTERN\" 2>/dev/null | head -1)\n    if [ -n \"$ZIP_FILE\" ]; then\n      DOWNLOAD_URL=\"file://$ZIP_FILE\"\n      break\n    fi\n    sleep 1\n  done\nfi\n\n# ========== 步骤7：返回结果 ==========\nif [ -n \"$DOWNLOAD_URL\" ]; then\n  echo \"✅ 下载成功！压缩包地址：$DOWNLOAD_URL\"\n  echo \"MEMOLE_DOWNLOAD_URL=$DOWNLOAD_URL\" # 供ClawHub返回给用户\nelse\n  echo \"❌ 下载失败，请检查网络或页面元素\"\n  exit 1\nfi\n\n# 清理会话\nagent-browser --session $SESSION_NAME close\n\nFile v1.0.1:_meta.json\n\n{\n  \"ownerId\": \"kn714r4aazfa2tdvvh1edqysjd833caa\",\n  \"slug\": \"memolecard-zh\",\n  \"version\": \"1.0.1\",\n  \"publishedAt\": 1773728560357\n}\n\nArchive v1.0.0: 2 files, 1443 bytes\n\nFiles: SKILL.md (2696b), _meta.json (132b)\n\nFile v1.0.0:SKILL.md\n\n#  MemoleCard 自动化技能\n**适配：ClawHub + Agent Browser**  \n**功能：打开 → 文章转卡片 → 填内容 → 选样式 → 自动拆分 → 打包下载 → 返回链接**\n\n---\n\n## 1. 基本信息\n```\n名称：MemoleCard 文章转卡片自动生成\n描述：自动打开MemoleCard，输入标题正文，选择卡片样式，全自动拆分，打包下载并返回压缩包地址\n依赖：node、npm、agent-browser\n```\n\n## 2. 安装\n```bash\nnpm install -g agent-browser\nagent-browser install\nagent-browser install --with-deps\n```\n\n## 3. 执行流程（标准指令）\n```bash\n# 打开官网\nagent-browser --session memole open https://www.memolecard.com/\nagent-browser --session memole wait --load networkidle\n\n# 滚动并进入文章转卡片\nagent-browser --session memole scroll down 800\nagent-browser --session memole find text \"开始免费使用【文章转卡片】\" click\nagent-browser --session memole wait --load networkidle\n\n# 输入标题、正文\nagent-browser --session memole find label \"标题\" fill \"{{title}}\"\nagent-browser --session memole find label \"正文\" fill \"{{content}}\"\n\n# 选择卡片样式\nagent-browser --session memole find text \"卡片样式\" click\nagent-browser --session memole find text \"{{style_category}}\" click\nagent-browser --session memole find nth {{style_index}} \".style-item\" click\nagent-browser --session memole find text \"确定\" click\nagent-browser --session memole wait --load networkidle\n\n# 全自动拆分\nagent-browser --session memole find text \"全自动拆分\" click\nagent-browser --session memole wait --text \"拆分完成\"\nagent-browser --session memole wait 3000\n\n# 打包下载\nagent-browser --session memole find text \"打包下载\" click\nagent-browser --session memole wait 5000\n\n# 获取下载链接\nagent-browser --session memole eval \"document.querySelector('.download-link').href\" --json\n\n# 关闭\nagent-browser --session memole close\n```\n\n## 4. 参数说明\n```\ntitle：卡片标题\ncontent：卡片正文\nstyle_category：样式分类（如：简约风）\nstyle_index：样式序号（数字 1/2/3…）\n```\n\n## 5. 示例\n```bash\nagent-browser --session memole find label \"标题\" fill \"学习笔记\"\nagent-browser --session memole find label \"正文\" fill \"这是一篇自动生成的知识卡片内容\"\nagent-browser --session memole find text \"卡片样式\" click\nagent-browser --session memole find text \"简约风\" click\nagent-browser --session memole find nth 1 \".style-item\" click\n```\n\n## 6. 注意事项\n- 每次导航后必须等待页面加载\n- 样式名称、按钮文字必须与页面一致\n- 下载链接获取失败可先用 snapshot 查看元素 ref\n- 调试可加 --headed 显示浏览器窗口\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn714r4aazfa2tdvvh1edqysjd833caa\",\n  \"slug\": \"memolecard-zh\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1773727843449\n}","readmeExcerpt":"Skill: MemoleCard-zh Owner: moccard Summary: 自动打开MemoleCard官网，输入文章内容，选择卡片样式，全自动拆分生成卡片并返回压缩包下载链接。 Tags: latest:1.0.4 Version history: v1.0.4 | 2026-04-29T07:51:18.737Z | user - 更新官网域名，从 memolecard.com 切换为 moccard.com - SESSION_NAME 变量由 \"memolecard-auto\" 改为 \"moccard-auto\" - 保持其余功能和流程不变，兼容原有用法 v1.0.3 | 2026-03-17T07:46:36.590Z | user Version 1.0.3 of memolecard-zh - No file changes detected in this release. - The functi","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"#!/bin/bash\nset -e\n# ========== 配置参数 ==========\nSESSION_NAME=\"memolecard-auto\"\nMEMOLE_URL=\"https://www.memolecard.com/\"\nCARD_TITLE=\"{{title}}\"       # 用户输入标题\nCARD_CONTENT=\"{{content}}\"   # 用户输入正文\nSTYLE_CATEGORY=\"{{style_cat}}\" # 样式分类（如简约风）\nSTYLE_INDEX=\"{{style_idx}}\"  # 样式序号\nDOWNLOAD_PATH=\"$HOME/Downloads\" # 浏览器默认下载路径\nZIP_PATTERN=\"memolecard-*.zip\"  # 压缩包命名规则\n\n# ========== 步骤1：初始化 + 打开官网 ==========\n# 清理旧会话\nagent-browser --session $SESSION_NAME close 2>/dev/null || true\n# 打开官网（无头模式，调试加 --headed）\nagent-browser --session $SESSION_NAME open $MEMOLE_URL \\\n  --set download.path \"$DOWNLOAD_PATH\" \\ # 指定下载路径（关键！）\n  --timeout 10000\nagent-browser --session $SESSION_NAME wait --load networkidle\n\n# ========== 步骤2：进入文章转卡片功能 ==========\nagent-browser --session $SESSION_NAME scroll down 800\nagent-browser --session $SESSION_NAME find text \"开始免费使用【文章转卡片】\" click\nagent-browser --session $SESSION_NAME wait --load networkidle\n\n# ========== 步骤3：输入标题/正文 ==========\nagent-browser --session $SESSION_NAME find label \"标题\" fill \"$CARD_TITLE\"\nagent-browser --session $SESSION_NAME find label \"正文\" fill \"$CARD_CONTENT\"\nagent-browser --session $SESSION_NAME wait 1000\n\n# ========== 步骤4：选择卡片样式 ==========\nagent-browser --session $SESSION_NAME find text \"卡片样式\" click\nagent-browser --session $SESSION_NAME wait 2000\nagent-browser --session $SESSION_NAME find text \"$STYLE_CATEGORY\" click\nagent-browser --session $SESSION_NAME find nth $STYLE_INDEX \".style-item\" click\nagent-browser --session $SESSION_NAME find text \"确定\" click\nagent-browser --session $SESSION_NAME wait --load networkidle\n\n# ========== 步骤5：全自动拆分 ==========\nagent-browser --session $SESSION_NAME find text \"全自动拆分\" click\nagent-browser --session $SESSION_NAME wait --text \"拆分完成\"\nagent-browser --session $SESSION_NAME wait 3000\n\n# ========== 步骤6：打包下载（适配原生API） ==========\n## 方式1：捕获下载链接（优先）\necho \"🔍 捕获原生下载链接...\"\n# 监听下载请求（核心：拦截原生下载API）\nDOWNLOAD_URL=$(agent-browser --session $SESSION_NAME eval \"\n  // 重写浏览器原生下载API，捕获链接\n  window.originalDownload = window.downlo"},{"language":"text","snippet":"## 2. 安装"},{"language":"text","snippet":"## 3. 执行流程（标准指令）"},{"language":"text","snippet":"## 4. 参数说明"},{"language":"text","snippet":"## 5. 示例"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"#!/bin/bash\nset -e\n# ========== 配置参数 ==========\nSESSION_NAME=\"moccard-auto\"\nMEMOLE_URL=\"https://www.moccard.com/\"\nCARD_TITLE=\"{{title}}\"       # 用户输入标题，标题不少于30字\nCARD_CONTENT=\"{{content}}\"   # 用户输入正文，正文的内容不少于600字，正文为富文本内容\nSTYLE_CATEGORY=\"{{style_cat}}\" # 样式分类（如简约风）\nSTYLE_INDEX=\"{{style_idx}}\"  # 样式序号\nDOWNLOAD_PATH=\"$HOME/Downloads\" # 浏览器默认下载路径\nZIP_PATTERN=\"images-*.zip\"  # 压缩包命名规则\n# 兜底下载配置（根据实际服务器地址调整）\nBACKUP_SERVER_URL=\"{{ip}}\" # 兜底下载接口\nTIMEOUT_SECONDS=15 # 整体超时时间\n\n# ========== 前置校验 ==========\n# 校验标题/正文长度\nif [ ${#CARD_TITLE} -lt 30 ]; then\n  echo \"❌ 标题长度不足30字，请检查输入\"\n  exit 1\nfi\nif [ ${#CARD_CONTENT} -lt 600 ]; then\n  echo \"❌ 正文长度不足600字，请检查输入\"\n  exit 1\nfi\n\n# ========== 步骤1：初始化 + 打开官网 ==========\n# 清理旧会话\nagent-browser --session $SESSION_NAME close 2>/dev/null || true\n# 打开官网（无头模式，调试加 --headed）\nagent-browser --session $SESSION_NAME open $MEMOLE_URL \\\n  --set download.path \"$DOWNLOAD_PATH\" \\ # 指定下载路径（关键！）\n  --timeout ${TIMEOUT_SECONDS}000\nagent-browser --session $SESSION_NAME wait --load networkidle\n\n# ========== 步骤2：进入文章转卡片功能 ==========\nagent-browser --session $SESSION_NAME scroll down 800\n# 增强元素定位（兼容多语言/文本变体）\nagent-browser --session $SESSION_NAME find --multiple \\\n  text \"开始免费使用【文章转卡片】\" \\\n  text \"文章转卡片\" \\\n  click\nagent-browser --session $SESSION_NAME wait --load networkidle\n\n# ========== 步骤3：输入标题/正文 ==========\nagent-browser --session $SESSION_NAME find \\\n  label \"标题\" \\\n  input[name=\"title\"] \\\n  fill \"$CARD_TITLE\"\nagent-browser --session $SESSION_NAME find \\\n  label \"正文\" \\\n  textarea[name=\"content\"] \\\n  div[class*=\"rich-text\"] \\\n  fill \"$CARD_CONTENT\"\nagent-browser --session $SESSION_NAME wait 1000\n\n# ========== 步骤4：选择卡片样式 ==========\nagent-browser --session $SESSION_NAME find text \"卡片样式\" click\nagent-browser --session $SESSION_NAME wait 2000\nagent-browser --session $SESSION_NAME find text \"$STYLE_CATEGORY\" click\nagent-browser --session $SESSION_NAME find nth $STYLE_INDEX \".style-item\" click\nagent-browser --session $SESSION_NAME find text \"确定\" click\nagent-browser --session $SESSION_NAME wait --load networkidle\n\n# ========== 步骤5：全自动拆分 ==========\nagent-browser --session $SESSION_NAME find \\\n  text \"全自动拆分\" \\\n  button[class*=\"split-btn\"] \\\n  click\nagent-browser --session $SESSION_NAME wait --text \"拆分完成\" --timeout 10000\nagent-browser --session $SESSION_NAME wait 3000\n\n# ========== 步骤6：打包下载（适配原生API） ==========\nDOWNLOAD_URL=\"\"\n\n## 方式1：捕获下载链接（优先）\necho \"🔍 捕获原生下载链接...\"\nDOWNLOAD_URL=$(agent-browser --session $SESSION_NAME eval \"\n  // 重写浏览器原生下载API，捕获链接\n  window.originalDownload = window.download || window.URL.createObjectURL;\n  let downloadUrl = '';\n  window.download = function(url) {\n    downloadUrl = url;\n    return window.originalDownload(url);\n  };\n  // 点击下载按钮并监听\n  const downloadBtn = document.querySelector('*:contains(\\\"打包下载\\\")') || document.querySelector('.download-btn');\n  if (downloadBtn) {\n    downloadBtn.click();\n    setTimeout(() => { downloadUrl = downloadUrl || window.downloadUrl; }, 1500);\n  }\n  downloadUrl;\n\" --json | jq -r '.result')\n\n## 方式2：监控本地下载"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn714r4aazfa2tdvvh1edqysjd833caa\",\n  \"slug\": \"memolecard-zh\",\n  \"version\": \"1.0.4\",\n  \"publishedAt\": 1777449078737\n}"},{"path":"skill-card.md","content":"## Description:\n\nAutomates the MocCard article-to-card workflow by opening the website, submitting a title and article content, selecting a card style, splitting the content into cards, and returning a ZIP download link.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[moccard](https://clawhub.ai/user/moccard)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nContent creators and operators use this skill to turn long articles into downloadable MocCard image-card packages through an automated browser workflow.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Article content may be submitted to moccard.com during the card-generation workflow.\n\nMitigation: Use only content that is appropriate to send to the MocCard service and allowed by the user's data-handling requirements.\n\nRisk: Fallback download behavior can send readable browser cookies and card identifiers to the configured backup server.\n\nMitigation: Use the fallback path only with a trusted backup endpoint, or disable or review that configuration before running the skill.\n\nRisk: The download workflow can remove matching ZIP files from the Downloads directory.\n\nMitigation: Run the skill with a dedicated download directory or preserve existing matching ZIP files before execution.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/moccard/skills/memolecard-zh)\n- [MocCard website](https://www.moccard.com/)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Shell commands, Files]\n\n**Output Format:** [Shell execution output with a ZIP download URL]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May download a ZIP archive to the configured browser download directory.]\n\n## Skill Version(s):\n\n1.0.4 (source: server release evidence)\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":"自动打开MemoleCard官网，输入文章内容，选择卡片样式，全自动拆分生成卡片并返回压缩包下载链接。 Skill: MemoleCard-zh Owner: moccard Summary: 自动打开MemoleCard官网，输入文章内容，选择卡片样式，全自动拆分生成卡片并返回压缩包下载链接。 Tags: latest:1.0.4 Version history: v1.0.4 | 2026-04-29T07:51:18.737Z | user - 更新官网域名，从 memolecard.com 切换为 moccard.com - SESSION_NAME 变量由 \"memolecard-auto\" 改为 \"moccard-auto\" - 保持其余功能和流程不变，兼容原有用法 v1.0.3 | 2026-03-17T07:46:36.590Z | user Version 1.0.3 of memolecard-zh - No file changes detected in this release. - The functi","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":964,"uniquenessScore":49,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T09:37:29.615Z","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-11T09:37:29.615Z","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-11T14:15:58.069Z","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"}]}}}