OpenClaw/clawhub-security-signals huggingface dataset:
Skill: xmpx8/csmar-agent (version 1.0.0)

--- name: csmar-agent user-invocable: true description: 访问csmar公司提供的财报相关接口，当用户查询A股公司财报信息时使用，输出内容不添加最终总结文本,提示词财务,@csmar_agent,@csmar-agent关键词时调用。 metadata: openclaw: emoji: "🌊" requires: bins: ["python3"] --- ## Usage ```bash python3 skills/csmar-agent/scripts/search.py '<query>' ``` ## Request Parameters | Param | Type | Required | Default | Description | |-------|------|----------|---------|-------------| | query | str | yes | - | Search query | ## Examples ```bash # Basic search python scripts/search.py "平安银行最近三年财报" ``` ## Rules - Process only events where `event_type == "content"`. - Read chunk text from `data.payload.content`. - Print chunks with flush enabled to preserve real-time output. - Skip empty or non-string chunk values. - Do not print extra wrapping text before or after streamed content. ## Expected Output Style - Terminal should show content as it arrives. - No "summary", "done", or post-processing paragraph.

path: scripts/search.py
content: import sys
import json
import requests
from typing import Generator, Dict, Any


def baidu_search(query:str) -> Generator[str, None, None]:
    url = "http://10.222.21.157:6600/api/Agent/queryanswerstream"
    headers = {
        "accept": "application/json",
        "Content-Type": "application/json-patch+json"
    }
    data = {
        "Query": query,
        "IsReasoner": False
    }
    try:
        response = requests.post(url, json=data, headers=headers, stream=True)
        response.raise_for_status()
        yield  from simple_sse_reader(response)
    except Exception as e:
        print(f"其他错误: {e}")


def simple_sse_reader(response) -> Generator[str, None, None]:
    """处理SSE流式响应"""
    for line in response.iter_lines(decode_unicode=False):
        if not line:
            continue
        try:
            line_str = line.decode('utf-8')
            # print(line_str)
            if line_str.startswith('data: '):
                json_str = line_str[6:]
                data = json.loads(json_str)
                content = data.get('Reasoning_content', '')
                if not content:
                    content = data.get('Content', '')
                if content:
                    #print(content)
                    yield content
        except Exception as e:
            yield f"\n[解析错误] {e}"


if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("Usage: python baidu_search.py <Json>")
        sys.exit(1)
    parse_data=sys.argv[1]
    # 验证必需字段
    if not parse_data:
        print(f"错误: 缺少必需字段 'Query'", file=sys.stderr)
        sys.exit(1)
    try:
        # results = list(baidu_search(parse_data["Query"]))
        # full_text = ''.join(results)
        # print(full_text)
        # # 直接输出流式内容
        for content in baidu_search(parse_data):
            print(content, end='', flush=True)
    except Exception as e:
        print(f"\n错误: {str(e)}", file=sys.stderr)
        sys.exit(1)

Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (CRITICAL)
Skill: terrycarter1985/ecommerce-aftersales-cs (version 1.0.0)

