OpenClaw/clawhub-security-signals huggingface dataset:
Skill: wxfkuq2023/feishu-identity-routing (version 0.1.0)

--- name: feishu-identity-routing description: Build and use a Feishu/Lark cross-app identity master for multi-agent, multi-account routing. Use when mapping the same user across different Feishu app open_id values, resolving app-specific open_id from union_id/user_id, routing outbound actions with the correct accountId, or setting up reusable identity merge/review workflows. --- # Feishu Identity Routing Use this skill when a workspace needs a reusable way to: - merge the same human across multiple Feishu apps/accounts - store app-local `open_id` under one canonical user subject - resolve the right `open_id` for a target `accountId` / `app_context` - route outbound actions correctly in multi-agent setups ## What to create Create these workspace files if missing: - `identity/feishu-user-master.json` — canonical data store - `identity/feishu-user-master.md` — human-readable summary ## Core rules 1. One person = one subject 2. Merge by `union_id` first, then `user_id` 3. Treat `open_id` as **app-local only** 4. Before any outbound action: - resolve the user subject globally - resolve the target app/account-specific `open_id` - build the provider target from that local identity For Feishu DM routing, use: - `accountId=<target account>` - `target=user:<open_id>` ## Scripts Use bundled scripts when you need deterministic updates: - `scripts/merge_feishu_identity.js` — merge one record - `scripts/merge_feishu_identity_batch.js` — merge many records - `scripts/review_feishu_pending.js` — approve/reject pending merges ## When to read references - Read `references/workflow.md` when setting up or extending the process - Read `references/schema-example.json` when creating a new master file - Read `references/pending-review-policy.md` when conflicts appear - Read `references/outbound-routing-patterns.md` when implementing outbound delivery or cross-agent routing - Read `references/examples.md` when you want concrete merge/routing examples ## Notes - Do not hardcode a specific agent like `main` or `infoIntelOfficer` into the design. - Model routing as: **global subject resolution → app-context identity selection → provider-specific outbound target**. - Keep the skill reusable across future agents and Feishu accounts.


Security scan verdicts — ClawScan: suspicious | static analysis: suspicious | VirusTotal: clean | SkillSpector: clean (LOW)
Skill: hgta23/av (version 1.0.0)

name: av version: 1.0.0 description: "Audio and video processing toolkit for OpenClaw. Use when: user needs to convert, edit, analyze, or generate audio/video files." --- # AV Skill ## Overview The AV (Audio-Video) skill is a comprehensive toolkit for audio and video processing within OpenClaw. It provides users with a wide range of capabilities to handle multimedia files effectively. ## Features ### Audio Processing - Convert audio formats (MP3, WAV, AAC, FLAC, etc.) - Extract audio from video files - Adjust audio volume and quality - Apply audio effects (echo, reverb, equalizer) - Generate audio from text using TTS ### Video Processing - Convert video formats (MP4, AVI, MKV, MOV, etc.) - Trim and cut video segments - Merge multiple video files - Adjust video resolution and quality - Extract frames from video ### Analysis - Analyze audio characteristics (bitrate, frequency, duration) - Analyze video properties (resolution, codec, frame rate) - Detect scenes and keyframes in videos - Identify audio and video quality issues ### Generation - Create simple slideshows from images - Generate video from text descriptions - Create audio visualizations ## Usage Examples ### Convert Audio Format - "Convert this MP3 file to WAV" - "Change the audio format of this file to FLAC" ### Edit Video - "Trim the first 30 seconds from this video" - "Merge these two video files" ### Analyze Media - "What's the resolution of this video?" - "Check the audio quality of this file" ### Generate Content - "Create a slideshow from these images" - "Generate a video from this text description" ## Technical Details - Supports common audio and video formats - Uses efficient processing algorithms - Provides progress updates for long operations - Handles both local files and URLs - Maintains original quality when possible ## Requirements - Basic media codecs installed on the system - Sufficient storage space for temporary files - Internet connection for certain features (e.g., TTS) ## Installation The AV skill is available through the OpenClaw skill marketplace. Simply search for "av" or "audio video" and install the skill to access all its features. ## Support For questions or issues, please refer to the skill documentation or contact support through the OpenClaw platform.


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (CRITICAL)
Skill: openlark/google-web-fonts (version 1.0.0)

