[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M7191AEFRGPHZKF4D7D81AXF":3,"skill-same:01M7191AEFRGPHZKF4D7D81AXF":71},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":51,"commitSha":52,"skillDirectory":53,"forksCount":14,"repositoryHtmlUrl":54,"repositoryHomepageUrl":6,"ownerHtmlUrl":55,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":56,"install":57,"resources":70},"01M7191AEFRGPHZKF4D7D81AXF","jq",null,"Expert jq usage for JSON querying, filtering, transformation, and pipeline integration. Practical patterns for real shell workflows.","sapsapshen\u002Fai-memory-router","sapsapshen","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F20347959?v=4","01M6XDQEF1DP50DKF37H81J3J5","shenmian","01M6XDQEJPE41Y3DT2763X8ZJN",0,"MIT","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fglobal\u002Fjq\u002FSKILL.md",[],[5,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37],"filtering","2026","for","usage","transformation","data-transformation","practical","patterns","community","expert","cli","cursor","Bash","pipeline","data","development","workflows","gemini","safe","2026-11-10 10:12:30",false,"---\nname: jq\ndescription: \"Expert jq usage for JSON querying, filtering, transformation, and pipeline integration. Practical patterns for real shell workflows.\"\ncategory: development\nrisk: safe\nsource: community\ndate_added: \"2026-03-28\"\nauthor: kostakost2\ntags: [jq, json, shell, cli, data-transformation, bash]\ntools: [claude, cursor, gemini]\n---\n\n# jq — JSON Querying and Transformation\n\n## Overview\n\n`jq` is the standard CLI tool for querying and reshaping JSON. This skill covers practical, expert-level usage: filtering deeply nested data, transforming structures, aggregating values, and composing `jq` into shell pipelines. Every example is copy-paste ready for real workflows.\n\n## When to Use This Skill\n\n- Use when parsing JSON output from APIs, CLI tools (AWS, GitHub, kubectl, docker), or log files\n- Use when transforming JSON structure (rename keys, flatten arrays, group records)\n- Use when the user needs `jq` inside a bash script or one-liner\n- Use when explaining what a complex `jq` expression does\n\n## How It Works\n\n`jq` takes a filter expression and applies it to JSON input. Filters compose with pipes (`|`), and `jq` handles arrays, objects, strings, numbers, booleans, and `null` natively.\n\n### Basic Selection\n\n```bash\n# Extract a field\necho '{\"name\":\"alice\",\"age\":30}' | jq '.name'\n# \"alice\"\n\n# Nested access\necho '{\"user\":{\"email\":\"a@b.com\"}}' | jq '.user.email'\n\n# Array index\necho '[10, 20, 30]' | jq '.[1]'\n# 20\n\n# Array slice\necho '[1,2,3,4,5]' | jq '.[2:4]'\n# [3, 4]\n\n# All array elements\necho '[{\"id\":1},{\"id\":2}]' | jq '.[]'\n```\n\n### Filtering with `select`\n\n```bash\n# Keep only matching elements\necho '[{\"role\":\"admin\"},{\"role\":\"user\"},{\"role\":\"admin\"}]' \\\n  | jq '[.[] | select(.role == \"admin\")]'\n\n# Numeric comparison\ncurl -s https:\u002F\u002Fapi.github.com\u002Frepos\u002Fowner\u002Frepo\u002Fissues \\\n  | jq '[.[] | select(.comments > 5)]'\n\n# Test a field exists and is non-null\njq '[.[] | select(.email != null)]'\n\n# Combine conditions\njq '[.[] | select(.active == true and .score >= 80)]'\n```\n\n### Mapping and Transformation\n\n```bash\n# Extract a field from every array element\necho '[{\"name\":\"alice\",\"age\":30},{\"name\":\"bob\",\"age\":25}]' \\\n  | jq '[.[] | .name]'\n# [\"alice\", \"bob\"]\n\n# Shorthand: map()\njq 'map(.name)'\n\n# Build a new object per element\njq '[.[] | {user: .name, years: .age}]'\n\n# Add a computed field\njq '[.[] | . + {senior: (.age > 28)}]'\n\n# Rename keys\njq '[.[] | {username: .name, email_address: .email}]'\n```\n\n### Aggregation and Reduce\n\n```bash\n# Sum all values\necho '[1, 2, 3, 4, 5]' | jq 'add'\n# 15\n\n# Sum a field across objects\njq '[.[].price] | add'\n\n# Count elements\njq 'length'\n\n# Max \u002F min\njq 'max_by(.score)'\njq 'min_by(.created_at)'\n\n# reduce: custom accumulator\necho '[1,2,3,4,5]' | jq 'reduce .[] as $x (0; . + $x)'\n# 15\n\n# Group by field\njq 'group_by(.department)'\n\n# Count per group\njq 'group_by(.status) | map({status: .[0].status, count: length})'\n```\n\n### String Interpolation and Formatting\n\n```bash\n# String interpolation\njq -r '.[] | \"\\(.name) is \\(.age) years old\"'\n\n# Format as CSV (no header)\njq -r '.[] | [.name, .age, .email] | @csv'\n\n# Format as TSV\njq -r '.[] | [.name, .score] | @tsv'\n\n# URL-encode a value\njq -r '.query | @uri'\n\n# Base64 encode\njq -r '.data | @base64'\n```\n\n### Working with Keys and Paths\n\n```bash\n# List all top-level keys\njq 'keys'\n\n# Check if key exists\njq 'has(\"email\")'\n\n# Delete a key\njq 'del(.password)'\n\n# Delete nested keys from every element\njq '[.[] | del(.internal_id, .raw_payload)]'\n\n# Recursive descent: find all values for a key anywhere in tree\njq '.. | .id? \u002F\u002F empty'\n\n# Get all leaf paths\njq '[paths(scalars)]'\n```\n\n### Conditionals and Error Handling\n\n```bash\n# if-then-else\njq 'if .score >= 90 then \"A\" elif .score >= 80 then \"B\" else \"C\" end'\n\n# Alternative operator: use fallback if null or false\njq '.nickname \u002F\u002F .name'\n\n# try-catch: skip errors instead of halting\njq '[.[] | try .nested.value catch null]'\n\n# Suppress null output with \u002F\u002F empty\njq '.[] | .optional_field \u002F\u002F empty'\n```\n\n### Practical Shell Integration\n\n```bash\n# Read from file\njq '.users' data.json\n\n# Compact output (no whitespace) for further piping\njq -c '.[]' records.json | while IFS= read -r record; do\n  echo \"Processing: $record\"\ndone\n\n# Pass a shell variable into jq\nSTATUS=\"active\"\njq --arg s \"$STATUS\" '[.[] | select(.status == $s)]'\n\n# Pass a number\njq --argjson threshold 42 '[.[] | select(.value > $threshold)]'\n\n# Slurp multiple JSON lines into an array\njq -s '.' records.ndjson\n\n# Multiple files: slurp all into one array\njq -s 'add' file1.json file2.json\n\n# Null-safe pipeline from a command\nkubectl get pods -o json | jq '.items[] | {name: .metadata.name, status: .status.phase}'\n\n# GitHub CLI: extract PR numbers\ngh pr list --json number,title | jq -r '.[] | \"\\(.number)\\t\\(.title)\"'\n\n# AWS CLI: list running instance IDs\naws ec2 describe-instances \\\n  | jq -r '.Reservations[].Instances[] | select(.State.Name==\"running\") | .InstanceId'\n\n# Docker: show container names and images\ndocker inspect $(docker ps -q) | jq -r '.[] | \"\\(.Name)\\t\\(.Config.Image)\"'\n```\n\n### Advanced Patterns\n\n```bash\n# Transpose an object of arrays to an array of objects\n# Input: {\"names\":[\"a\",\"b\"],\"scores\":[10,20]}\njq '[.names, .scores] | transpose | map({name: .[0], score: .[1]})'\n\n# Flatten one level\njq 'flatten(1)'\n\n# Unique by field\njq 'unique_by(.email)'\n\n# Sort, deduplicate and re-index\njq '[.[] | .name] | unique | sort'\n\n# Walk: apply transformation to every node recursively\njq 'walk(if type == \"string\" then ascii_downcase else . end)'\n\n# env: read environment variables inside jq\nexport API_KEY=secret\njq -n 'env.API_KEY'\n```\n\n## Best Practices\n\n- Always use `-r` (raw output) when passing `jq` results to shell variables or other commands to strip JSON string quotes\n- Use `--arg` \u002F `--argjson` to inject shell variables safely — never interpolate shell variables directly into filter strings\n- Prefer `map(f)` over `[.[] | f]` for readability\n- Use `-c` (compact) for newline-delimited JSON pipelines; omit it for human-readable debugging\n- Test filters interactively with `jq -n` and literal input before embedding in scripts\n- Use `empty` to drop unwanted elements rather than filtering to `null`\n\n## Security & Safety Notes\n\n- `jq` is read-only by design — it cannot write files or execute commands\n- Avoid embedding untrusted JSON field values directly into shell commands; always quote or use `--arg`\n\n## Common Pitfalls\n\n- **Problem:** `jq` outputs `null` instead of the expected value\n  **Solution:** Check for typos in key names; use `keys` to inspect actual field names. Remember JSON is case-sensitive.\n\n- **Problem:** Numbers are quoted as strings in the output\n  **Solution:** Use `--argjson` instead of `--arg` when injecting numeric values.\n\n- **Problem:** Filter works in the terminal but fails in a script\n  **Solution:** Ensure the filter string uses single quotes in the shell to prevent variable expansion. Example: `jq '.field'` not `jq \".field\"`.\n\n- **Problem:** `add` returns `null` on an empty array\n  **Solution:** Use `add \u002F\u002F 0` or `add \u002F\u002F \"\"` to provide a fallback default.\n\n- **Problem:** Streaming large files is slow\n  **Solution:** Use `jq --stream` or switch to `jstream`\u002F`gron` for very large files.\n\n## Related Skills\n\n- `@bash-pro` — Wrapping jq calls in robust shell scripts\n- `@bash-linux` — General shell pipeline patterns\n- `@github-automation` — Using jq with GitHub CLI JSON output\n","# jq — JSON Querying and Transformation\n\n## Overview\n\n`jq` is the standard CLI tool for querying and reshaping JSON. This skill covers practical, expert-level usage: filtering deeply nested data, transforming structures, aggregating values, and composing `jq` into shell pipelines. Every example is copy-paste ready for real workflows.\n\n## When to Use This Skill\n\n- Use when parsing JSON output from APIs, CLI tools (AWS, GitHub, kubectl, docker), or log files\n- Use when transforming JSON structure (rename keys, flatten arrays, group records)\n- Use when the user needs `jq` inside a bash script or one-liner\n- Use when explaining what a complex `jq` expression does\n\n## How It Works\n\n`jq` takes a filter expression and applies it to JSON input. Filters compose with pipes (`|`), and `jq` handles arrays, objects, strings, numbers, booleans, and `null` natively.\n\n### Basic Selection\n\n```bash\n# Extract a field\necho '{\"name\":\"alice\",\"age\":30}' | jq '.name'\n# \"alice\"\n\n# Nested access\necho '{\"user\":{\"email\":\"a@b.com\"}}' | jq '.user.email'\n\n# Array index\necho '[10, 20, 30]' | jq '.[1]'\n# 20\n\n# Array slice\necho '[1,2,3,4,5]' | jq '.[2:4]'\n# [3, 4]\n\n# All array elements\necho '[{\"id\":1},{\"id\":2}]' | jq '.[]'\n```\n\n### Filtering with `select`\n\n```bash\n# Keep only matching elements\necho '[{\"role\":\"admin\"},{\"role\":\"user\"},{\"role\":\"admin\"}]' \\\n  | jq '[.[] | select(.role == \"admin\")]'\n\n# Numeric comparison\ncurl -s https:\u002F\u002Fapi.github.com\u002Frepos\u002Fowner\u002Frepo\u002Fissues \\\n  | jq '[.[] | select(.comments > 5)]'\n\n# Test a field exists and is non-null\njq '[.[] | select(.email != null)]'\n\n# Combine conditions\njq '[.[] | select(.active == true and .score >= 80)]'\n```\n\n### Mapping and Transformation\n\n```bash\n# Extract a field from every array element\necho '[{\"name\":\"alice\",\"age\":30},{\"name\":\"bob\",\"age\":25}]' \\\n  | jq '[.[] | .name]'\n# [\"alice\", \"bob\"]\n\n# Shorthand: map()\njq 'map(.name)'\n\n# Build a new object per element\njq '[.[] | {user: .name, years: .age}]'\n\n# Add a computed field\njq '[.[] | . + {senior: (.age > 28)}]'\n\n# Rename keys\njq '[.[] | {username: .name, email_address: .email}]'\n```\n\n### Aggregation and Reduce\n\n```bash\n# Sum all values\necho '[1, 2, 3, 4, 5]' | jq 'add'\n# 15\n\n# Sum a field across objects\njq '[.[].price] | add'\n\n# Count elements\njq 'length'\n\n# Max \u002F min\njq 'max_by(.score)'\njq 'min_by(.created_at)'\n\n# reduce: custom accumulator\necho '[1,2,3,4,5]' | jq 'reduce .[] as $x (0; . + $x)'\n# 15\n\n# Group by field\njq 'group_by(.department)'\n\n# Count per group\njq 'group_by(.status) | map({status: .[0].status, count: length})'\n```\n\n### String Interpolation and Formatting\n\n```bash\n# String interpolation\njq -r '.[] | \"\\(.name) is \\(.age) years old\"'\n\n# Format as CSV (no header)\njq -r '.[] | [.name, .age, .email] | @csv'\n\n# Format as TSV\njq -r '.[] | [.name, .score] | @tsv'\n\n# URL-encode a value\njq -r '.query | @uri'\n\n# Base64 encode\njq -r '.data | @base64'\n```\n\n### Working with Keys and Paths\n\n```bash\n# List all top-level keys\njq 'keys'\n\n# Check if key exists\njq 'has(\"email\")'\n\n# Delete a key\njq 'del(.password)'\n\n# Delete nested keys from every element\njq '[.[] | del(.internal_id, .raw_payload)]'\n\n# Recursive descent: find all values for a key anywhere in tree\njq '.. | .id? \u002F\u002F empty'\n\n# Get all leaf paths\njq '[paths(scalars)]'\n```\n\n### Conditionals and Error Handling\n\n```bash\n# if-then-else\njq 'if .score >= 90 then \"A\" elif .score >= 80 then \"B\" else \"C\" end'\n\n# Alternative operator: use fallback if null or false\njq '.nickname \u002F\u002F .name'\n\n# try-catch: skip errors instead of halting\njq '[.[] | try .nested.value catch null]'\n\n# Suppress null output with \u002F\u002F empty\njq '.[] | .optional_field \u002F\u002F empty'\n```\n\n### Practical Shell Integration\n\n```bash\n# Read from file\njq '.users' data.json\n\n# Compact output (no whitespace) for further piping\njq -c '.[]' records.json | while IFS= read -r record; do\n  echo \"Processing: $record\"\ndone\n\n# Pass a shell variable into jq\nSTATUS=\"active\"\njq --arg s \"$STATUS\" '[.[] | select(.status == $s)]'\n\n# Pass a number\njq --argjson threshold 42 '[.[] | select(.value > $threshold)]'\n\n# Slurp multiple JSON lines into an array\njq -s '.' records.ndjson\n\n# Multiple files: slurp all into one array\njq -s 'add' file1.json file2.json\n\n# Null-safe pipeline from a command\nkubectl get pods -o json | jq '.items[] | {name: .metadata.name, status: .status.phase}'\n\n# GitHub CLI: extract PR numbers\ngh pr list --json number,title | jq -r '.[] | \"\\(.number)\\t\\(.title)\"'\n\n# AWS CLI: list running instance IDs\naws ec2 describe-instances \\\n  | jq -r '.Reservations[].Instances[] | select(.State.Name==\"running\") | .InstanceId'\n\n# Docker: show container names and images\ndocker inspect $(docker ps -q) | jq -r '.[] | \"\\(.Name)\\t\\(.Config.Image)\"'\n```\n\n### Advanced Patterns\n\n```bash\n# Transpose an object of arrays to an array of objects\n# Input: {\"names\":[\"a\",\"b\"],\"scores\":[10,20]}\njq '[.names, .scores] | transpose | map({name: .[0], score: .[1]})'\n\n# Flatten one level\njq 'flatten(1)'\n\n# Unique by field\njq 'unique_by(.email)'\n\n# Sort, deduplicate and re-index\njq '[.[] | .name] | unique | sort'\n\n# Walk: apply transformation to every node recursively\njq 'walk(if type == \"string\" then ascii_downcase else . end)'\n\n# env: read environment variables inside jq\nexport API_KEY=secret\njq -n 'env.API_KEY'\n```\n\n## Best Practices\n\n- Always use `-r` (raw output) when passing `jq` results to shell variables or other commands to strip JSON string quotes\n- Use `--arg` \u002F `--argjson` to inject shell variables safely — never interpolate shell variables directly into filter strings\n- Prefer `map(f)` over `[.[] | f]` for readability\n- Use `-c` (compact) for newline-delimited JSON pipelines; omit it for human-readable debugging\n- Test filters interactively with `jq -n` and literal input before embedding in scripts\n- Use `empty` to drop unwanted elements rather than filtering to `null`\n\n## Security & Safety Notes\n\n- `jq` is read-only by design — it cannot write files or execute commands\n- Avoid embedding untrusted JSON field values directly into shell commands; always quote or use `--arg`\n\n## Common Pitfalls\n\n- **Problem:** `jq` outputs `null` instead of the expected value\n  **Solution:** Check for typos in key names; use `keys` to inspect actual field names. Remember JSON is case-sensitive.\n\n- **Problem:** Numbers are quoted as strings in the output\n  **Solution:** Use `--argjson` instead of `--arg` when injecting numeric values.\n\n- **Problem:** Filter works in the terminal but fails in a script\n  **Solution:** Ensure the filter string uses single quotes in the shell to prevent variable expansion. Example: `jq '.field'` not `jq \".field\"`.\n\n- **Problem:** `add` returns `null` on an empty array\n  **Solution:** Use `add \u002F\u002F 0` or `add \u002F\u002F \"\"` to provide a fallback default.\n\n- **Problem:** Streaming large files is slow\n  **Solution:** Use `jq --stream` or switch to `jstream`\u002F`gron` for very large files.\n\n## Related Skills\n\n- `@bash-pro` — Wrapping jq calls in robust shell scripts\n- `@bash-linux` — General shell pipeline patterns\n- `@github-automation` — Using jq with GitHub CLI JSON output\n",{"name":5,"risk":37,"tags":43,"tools":47,"author":49,"source":27,"category":34,"date_added":50,"description":7},[5,44,45,29,24,46],"json","shell","bash",[48,30,36],"claude","kostakost2","2026-03-28","main","7a38d8e7073e61c16eda85681cb32fb68a8657a5","skills-store\u002Fglobal\u002Fjq","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router","https:\u002F\u002Fgithub.com\u002Fsapsapshen","2026-04-14 21:12:12",{"source":8,"skillName":5,"commands":58,"prompt":68,"zipAvailable":69},[59,62,65],{"tool":60,"command":61},"npx","npx skills add sapsapshen\u002Fai-memory-router --skill jq",{"tool":63,"command":64},"bunx","bunx skills add sapsapshen\u002Fai-memory-router --skill jq",{"tool":66,"command":67},"pnpm","pnpm dlx skills add sapsapshen\u002Fai-memory-router --skill jq","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fglobal\u002Fjq\u002FSKILL.md",true,[],[72,96,120,130,143,161],{"skillNo":73,"name":74,"nameZh":6,"description":75,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":76,"categories":77,"keywords":83,"publishedAt":38},"01M71ATQRKG48SH06FQ697T5G9","wechat-search","Search WeChat Official Account articles using OpenClaw's web search and fetch capabilities with compliance-focused design.","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Fwechat-search-release\u002FSKILL.md",[78],{"categoryNo":79,"categoryName":80,"taxonomyType":81,"taxonomyTypeDesc":82},"01JBSEEDCAT000000000000037","律师与法务","PROFESSION","适用职业",[84,85,86,87,88,89,90,91,92,93,94,95],"wechat search","wechat","search","capabilities","openclaw","design","web search","compliance","web","official","fetch","with",{"skillNo":97,"name":98,"nameZh":6,"description":99,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":100,"categories":101,"keywords":102,"publishedAt":38},"01M71ATNAVGZB35PFYM2GC5N00","trend-tap","Real-time trending topics aggregator across 7 platforms (X\u002FTwitter, Reddit, Google Trends, Hacker News, Zhihu, Bilibili, Weibo). Trigger: when user says 'trend', 'trends', 'trend tap', '热点', '热搜', or asks what is trending\u002Fhot. Do NOT use web_search — this skill already fetches live data from all platforms with zero API keys.","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Ftrend-tap\u002FSKILL.md",[],[103,104,105,106,31,107,86,108,109,110,111,112,113,114,33,115,116,117,118,119],"trend","trend tap","tap","api keys","time","trending","hacker","aggregator","do","when","brew","live","google","install","read","across","api",{"skillNo":121,"name":122,"nameZh":6,"description":123,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":124,"categories":125,"keywords":126,"publishedAt":38},"01M71ATJ9AM5KM15AA8PS302EB","trend-radar","Real-time trending topics aggregator across 7 platforms (X\u002FTwitter, Reddit, Google Trends, Hacker News, Zhihu, Bilibili, Weibo). Trigger: when user says 'trend', 'trends', 'trend pulse', '热点', '热搜', or asks what is trending\u002Fhot. Do NOT use web_search — this skill already fetches live data from all platforms with zero API keys.","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Ftrend-radar\u002FSKILL.md",[],[127,128,103,113,114,33,115,31,86,117,129,118,119,112,110,109,108,116,107,106],"trend radar","radar","pulse",{"skillNo":131,"name":132,"nameZh":6,"description":133,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":134,"categories":135,"keywords":136,"publishedAt":38},"01M71ATGF095N3EJM9G8SD0BB5","tech-news-daily","每日科技新闻汇——从全球多个 RSS 源抓取最新科技新闻，翻译（英→中）、去重、排版成每日简报。当用户询问科技新闻、科技新鲜事、每日科技、技术动态、Daily Tech News 或类似表达时触发此技能。","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Ftech-news-daily\u002FSKILL.md",[],[137,138,139,140,141,142],"news","tech","tech news daily","daily","rss","翻译",{"skillNo":144,"name":145,"nameZh":6,"description":146,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":147,"categories":148,"keywords":154,"publishedAt":38},"01M71ATFAEAMQ17M70NQNY7SR8","summarize","Summarize URLs or files with the summarize CLI (web, PDFs, images, audio, YouTube).","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Fsummarize\u002FSKILL.md",[149],{"categoryNo":150,"categoryName":151,"taxonomyType":152,"taxonomyTypeDesc":153},"01JBSEEDCAT000000000000021","资料检索与研究","SCENARIO","使用场景",[145,92,155,29,156,95,113,157,158,159,105,160,116],"Audio","youtube","images","https","files","pdfs",{"skillNo":162,"name":163,"nameZh":6,"description":164,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":165,"categories":166,"keywords":167,"publishedAt":38},"01M71ATDNS3R0M4H936PACQAWZ","sonoscli","Control Sonos speakers (discover\u002Fstatus\u002Fplay\u002Fvolume\u002Fgroup).","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Fsonoscli\u002FSKILL.md",[],[163,168,169,170,116,171,158,172,173,174,175,176],"status","play","go","latest","github","discover","control","cmd","volume"]