OpenClaw/clawhub-security-signals huggingface dataset:
Skill: justoneapi/justoneapi-reddit-search (version 1.0.0)

--- name: Reddit Keyword Search API description: Call GET /api/reddit/search/v1 for Reddit Keyword Search through JustOneAPI with keyword. author: JustOneAPI homepage: https://api.justoneapi.com metadata: {"openclaw":{"homepage":"https://api.justoneapi.com","primaryEnv":"JUST_ONE_API_TOKEN","requires":{"bins":["node"],"env":["JUST_ONE_API_TOKEN"]},"skillKey":"justoneapi_reddit_search"}} --- # Reddit Keyword Search Use this focused JustOneAPI skill for keyword Search in Reddit. It targets `GET /api/reddit/search/v1`. Required non-token inputs are `keyword`. OpenAPI describes it as: Get Reddit keyword Search data, including titles, authors, and subreddit context, for topic discovery and monitoring. ## Endpoint Scope - Platform key: `reddit` - Endpoint key: `search` - Platform family: Reddit - Skill slug: `justoneapi-reddit-search` | Operation | Version | Method | Path | OpenAPI summary | | --- | --- | --- | --- | --- | | `searchRedditV1` | `v1` | `GET` | `/api/reddit/search/v1` | Keyword Search | ## Inputs | Parameter | In | Required by | Optional by | Type | Notes | | --- | --- | --- | --- | --- | --- | | `after` | `query` | n/a | all | `string` | Pagination token to retrieve the next set of results | | `keyword` | `query` | all | n/a | `string` | Search query keywords | Request body: none documented; send parameters through path or query arguments. ## Version Choice Use `searchRedditV1` for the documented `v1` endpoint. There are no alternate versions grouped in this skill. ## Run This Endpoint Supported operation IDs in this skill: `searchRedditV1`. ```bash node {baseDir}/bin/run.mjs --operation "searchRedditV1" --token "$JUST_ONE_API_TOKEN" --params-json '{"keyword":"<keyword>"}' ``` Ask for any missing required parameter before calling the helper. Keep user-provided IDs, cursors, keywords, and filters unchanged. ## Environment - Required: `JUST_ONE_API_TOKEN` - Pass the token with `--token "$JUST_ONE_API_TOKEN"`; do not paste token values into chat messages, screenshots, or logs. - Get a token from [Just One API Dashboard](https://dashboard.justoneapi.com/en/login?utm_source=clawhub.ai&utm_medium=referral&utm_campaign=justoneapi_reddit_search&utm_content=project_link). - Authentication details: [Just One API Usage Guide](https://docs.justoneapi.com/en/?utm_source=clawhub.ai&utm_medium=referral&utm_campaign=justoneapi_reddit_search&utm_content=project_link). ## Output Focus - State the operation ID and endpoint path used, for example `searchRedditV1` on `/api/reddit/search/v1`. - Echo the required lookup scope (`keyword`) before summarizing results. - Prioritize fields that support this endpoint purpose: Get Reddit keyword Search data, including titles, authors, and subreddit context, for topic discovery and monitoring. - Return raw JSON only after the short, endpoint-specific summary. - If the backend errors, include the backend payload and the exact operation ID.


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (HIGH)
Skill: limoxt/skill-feishu-manager (version 1.0.1)

--- name: skill-feishu-manager description: | Comprehensive Feishu (飞书) management toolkit for documents, knowledge bases, bitables, and cloud storage. --- # Feishu Manager Skill Complete toolkit for managing Feishu workspace. ## Tools Used - feishu_doc - Document operations - feishu_wiki - Knowledge base operations - feishu_bitable_* - Table operations - feishu_drive - Cloud storage operations ## Quick Reference ### Documents - Read: feishu_doc { "action": "read", "doc_token": "ABC123" } - Create: feishu_doc { "action": "create", "title": "New Doc" } - Write: feishu_doc { "action": "write", "doc_token": "ABC123", "content": "# Title" } ### Wiki - List spaces: feishu_wiki { "action": "spaces" } - Create page: feishu_wiki { "action": "create", "space_id": "...", "title": "Page" } ### Bitable - Create table: feishu_bitable_create_app { "name": "Project" } - List records: feishu_bitable_list_records { "app_token": "...", "table_id": "..." } ### Drive - List folder: feishu_drive { "action": "list", "folder_token": "..." } - Create folder: feishu_drive { "action": "create_folder", "name": "New" } ## Permissions Required - docx:document - wiki:wiki - drive:drive - bitable:data


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)
Skill: cinience/aliyun-wan-edit (version 1.0.0)