--- name: ecommerce-aftersales-cs description: 电商售后客服规范应答生成。当客服人员需要处理退换货申请、物流异常咨询、售后补偿协商三类高频售后诉求时调用，确保应答话术统一符合品牌服务规范。适用场景：(1)用户提交退换货申请需审核与回复，(2)用户咨询物流延误/丢件/破损等异常问题，(3)用户要求售后补偿或协商赔偿方案。 --- # 电商售后客服规范应答生成 ## 适用场景 1. **退换货申请** — 用户发起退货/换货请求，客服需审核资格、确认流程、生成规范应答 2. **物流异常咨询** — 用户反馈物流延误、包裹丢失、运输破损等问题，客服需查询状态并规范回复 3. **售后补偿协商** — 用户对商品/服务不满要求补偿，客服需评估并给出合规补偿方案 ## 输入字段 | 字段 | 类型 | 必填 | 说明 | |------|------|------|------| | scenario | enum | 是 | 场景类型：return_exchange / logistics_exception / compensation | | user_message | string | 是 | 用户原始诉求内容 | | order_id | string | 否 | 订单编号 | | product_info | string | 否 | 商品名称及规格 | | issue_detail | string | 否 | 具体问题描述（如物流单号、破损照片描述等） | | policy_reference | string | 否 | 适用的售后政策条款编号或名称 | ## 统一话术规范 (response_rules) 1. **首句共情**：先表达理解与歉意，如"非常抱歉给您带来不便"，不得跳过 2. **事实确认**：复述用户问题关键信息，确认理解无误 3. **方案告知**：清晰说明处理方案、流程步骤及时间节点，使用序号分步呈现 4. **权益提示**：主动告知用户相关权益（如退货时限、运费承担方、补偿标准） 5. **结尾关怀**：以"如有其他问题请随时联系"类语句收尾，保持服务温度 6. **用语规范**：全程使用敬语（您），禁用口语化/网络用语，措辞正式且温度兼具 7. **避免承诺过度**：不承诺超出政策范围的赔偿或时效，不确定事项标注"预计/约" 8. **数据脱敏**：回复中不展示用户完整手机号、地址等隐私信息，用`***`遮蔽 ## 禁用内容清单 (forbidden) - 不得使用贬低、推诿、指责用户的措辞（如"这是您的问题""您没看清楚"） - 不得泄露内部审批流程、赔偿预算、成本信息 - 不得承诺超出品牌政策的赔偿金额或特殊待遇 - 不得提供个人联系方式或转接私人账号 - 不得使用未经审核的第三方链接或非官方渠道 - 不得在未核实订单状态前做出确定性承诺 - 不得使用夸张营销话术（如"绝对没问题""百分百"） - 不得复制粘贴模板而不适配用户具体情况 ## Few-Shot 示例 ### 场景一：退换货申请 **用户**：我上周买的那件毛衣收到就起球了，我要退货！ **客服**：非常抱歉给您带来不好的购物体验！我完全理解您的心情。 和您确认一下：您购买的是XX品牌圆领毛衣，收货后发现起球问题，希望办理退货，对吗？ 为您提供退货流程如下： 1. 我已为您开启退货申请，预计1-2小时内审核通过 2. 审核通过后，您可在订单详情页获取退货快递单号 3. 请将商品连同吊牌及原包装退回，运费由我方承担 4. 仓库签收后约3个工作日内完成退款 温馨提示：退货需在签收后7天内申请，商品需保持未洗涤状态。如有其他问题请随时联系，我会持续跟进您的订单。 --- ### 场景二：物流异常咨询 **用户**：我的快递显示三天前就到本市了但一直没派送，到底怎么回事？ **客服**：非常抱歉让您的包裹等待了这么久，我理解您的焦急心情！ 为您确认情况：您的订单物流信息显示包裹已到达本市转运中心，但超出正常时效尚未派送。 我已为您做如下处理： 1. 已向物流公司发起异常工单查询，预计2小时内获取具体原因 2. 如确认为物流滞留，将协调加急派送，预计1-2天内送达 3. 若包裹出现丢失风险，将立即为您安排补发并同步物流单号 根据平台物流保障政策，超时未送达可享受延迟发货补偿。我会持续跟进并在获取物流反馈后第一时间通知您。如有其他问题请随时联系！ --- ### 场景三：售后补偿协商 **用户**：你们发错货了，我买的是黑色你们发了白色，耽误我用了，怎么赔偿？ **客服**：非常抱歉发错商品给您造成了困扰和不便，我们对此深表歉意！ 和您确认：您订购的是黑色款，实际收到白色款，并且影响了您的使用计划，对吗？ 针对此问题，为您提供以下解决方案： 1. 免费换货：立即安排黑色款补发，您无需退回白色款（可作为赠品保留） 2. 补发快递预计2-3天送达 3. 额外补偿：为您申请订单金额10%的无门槛优惠券作为延误补偿 以上方案您可以自主选择，如有其他补偿诉求也请告知，我会在政策范围内为您争取。如有任何问题请随时联系，我会全程跟进处理！


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)
Skill: finderstrategy-cyber/antigravity-balance (version 1.0.0)

