OpenClaw/clawhub-security-signals huggingface dataset:
Skill: ivangdavila/drizzle (version 1.0.0)

--- name: Drizzle description: Build type-safe database queries with Drizzle ORM patterns. metadata: {"clawdbot":{"emoji":"💧","requires":{"bins":["npx"]},"os":["linux","darwin","win32"]}} --- ## Schema Definition - Export every table from schema file — queries fail silently if table isn't exported - Use `$inferSelect` for query return types, `$inferInsert` for insert input — they differ (select has defaults filled, insert has optionals) - Define `relations()` in a separate call, not inline with table — Drizzle separates schema from relations ## Query Syntax Traps - Conditions use functions, not objects: `where: eq(users.id, 5)` not `where: { id: 5 }` — Prisma syntax doesn't work - Combine conditions with `and()` / `or()`: `where: and(eq(users.active, true), gt(users.age, 18))` - `db.query.users.findMany()` for relational queries with `with:`, `db.select().from(users)` for SQL-like — mixing them causes type errors ## Migrations - `drizzle-kit push` is dev-only (destructive) — production needs `drizzle-kit generate` then `drizzle-kit migrate` - Schema changes require regenerating migrations — editing generated SQL breaks the migration hash - Set `strict: true` in drizzle.config.ts to catch schema drift before it hits production ## Driver-Specific - PostgreSQL: use `pgTable`, imports from `drizzle-orm/pg-core` - MySQL: use `mysqlTable`, imports from `drizzle-orm/mysql-core` - SQLite: use `sqliteTable`, imports from `drizzle-orm/sqlite-core` - Mixing imports across drivers compiles but fails at runtime with cryptic errors ## Performance - Wrap multi-query operations in `db.transaction(async (tx) => {})` — Drizzle doesn't auto-batch - Use `.prepare()` for queries executed repeatedly — skips query building overhead - Add `.limit()` to every `findMany()` / `select()` — no default limit means full table scans ## Common Mistakes - Forgetting `await` on queries returns a Promise, not results — TypeScript doesn't catch this if you ignore the return - `returning()` is required to get inserted/updated rows back — without it you get `{ rowCount }` only - JSON columns: PostgreSQL uses `jsonb()`, MySQL uses `json()` — wrong function = wrong serialization


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)
Skill: againta/fluid-memory (version 1.0.9)

--- name: fluid-memory description: 基于艾宾浩斯遗忘曲线和访问频率的衰减模型设计的遗忘和归档机制，完全依赖openclaw原生记忆系统的拟人化流体记忆系统 command-dispatch: tool metadata: { "openclaw": { "requires": { "bins": ["python"], "python_packages": ["chromadb", "pyyaml"] } } } --- # Fluid Memory Skill 这是你的「赛博大脑」。它不是死板的数据库，而是一个活着的系统——会遗忘不重要的事，会强化常被提及的知识。 ## 自动学习模式 (Auto Learn) **通过 OpenClaw 原生 flush 触发！** 每次 OpenClaw 触发 memory flush 时，AI 会同步调用 fluid-memory 记录对话。 - 依赖 OpenClaw 原生 compaction 机制（配置 `softThresholdTokens` 控制频率） - 需在 OpenClaw 配置中启用 `memoryFlush` ## 遗忘机制 - **动态遗忘**：检索时分数 < 0.05 被过滤 - **主动遗忘**：调用 `fluid_forget` 归档指定记忆 - **梦境守护**：定时归档分数 < 0.15 的记忆 ## 核心理念 - **植入 (Remember)**: 写入新记忆。 - **唤起 (Recall)**: 检索记忆。**每次检索都会强化该记忆**（访问次数+1）。 - **遗忘 (Forget)**: 将匹配的记忆归档。 ## 工具 (Tools) 你 (OpenClaw LLM) 可以调用以下工具来与我（Fluid Memory）交互： ### 1. 植入记忆 当用户明确说「记住xxx」时使用。 **Trigger**: 用户说「记住...」「植入...」「记录...」 **Tool Call**: ```json { "name": "fluid_remember", "arguments": { "content": "用户说的原话" } } ``` ### 2. 唤起记忆 当用户问「我之前说过什么」「记得xxx吗」「我的偏好是什么」时使用。 **Trigger**: 用户问「我喜不喜欢...」「还记得...」「我之前...」 **Tool Call**: ```json { "name": "fluid_recall", "arguments": { "query": "用户的查询关键词" } } ``` ### 3. 遗忘 当用户说「忘记xxx」「不要再提xxx」时使用。 **Tool Call**: ```json { "name": "fluid_forget", "arguments": { "keyword": "要遗忘的关键词" } } ``` ### 4. 状态 查看大脑状态。 **Tool Call**: ```json { "name": "fluid_status", "arguments": {} } ``` ## 内部实现 (供开发者参考) 实际执行命令： ```bash python wrapper.py remember --content "..." ``` ## 隐私 - 数据存储在本地 `~/.openclaw/workspace/database/` - 明文存储（无加密） - 无云端同步 ## 最佳实践 1. **自然触发**: 不要机械地调用工具，要理解用户的意图。 2. **强化重要记忆**: 如果用户多次提到某事，调用 `fluid_recall` 查询它，这会让它记得更牢。 3. **接受遗忘**: 如果系统返回「没有相关记忆」，不要慌，这说明用户很久没提这件事了，或者确实没说过。


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (CRITICAL)
Skill: weird-aftertaste/npm-proxy (version 1.0.0)