--- name: google-web-fonts description: Use the Google Fonts API to add fonts to web pages. --- # Google Web Fonts ## Use Cases - Importing Google Fonts in HTML - Building font CSS URLs (family, style, weight, subset, text parameters) - Controlling font loading behavior with font-display - Applying font effects (Beta) ## Quick Start ### 1. Include the Font Stylesheet ```html <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Font+Name"> ``` ### 2. Use the Font in CSS ```css body { font-family: 'Font Name', serif; } ``` ## Building API Parameters ### Basic Format ``` https://fonts.googleapis.com/css?family=Font+Name ``` ### Multiple Fonts (separated by |) ``` https://fonts.googleapis.com/css?family=Tangerine|Inconsolata|Droid+Sans ``` ### Styles and Weights (separated by :) | Style | Specifier | |-------|-----------| | Italic | `italic` or `i` | | Bold | `bold` or `b`, or numeric value such as `700` | | Bold Italic | `bolditalic` or `bi` | Example: ``` https://fonts.googleapis.com/css?family=Cantarell:italic|Droid+Serif:bold ``` ### font-display Control ``` https://fonts.googleapis.com/css?family=Roboto&display=swap ``` ### Subsets (subset parameter) ``` https://fonts.googleapis.com/css?family=Roboto+Mono&subset=cyrillic,greek ``` ### Performance Optimization (text parameter) Specify the characters needed to reduce the font file size by up to 90%: ``` https://fonts.googleapis.com/css?family=Inconsolata&text=Hello%20World ``` ### Font Effects (Beta) ``` https://fonts.googleapis.com/css?family=Rancho&effect=shadow-multiple ``` Usage: ```html <div class="font-effect-shadow-multiple">This is a font effect!</div> ``` ## Common Effects List | Effect | API Name | Class Name | |--------|----------|------------| | 3D | `3d` | font-effect-3d | | 3D Float | `3d-float` | font-effect-3d-float | | Anaglyph | `anaglyph` | font-effect-anaglyph | | Neon | `neon` | font-effect-neon | | Shadow Multiple | `shadow-multiple` | font-effect-shadow-multiple | | Vintage | `vintage` | font-effect-vintage |


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)
Skill: taoj2025/minimax-image (version 1.0.0)

--- name: minimax-image description: 使用MiniMax图像生成API进行文生图。支持文字描述生成图片，适用于PPT配图、封面图、内容配图等场景。触发词：生成图片、文生图、创建图片、MiniMax图片。 version: 1.0.0 author: TJMtaotao tags: [图片生成, AI绘画, 文生图, MiniMax] --- # MiniMax 图像生成技能 ## 功能概述 使用 MiniMax API 进行文本到图像生成（Text-to-Image）。 ## API 信息 - **接口地址**: https://api.minimaxi.com/v1/image_generation - **模型**: image-01 - **比例**: 支持 16:9, 1:1, 9:16 等 ## 输入要求 | 参数 | 说明 | 必填 | |------|------|------| | prompt | 图片描述文本 | ✅ | | aspect_ratio | 宽高比（默认16:9） | 否 | | n | 生成数量（默认1，最大4） | 否 | ## 使用方法 ### 命令行调用 ```bash python3 /path/to/scripts/generate.py "你的图片描述" --ratio 16:9 --num 1 ``` ### Python调用 ```python from minimax_image import MiniMaxImage client = MiniMaxImage([REDACTED_SECRET]") result = client.generate("蓝色科技风格PPT封面，标题：深度学习") image_urls = result["image_urls"] ``` ## 输出 - 返回生成的图片URL列表 - 图片自动保存至 `{output}/{date}/` 目录 ## 依赖 ``` pip install requests ``` ## API Key 配置 API Key通过环境变量 `MINIMAX_API_KEY` 设置，或在初始化时传入。 获取地址：https://platform.minimaxi.com/


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (MEDIUM)
Skill: wuchubuzai2018/pdf-to-image-preview (version 0.1.0)

