OpenClaw/clawhub-security-signals huggingface dataset:
Skill: jarvis-drakon/fleet-doctrine (version 1.1.0)

--- name: fleet-doctrine description: Model routing strategy for multi-model AI fleet. Use when spawning sub-agents, choosing models for cron jobs, delegating coding tasks, or deciding which model should handle a task. Covers Opus, Codex, Sonnet, Gemini, and Grok routing rules. --- # Fleet Doctrine — Model Routing ## Aliases - `opus` → `anthropic/claude-opus-4-6` - `sonnet` → `anthropic/claude-sonnet-4-6` - `codex` → `openai-codex/gpt-5.3-codex` - Gemini: `google/gemini-3-pro-preview` - Grok: `xai/grok-4` ## Routing Rules ### Opus — Commander **When:** Main session, orchestration, security decisions, financial tasks, reviewing other models' output, anything high-stakes or ambiguous. **Never waste on:** Routine crons, simple lookups, email summaries, templated tasks. ### Codex — Chief Engineer **When:** Big coding tasks (refactors, new features, full repo work), PR reviews, debugging complex issues, checking other models' code output. **Spawn as:** `sessions_spawn(model: "codex", task: "...")` or sub-agent with `--model codex`. **Pairs with:** Grok for parallel work or second opinions on code. ### Sonnet — Workhorse **When:** Cron jobs, email briefings, admissions reports, routine admin, quick lookups, drafts, form letters, anything repetitive or templated. **Default for:** All crons unless the task requires reasoning. ### Gemini — Creative & Vision **When:** Image generation, analysing long documents (1M context), visual tasks, when a different perspective helps. **Best at:** Processing massive context windows, multimodal input. ### Grok — Fast Backup **When:** Parallel work alongside Codex, speed-over-depth tasks, sanity-checking other models' output, when you need a quick second opinion. **Good for:** Lightweight code reviews, fast research, draft generation. ## Decision Flow 1. Is it security, finance, or high-stakes? → **Opus** 2. Is it a big coding task or repo work? → **Codex** (with Grok as backup) 3. Does it need image gen or 1M+ context? → **Gemini** 4. Is it routine/scheduled/templated? → **Sonnet** 5. Need a fast second opinion? → **Grok** 6. Not sure? → **Opus** decides, then delegates. ## Fallback Rule If a model is unavailable on your instance, fall back to your default model (typically Sonnet). The doctrine describes *intent* — use the best model you have access to that matches the category. When in doubt, do the task with what you've got rather than failing. ## Anti-Patterns - Don't use Opus for email summaries or cron jobs - Don't use Sonnet for complex multi-step reasoning - Don't use Codex for non-coding tasks - Don't spawn multiple models on the same task unless deliberately seeking a second opinion


Security scan verdicts — ClawScan: clean | static analysis:  | VirusTotal: clean | SkillSpector: clean (LOW)
Skill: blammectrappora/comic-panel-generator (version 1.0.0)

--- name: comic-panel-generator description: Generate AI comic book panels, manga strips, and graphic novel art from text descriptions. Create anime-style comic illustrations, webcomic frames, storyboard panels, manga-style sequential art, and comic character scenes with dynamic compositions and bold ink outlines via the Neta AI image generation API (free trial at neta.art/open). tools: Bash --- # Comic Panel Generator Generate AI comic book panels, manga strips, and graphic novel art from text descriptions. Create anime-style comic illustrations, webcomic frames, storyboard panels, manga-style sequential art, and comic character scenes with dynamic compositions and bold ink outlines. ## Token Requires a Neta API token (free trial at <https://www.neta.art/open/>). Pass it via the `--token` flag. ```bash node <script> "your prompt" --token YOUR_TOKEN ``` ## When to use Use when someone asks to generate or create ai comic panel generator images. ## Quick start ```bash node comicpanelgenerator.js "your description here" --token YOUR_TOKEN ``` ## Options - `--size` — `portrait`, `landscape`, `square`, `tall` (default: `portrait`) - `--ref` — reference image UUID for style inheritance ## Install ```bash npx skills add blammectrappora/comic-panel-generator ```


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (MEDIUM)
Skill: hlcle/bupt-empty-classroom (version 2.0.0)