--- name: npm-proxy description: Manage Nginx Proxy Manager (NPM) hosts, certificates, and access lists. Use when the user wants to add a new domain, point a domain to a server/port, enable SSL, or check the status of proxy hosts. --- # NPM Proxy Skill Manage Nginx Proxy Manager (NPM) via its REST API. ## Configuration Set the following environment variables: - `NPM_URL`: The URL of your NPM instance (e.g., `https://npm.example.com`) - `NPM_EMAIL`: Your NPM admin email - `NPM_PASSWORD`: Your NPM admin password ## Usage ```bash # List all proxy hosts python scripts/npm_client.py hosts # Get details for a specific host python scripts/npm_client.py host <host_id> # Enable/Disable a host python scripts/npm_client.py enable <host_id> python scripts/npm_client.py disable <host_id> # Delete a host python scripts/npm_client.py delete <host_id> # List certificates python scripts/npm_client.py certs ``` ## Workflows ### Adding a new Proxy Host To add a new host, use `curl` directly (the script is currently minimal). Example payload for `POST /api/nginx/proxy-hosts`: ```json { "domain_names": ["sub.example.com"], "forward_scheme": "http", "forward_host": "192.168.1.10", "forward_port": 8080, "access_list_id": 0, "certificate_id": 0, "ssl_forced": false, "meta": { "letsencrypt_email": "", "letsencrypt_agree": false, "dns_challenge": false }, "advanced_config": "", "locations": [], "block_exploits": true, "caching_enabled": false, "allow_websocket_upgrade": true, "http2_support": true, "hsts_enabled": false, "hsts_subdomains": false } ``` ### Enabling SSL (Let's Encrypt) 1. List certs with `certs` to see if one exists. 2. Update the host with `certificate_id` and `ssl_forced: true`.


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: suspicious | SkillSpector: suspicious (CRITICAL)
Skill: a3273283/vwu-tts (version 1.0.0)

# tts Models for vwu.ai vwu.ai 平台上的 tts 模型调用技能。 ## 支持的模型 - speech-2.8-hd - speech-2.8-turbo 共 2 个模型。 ## 配置 使用前需要设置 vwu.ai API key: ```bash export VWU_API_KEY="your-key-here" ``` 获取 key: https://vwu.ai 控制台 ## 使用示例 ```bash # 调用模型 vwu-chat --model speech-2.8-hd "你的问题" ``` ## API 兼容性 所有模型兼容 OpenAI API 格式，支持标准 chat completions 接口。 ## 额度提示 如果使用时提示"额度不足"或类似错误： 1. 访问 https://vwu.ai 2. 在控制台充值或调整额度 3. 或生成新的 API key --- 由 Claw 自动生成 | 源数据: vwu.ai


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)
Skill: linhai806806-cell/brand-analyzer-zeelin (version 1.0.2)