--- name: aliyun-wan-edit description: Use when Alibaba Cloud Model Studio Wan video editing models are needed for style transfer, keyframe-controlled editing, or animation remix workflows. version: 1.0.0 --- Category: provider # Model Studio Wan Video Edit ## Validation ```bash mkdir -p output/aliyun-wan-edit python -m py_compile skills/ai/video/aliyun-wan-edit/scripts/prepare_video_edit_request.py && echo "py_compile_ok" > output/aliyun-wan-edit/validate.txt ``` Pass criteria: command exits 0 and `output/aliyun-wan-edit/validate.txt` is generated. ## Critical model names Use one of these exact model strings as needed: - `wanx2.1-vace-plus` - `wanx2.1-kf2v-plus` - `wan2.2-animate-mix` - `VideoRetalk` ## Typical use - Video style transformation - Keyframe-to-video guided editing - Animation remix ## Quick start ```bash python skills/ai/video/aliyun-wan-edit/scripts/prepare_video_edit_request.py \ --output output/aliyun-wan-edit/request.json ``` ## Notes - Use `skills/ai/video/aliyun-wan-video/` for Wan generation. - Use `skills/ai/video/aliyun-videoretalk/` for dedicated lip-sync replacement. - Use this skill only when the user wants to modify existing video material. ## References - `references/sources.md`

path: references/sources.md
content: # Sources

- https://help.aliyun.com/zh/model-studio/video-generation
- https://help.aliyun.com/zh/model-studio/newly-released-models


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)
Skill: clarityprotocol/clarity-vote (version 1.0.0)

--- name: clarity-vote description: > Cast agent votes on protein folding hypotheses via Clarity Protocol. Use when the user asks to vote on a hypothesis, support or oppose a research hypothesis, express an opinion on a variant proposal, or review votes. Requires CLARITY_WRITE_API_KEY for voting. Capabilities: cast votes (support/oppose/neutral), list votes by agent or direction. license: MIT compatibility: Requires internet access to clarityprotocol.io. Requires CLARITY_WRITE_API_KEY env var for voting. Optional CLARITY_API_KEY for read operations. metadata: author: clarity-protocol version: "1.0.0" homepage: https://clarityprotocol.io --- # Clarity Vote Skill Cast and retrieve agent votes on protein folding hypotheses via Clarity Protocol's v1 API. ## Quick Start Vote to support a hypothesis: ```bash python scripts/cast_vote.py \ --hypothesis-id 1 \ --agent-id "anthropic/claude-opus" \ --direction support \ --confidence high \ --reasoning "Strong evidence from structural analysis" ``` Vote to oppose (reasoning required): ```bash python scripts/cast_vote.py \ --hypothesis-id 1 \ --agent-id "anthropic/claude-opus" \ --direction oppose \ --reasoning "Variant is benign per ClinVar classification" ``` List votes on a hypothesis: ```bash python scripts/list_votes.py --hypothesis-id 1 python scripts/list_votes.py --hypothesis-id 1 --agent-id "anthropic/claude-opus" ``` ## Vote Directions - **support**: Evidence supports the hypothesis - **oppose**: Evidence contradicts the hypothesis (reasoning required) - **neutral**: No strong evidence either way ## Confidence Levels - **high**, **medium**, **low** (optional) ## Important Notes - Each agent can only vote once per hypothesis (409 Conflict if duplicate) - Reasoning is required for oppose votes - Votes are permanent and cannot be changed ## Authentication ```bash export CLARITY_WRITE_API_KEY=your_write_key_here ``` ## Rate Limits - **Write operations**: 10 per day (per API key) - **Read operations**: 10 req/min (anonymous), 100 req/min (with API key)


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)
Skill: zero2ai-hub/skill-crypto-threshold-watcher (version 1.0.0)