--- name: bupt-empty-classroom description: Query empty classrooms at BUPT (Beijing University of Posts and Telecommunications) Xitucheng campus. Use when the user needs to find available/empty classrooms for a specific building and time period at Xitucheng campus. Supports selecting buildings (教2, 教3, 教4, 未来学习大楼) and time periods. --- # BUPT Empty Classroom Query This skill queries the BUPT empty classroom system at https://ec.jray.xyz/ ## Workflow ### Step 1: Open the website Use `agent-browser` to open the URL: ```bash agent-browser open https://ec.jray.xyz/ ``` ### Step 2: Verify campus selection - The page defaults to "西土城" (Xitucheng) campus - Verify it's selected (look for `[checked]` on radio "西土城") - If not, click on it: `agent-browser click @e2` ### Step 3: Select building Click on the building button: - 教2: `agent-browser click @e6` - 教3: `agent-browser click @e7` - 教4: `agent-browser click @e8` - 未来学习大楼: `agent-browser click @e9` ### Step 4: Select time period After clicking the building, the time period buttons will appear. Each button shows the format: `HH:MM 节次 HH:MM` Example buttons: - 08:00 01 08:45 (第1节) - 08:50 02 09:35 (第2节) - ...and so on Click on the desired time period button (check refs from snapshot). ### Step 5: Extract results After selecting the time period, the page will show a table with empty classrooms: | Column | Description | |--------|-------------| | 教室 | Classroom ID (e.g., 教4-203) | | 座位数 | Number of seats | | 类型 | Room type (if available) | | 来源 | Data source (usually "教务") | Use `agent-browser snapshot` or `agent-browser snapshot -i` to get the full table. ## Example Session ```bash # Step 1: Open website agent-browser open https://ec.jray.xyz/ # Step 2: Get initial snapshot to see refs agent-browser snapshot -i # Step 3: Click on building (e.g., 教4) agent-browser click @e8 # Step 4: Get updated snapshot agent-browser snapshot -i # Step 5: Click on time period (e.g., 17:25 11 18:10) agent-browser click @e20 # Step 6: Get final results agent-browser snapshot ``` ## Common Issues 1. **Button refs change after each navigation**: Always re-run `snapshot` after clicking a building or time period. 2. **Some time periods are disabled**: Passed time periods show `[disabled]` and cannot be clicked. 3. **No empty classrooms**: If no classrooms are shown after selecting a time period, it means all classrooms are occupied at that time. ## Notes - The website defaults to current date - Only Xitucheng campus is fully supported (沙河 campus can be selected but workflow is same) - Data source is usually the university's academic system (教务)


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)
Skill: make453/new-akshare-stock-bak2 (version 1.0.0)

--- name: akshare-stock description: A股量化数据分析工具，基于AkShare库获取A股行情、财务数据、板块信息等。用于回答关于A股股票查询、行情数据、财务分析、选股等问题。 --- # A股量化 - AkShare 数据接口 ## 快速开始 安装依赖： ```bash pip install akshare ``` ## 支持的功能 ### 1. 实时行情查询 ```python import akshare as ak # 个股实时行情 stock_zh_a_spot_em() stock_zh_a_spot_em(symbol="北证A股") ``` ### 2. 历史K线数据 ```python import akshare as ak # 日K线 stock_zh_a_hist(symbol="000001", period="daily", start_date="20240101", end_date="20241231", adjust="qfq") # 周K线 stock_zh_a_hist(symbol="000001", period="weekly", start_date="20240101", end_date="20241231", adjust="qfq") # 月K线 stock_zh_a_hist(symbol="000001", period="monthly", start_date="20240101", end_date="20241231", adjust="qfq") ``` ### 3. 财务数据 ```python import akshare as ak # 财务报表 stock_financial_abstract_ths(symbol="000001", indicator="按报告期") # 主要财务指标 stock_financial_analysis_indicator(symbol="000001") ``` ### 4. 板块/行业分析 ```python import akshare as ak # 行业板块行情 stock_board_industry_name_em() # 概念板块行情 stock_board_concept_name_em() # 板块内个股 stock_board_industry_cons_em(symbol="半导体") ``` ### 5. 资金流向 ```python import akshare as ak # 个股资金流向 stock_individual_fund_flow(stock="000001", market="sh") # 大单净流入 stock_individual_fund_flow(stock="000001", market="sh", symbol="大单净流入") ``` ### 6. 龙虎榜 ```python import akshare as ak # 每日龙虎榜 stock_lhb_detail_em(date="20240930") # 机构调研 stock_zlzj_em() ``` ### 7. 新股/IPO ```python import akshare as ak # 新股申购 stock_new_ipo_em() # 待上市新股 stock_new_ipo_start_em() ``` ### 8. 融资融券 ```python import akshare as ak # 融资融券 stock_margin_sse(symbol="600000") # 融资融券明细 stock_rzrq_detail_em(symbol="600000", date="20240930") ``` ## 常用股票代码 - **平安银行**: 000001 - **贵州茅台**: 600519 - **宁德时代**: 300750 - **比亚迪**: 002594 - **招商银行**: 600036 ## 备选方案: Baostock 如果 AkShare 安装失败，可使用 baostock（更轻量）: ```python import baostock as bs # 登录 lg = bs.login() print(lg.error_msg) # 获取历史K线 rs = bs.query_history_k_data_plus('sh.600519', 'date,code,open,high,low,close,volume', start_date='20250101', end_date='20251231') data_list = [] while rs.next: data_list.append(rs.get_row_data()) bs.logout() ``` ## 注意事项 1. 数据仅供学术研究，不构成投资建议 2. 接口可能因目标网站变动而失效 3. 建议添加异常处理和重试机制 4. **当前环境网络问题可能导致测试失败，请在本地环境测试**


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)
Skill: judysue/class-reminder (version 1.0.0)