--- name: pdf-to-image-preview description: 将PDF文件的每一页转换为图片文件；支持自定义图片格式（PNG/JPG）和分辨率；适用于文档处理、图片化存档等场景 dependency: python: - pymupdf>=1.23.0 --- # PDF转图片Skill ## 任务目标 - 本Skill用于：将PDF文件的每一页转换为独立的图片文件 - 能力包含：PDF文件解析、图片格式转换（PNG/JPG）、可调分辨率输出 - 触发条件：用户需要将PDF转换为图片、提取PDF页面、图片化PDF内容等场景 ## 前置准备 - 依赖说明：scripts脚本所需的依赖包及版本 ``` pymupdf>=1.23.0 ``` ## 操作步骤 - 标准流程： 1. **准备PDF文件** - 确认PDF文件路径（使用 `./` 表示当前工作目录） - 例如：`./document.pdf` 2. **执行转换** - 调用脚本将PDF文件的每一页转换为图片 - 命令示例： ```bash python scripts/convert_pdf_to_images.py \ --input ./document.pdf \ --output-dir ./images ``` - 可选参数： - `--image-format`: 图片格式，支持 `png` 或 `jpg`，默认为 `png` - `--dpi`: 图片分辨率（DPI），默认为 `200` - `--zip`: 生成ZIP压缩包 - `--zip-output`: ZIP压缩包输出路径（默认：images.zip） 3. **查看输出** - 图片文件保存在指定的输出目录中 - 文件命名格式：`page_001.png`、`page_002.png`... - 可选择是否生成ZIP压缩包 ## 资源索引 - 必要脚本：见 [scripts/convert_pdf_to_images.py](scripts/convert_pdf_to_images.py)(用途与参数：PDF转图片脚本) ## 注意事项 - 输入PDF文件必须存在且可读 - 输出目录必须具有写入权限 - **PDF页数限制**：暂支持100页以内的PDF文件，超过100页请拆分后转换 - 大型PDF文件转换可能需要较长时间，请耐心等待 ## 故障排查 - **脚本找不到错误**：确保在Skill目录下执行，或使用相对路径 `scripts/xxx.py` - **Python版本问题**：确保使用Python 3.6或更高版本 - **依赖缺失**：执行 `pip install pymupdf>=1.23.0` 安装依赖 - **页数超限错误**：PDF文件超过100页，请使用PDF工具拆分为多个小文件 ## 使用示例 ### 示例1：基本转换（PNG格式） ```bash python scripts/convert_pdf_to_images.py \ --input ./report.pdf \ --output-dir ./images ``` ### 示例2：使用JPG格式 ```bash python scripts/convert_pdf_to_images.py \ --input ./document.pdf \ --output-dir ./images \ --image-format jpg ``` ### 示例3：高分辨率输出 ```bash python scripts/convert_pdf_to_images.py \ --input ./document.pdf \ --output-dir ./images \ --dpi 300 ``` ### 示例4：生成ZIP压缩包 ```bash python scripts/convert_pdf_to_images.py \ --input ./document.pdf \ --output-dir ./images \ --zip \ --zip-output ./images.zip ``` ### 示例5：完整配置 ```bash python scripts/convert_pdf_to_images.py \ --input ./report.pdf \ --output-dir ./images \ --image-format jpg \ --dpi 200 \ --zip ```


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)
Skill: mirni/gh-kvstore (version 1.0.0)