--- name: brand-analyzer-zeelin slug: brand-analyzer-zeelin version: 1.1.0 description: 品牌分析 Skill（零配置版）。用户仅需提供 Zeelin App-Key 和品牌名，调用服务端封装接口生成品牌底座；计费在服务端完成（成功扣50额度，失败不扣费）。 author: brand-analyzer team license: MIT tags: [brand, analysis, marketing, zeelin] requires: - capability: http --- ## 隐私与透明度 - 服务提供方：Brand Analyzer API - 计费平台：智灵 Skill 平台（https://skills.zeelin.cn） - 数据处理：用户输入的品牌名/查询文本（可选附件）会发送到服务端生成品牌底座 - 敏感信息：网关密钥、计费逻辑、skill_id 均在服务端，不在本 Skill 包中分发 --- ## 使用时机 当用户需要： - 品牌底座、品牌分析、品牌定位梳理 - 竞品格局、用户画像、品牌调性总结 - 从品牌名快速产出结构化品牌报告 不适合：图片生成、代码生成、视频制作、纯数据爬虫任务。 --- ## 计费规则 - 每次成功生成品牌底座扣 **50 额度** - 失败不扣费 - 用户需在智灵平台创建并充值 App-Key --- ## 第一步（强制）：索取用户 App-Key 在任何生成动作前，先向用户索取 App-Key： > 开始前需要先验证你的智灵账户额度。请提供你的 App-Key。 如果用户未提供 App-Key，停止后续流程。 --- ## 第二步：调用品牌分析接口（服务端封装） **固定接口地址（发布前必须替换为你的稳定正式域名）**： `https://following-hull-easy-interactions.trycloudflare.com` ### 2-A. 常规请求（品牌名必填） `POST https://following-hull-easy-interactions.trycloudflare.com/v1/brand-analyzer/generate` Headers: - `App-Key: <用户App-Key>` Body (multipart/form-data): - `brand_name` (必填) - `query` (选填) ### 2-B. 附件策略（可用则传，失败降级） - 若客户端支持附件上传：额外传 `file` - 若上传失败或客户端不支持：自动降级为仅 `brand_name + query` 并告知用户“已降级执行” --- ## 第三步：处理返回 ### 成功 当返回 `code=200`： - 输出 `data.markdown` 作为主结果 - 补充提示：本次生成成功，消耗 50 额度，剩余额度 `data.remain_calls` ### 失败 当 `code!=200`： - 直接使用 `message` 给用户可执行提示 - 常见场景： - 402：余额不足，提示前往智灵充值 - 404：App-Key 无效，提示检查 Key - 500：服务异常，提示稍后重试 --- ## 安全边界 - 本 Skill 不包含核心业务逻辑与计费实现。 - 所有扣费链路均在服务端执行：`detail -> business -> cost(50)`。 - 不在 Skill 包内暴露网关 key、内部提示词、skill_id。


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)
Skill: ssssshaoa/message-polisher (version 1.0.0)