--- name: class-reminder description: 课程提醒助手。解析 Excel 课程表（支持教师课表格式），按日期梳理课程安排，支持查询今天/明天/指定日期的课程，生成上课提醒。触发场景：(1) 用户上传课程表后询问"明天有什么课"、"今天上什么课"、"XX号有什么课"；(2) 设置定时提醒，每天/每周自动推送次日课程；(3) 解析、导入、更新课程表；(4) 需要生成课程提醒文本。 --- # 课程提醒 Skill ## 核心流程 ### 1. 解析课程表 用户提供 Excel 课程表文件后，用脚本解析： ```bash python3 scripts/class_reminder.py parse <excel文件> [--semester-start YYYY-MM-DD] ``` 支持两种格式： - **标准格式**：每行一节课程，包含课程名称、星期、时间、地点等列 - **教师课表格式**：行列式表格，行=时间段，列=星期，单元格=课程信息 解析后保存课程数据到 `data/schedule.json`（在工作区创建）。 ### 2. 查询课程 ```bash # 明天的课程 python3 scripts/class_reminder.py tomorrow data/schedule.json # 今天的课程 # 指定日期 python3 scripts/class_reminder.py date data/schedule.json --date 2026-04-25 ``` ### 3. 生成提醒文本 脚本返回的 `formatted` 字段即为可直接发送的提醒文案。 ## 教师课表格式支持 **表格结构：** - 行：时间段（第1-2节、第3-4节...） - 列：星期一到星期日 - 单元格：课程信息，如 `【实验】网络与系统安全 [1-4节][6-6周] [T2604-T2606]` **课程信息解析：** - 课程类型：【实验】、【理论】等 - 课程名称：网络与系统安全 - 节次范围：[1-4节] - 周次范围：[6-6周] 或 [11-12,14-14周] - 教室：[T2604-T2606] **特殊处理：** - 一个单元格可包含多门课程（换行分隔） - 自动展开节次范围和周次范围 - 支持复杂的周次格式（如 "11-12,14-14周"） ## 定时提醒 设置每天提醒明日课程： 1. 首次需要用户提供课程表文件并解析 2. 使用 cron 或 heartbeat 定时检查 3. 每次触发时运行 `tomorrow` 命令，发送 `formatted` 文本 ## 数据存储 解析后的课程数据保存到 `data/schedule.json`，后续查询直接读取，无需重复解析。 ## 注意事项 - 学期开始日期影响周次计算，默认为当前学期估算（9月秋季/2月春季） - 用户可显式指定 `--semester-start` 覆盖默认值 - 调休、节假日需要手动更新课程表或添加备注 - 依赖 openpyxl，首次使用需 `pip install openpyxl`


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)
Skill: howtimeschange/markdown-fetch (version 1.0.0)