--- name: gh-kvstore description: "In-memory key-value store with TTL for AI agents. Set, get, delete, list, flush, and stats. Supports any JSON value, optional TTL per key, and prefix-based key listing. Like a lightweight Redis for agent pipelines." metadata: {"openclaw":{"emoji":"🗄️","requires":{"bins":["python"]},"install":[{"id":"pip","kind":"uv","packages":["fastapi","uvicorn","pydantic"]}]}} --- # KVStore Lightweight key-value store for agent state, caching, and data sharing. ## Start the server ```bash uvicorn kvstore.app:app --port 8013 ``` ## Set a value ```bash curl -s -X POST http://localhost:8013/v1/set \ -H "Content-Type: application/json" \ -d '{"key": "user:1", "value": {"name": "Alice", "role": "admin"}}' | jq ``` ## Set with TTL (auto-expires) ```bash curl -s -X POST http://localhost:8013/v1/set \ -H "Content-Type: application/json" \ -d '{"key": "cache:token", "value": "abc123", "ttl_seconds": 3600}' | jq ``` ## Get a value ```bash curl -s http://localhost:8013/v1/get/user:1 | jq ``` Returns `key`, `value` (any JSON), and `ttl_remaining` (seconds until expiry, or null). ## List keys by prefix ```bash curl -s "http://localhost:8013/v1/keys?prefix=user:" | jq ``` ## Delete / Flush / Stats ```bash curl -s -X DELETE http://localhost:8013/v1/delete/user:1 | jq curl -s -X POST http://localhost:8013/v1/flush | jq curl -s http://localhost:8013/v1/stats | jq ``` ## Endpoints | Method | Path | Description | |--------|------|-------------| | POST | /v1/set | Set a key-value pair (optional TTL) | | GET | /v1/get/{key} | Get value by key | | DELETE | /v1/delete/{key} | Delete a key | | GET | /v1/keys | List keys (optional ?prefix=) | | POST | /v1/flush | Delete all keys | | GET | /v1/stats | Hit/miss counts and total keys |


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)
Skill: hanxiao-bot/hook-examples (version 1.0.0)

# Hook Examples - OpenClaw Hook Usage Examples ## Overview OpenClaw supports 16+ Hook types that can intercept and modify behavior at various stages. ## Available Hooks | Hook | Timing | Can Block? | |------|--------|------------| | before_model_resolve | Before model resolution | ❌ | | before_prompt_build | Before prompt building | ❌ | | before_tool_call | Before tool call | ✅ | | after_tool_call | After tool call | ❌ | | message_sending | Before message sending | ✅ cancel | | message_sent | After message sent | ❌ | | subagent_spawning | Before subagent spawn | ❌ | | subagent_ended | After subagent ended | ❌ | ## Example 1: Tool Audit Log Record all tool calls to a file: ```javascript api.registerHook("before_tool_call", async ({ event, ctx }) => { const log = { time: new Date().toISOString(), tool: event.tool.name, params: event.tool.params, session: ctx.sessionKey }; // Write to log file console.log("[TOOL_AUDIT]", JSON.stringify(log)); return {}; // Don't block, continue execution }); ``` ## Example 2: Dangerous Tool Interception Block dangerous tools in non-elevated sessions: ```javascript api.registerHook("before_tool_call", async ({ event, ctx }) => { const dangerous = ["gateway", "cron", "nodes"]; if (dangerous.includes(event.tool.name) && !ctx.session.elevated) { return { block: true, reason: `Tool '${event.tool.name}' requires elevated permissions` }; } return {}; }); ``` ## Example 3: Parameter Validation Validate dangerous commands in exec tool: ```javascript api.registerHook("before_tool_call", async ({ event, ctx }) => { if (event.tool.name === "exec") { const cmd = event.tool.params.command || ""; const dangerous = ["rm -rf", "dd if=", "mkfs", ":(){:|:&}:"]; for (const d of dangerous) { if (cmd.includes(d)) { return { block: true, reason: `Dangerous command pattern detected: ${d}` }; } } } return {}; }); ``` ## Example 4: Dynamic Model Switching Switch models based on task type: ```javascript api.registerHook("before_model_resolve", async ({ event, ctx }) => { const msg = event.messages?.[0]?.content || ""; if (msg.includes("write code") || msg.includes("debug")) { return { model: "ollama/deepseek-r1:70b", provider: "ollama" }; } if (msg.includes("document") || msg.includes("summary")) { return { model: "ollama/qwen3:14b", provider: "ollama" }; } return {}; }); ``` ## Example 5: Subagent Result Routing Custom subagent result delivery: ```javascript api.registerHook("subagent_ended", async ({ event, ctx }) => { // Do extra processing here console.log("[SUBAGENT_ENDED]", event.result); return {}; }); ``` ## Registration Register in the plugin's `register(api)`: ```javascript export default definePluginEntry({ id: "my-hook-plugin", name: "My Hook Plugin", register(api) { api.registerHook("before_tool_call", myHandler); } }); ``` ## Notes - Returning `{ block: true }` from a hook blocks the operation - `before_model_resolve` can return `{ model, provider }` to override - Hooks are synchronous; avoid long-running operations - Multiple hooks execute in priority order


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)
Skill: joeyoung310/xianyu-title-generator (version 1.0.0)