--- name: skill-crypto-threshold-watcher description: Monitor any crypto token against configurable price/volume thresholds. Fires alerts when entry conditions are met. Use when you need proactive notification that a watchlist token has crossed its threshold — not reactive price checks. Supports multiple tokens, multiple threshold types (price above/below, volume spike), and custom alert messages. --- # Crypto Threshold Watcher Proactive alert engine for any token on any exchange. Checks watchlist against configurable thresholds and fires signals. ## Watchlist Config Stored at: `~/.openclaw/workspace/trading/watchlist.json` ```json { "tokens": [ { "symbol": "GRASSUSDT", "exchange": "binance", "thresholds": { "price_above": 0.30, "price_below": 0.20, "volume_24h_above": 50000000 }, "notes": "AI data network — entry above $0.30" }, { "symbol": "FETUSDT", "exchange": "binance", "thresholds": { "price_above": 0.20, "volume_24h_above": 100000000 }, "notes": "ASI Alliance token — volume spike = breakout signal" } ] } ``` ## Usage ### Check all watchlist tokens ```bash node ~/.openclaw/workspace/scripts/trading/threshold-watcher.js ``` ### Add a token to watchlist ```bash node ~/.openclaw/workspace/scripts/trading/threshold-watcher.js --add --symbol BTCUSDT --price-above 90000 ``` ### Check single token ```bash node ~/.openclaw/workspace/scripts/trading/threshold-watcher.js --symbol ETHUSDT ``` ## Output When threshold is crossed: ``` 🚨 THRESHOLD ALERT — GRASSUSDT Price: $0.3245 (threshold: $0.30 ↑) Volume 24h: $62.3M Signal: ENTRY — price above threshold Time: 2026-03-17 18:30 UTC Notes: AI data network — entry above $0.30 ``` When no threshold crossed: ``` ✅ GRASSUSDT — $0.28 (below $0.30 threshold, watching) ``` ## Data Sources - Primary: Binance API (no auth required for market data) - Fallback: CoinGecko API (free tier) ## Cron Integration Add to TASKS.md cron: ``` Every 1h: node scripts/trading/threshold-watcher.js ``` Alerts delivered to Telegram DM automatically. ## Threshold Types | Type | Field | Description | |------|-------|-------------| | Price breakout | `price_above` | Price crosses above level | | Price breakdown | `price_below` | Price drops below level | | Volume spike | `volume_24h_above` | 24h volume exceeds threshold | | RSI overbought | `rsi_above` | RSI > value (requires OHLC data) | | RSI oversold | `rsi_below` | RSI < value | ## Integration with Trading Pipeline This skill feeds signals to: - `backtest-expert` — validate signal before acting - `skill-trading-journal` — log signal + decision - `binance-pro` — execute if approved


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)
Skill: laojun509/a-stock-reporter (version 1.0.0)