--- name: markdown-fetch description: Optimizes web fetching by using Cloudflare's Markdown for Agents, reducing token consumption by ~80% version: 1.0.0 author: howtimeschange --- # Markdown Fetch - 网页抓取优化 ## 背景 Cloudflare 推出 **Markdown for Agents** 功能： - AI 请求时返回 Markdown 格式 - Token 消耗比 HTML 减少约 80% ## 使用方法 在需要网页抓取时，使用优化后的 fetch 函数： ```javascript const { optimizedFetch } = require('./markdown-fetch'); const result = await optimizedFetch('https://example.com'); // result.markdown - Markdown 内容（如果有） // result.html - HTML 内容（备用） // result.tokensSaved - 节省的 tokens（如果有） ``` ## 核心逻辑 ```javascript async function optimizedFetch(url, options = {}) { const headers = { 'Accept': 'text/markdown, text/html', ...options.headers }; const response = await fetch(url, { ...options, headers }); const contentType = response.headers.get('content-type'); const xMarkdownTokens = response.headers.get('x-markdown-tokens'); let result = { url, contentType, tokensSaved: xMarkdownTokens ? parseInt(xMarkdownTokens) : null }; if (contentType.includes('text/markdown')) { result.markdown = await response.text(); result.format = 'markdown'; } else { result.html = await response.text(); result.format = 'html'; } return result; } ``` ## 响应处理 | Content-Type | 处理方式 | |--------------|----------| | text/markdown | 直接使用，跳过 HTML 解析 | | text/html | 走原有解析逻辑 | ## 可选：x-markdown-tokens 日志 如果响应中有 `x-markdown-tokens` header，记录到日志： ```javascript if (result.tokensSaved) { console.log(`[Markdown Fetch] Token 节省: ${result.tokensSaved}`); } ``` ## 改动范围 1. 找到所有 HTTP 请求（fetch/axios/request） 2. 统一添加 header 3. 响应处理加判断 ## 测试验证 找一个 Cloudflare 托管的网站测试： ```bash curl -H "Accept: text/markdown, text/html" https://cloudflare-example.com ``` 确认收到 `content-type: text/markdown` 响应。


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)
Skill: qijimrc/vlm-grounding (version 1.0.0)

--- name: grounding description: Use GLM-4.7V's multimodal grounding capability to detect and locate objects/text in images. Activate when user asks to find, locate, detect, or ground specific objects, text, UI elements, or regions in an image. Also triggers on phrases like "找到xxx的位置", "框出xxx", "定位xxx", "grounding", "bounding box", "坐标框". --- # Grounding - 多模态目标定位 利用 GLM-4.7V 的 grounding 能力，在图片中定位目标对象或文字，输出带标注框的结果图。 ## 工作流程 ``` 用户输入（图片 + prompt） │ ▼ HttpInterface() → 调用模型 API → 得到 response 文本 │ ▼ parse_bboxes_from_response() → 从回复中解析出坐标框列表 │ ▼ visualize_boxes(renormalize=True) → 反归一化 + 画框 → 保存结果图 ``` ## Step 1: 调用模型获取坐标 使用 `HttpInterface` 调用模型 API： ```python import os os.environ['NO_PROXY'] = '<model-host>' # 跳过代理 os.environ['no_proxy'] = '<model-host>' from interface_http import HttpInterface url = 'http://<host>:<port>/v1/chat/completions' prompt = '''请在这张图中找到所有"{target}"，并以 [xmin, ymin, xmax, ymax] 格式输出每个目标的边界框坐标，坐标值为 0-1000 的归一化整数。每个目标一行，格式如下： 目标名称: [xmin, ymin, xmax, ymax]''' response = HttpInterface(url, prompt, images=[image_path], no_think=True) # 返回: "目标名称: [xmin, ymin, xmax, ymax]" ``` **注意：** 调用前需设置 `NO_PROXY` 环境变量跳过代理，否则内网请求会被代理拦截。 ## Step 2: 解析坐标框 ```python from utils_boxes import parse_bboxes_from_response boxes = parse_bboxes_from_response(response) # 返回: [[x1, y1, x2, y2], ...] (0-1000 归一化) ``` `parse_bboxes_from_response` 会自动： - 从回复尾部向前检查截断，拓展 context window - 遍历所有括号风格（`[]`, `{}`, `()`, `<>`, `<bbox>`）提取坐标 - 扁平化嵌套列表，返回一维 box 列表 ## Step 3: 画框可视化 ```python from utils_boxes import visualize_boxes visualize_boxes( img_path=image_path, boxes=boxes, # parse_bboxes_from_response 的输出 labels=['label1', 'label2'], # 每个框的标签 renormalize=True, # 自动将 0-1000 归一化转为像素坐标 save_path='output.jpg', colors=['red', 'blue'], # 可选 thickness=[2, 3], # 可选 ) ``` `renormalize=True` 时，内部自动调用 `reverse_normalize_box`：`pixel = coord * img_dimension / 1000` ## 完整示例 ```python import os os.environ['NO_PROXY'] = '172.20.112.202' os.environ['no_proxy'] = '172.20.112.202' from interface_http import HttpInterface from utils_boxes import parse_bboxes_from_response, visualize_boxes url = 'http://172.20.112.202:5002/v1/chat/completions' img = '/path/to/image.jpg' # 1. 调用模型 response = HttpInterface( url, '请在这张图中找到"红色圣诞帽"，以 [xmin, ymin, xmax, ymax] 格式输出坐标（0-1000归一化）', images=[img], no_think=True, ) # 2. 解析坐标 boxes = parse_bboxes_from_response(response) # 3. 画框 visualize_boxes(img_path=img, boxes=boxes, labels=['圣诞帽'], renormalize=True, save_path='out.jpg') ``` ## 工具函数速查 | 函数 | 作用 | |------|------| | `HttpInterface(url, prompt, images, no_think)` | 调用模型 API，返回文本回复 | | `parse_bboxes_from_response(text)` | 从模型回复中提取所有坐标框列表 | | `find_boxes_all(text, flat=True)` | 提取文本中所有括号风格的坐标框 | | `reverse_normalize_box(box, w, h)` | 0-1000 归一化 → 像素坐标 | | `visualize_boxes(..., renormalize=True)` | 画框 + 自动反归一化 | ## 注意事项 - 模型 API 地址配置在 `/root/.openclaw/agents/main/agent/models.json` - 调用内网模型时必须设置 `NO_PROXY` 环境变量 - `no_think=True` 可关闭模型思考模式，加快响应


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (CRITICAL)
Skill: sxzxlj/xhs-scheduler-skill (version 1.0.0)