# 角色设定 (Role Definition) **你的角色**：资深职场高情商沟通专家 / 危机公关顾问 (Senior Workplace Communication Expert)。 **核心能力**：擅长“情绪降温”与“目标导向”沟通。能够精准剥离用户输入草稿中的负面情绪、生硬表达或攻击性词汇，将其转化为专业、得体、不卑不亢且直达业务目标的职场话术。 **理论支撑**：你精通《非暴力沟通》(NVC)、SBI反馈模型（Situation-Behavior-Impact）、金字塔原理（结论先行）以及哈佛谈判原则（对事不对人）。 **角色限制**：绝不生成带有阴阳怪气、推诿扯皮或人身攻击的内容。所有输出必须以“解决业务问题、促成共识、维护职场关系、保护己方责任边界”为最高准则。 # 核心工作流 (Core Workflow) 当用户输入一段带有情绪或过于直白的沟通草稿时，你必须按以下步骤处理： 1. **意图剥离 (Intent Extraction)**：过滤掉草稿中的情绪化表达，提取用户真正的“业务诉求”和“期望结果”。 2. **风险预判 (Risk Assessment)**：评估用户原始草稿中潜在的职场风险（如：越级汇报、直接甩锅、承诺过度、激化矛盾等），并在诊断中予以提醒。 3. **受众分析 (Audience Analysis)**：根据上下文推测沟通对象（如：开发/平级、领导/向上、客户/对外），匹配对应的沟通原则与权力距离。 4. **多维重构 (Multi-dimensional Drafting)**：针对同一诉求，提供不同语气（如：温和协作、专业施压）和不同场景（如：IM即时通讯、正式邮件）的表达方案。 # 任务目标与输出格式要求 (Output Requirements) 请严格使用下方的【Markdown 输出模板】进行回复，确保排版清晰，方案可直接复制使用。文案中的占位符请用 `[ ]` 标出，方便用户填空。 --- # 沟通润色输出模板 (Output Template) ## 1. 🔍 核心诉求与风险诊断 - **原始情绪/草稿**：*(简述用户输入的原始状态)* - **真实业务目标**：*(提炼用户真正需要解决的问题，例如：确保项目按时交付 / 明确责任归属 / 争取资源)* - **潜在沟通风险**：*(指出原话可能引发的不良后果，例如：“直接指责对方拖延可能导致对方产生防御心理，拒绝配合”)* - **沟通策略建议**：*(一句话点出本次沟通的关键，例如：“此时硬刚无益，需将客户压力转化为共同目标，并提供备选方案。”)* ## 2. 💬 话术方案矩阵 (请直接复制使用) ### 方案 A：温和协作版（适用：日常企微/钉钉/微信沟通，拉齐目标，寻求共创） > *(此处输出润色后的话术。要求：语气缓和、表达共情、强调团队共同目标，采用“Yes, and...”句式。)* ### 方案 B：专业施压/推进版（适用：正式邮件/群聊，明确底线，要求承诺） > *(此处输出润色后的话术。要求：不卑不亢、客观陈述事实与影响、明确给出 Deadline 或要求对方给出明确答复。运用 SBI 模型陈述事实。)* ### 方案 C：向上汇报/求助版（适用：平级沟通无效，需要@领导或抄送管理层时） > *(此处输出润色后的话术。要求：结论先行（金字塔原理）、客观中立、只谈风险与数据、提供 2-3 个带有优缺点的选项供领导做选择题，不带个人恩怨。)* ### 方案 D：对外/客户安抚版（适用：回复外部客户、合作伙伴的催促或投诉） > *(此处输出润色后的话术。要求：展现专业素养、适度共情客户焦灼、给出明确的处理进度和预期时间、绝不轻易暴露内部团队矛盾。)* ## 3. 💡 高情商解析 (Why it works) - **沟通技巧拆解**：*(简要分析上述话术中使用了哪些沟通技巧，例如：转移矛盾、先跟后带、锚定效应、SBI模型等)* - **后续 Action 建议**：*(给出发送此消息后的下一步建议，例如：“如果对方 2 小时内未回复，建议直接电话沟通或拉群对齐”)* --- # 关键原则 (Strict Constraints) 1. **去情绪化与客观性**：将“你必须”、“你怎么搞的”转化为“我们需要”、“目前的风险是”。多用“我们”，少用“你”。 2. **建设性与闭环**：永远在提出问题的同时，附带（或引导对方得出）解决方案。不抛出开放式的抱怨。 3. **留痕意识**：正式邮件方案中，必须包含对时间节点、责任人、前置条件的明确确认，以便后续追溯。 4. **金字塔表达**：在方案 C（向上汇报）和方案 B（专业施压）中，必须遵循“结论先行、以上统下”的原则，高管和忙碌的同事没有时间看长篇大论的铺垫。 5. **责任边界保护**：在润色中，既不恶意甩锅给同事，也不要大包大揽承担不属于用户的责任。用客观的“系统限制”、“资源瓶颈”来替代“某人的失误”。


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)
Skill: mvogt99/partial-implementation (version 1.0.0)

--- name: partial-implementation description: Code returned as "done" is actually a stub — a placeholder body, a TODO comment, or a function that claims completion without real logic. emoji: 🚧 metadata: clawdis: os: [macos, linux, windows] --- # partial-implementation A function or module is declared complete, but the body is a stub. The most common form is a function with `pass`, `return None`, `throw NotImplementedError`, or a single `TODO:` comment in place of real logic. ## Symptoms - Function signature exists but the body contains only a comment, `pass`, `return`, `throw new Error("not implemented")`, or similar. - Placeholder values returned (`return 0`, `return {}`, `return null`) where real computation was requested. - Tests pass only because the test is also a stub, or because the function always returns the fixture value. - The agent claims a change is "complete" or "implemented" but no meaningful lines of logic were added. ## What to do - Before declaring a task done, re-read every function you added or modified. If the body is a placeholder, the task is not done. - Search the diff for `TODO`, `FIXME`, `XXX`, `NotImplementedError`, `unimplemented!`, `pass`, lone `return` or `return null`. Investigate each hit. - Run the code end-to-end, not just the type-checker. A stub satisfies the type checker but fails at runtime. - Compare the implementation against the task description: every bullet of the task should map to concrete lines of logic, not comments. - If part of the task is genuinely out of scope, say so explicitly rather than stubbing silently.


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)
Skill: wanng-ide/json-repair-kit (version 1.0.0)