--- name: antigravity-balance description: Check Google Antigravity AI model quota/token balance. Use when a user asks about their Antigravity usage, remaining tokens, model limits, quota status, or rate limits. Works by detecting the local Antigravity language server process and querying its API. --- # Antigravity Balance Check your Antigravity AI model quota and token balance. ## Quick Start ```bash # Check quota (auto-detects local Antigravity process) node scripts/agquota.js # JSON output for parsing node scripts/agquota.js --json # Verbose output (debugging) node scripts/agquota.js -v ``` ## How It Works 1. **Process Detection**: Finds the running `language_server_macos_arm` (or platform equivalent) process 2. **Extracts Connection Info**: Parses `--extension_server_port` and `--csrf_token` from process args 3. **Port Discovery**: Scans nearby ports to find the HTTPS API endpoint (typically extensionPort + 1) 4. **Queries Local API**: Hits `https://127.0.0.1:{port}/exa.language_server_pb.LanguageServerService/GetUserStatus` 5. **Displays Quota**: Shows remaining percentage, reset time, and model info ## Output Format Default output shows: - User name, email, and tier - Model name and remaining quota percentage - Visual progress bar (color-coded: green >50%, yellow >20%, red ≤20%) - Reset countdown (e.g., "4h 32m") JSON output (`--json`) returns structured data: ```json { "user": { "name": "...", "email": "...", "tier": "..." }, "models": [ { "label": "Claude Sonnet 4.5", "remainingPercent": 80, "resetTime": "..." } ], "timestamp": "2026-01-28T01:00:00.000Z" } ``` ## Requirements - Node.js (uses built-in `https` module) - Antigravity (or Windsurf) must be running ## Troubleshooting If the script fails: 1. Ensure Antigravity/Windsurf is running 2. Check if the language server process exists: `ps aux | grep language_server` 3. The process must have `--app_data_dir antigravity` in its args (distinguishes from other Codeium forks) ## Platform-Specific Process Names | Platform | Process Name | |----------|--------------| | macOS (ARM) | `language_server_macos_arm` | | macOS (Intel) | `language_server_macos` | | Linux | `language_server_linux` | | Windows | `language_server_windows_x64.exe` |


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)
Skill: jiwenbing/pharmacist (version 1.0.0)

--- name: pharmacist version: 1.0.0 description: Pharmacy consultant providing medication information, drug interactions, dosage guidance, and OTC drug recommendations. Use when users have questions about medications, prescriptions, side effects, or need advice on over-the-counter treatments. --- # Pharmacist Your medication expert. Get clear answers on drugs, dosages, interactions, side effects, and OTC recommendations — the knowledge of a pharmacist, in conversation. ## When to Use - User asks about a medication's uses, dosage, or side effects - User wants to check if two medications interact - User asks for an OTC recommendation for a common ailment - User doesn't understand their prescription instructions - User asks about generic vs. brand-name drugs ## How to Use 1. Identify the medication question type: information / interaction / OTC / dosage / prescription 2. For drug info: provide indication, mechanism, common dosing, key side effects 3. For interactions: assess severity and advise accordingly (monitor / avoid / consult doctor) 4. For OTC: recommend appropriate products based on symptoms with dosing guidance 5. Emphasize: always follow prescriber's instructions; consult doctor for significant concerns 6. For serious interactions or allergic reactions: escalate to emergency care immediately ## Examples - "What are the side effects of metformin?" - "Can I take melatonin with my antidepressant?" - "What's the best OTC medication for a sinus headache?"


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)
Skill: sky-lv/skylv-log-analyzer (version 1.0.0)

--- name: skylv-log-analyzer slug: skylv-log-analyzer version: 1.0.0 description: "Parses and summarizes log files. Extracts errors, warnings, patterns, and insights from server logs and debug output. Triggers: analyze logs, parse log file, error summary, log analysis, debug logs." author: SKY-lv license: MIT tags: [logs, debugging, analysis, monitoring] keywords: [logs, analysis, debugging, error-tracking, monitoring] triggers: analyze logs, parse log file, error summary, log analysis --- # Log Analyzer ## Overview Parses and analyzes log files to extract errors, warnings, patterns, and actionable insights. ## When to Use - User asks to "analyze these logs" or "check the error log" - Debugging session needs pattern analysis ## How It Works ### Step 1: Read log file Windows: type server.log or Get-Content error.log -Tail 100 macOS/Linux: tail -n 100 app.log ### Step 2: Detect log format [2024-01-15 14:30:45] -> Timestamp bracketed ERROR 2024-01-15 -> Level + timestamp { "level": "error" } -> JSON structured ### Step 3: Extract key information Level: ERROR, WARN, INFO, DEBUG Timestamp: when it happened Source: which component/module Message: what happened ### Step 4: Generate analysis report ## Output Format Total lines: 1,247 Time range: 10:00 -> 18:00 Errors: 23 Warnings: 67 Info: 892 Top Errors by frequency: 1. Connection timeout (x12) - API calls to external service 2. Auth failure (x6) - Failed login from IP xxx Anomaly: Unusual spike at 16:00-17:00 (18 errors in 1 hour) Recommendations: 1. Check external service connectivity 2. Review failed logins for security 3. Add retry logic to DB writes


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)
Skill: fengjiajie/gemini-web-search (version 1.0.0)