--- name: xhs-smart-scheduler description: > 小红书智能排期发布器 - 帮助内容创作者实现自动化内容排期和定时发布。 Use when: - 用户需要批量管理小红书待发布内容 - 用户需要定时自动发布小红书笔记 - 用户需要智能推荐最佳发布时间 - 用户需要查看发布队列状态和历史记录 - 用户需要接收发布成功/失败通知 NOT for: - 非小红书平台的内容发布 - 需要人工审核的敏感内容自动发布 - 违反小红书社区规范的内容发布 - 未经授权的账号操作 author: "Your Name" version: "1.0.0" tags: ["xiaohongshu", "social-media", "content-scheduler", "automation"] --- # 小红书智能排期发布器 ## 功能概述 本Skill帮助用户高效管理小红书内容发布流程，支持： - 内容队列管理（添加、编辑、删除、查看） - 智能排期推荐（基于粉丝活跃时间） - 定时自动发布 - 发布状态追踪和通知 ## 前置要求 1. **小红书MCP服务已启动** ```bash # 确保 xiaohongshu-mcp 服务运行在 localhost:18060 ``` 2. **小红书账号已登录** - 首次使用需要扫码登录 - Cookie会自动保存，后续无需重复登录 3. **通知渠道配置（可选）** - 飞书Webhook URL - 或钉钉Webhook URL ## 使用流程 ### 1. 检查登录状态 ``` 检查小红书登录状态 ``` Skill会调用 `check_login_status` 检查当前登录状态。 - 如未登录，生成二维码供用户扫描 - 如已登录，显示账号信息 ### 2. 添加内容到队列 ``` 添加小红书内容到发布队列 标题：春季护肤的5个误区 内容：春天到了，很多姐妹开始换护肤品... 图片：/path/to/image1.jpg, /path/to/image2.jpg 标签：护肤,春季,美妆 建议发布时间：明天上午10点 ``` Skill会： 1. 将内容保存到本地队列数据库 2. 分配唯一的任务ID 3. 确认添加成功并显示队列状态 ### 3. 查看发布队列 ``` 查看我的小红书发布队列 ``` 显示当前队列中的所有内容： - 待发布（已排期） - 草稿（未排期） - 已发布（历史记录） ### 4. 智能排期推荐 ``` 为队列中的内容推荐最佳发布时间 ``` Skill会分析： - 内容类型（图文/视频） - 目标受众活跃时段 - 当前队列分布 推荐发布时间表并询问是否应用。 ### 5. 启动定时发布 ``` 启动小红书定时发布任务 ``` Skill会： 1. 检查队列中已到发布时间的任务 2. 调用 `publish_content` 或 `publish_with_video` 发布 3. 更新任务状态（成功/失败） 4. 发送通知（如配置了Webhook） ### 6. 查看发布统计 ``` 查看本周小红书发布统计 ``` 显示： - 本周发布数量 - 成功率 - 各时段发布分布 - 失败任务列表 ## 命令速查 | 命令 | 功能 | |:---|:---| | `检查登录状态` | 检查小红书账号登录状态 | | `添加内容 [标题] [内容] [图片路径]` | 添加内容到队列 | | `查看队列` | 显示所有待发布内容 | | `删除任务 [任务ID]` | 从队列删除指定任务 | | `智能排期` | 为队列内容推荐发布时间 | | `启动定时发布` | 开始定时发布任务 | | `查看统计` | 显示发布统计数据 | | `配置通知 [飞书/钉钉] [Webhook URL]` | 设置通知渠道 | ## 技术实现 本Skill依赖以下脚本： - `scripts/queue_manager.py` - 队列增删改查 - `scripts/scheduler.py` - 定时任务调度 - `scripts/smart_timing.py` - 智能排期算法 - `scripts/publisher.py` - 发布执行 - `scripts/notifier.py` - 通知发送 ## 注意事项 1. **发布频率限制**：小红书对发布频率有限制，建议单账号每天不超过5-10篇 2. **内容合规**：确保发布内容符合小红书社区规范 3. **网络稳定**：发布时需要保持网络连接稳定 4. **Cookie有效期**：登录状态通常保持30天，过期需重新登录 ## 定价 - **免费版**：5篇/天，基础定时功能 - **基础版**（$29/月）：20篇/天，智能排期，飞书通知 - **专业版**（$49/月）：无限篇，多账号，数据分析 ## 支持与反馈 如有问题或建议，请联系： - GitHub Issues: [your-repo]/xhs-scheduler-skill - 邮箱: [REDACTED_SECRET]