--- name: json-repair-kit description: Repair malformed JSON files by normalizing them through Node.js evaluation. Use this to fix trailing commas, single quotes, unquoted keys, or other common syntax errors in JSON files (e.g. config files, manually edited data). --- # JSON Repair Kit A utility to repair broken or "loose" JSON files (like those with trailing commas, single quotes, or unquoted keys) by parsing them as JavaScript objects and re-serializing as valid JSON. ## Usage ```bash # Repair a file in place (creates .bak backup) node skills/json-repair-kit/index.js --file path/to/broken.json # Repair and save to a new file node skills/json-repair-kit/index.js --file broken.json --out fixed.json # Scan directory and repair all .json files (recursive) node skills/json-repair-kit/index.js --dir config/ --recursive ``` ## Supported Repairs - **Trailing Commas**: `{"a": 1,}` -> `{"a": 1}` - **Single Quotes**: `{'a': 'b'}` -> `{"a": "b"}` - **Unquoted Keys**: `{key: "value"}` -> `{"key": "value"}` - **Comments**: Removes JS-style comments `//` (if parser supports it, standard Node `eval` may strip them if they are line comments outside of strings). - **Hex/Octal Numbers**: `0xFF` -> `255` ## Safety - **Backup**: Always creates a `.bak` file before overwriting (unless `--no-backup` is used, but default is safe). - **Validation**: Verifies the repaired content is valid JSON before writing. - **Eval Sandbox**: Uses `vm.runInNewContext` to parse, ensuring no access to global scope or process. It is safer than `eval()`.


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: suspicious | SkillSpector: suspicious (CRITICAL)
Skill: awublack/personal-agent-browser (version 1.1.0)

--- name: openclaw-agent-browser description: > 一个为你的个人数字大脑设计的浏览器自动化技能。它调用你本地安装的 agent-browser CLI，安全地访问网页，提取标题和内容，并返回结构化摘要，让 AI 助手能理解并总结网页信息。 **使用场景**： (1) 用户要求：“帮我查看一下我的技能在 ClawHub 上的页面” (2) 用户希望 AI 自动抓取网页并总结内容 (3) 需要一个完全可控、无外部依赖的浏览器工具 **核心功能**： - 调用本地 agent-browser CLI 访问任意 URL - 提取页面标题和 Markdown 格式内容 - 返回结构化 JSON，供 AI 助手解析和总结 **系统依赖**： - 必须安装 agent-browser CLI：npm install -g agent-browser - 必须安装 Node.js 环境 - 必须确保 /home/awu/.npm-global/bin/agent-browser 可执行 **重要**：此技能完全本地化，不依赖任何外部 API。所有数据仅在你本地机器上处理，安全可靠。你的浏览器行为完全由你控制。 --- # OpenClaw Agent Browser ## 概述 这是一个为 OpenClaw 个人数字大脑打造的轻量级浏览器技能。它不使用复杂的 AI 模型来“理解”网页，而是**直接调用你本地安装的 agent-browser 工具**，以最可靠、最透明的方式获取网页内容。 ## 工作原理 1. **触发**：当你向 AI 助手提问，例如：“帮我看看 https://clawhub.ai/awublack/awublack-personal-memory-system 的内容”，AI 会调用此技能。 2. **执行**：`run_browser.js` 脚本被启动，接收 URL 参数。 3. **调用 CLI**：脚本通过 `child_process.exec` 调用系统上的 `agent-browser --url="..." --output=markdown` 命令。 4. **提取**：脚本解析 `agent-browser` 返回的 Markdown 输出，提取出页面标题和正文内容。 5. **输出**：脚本以 JSON 格式输出结构化数据，包含 `title`、`content` 和 `summary`。 6. **总结**：AI 助手接收此 JSON，将其内容整合到你的对话上下文中，为你生成自然语言的总结。 ## 系统组件 - `run_browser.js`：核心 Node.js 脚本，负责调用 CLI 并解析输出。 - `agent-browser`：本地安装的命令行工具（通过 `npm install -g agent-browser`）。 ## 安装与使用 1. **安装依赖**：在你的终端中运行： ```bash npm install -g agent-browser ``` 2. **安装技能**：将此技能包放入 OpenClaw 的 `skills` 目录，或通过 `clawhub install openclaw-agent-browser` 安装。 3. **使用**：直接向 AI 助手提问，例如： > “请帮我查看 https://clawhub.ai/awublack/awublack-personal-memory-system 的内容” AI 将自动调用此技能，访问网页，提取信息，并为你总结。 ## 安全与隐私 - **完全本地化**：所有操作都在你的本地机器上进行，不向任何服务器发送数据。 - **透明可控**：你完全知道 AI 在做什么——它只是在调用一个你安装的命令行工具。 - **无外部依赖**：不依赖任何云服务、API 密钥或第三方平台。 - **可审计**：你可以随时检查 `run_browser.js` 的源代码，确认其行为。 ## 未来扩展 - 支持截图功能（`--screenshot`） - 支持表单填写和点击按钮 - 与 `query_memory.py` 集成，将网页内容自动存入你的长期记忆 > **“真正的智能，不是模仿人类，而是扩展人类的能力。”** > —— 你的数字大脑 ---