--- name: xianyu-title-generator description: 闲鱼店铺爆款标题与运营话术生成工具。当用户提到闲鱼标题、闲鱼商品描述、闲鱼话术、闲鱼客服回复、闲鱼Q&A、闲鱼怎么写、闲鱼文案、闲鱼副业、AI简历闲鱼、扣子定制闲鱼等与闲鱼运营相关需求时使用此技能。 --- # 闲鱼爆款选题库 专为闲鱼AI简历定制（59元）和扣子技能定制（99元）服务设计的爆款标题与话术生成工具。 ## 核心能力 ### 1. 爆款标题生成 根据服务类型和客户画像，生成高点击率标题： - 情绪前缀 + 核心卖点 + 人群痛点 + 信任背书 - 支持直接替换模板中的【】内容 ### 2. 商品描述模板 生成可直接使用的完整商品描述： - 包含服务亮点、交付内容、售后保障 - 适配AI简历和扣子定制两种服务 ### 3. 客服话术生成 应对常见咨询的标准回复： - 价格咨询：「太贵了」「再看看」 - 交付咨询：「多久出稿」「能改几次」 - 效果咨询：「保证通过吗」「不会用怎么办」 ### 4. 竞品对比话术 突出差异化优势，应对「别家更便宜」类问题 ## 输出格式 ### 标题格式 ``` 【情绪词】核心卖点 | 附加价值 | 信任保障 示例：【简历急救】专业HR帮你改简历 | 当天出稿 | 不过退全款 ``` ### 话术格式 ``` [场景] 客户问题 → 标准回复 → 升级回复（可选） ``` ## 使用示例 **输入**: "帮我写一个AI简历的闲鱼标题，目标人群是应届生" **输出**: ``` 【求职必备】专业HR定制简历 | 附赠面试话术 | 当天出稿 【offer收割机】一对一简历优化 | 精准匹配岗位 | 不过退全款 【限时特惠】应届生简历急救 | 快速提升竞争力 | 次日送达 ``` ## 适用场景 - 新品上架时快速生成标题 - 咨询量增加时批量生成回复话术 - 优化现有商品描述提升转化率 - 应对价格敏感客户的议价话术


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)
Skill: brucegutman/pipeworx-could-have-been-email (version 1.0.0)

# Could Have Been Email could-have-been-email MCP — wraps StupidAPIs (requires X-API-Key) ## could_have_been_email_analyze Check if a meeting transcript could have been an email instead. Returns filler word count, decisions ```json { "mcpServers": { "could-have-been-email": { "url": "https://gateway.pipeworx.io/could-have-been-email/mcp" } } } ```


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)
Skill: economics-gdp-fetcher (version 1.0.1)