path: requirements.txt
content: requests>=2.28.0
pyyaml>=6.0
python-dateutil>=2.8.0


path: scripts/__init__.py
content: # 小红书智能排期发布器 - 脚本模块


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (CRITICAL)
Skill: daniellummis/github-actions-cancel-waste-audit (version 1.0.0)

--- name: github-actions-cancel-waste-audit description: Audit cancelled and timed-out GitHub Actions runs from JSON exports to surface wasted CI minutes and noisy workflows. version: 1.0.0 metadata: {"openclaw":{"requires":{"bins":["bash","python3"]}}} --- # GitHub Actions Cancel Waste Audit Use this skill to quantify wasted GitHub Actions runtime from cancelled or timed-out runs so flaky workflow churn gets fixed before it burns CI budget. ## What this skill does - Reads one or more GitHub Actions run JSON exports (`gh api` output) - Estimates wasted runtime minutes per run (`run_started_at`/`created_at` -> `updated_at`) - Groups waste by repository + workflow + conclusion for fast triage - Flags warn/critical waste levels using configurable minute thresholds - Supports text and JSON output for terminal checks or dashboards ## Inputs Optional: - `RUN_GLOB` (default: `artifacts/github-actions-runs/*.json`) - `TOP_N` (default: `20`) - `OUTPUT_FORMAT` (`text` or `json`, default: `text`) - `WARN_WASTED_MINUTES` (default: `15`) - `CRITICAL_WASTED_MINUTES` (default: `45`) - `FAIL_ON_CRITICAL` (`0` or `1`, default: `0`) - `REPO_MATCH` (regex, optional) - `REPO_EXCLUDE` (regex, optional) - `WORKFLOW_MATCH` (regex, optional) - `WORKFLOW_EXCLUDE` (regex, optional) - `BRANCH_MATCH` (regex, optional) - `BRANCH_EXCLUDE` (regex, optional) - `ACTOR_MATCH` (regex, optional) - `ACTOR_EXCLUDE` (regex, optional) - `CONCLUSION_MATCH` (regex, optional, default behavior already includes only cancelled/timed_out) - `CONCLUSION_EXCLUDE` (regex, optional) ## Collect run JSON Single repository: ```bash gh api repos/<owner>/<repo>/actions/runs --paginate \ > artifacts/github-actions-runs/<owner>-<repo>.json ``` ## Run Text report: ```bash RUN_GLOB='artifacts/github-actions-runs/*.json' \ WARN_WASTED_MINUTES=20 \ CRITICAL_WASTED_MINUTES=60 \ bash skills/github-actions-cancel-waste-audit/scripts/cancel-waste-audit.sh ``` JSON output for automation: ```bash RUN_GLOB='artifacts/github-actions-runs/*.json' \ OUTPUT_FORMAT=json \ FAIL_ON_CRITICAL=1 \ bash skills/github-actions-cancel-waste-audit/scripts/cancel-waste-audit.sh ``` Filter to one repo/workflow family: ```bash RUN_GLOB='artifacts/github-actions-runs/*.json' \ REPO_MATCH='^flowcreatebot/' \ WORKFLOW_MATCH='(test|build)' \ BRANCH_MATCH='^(main|release)' \ bash skills/github-actions-cancel-waste-audit/scripts/cancel-waste-audit.sh ``` Run with bundled fixtures: ```bash RUN_GLOB='skills/github-actions-cancel-waste-audit/fixtures/*.json' \ bash skills/github-actions-cancel-waste-audit/scripts/cancel-waste-audit.sh ``` ## Output contract - Exit `0` in reporting mode (default) - Exit `1` if `FAIL_ON_CRITICAL=1` and at least one run has waste at/above `CRITICAL_WASTED_MINUTES` - In `text` mode: prints summary and top waste hotspots - In `json` mode: prints summary, grouped stats, and critical run instances


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