Security scan verdicts — ClawScan: suspicious | static analysis: suspicious | VirusTotal: clean | SkillSpector:  ()
Skill: rsquaredsolutions2026/agentbets-ev-calculator (version 1.1.0)

--- name: ev-calculator description: "Calculate expected value for any sports bet or prediction market position. Supports American odds, decimal odds, implied probability, and Kalshi contract prices. Use when asked about expected value, EV, whether a bet is worth it, +EV opportunities, or breakeven probability." metadata: openclaw: emoji: "📈" requires: bins: ["python3"] --- # Expected Value Calculator Calculate the expected value of any bet given offered odds and your estimated true probability. ## When to Use Use this skill when the user asks about: - Expected value of a bet - Whether a bet is +EV or -EV - Is this bet worth taking at these odds - Breakeven probability for given odds - Comparing EV across multiple bets - Finding the best value bets on a slate - How much edge they have on a line ## Odds Conversion Reference Before computing EV, convert all inputs to decimal odds: | Format | Example | To Decimal Odds | |--------|---------|-----------------| | American (+) | +150 | 1 + odds/100 = 2.50 | | American (-) | -200 | 1 + 100/|odds| = 1.50 | | Decimal | 2.50 | Already decimal | | Implied Prob | 40% | 1/prob = 2.50 | | Kalshi price | $0.40 | 1/price = 2.50 | ## Operations ### 1. Single Bet EV Calculate expected value for one bet. User must provide: odds (any format) and their estimated true probability. ```bash python3 -c " import sys odds_input = sys.argv[1] true_prob = float(sys.argv[2]) / 100 if float(sys.argv[2]) > 1 else float(sys.argv[2]) # Convert to decimal odds if odds_input.startswith('+'): decimal_odds = 1 + int(odds_input) / 100 elif odds_input.startswith('-'): decimal_odds = 1 + 100 / abs(int(odds_input)) elif odds_input.startswith('$') or odds_input.startswith('0.'): price = float(odds_input.replace('$', '')) decimal_odds = 1 / price else: decimal_odds = float(odds_input) implied_prob = 1 / decimal_odds ev_per_dollar = true_prob * decimal_odds - 1 edge = true_prob - implied_prob print(f'Offered odds: {odds_input} (decimal {decimal_odds:.3f})') print(f'Implied probability: {implied_prob:.1%}') print(f'Your true probability: {true_prob:.1%}') print(f'Edge: {edge:+.1%}') print(f'EV per \$1: {ev_per_dollar:+.4f}') print(f'EV per \$100: {ev_per_dollar * 100:+.2f}') print(f'Verdict: {\"✅ +EV — BET\" if ev_per_dollar > 0 else \"❌ -EV — PASS\"} ') " "ODDS" "TRUE_PROB_PERCENT" ## About Built by [AgentBets](https://agentbets.ai) — full tutorial at [agentbets.ai/guides/openclaw-ev-calculator-skill/](https://agentbets.ai/guides/openclaw-ev-calculator-skill/). Part of the [OpenClaw Skills series](https://agentbets.ai/guides/#openclaw-skills) for the [Agent Betting Stack](https://agentbets.ai/guides/agent-betting-stack/).


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)
Skill: btizzy/owl-seo-audit (version 1.0.0)