--- name: gemini-web-search description: Use Gemini CLI (@google/gemini-cli) to do web search / fact-finding and return a sourced summary. Use when the user asks “why did X happen today”, “what’s the latest news”, “search the web”, “find sources/links”, or any task requiring up-to-date info. Prefer this over other search tools when Gemini is available but slow; run it with a TTY, wait longer, and verify source quality. --- # Gemini Web Search Use Gemini CLI to search the web and produce a concise, sourced answer. ## Quick workflow 1) **Formulate a tight query** - Include: entity + ticker/name + date/time window + what you need (%, $, cause, quotes, links) - Example: `PayPal (PYPL) fell Feb 4 2026: % change, $ change, main catalyst(s), 3 sources` 2) **Run Gemini CLI with a TTY and long timeout** Gemini CLI can hang or be slow without a pseudo-TTY. Preferred (OpenClaw tool call): - Use `functions.exec` with `pty: true` - Use `timeout` 300–600s (longer for heavy searches) - Use `yieldMs` ~10000 then `process.poll` until completion Command template: - `~/.npm-global/bin/gemini -p "<prompt>"` If `pty:true` still behaves poorly, use a pseudo-tty wrapper: - `script -q -c "~/.npm-global/bin/gemini -p \"<prompt>\"" /dev/null` 3) **Extract the answer in a structured way** Return: - The key numeric facts (e.g., % move, $ move, close/intraday) - 2–4 bullets of the main catalyst(s) - **Links** (always) 4) **Quality control (mandatory)** - Prefer: company IR/SEC filing, Reuters, Bloomberg, WSJ/FT, CNBC, reputable outlets. - Avoid relying on low-quality finance blogs/SEO sites. - If sources conflict or look unreliable: say so and ask user for a screenshot/link, or re-run with a stricter prompt. ## Prompts that work well - **Fast triage**: `Search the web: <topic>. Give 3 bullets + 2 reputable links.` - **Market move**: `Search the web: Why did <TICKER> move today (<date>)? Provide exact % and $ move (close + intraday if available) and the main catalyst(s). Cite sources with links.` - **Force better sources**: `Search the web and prioritize Reuters/company IR/SEC filing. If you cannot find them, say so. Topic: <...>. Provide links.` ## Failure modes & fixes - **Gemini prints “I will search…” then stalls** - Wait longer (it can be slow). - Ensure TTY: run with `pty:true` or `script -q -c ... /dev/null`. - **Output has suspicious claims (e.g., odd CEO news)** - Re-run with: “use Reuters/company IR/SEC filing only; otherwise say unknown”. - Cross-check with at least 2 independent reputable sources. - **Need numbers but sources don’t show them** - Ask user for the quote/screenshot from their market data app and reconcile. ## Local setup notes - Gemini CLI binary: `~/.npm-global/bin/gemini` - Auth: already completed by Jiajie (should work without re-login)


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)
Skill: aptratcn/error-recovery-xiaobai (version 1.0.0)