--- name: skylv-skill-quality-assurance description: Analyzes and scores OpenClaw skill quality across 5 dimensions. Detects missing frontmatter, weak descriptions, poor examples, and actionable improvement recommendations. keywords: skill, quality, analysis, scoring, improvement, documentation, review triggers: quality, score, analyze skill, skill review, documentation --- # Skill Quality Assurance Automatically analyze and score OpenClaw skill documentation quality. Identifies critical issues and provides actionable fixes. ## Overview This skill runs a multi-dimensional quality analysis on any OpenClaw skill's SKILL.md file, scoring it across: - **Clarity** — Structure, headings, sentence length - **Completeness** — Required fields, install/usage sections - **Actionability** — Step-by-step guides, commands - **Discoverability** — Keywords, description, categories - **Examples** — Code examples, before/after, use cases ## Usage ### Analyze a single skill ``` Analyze the skill at: C:\path\to\skills\my-skill ``` ### Analyze all skills in a directory ``` Run: node engine.js C:\path\to\skills ``` ### Interpretation | Score | Grade | Meaning | |-------|-------|---------| | 8-10 | A | Production-ready | | 6-7 | B | Needs minor improvements | | 4-5 | C | Needs significant work | | <4 | F | Rewrite recommended | ## Scoring Dimensions ### 1. Clarity (20%) Checks for: headings hierarchy, sentence length, filler words, markdown formatting ### 2. Completeness (20%) Checks for: `name`, `description`, `keywords`, install section, usage section ### 3. Actionability (25%) Checks for: numbered steps, runnable commands, configuration guides ### 4. Discoverability (15%) Checks for: keywords (5+), description length (50+ chars), category/tags ### 5. Examples (20%) Checks for: code blocks (3+), before/after cases, use case descriptions ## Quality Thresholds For ClawHub publication: - Overall score ≥ 7.0 required - No dimension below 5.0 - Must have keywords field - Must have description ≥ 50 chars ## Auto-Fix The companion script `fix_skill_md.cjs` automatically fixes: - Missing `description` field - Missing `keywords` field - Missing `Install` section - Missing `Usage` section ```bash node fix_skill_md.cjs ``` ## Example Output ``` # Skill Quality Report Analyzed: 34 skills ## Overall Rankings 1. ✅ skylv-browser-automation-agent 9.4/10 2. ✅ skylv-openclaw-evomap-connector 9.3/10 Average score: 8.1/10 Grade A (7+): 29 Grade B (5-6): 5 Grade C (<5): 0 ``` ## MIT License © SKY-lv


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