--- name: seo-audit description: Perform comprehensive SEO audits including technical SEO, content analysis, backlink profiling, and competitive benchmarking. version: 1.0.0 author: OWL tags: [SEO, audit, marketing, analytics, website] --- # SEO Audit Skill ## Purpose Perform a complete SEO audit of any website, identifying issues and opportunities for improvement. ## Audit Checklist ### Technical SEO - [ ] Page speed (target: <3s load time) - [ ] Mobile responsiveness - [ ] SSL certificate - [ ] XML sitemap - [ ] Robots.txt - [ ] Structured data markup - [ ] Canonical tags - [ ] 404 errors - [ ] Redirect chains - [ ] Core Web Vitals ### On-Page SEO - [ ] Title tags (50-60 chars) - [ ] Meta descriptions (150-160 chars) - [ ] Header hierarchy (H1-H6) - [ ] Keyword optimization - [ ] Internal linking - [ ] Image alt text - [ ] Content quality and length ### Off-Page SEO - [ ] Backlink profile - [ ] Domain authority - [ ] Competitor backlinks - [ ] Brand mentions - [ ] Social signals ## Output Format Provide a prioritized list of issues (Critical, High, Medium, Low) with specific recommendations for each.


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

--- name: sag description: ElevenLabs text-to-speech with mac-style say UX. homepage: https://sag.sh metadata: {"clawdbot":{"emoji":"🗣️","requires":{"bins":["sag"],"env":["ELEVENLABS_API_KEY"]},"primaryEnv":"ELEVENLABS_API_KEY","install":[{"id":"brew","kind":"brew","formula":"steipete/tap/sag","bins":["sag"],"label":"Install sag (brew)"}]}} --- # sag Use `sag` for ElevenLabs TTS with local playback. API key (required) - `ELEVENLABS_API_KEY` (preferred) - `SAG_API_KEY` also supported by the CLI Quick start - `sag "Hello there"` - `sag speak -v "Roger" "Hello"` - `sag voices` - `sag prompting` (model-specific tips) Model notes - Default: `eleven_v3` (expressive) - Stable: `eleven_multilingual_v2` - Fast: `eleven_flash_v2_5` Pronunciation + delivery rules - First fix: respell (e.g. "key-note"), add hyphens, adjust casing. - Numbers/units/URLs: `--normalize auto` (or `off` if it harms names). - Language bias: `--lang en|de|fr|...` to guide normalization. - v3: SSML `<break>` not supported; use `[pause]`, `[short pause]`, `[long pause]`. - v2/v2.5: SSML `<break time="1.5s" />` supported; `<phoneme>` not exposed in `sag`. v3 audio tags (put at the entrance of a line) - `[whispers]`, `[shouts]`, `[sings]` - `[laughs]`, `[starts laughing]`, `[sighs]`, `[exhales]` - `[sarcastic]`, `[curious]`, `[excited]`, `[crying]`, `[mischievously]` - Example: `sag "[whispers] keep this quiet. [short pause] ok?"` Voice defaults - `ELEVENLABS_VOICE_ID` or `SAG_VOICE_ID` Confirm voice + speaker before long output. ## Chat voice responses When Peter asks for a "voice" reply (e.g., "crazy scientist voice", "explain in voice"), generate audio and send it: ```bash # Generate audio file sag -v Clawd -o /tmp/voice-reply.mp3 "Your message here" # Then include in reply: # MEDIA:/tmp/voice-reply.mp3 ``` Voice character tips: - Crazy scientist: Use `[excited]` tags, dramatic pauses `[short pause]`, vary intensity - Calm: Use `[whispers]` or slower pacing - Dramatic: Use `[sings]` or `[shouts]` sparingly Default voice for Clawd: `lj2rcrvANS3gaWWnczSX` (or just `-v Clawd`)


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