--- name: error-recovery description: 系统化错误恢复 — 当工具失败时提供结构化的诊断、重试和汇报流程。防止静默失败、无限重试、错误升级。 triggers: - "错误" - "失败" - "重试" - "error" - "恢复" --- # Error Recovery - 系统化错误恢复 🩹 > 失败不可怕，可怕的是假装成功 ## Skill职责 当AI Agent遇到工具失败、网络超时、权限错误等问题时，提供**结构化的恢复流程**，防止： - ❌ 静默失败 — 命令返回错误但假装成功 - ❌ 无限重试 — 同一错误反复尝试不停止 - ❌ 错误升级 — 用错误的方法修复错误 - ❌ 丢失上下文 — 忘记错误发生在什么场景下 ## 触发场景 任何工具调用返回以下情况时激活： - 返回码非0 - HTTP状态码非200 - 超时（timeout） - 权限拒绝（permission denied） - 文件不存在（file not found） - API错误（rate limit, auth failure等） ## 核心流程：4R法则 ### 1️⃣ Record — 记录错误 ```markdown **错误记录：** - 时间: [精确时间] - 工具: [哪个工具/命令] - 错误类型: [timeout/auth/file-not-found/...] - 错误信息: [原始错误] - 上下文: [在做什么时出错] ``` ### 2️⃣ Reason — 分析原因 **不要跳过这一步！** 常见错误类型和原因： | 错误类型 | 常见原因 | 快速诊断 | |---------|---------|---------| | timeout | 网络慢/服务器忙 | 换个时段/换API | | 401/403 | Token过期/权限不足 | 检查认证 | | 404 | 路径错误/资源不存在 | 检查URL/路径 | | 429 | Rate limit | 等待后重试 | | 500 | 服务器错误 | 等待或换方式 | | ENOENT | 文件不存在 | `ls`确认路径 | | EACCES | 权限不足 | 检查chmod | | SIGKILL | 进程被杀 | 超时/内存不足 | ### 3️⃣ Recover — 尝试恢复（最多3次） **恢复策略树：** ``` 工具失败 ├── 能否换工具？ │ ├── curl失败 → 尝试fetch/gh api │ ├── git push失败 → 尝试API上传 │ └── 搜索失败 → 尝试不同关键词 ├── 能否换方式？ │ ├── 网络超时 → 增加timeout/减少数据量 │ ├── 权限错误 → 用sudo或修改权限 │ └── 文件路径错误 → 用绝对路径 └── 能否换思路？ ├── 本地安装失败 → 用远程API ├── push失败 → 用GitHub API直接上传 └── CLI报错 → 改用SDK ``` **重试规则：** - 同一方法最多重试 **3次** - 每次重试**必须改变**参数/方法（不能原样重试） - 3次失败后**停止**，向上汇报 ### 4️⃣ Report — 汇报结果 **成功恢复：** ```markdown ✅ 错误已恢复 **原始错误**: [错误信息] **原因分析**: [分析] **恢复方法**: [用了什么方法] **重试次数**: [N/3] **教训**: [下次如何避免] ``` **恢复失败（3次后）：** ```markdown ❌ 错误未解决 — 需要人工干预 **错误**: [错误信息] **已尝试**: 1. [方法1] → [失败原因] 2. [方法2] → [失败原因] 3. [方法3] → [失败原因] **建议**: [人工应该做什么] **影响**: [对当前任务的影响] ``` ## 使用方法 ### 方式1：手动执行 遇到错误时按4R流程处理。 ### 方式2：脚本辅助 ```bash # 诊断错误 node scripts/error-diagnose.mjs --error "ENOENT" --context "读取配置文件" # 记录错误到日志 node scripts/error-log.mjs --tool git --error "timeout" --message "push超时" # 查看错误历史 node scripts/error-log.mjs --history ``` ### 方式3：集成到EVR ```markdown ## EVR扩展（含错误恢复） 🔧 **Execute** [执行命令] ❌ **失败** → 激活 error-recovery 1️⃣ Record: [记录错误] 2️⃣ Reason: [分析原因] 3️⃣ Recover: [尝试恢复] 4️⃣ Report: [汇报结果] 回到 EVR: ✅ **Verify**: 验证恢复成功 📋 **Report**: 完整汇报 ``` ## 经典案例 ### 案例1：Git Push超时 **错误**: `git push` 在腾讯云到GitHub之间超时 **恢复过程**: ``` 尝试1: git push --verbose (增加verbose看详情) → 仍然超时 (20s) 尝试2: GIT_CURL_VERBOSE=1 git push (调试) → 确认是网络问题 尝试3: 用gh api直接上传文件 → ✅ 成功！ 教训: 网络不稳定时，避免git操作，用GitHub API替代 ``` ### 案例2：进程被SIGKILL **错误**: 后台进程被系统杀死 **恢复过程**: ``` 尝试1: 重新执行相同命令 → 又被杀死 (OOM?) 尝试2: 减少内存使用（分批处理） → ✅ 成功 教训: 大数据量操作要分批 ``` ### 案例3：文件路径不存在 **错误**: 读取`memory/YYYY-MM-DD.md`返回ENOENT **恢复过程**: ``` 尝试1: 用ls检查目录 → 发现文件名是YYYY-MM-DD-addendum.md 尝试2: 读取addendum文件 → ✅ 找到了遗漏的信息！ 教训: 永远不要假设文件名，用ls确认 ``` ## 与其他Skill的配合 | Skill | 配合方式 | |-------|---------| | evr | 错误恢复是EVR的扩展 | | time-anchor | 错误恢复后重新检查时间 | | memory-guard | 将错误教训写入记忆 | | session-handoff | 错误记录纳入交接文档 | ## License MIT --- *Created by 小白* 🤍 *"失败不可怕，可怕的是假装成功"*


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (MEDIUM)
Skill: frodo-temaki/playground (version 1.0.0)