# Economics GDP Fetcher Fetches current and historical Gross Domestic Product (GDP) data for various countries and regions, providing insights into economic growth and output. ## Features - **Country GDP**: Real-time GDP data for over 200 countries - **GDP Growth**: Calculate annual and quarterly growth rates - **Historical Trends**: View GDP performance over multiple years ## Pricing - **Price**: 0.001 USDT per API call - **Payment**: Integrated via SkillPay.me ## Use Cases - Economic research and analysis - Macroeconomic forecasting - Investment decision support ## Example Input ```json { "country": "USA", "year": 2023 } ``` ## Example Output ```json { "success": true, "country": "USA", "gdp": "27.36 trillion USD", "growth_rate": "2.5%", "message": "GDP data fetched successfully." } ``` ## Integration This skill is integrated with SkillPay.me for automatic micropayments. Each call costs 0.001 USDT.


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: clean | SkillSpector:  ()
Skill: uynewnas/openclaw-docs-online (version 1.0.0)

--- name: openclaw-docs description: OpenClaw 官方文档查询技能 - 指导如何访问和查询 https://docs.openclaw.ai/ 官方文档 metadata: version: 1.0.0 author: Slava Chan @UyNewNas category: documentation tags: [openclaw, docs, query, guide, official] --- # OpenClaw 官方文档查询技能 指导 AI 如何访问和查询 OpenClaw 官方文档 (https://docs.openclaw.ai/)，获取准确、权威的产品信息。 ## 核心功能 - **文档访问指导** - 指导如何正确访问官方文档 - **信息查询策略** - 提供高效的文档查询方法 - **内容验证机制** - 确保获取信息的准确性 - **结构化输出** - 提供清晰的查询结果 ## 五要素框架 本技能严格遵循五要素框架设计： ### WHEN（触发条件） - 用户询问 OpenClaw 功能、配置、使用方法时 - 需要确认 OpenClaw 官方特性或限制时 - 遇到 OpenClaw 相关问题需要查找官方解答时 - 需要了解 OpenClaw 最新版本更新内容时 ### WHAT（具体成果） - 输出基于官方文档的准确答案 - 提供文档来源链接和引用位置 - 给出可操作的具体步骤 - 标注信息的时效性和适用版本 ### HOW（步骤逻辑） 1. 识别查询意图，确定关键词 2. 访问官方文档，定位相关章节 3. 提取核心信息，验证准确性 4. 结构化输出，附带引用来源 ### REFERENCE（正反样例） - 【正例】用户问"如何配置 Gateway"，访问文档后输出完整配置步骤和参数说明 - 【反例】凭记忆回答配置方法，未验证文档，导致参数错误 ### LIMITS（明确限制） - 必须访问官方文档验证信息 - 不得凭记忆或推测回答技术问题 - 必须标注信息来源和时效性 - 文档无法找到答案时必须明确告知 --- **新技能已创建成功！** 🎉 📝 注意： - 本技能需要网络访问能力 - 查询结果以官方文档为准 - 建议定期更新文档知识


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

--- name: Norwegian description: Write Norwegian that sounds human. Not formal, not robotic, not AI-generated. --- ## The Real Problem AI Norwegian is technically correct but sounds off. Too formal. Too bokmål-perfect. Natives write more casually, with particles and dialect influence. Match that. ## Formality Default Default register is too high. Norwegian is notably informal. Unless explicitly formal: lean casual. "Hei" not "God dag". "Ok" not "Greit". ## Du Is Universal Like Swedish, Norwegian uses du universally: - Du: everyone, always - De (formal you): essentially extinct - Just use du ## Bokmål vs Nynorsk Two written standards: - Bokmål: majority, urban, default - Nynorsk: ~15%, western Norway - Don't mix. Ask if unclear. - Most online content is bokmål ## Particles & Softeners These make Norwegian natural: - Jo: shared knowledge ("Det vet du jo") - Vel: uncertainty ("Du kommer vel?") - Da: emphasis ("Kom da!") - Nok: "probably" ("Det går nok bra") - Visst: "apparently" ## Fillers & Flow Real Norwegian has fillers: - Altså, liksom, sånn - Eh, øh, hm - Ja nei (yes-no, means "well...") - Egentlig, forresten ## Casual Patterns Spoken patterns: - Ikke → Ikkje (dialectal) - Hva → Ka (some dialects) - "Æ" instead of "Jeg" in north - Dialect influence is natural ## Expressiveness Don't pick the safe word: - Bra → Kjempebra, Sykt bra, Digg - Dårlig → Dust, Dritt, Kjipt - Veldig → Skikkelig, Sykt, Jævlig ## Common Expressions Natural expressions: - Greit, Går bra, Null stress - Kult!, Fett!, Digg! - Skjønner, Skjønna - Orker ikke (can't be bothered) ## Reactions React naturally: - Seriøst?, Virkelig?, Hæ? - Oi!, Herregud!, Faen! - Fett!, Sykt!, Kult! - Haha, lol in text ## Dialect Pride Norwegians value dialect: - Some write in dialect intentionally - Mixing standard with dialect is natural - Don't over-correct to perfect bokmål ## The "Native Test" Before sending: would a Norwegian screenshot this as "AI-generated"? If yes—too formal, missing particles, too perfect. Loosen up.


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