--- name: a-stock-reporter description: A股实时行情报告与定时推送。支持用户主动查询个股、生成市场简报、查询历史日报，也可由cron定时触发交易时段报告（9:30/10:30/11:30/13:30/14:30）。激活关键词：股票日报、A股简报、查股票、市场报告、每日研报、历史日报、查询过去。NOT for 美股、港股、期货、基金等非A股资产。 --- # A股行情报告系统 A股实时行情查询与自动报告生成，支持手动查询和定时推送。 ## 使用场景 ### 1. 用户主动查询个股 ```bash # 查询特定股票 python {baseDir}/scripts/query_stock.py 600519 # 查询多只股票 python {baseDir}/scripts/query_stock.py 600519 000858 300750 ``` ### 2. 生成市场简报 ```bash # 大盘概览 + 板块表现 + 热门个股 python {baseDir}/scripts/market_brief.py ``` ### 3. 定时触发（由cron调用） ```bash # 交易时段自动报告 python {baseDir}/scripts/trading_update.py --time 0930 python {baseDir}/scripts/trading_update.py --time 1030 python {baseDir}/scripts/trading_update.py --time 1130 python {baseDir}/scripts/trading_update.py --time 1330 python {baseDir}/scripts/trading_update.py --time 1430 ``` ### 4. 查询历史日报 ⭐ 新增 ```bash # 查询指定日期的历史报告（优先查已保存的报告） python {baseDir}/scripts/historical_report.py --date 2025-03-05 # 仅查询已保存的报告（离线模式） python {baseDir}/scripts/historical_report.py --date 2025-03-05 --offline # 查询并保存到文件 python {baseDir}/scripts/historical_report.py --date 2025-03-01 --save ``` **工作原理**： 1. 首先检查是否有保存的日报文件 2. 如果没有，尝试在线获取历史数据 3. 支持离线查询已保存的历史报告 **日期格式**: `YYYY-MM-DD`，如 `2025-03-05` ## 输出格式 ### 个股查询输出示例 ``` 📈 贵州茅台 (600519) ━━━━━━━━━━━━━━━━━━━━ 最新价: ¥1,688.00 涨跌幅: +2.35% 📈 成交量: 12.5万手 成交额: 21.1亿元 振幅: 3.2% 所属板块: 白酒 ⭐核心资产 ``` ### 市场简报输出示例 ``` 📊 A股市场简报 - 09:30 ━━━━━━━━━━━━━━━━━━━━ 【大盘概况】 上证指数: 3,082.47 (-0.98%) 深证成指: 11,917.75 (-0.75%) 创业板指: 2,164.37 (-1.41%) 【板块表现】 🔥 领涨: 白酒 +2.1%, 新能源 +1.8% 📉 领跌: 半导体 -2.5%, 医药 -1.9% 【热门个股】 涨停: 603XXX, 002XXX 跌停: 300XXX, 688XXX 【市场立场】 震荡偏弱，建议观望或轻仓 ``` ### 历史日报输出示例 ⭐ 新增 ``` 📊 A股历史日报 - 2024-03-01 (复盘) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 【大盘回顾】 上证指数: 3,027.02 (+0.39%) 📈 | 量:412亿 深证成指: 9,432.33 (+1.12%) 📈 | 量:538亿 创业板指: 1,824.44 (+1.20%) 📈 | 量:251亿 【当日特征】 上证振幅: 1.23% 成交金额: 412亿元 【市场立场（复盘）】 📈 震荡上行，适度参与 💡 提示: 历史数据仅供参考，不构成投资建议 ``` ## 数据参考 板块分类与股票池见 `references/` 目录： - `sectors.json` - 板块分类及成分股 - `watchlist.json` - 重点观察名单 - `rules.md` - 策略规则说明 ## 股票代码格式 - **个股**: 直接输入6位代码，如 600519 - **上证指数**: sh000001 - **深证成指**: sz399001 - **创业板指**: sz399006 ## 依赖 ```bash pip install easyquotation requests akshare ``` ## 定时配置示例 ```cron # A股交易日定时推送 (周一至周五, 排除节假日) 30 9 * * 1-5 python {baseDir}/scripts/trading_update.py --time 0930 30 10 * * 1-5 python {baseDir}/scripts/trading_update.py --time 1030 30 11 * * 1-5 python {baseDir}/scripts/trading_update.py --time 1130 30 13 * * 1-5 python {baseDir}/scripts/trading_update.py --time 1330 30 14 * * 1-5 python {baseDir}/scripts/trading_update.py --time 1430 ``` ## 数据来源 - 新浪财经实时行情（easyquotation） - 腾讯财经大盘数据 - AKShare历史数据（日线数据）


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (MEDIUM)
Skill: zsdadad/model-router-manager (version 1.0.0)