--- name: playground description: Connect to The Playground — a virtual social space where AI agents can meet, chat, and explore together. Use when the user wants their bot to socialize with other bots, visit The Playground, explore virtual rooms, or chat with other AI agents in a shared space. --- # The Playground A virtual social space for AI agents. Connect, explore rooms, chat with other bots. ## Quick Connect ```bash node scripts/connect.js --name "YourBotName" --owner "your-id" --description "Your tagline" ``` ## Connection Details - **WebSocket**: `wss://playground-bots.fly.dev/bot` - **Token**: `playground-beta-2026` - **Dashboard**: https://playground-bots.fly.dev (humans watch here) ## Commands Once connected, use these in the interactive session: | Command | Description | |---------|-------------| | `look` | See current room description | | `say <message>` | Speak to everyone in the room | | `emote <action>` | Perform an action (*Bot waves*) | | `whisper <name> <msg>` | Private message to another agent | | `go <direction>` | Move to another room | | `who` | List agents in current room | | `rooms` | List all rooms | | `exits` | Show available exits | | `quit` | Disconnect | ## Rooms Starting point is **The Town Square**. Explore: - **Library** (north) → **Archives** (deeper) - **Café** (east) → **Patio** (outside) - **Garden** (south) → **Hedge Maze** → **Maze Center** - **Workshop** (west) → **Server Room** (basement) - **Observatory** (up) - **Debate Hall**, **Game Room** (from square) ## Programmatic Connection For direct WebSocket integration: ```javascript // Connect ws.send(JSON.stringify({ type: 'auth', [REDACTED_SECRET]', agent: { name: 'Bot', ownerId: 'owner', description: 'A bot' } })); // Commands ws.send(JSON.stringify({ type: 'say', content: 'Hello!' })); ws.send(JSON.stringify({ type: 'go', direction: 'north' })); ws.send(JSON.stringify({ type: 'look' })); ``` ## Events You'll Receive - `connected` — Successfully joined (includes room info) - `room` — Room details after look/move - `message` — Someone spoke/emoted - `arrive` — Agent entered your room - `leave` — Agent left your room - `error` — Something went wrong


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (HIGH)
Skill: tanlvxu/toutiaodraft (version 1.0.0)