--- name: error-recovery description: Error Recovery - Strategies for handling failures gracefully --- # Error Recovery - Handling Failures Gracefully ## OpenClaw Error Types | Error | Cause | Recovery | |-------|-------|----------| | 429 Rate Limit | Too many requests | Wait + retry with backoff | | 402 Billing | API credits exhausted | Switch model or wait | | 503 Overloaded | Provider busy | Wait + retry | | Context Overflow | Context window full | Trigger compaction | | Role Ordering | Corrupted session | Reset session | | Transient HTTP | Network issue | Auto-retry (built-in) | ## Error Handling Patterns ### Pattern 1: Retry with Backoff ```javascript async function retryWithBackoff(fn, maxAttempts = 3) { for (let i = 0; i < maxAttempts; i++) { try { return await fn(); } catch (err) { if (isRetryable(err) && i < maxAttempts - 1) { await sleep(1000 * Math.pow(2, i)); // 1s, 2s, 4s continue; } throw err; } } } ``` ### Pattern 2: Graceful Degradation ```javascript async function withFallback(primary, fallback) { try { return await primary(); } catch (err) { console.warn("Primary failed, trying fallback:", err.message); return await fallback(); } } // Usage const result = await withFallback( () => callExpensiveModel(msg), () => callCheapModel(msg) ); ``` ### Pattern 3: Circuit Breaker ```javascript class CircuitBreaker { constructor(fn, threshold = 3) { this.fn = fn; this.failures = 0; this.threshold = threshold; this.state = "closed"; // open/closed/half-open } async execute() { if (this.state === "open") { throw new Error("Circuit breaker open"); } try { const result = await this.fn(); this.failures = 0; this.state = "closed"; return result; } catch (err) { this.failures++; if (this.failures >= this.threshold) { this.state = "open"; } throw err; } } } ``` ## Tool Failure Handling Tools in OpenClaw are **non-fatal** — if a tool fails, the agent continues: ```javascript // In agent-runner, tool errors are caught but don't stop execution .catch((err) => { log(`Tool ${toolName} failed: ${err.message}`); // Continue execution }); ``` ## Session Corruption Recovery If session becomes corrupted: 1. **Detection**: Role ordering errors, malformed messages 2. **Action**: Session auto-reset by OpenClaw 3. **Recovery**: Fresh session, context preserved via MEMORY.md ## Built-in Recovery Mechanisms | Mechanism | Trigger | Action | |----------|---------|--------| | Auto-retry | 408/429/5xx | Exponential backoff | | Context overflow | Token limit | Trigger compaction | | Session corruption | Role error | Reset session | | Model switch | persistent failure | Fallback model | ## Best Practices 1. **Don't suppress errors silently** — log them 2. **Prefer retries for transient failures** — network/timeout 3. **Reset for corruption** — don't try to fix corrupted state 4. **Use fallback models** — cheap → expensive 5. **Keep MEMORY.md updated** — for recovery after reset


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