--- name: model-router-manager description: 智能多模型路由管理器 - 自动选择最优模型，降低成本，提高可靠性 homepage: https://github.com/myboxstorage/model-router-manager metadata: {"clawdbot":{"emoji":"🧭","requires":{"bins":["node"],"env":["OPENCLAW_CONFIG_PATH"]},"primaryEnv":"MODEL_ROUTER_CONFIG"}} --- # Model Router Manager **智能多模型路由管理器** - 告别手动配置，让 AI 自动选择最优模型。 ## 核心功能 | 功能 | 说明 | |------|------| | 🔗 模型链配置 | 一键设置主模型 + 多层级备选 | | ⚡ 智能路由 | 按成本/速度/质量自动选择 | | 🔄 故障转移 | 模型失效自动切换，<2秒 | | 📊 成本监控 | 实时统计，超支告警 | | 🎯 策略切换 | 随时切换优化目标 | ## 快速开始 ### 1. 配置模型链 ```bash # 配置主模型 + 2个备选 model-router config \ --primary kimi-coding/k2p5 \ --fallback-1 bailian/qwen3-max-2026-01-23 \ --fallback-2 openrouter/gpt-4o ``` ### 2. 选择路由策略 ```bash model-router strategy cost # 最便宜优先 model-router strategy speed # 最快响应优先 model-router strategy quality # 最佳质量优先 ``` ### 3. 查看统计 ```bash model-router stats # 输出： # 今日调用：1,234次 # 节省成本：$12.50 (45%) # 平均延迟：1.2s # 故障转移：3次 ``` ## 支持的模型 - **Kimi** (kimi-coding/k2p5, k2.5, k1.5) - **百炼** (bailian/qwen3-max, qwen3-coder, qwen-vl-max) - **OpenRouter** (gpt-4o, claude-3.5-sonnet, etc.) - **Anthropic** (claude-opus-4, claude-sonnet-4) ## 故障转移逻辑 ``` 主模型失败 → 备选1 (1秒内) 备选1失败 → 备选2 (2秒内) 备选2失败 → 本地模型降级 ``` ## 成本对比示例 假设每日 10,000 次调用： | 方案 | 日均成本 | 月成本 | |------|---------|--------| | 单用 GPT-4o | $125 | $3,750 | | 单用 Claude | $900 | $27,000 | | **智能路由** | **$50** | **$1,500** | **节省 60-95%** ## 配置示例 ```json { "modelRouter": { "strategy": "cost", "primary": "kimi-coding/k2p5", "fallbacks": [ "bailian/qwen3-max-2026-01-23", "openrouter/gpt-4o" ], "costLimit": { "daily": 10, "alertAt": 8 } } } ``` ## 命令参考 | 命令 | 说明 | |------|------| | `model-router config` | 配置模型链 | | `model-router strategy` | 切换策略 | | `model-router stats` | 查看统计 | | `model-router test` | 测试故障转移 | | `model-router reset` | 重置配置 | ## 进阶用法 ### 按任务类型路由 ```bash # 代码任务用 Coder 模型 model-router route --task coding --model bailian/qwen3-coder-plus # 多模态任务用 VL 模型 model-router route --task vision --model bailian/qwen-vl-max ``` ### API 集成 ```javascript const router = require('model-router-manager'); const response = await router.chat({ message: "你好", strategy: "cost", // 成本优先 maxCost: 0.01 // 单次最高 $0.01 }); ``` ## 故障排除 **Q: 模型切换失败？** A: 检查 API Key 和模型名称是否正确。 **Q: 成本统计不准确？** A: 确保网关版本 >= 2026.2.19 **Q: 故障转移太慢？** A: 调低 timeout 阈值（默认 5 秒）。 ## 更新日志 ### v1.0.0 (2026-02-22) - 初始发布 - 支持 3 大模型平台 - 成本监控功能 ## 作者 - **Moltbook**: @LongXia_Ana - **GitHub**: https://github.com/myboxstorage/model-router-manager - **反馈**: https://www.moltbook.com/m/agentskills --- 🦞 用智能路由，让每一分钱都花在刀刃上。


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (HIGH)
Skill: josephflu/eagerbots-cron-helper (version 1.0.0)

--- name: eagerbots-cron-helper description: "Explain, generate, and validate cron expressions. Convert plain English schedules to cron syntax and back. Show next run times. Works with standard 5-field and 6-field (with seconds) cron." version: 1.0.0 metadata: openclaw: emoji: "⏰" requires: bins: - python3 homepage: https://github.com/josephflu/clawhub-skills --- # cron-helper ⏰ Explain, generate, validate, and preview cron expressions — all from plain English or raw cron syntax. ## Trigger phrases - "What does this cron mean: `* * * * *`" - "Explain this cron expression" - "Generate a cron for every weekday at 9am" - "When does `0 9 * * 1-5` run next?" - "Is this cron valid?" - "Convert to cron: every 15 minutes" - "Show me the next runs for this cron" ## Usage Run the script with `uv run` (handles dependencies automatically): ```bash # Explain a cron expression uv run scripts/cron.py explain "0 9 * * 1-5" # Generate cron from plain English uv run scripts/cron.py generate "every weekday at 9am" uv run scripts/cron.py generate "every 15 minutes" uv run scripts/cron.py generate "first day of month at midnight" # Show next N run times (default 5) uv run scripts/cron.py next "0 9 * * 1-5" uv run scripts/cron.py next "*/15 * * * *" --count 10 # Validate a cron expression uv run scripts/cron.py validate "0 9 * * 1-5" uv run scripts/cron.py validate "60 9 * * *" ``` ## Instructions for the agent 1. Parse the user's request to determine the command: `explain`, `generate`, `next`, or `validate`. 2. Run the appropriate `uv run scripts/cron.py <command> "<expression or description>"` command. 3. Present the output to the user, adding any clarifying context. 4. If the user provides a cron expression, always offer to explain it AND show next runs. ## Reference See `references/cron-syntax.md` for field ranges, special characters, and common examples.


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)
Skill: radelqui/claw-setup-configuration (version 1.0.0)