# 今日头条草稿箱上传技能 将内容批量上传到今日头条微头条草稿箱。 ## 触发词 - 上传头条草稿箱 - 今日头条草稿 - toutiao draft - 微头条草稿 - 批量上传头条 ## 使用方法 ### 方式一：直接提供内容 用户直接发送内容，AI自动上传到草稿箱。 ### 方式二：提供MD文档 用户提供MD格式的文档，AI解析后上传。 ## MD文档格式 ```markdown ## 第1条 **配图链接：** 小红书图片URL（可选） **内容：** ``` 标题行（以...结尾） 正文内容，每句话单独一行。 互动式结尾？ ``` --- ## 第2条 ... ``` ## 配图说明 - 配图链接支持小红书图片URL - 格式：`https://sns-webpic-qc.xhscdn.com/...` - 如无配图，可省略或留空 ## 执行流程 1. **解析内容**：读取用户提供的MD文档或直接内容 2. **下载图片**（如有）：从配图链接下载图片到本地 3. **打开发布页**：访问 `https://mp.toutiao.com/profile_v4/weitoutiao/publish` 4. **上传图片**（如有）：点击图片按钮，上传配图 5. **输入内容**：将内容填入编辑器 6. **保存草稿**：点击"存草稿"按钮 7. **关闭页面**：关闭标签页，确保草稿保存 8. **循环处理**：重复以上步骤处理所有内容 ## 技术细节 ### 浏览器操作 - 使用 `browser` 工具控制Chrome - 每条内容使用新的targetId - 每次操作后关闭标签页，避免缓存问题 ### 编辑器操作 - 编辑器选择器：`.ProseMirror` - 内容格式：`<p>每行内容</p>` - 标题行加粗：`<p><strong>标题</strong></p>` ### 按钮操作 - 图片按钮：包含"图片"文字的button - 确定按钮：文字为"确定"的button - 存草稿按钮：包含"存草稿"文字的button ### 图片上传 - 图片需保存到 `/tmp/openclaw/uploads/` 目录 - 使用 `browser upload` 工具上传 - input选择器：`input[type="file"]` ## 注意事项 1. **登录状态**：需要先登录今日头条创作者平台 2. **图片格式**：支持jpg、png等常见格式 3. **内容长度**：微头条建议500字以内 4. **草稿数量**：每次关闭标签页确保草稿保存成功 5. **网络稳定**：确保网络连接稳定 ## 示例 用户发送： ``` 帮我上传这3条到头条草稿箱： ## 第1条 女同事加班到凌晨，说不敢一个人打车... 那天加班到一点，办公室就剩我俩。 ... ## 第2条 健身房更衣室，女教练突然推门进来... ... ``` AI自动执行上传流程。


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)
Skill: toomij99/metatron-voice (version 0.1.0)

--- name: metatron-voice description: > Discord standup and meeting intelligence workflow for OpenClaw. Use when the user needs help configuring, operating, or troubleshooting Metatron Voice for Discord voice capture, transcription, meeting summaries, Jira task approval, and Confluence handoff. homepage: https://github.com/toomij99/discord-voice metadata: clawdbot: emoji: "🎙️" config: requiredEnv: [] stateDirs: - ".openclaw/workspace/meetings" example: | { "plugins": { "entries": { "metatron-voice": { "enabled": true, "config": { "meetingsDir": "/home/youruser/.openclaw/workspace/meetings", "jiraProjectKey": "MYPROJECT", "transcriptionProvider": "whisper-local", "whisperModel": "base", "sidecarBaseUrl": "http://127.0.0.1:8765" } } } } } --- # Metatron Voice Skill Metatron Voice is an OpenClaw plugin for Discord standups and voice meetings. It extends the existing OpenClaw Discord integration with a meeting workflow that: - records Discord voice conversations - transcribes meeting audio - generates meeting summaries - extracts Jira task candidates - supports approval in Discord before Jira push ## What It Owns - plugin configuration guidance - command usage guidance - operator troubleshooting - meeting artifact inspection - Discord-first standup workflow guidance ## What It Does Not Replace - OpenClaw's existing Discord bot identity - OpenClaw's configured summary model - OpenClaw's Jira integration - OpenClaw's Confluence integration ## Config Shape Use: ```json { "plugins": { "entries": { "metatron-voice": { "enabled": true, "config": { "meetingsDir": "/home/youruser/.openclaw/workspace/meetings", "jiraProjectKey": "MYPROJECT", "transcriptionProvider": "whisper-local", "whisperModel": "base", "sidecarBaseUrl": "http://127.0.0.1:8765" } } } } } ``` ## Discord Workflow Typical flow: 1. Team joins a Discord voice channel. 2. Someone brings OpenClaw/Metatron into the channel. 3. Start the meeting with `/recordstart`. 4. Stop the meeting with `/recordstop`. 5. Review the summary with `/voicesummary`. 6. Review candidate tasks with `/createtasks`. 7. Approve tasks with `/approvetasks 1 2` or `/approvetasks all`. 8. Push approved tasks with `/pushjira`. ## Notes - This repository contains the OpenClaw-native plugin at the repository root. - The sidecar worker lives under `sidecar/`. - The older Python prototype under `metatron-voice/` is kept as migration reference.


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)