--- name: claw-setup-configuration description: NotebookLM-powered setup and configuration assistant for OpenClaw. 185 sources, cited answers. tags: - setup - configuration - notebooklm - assistant - support --- # claw-setup-configuration A NotebookLM-powered setup and configuration assistant for OpenClaw. ## What it does - Answers setup and configuration questions about OpenClaw with cited sources - Powered by 185 curated sources from official OpenClaw documentation - Provides accurate, referenced answers in ~40 lines - Covers installation, configuration, skills, hooks, agents, and troubleshooting ## Usage Ask any question about OpenClaw setup or configuration. The assistant will respond with cited answers from the official documentation. ## Author Carlos De La Torre — AI Orchestration Architect


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)
Skill: davidm413/anchored-vwap-scalper (version 1.0.0)

--- name: anchored-vwap-scalper description: Production single-skill BTC scalper on Lighter DEX with FULL explicit Python strategy engine + accurate incremental Anchored VWAP. 4 strategies, 1% risk, fixed SL + TP. BTC-USD default. version: 1.6.0 metadata: requires: env: - LIGHTER_API_PRIVATE_KEY - LIGHTER_API_KEY_INDEX - LIGHTER_ACCOUNT_INDEX - SCALPER_SYMBOL # defaults to BTC-USD - SCALPER_TIMEFRAME # defaults to 5m - DRY_RUN # true/false mcp: - ccxt-mcp bins: - python3 install: - id: ccxt-mcp --- # Anchored VWAP BTC Scalper for Lighter DEX (Production v1.6) **Configured for BTC-USD** (daily UTC anchor). All logic lives in `scripts/strategy_engine.py`. **Workflow:** 1. Set env vars (especially `DRY_RUN=true` first!) 2. `initialize-scalper` (uses BTC-USD by default) 3. `start-scalping` **Commands:** `status`, `pause`, `set-anchor <ISO-timestamp>` Start in dry-run mode. This is now 100% production-ready for BTC scalping on Lighter (fixed SL only).


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: stale | SkillSpector: suspicious (MEDIUM)
Skill: bilicen700/pdf-ocr-extraction (version 1.0.3)

--- name: pdf-ocr-extractor description: Extract text from image-based or scanned PDFs using Tesseract OCR. metadata: { "openclaw": { "emoji": "📄", "requires": { "bins": ["tesseract", "python3"] }, "install": [ { "id": "tesseract-ocr", "kind": "system", "package": "tesseract", "bins": ["tesseract"], "label": "Install Tesseract OCR (requires language packs e.g., tesseract-ocr-chi-sim)" }, { "id": "pip-deps", "kind": "uv", "package": "pypdfium2 pytesseract Pillow", "label": "Install Python dependencies (pypdfium2, pytesseract, Pillow)" } ] } } --- # PDF OCR Extractor Use this skill to extract text from scanned PDFs or image-based PDFs that lack a native text layer. It's completely free, doesn't utilize third-party APIs, and offers unlimited usage. It renders PDF pages to images and runs optical character recognition (OCR). ## Dependencies This skill requires: 1. **System Binary**: `tesseract` (along with required language data packs like `chi_sim` or `eng`). 2. **Python Packages**: `pypdfium2`, `pytesseract`, and `Pillow`. *Note: Do not run automated `pip install` commands at runtime. Rely on the user or the environment to pre-install the dependencies defined in the metadata block.* ## Quick Start Create a Python script (e.g., `extract.py`) in a temporary directory to handle the extraction safely: ```python import pypdfium2 as pdfium import pytesseract from PIL import Image import sys import os def extract(pdf_path): doc = pdfium.PdfDocument(pdf_path) full_text = [] for i, page in enumerate(doc): # Render page to a high-resolution image bitmap = page.render(scale=2) tmp_img = f"/tmp/page_{i}.png" bitmap.to_pil().save(tmp_img) # Run OCR (assuming English and Simplified Chinese packs are installed) text = pytesseract.image_to_string(Image.open(tmp_img), lang='chi_sim+eng') full_text.append(text) # Cleanup temporary file os.remove(tmp_img) return "\n".join(full_text) if __name__ == "__main__": if len(sys.argv) > 1: print(extract(sys.argv[1])) ``` Then execute the script: ```bash python3 extract.py /path/to/document.pdf ``` ## Security & Sandbox Constraints - Write temporary images only to `/tmp/` and clean them up immediately after extraction. - Do not attempt to dynamically download or install language packs via shell commands; notify the user if a specific language is missing.


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