[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CTK9Y9WEKKGN6WDPYBAWN7":3,"skill-same:01M6CTK9Y9WEKKGN6WDPYBAWN7":70},{"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":37,"linkOnly":38,"markdownContent":39,"markdownBody":40,"frontMatter":41,"refName":48,"commitSha":49,"skillDirectory":50,"forksCount":51,"repositoryHtmlUrl":52,"repositoryHomepageUrl":52,"ownerHtmlUrl":53,"ownerBlogUrl":6,"ownerDescription":54,"updatedAt":55,"install":56,"resources":69},"01M6CTK9Y9WEKKGN6WDPYBAWN7","jq",null,"Expert jq usage for JSON querying, filtering, transformation, and pipeline integration. Practical patterns for real shell workflows.","Sam-06060\u002Fjarvis-assistant","Sam-06060","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F208600848?v=4","01M6CRKT7C7FXD21V6HXF293S0","Samson Frank Ganta","01M6CRKTBEKYFD8YX5Z1GT99EE",6,"Apache-2.0","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fjq\u002FSKILL.md",[],[5,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36],"Bash","data-transformation","practical","patterns","community","expert","filtering","cursor","json","cli","shell","pipeline","data","integration","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":36,"tags":42,"tools":44,"author":46,"source":23,"category":33,"date_added":47,"description":7},[5,27,29,28,20,43],"bash",[45,26,35],"claude","kostakost2","2026-03-28","main","a50a3aa6b39fb0e1b7db88bef1bfc9c93606e126","modules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fjq",0,"https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant","https:\u002F\u002Fgithub.com\u002FSam-06060","Mobile Application Developer | Kotlin | Flutter, KMP, Swfit, Android,Swift UI | Building at Saar It Resources | Creator of Jarvis (AI Assistant)","2026-06-23 05:13:38",{"source":8,"skillName":5,"commands":57,"prompt":67,"zipAvailable":68},[58,61,64],{"tool":59,"command":60},"npx","npx skills add Sam-06060\u002Fjarvis-assistant --skill jq",{"tool":62,"command":63},"bunx","bunx skills add Sam-06060\u002Fjarvis-assistant --skill jq",{"tool":65,"command":66},"pnpm","pnpm dlx skills add Sam-06060\u002Fjarvis-assistant --skill jq","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fjq\u002FSKILL.md",true,[],[71,84,99,126,145,170],{"skillNo":72,"name":73,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":74,"categories":75,"keywords":81,"publishedAt":37},"01M6GDRVS6FXX3ESH0C9DW01C0","test_skill","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fscratch\u002Ftest_skill\u002FSKILL.md",[76],{"categoryNo":77,"categoryName":78,"taxonomyType":79,"taxonomyTypeDesc":80},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",[82,83],"Test Skill","test",{"skillNo":85,"name":86,"nameZh":6,"description":87,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":88,"categories":89,"keywords":90,"publishedAt":37},"01M6GDRQ40HX22MA6XWC31RHHK","zustand-store-ts","Create Zustand stores following established patterns with proper TypeScript types and middleware.","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fzustand-store-ts\u002FSKILL.md",[],[91,92,93,94,95,96,22,23,97,98],"zustand store ts","zustand","store","with","types","middleware","create","typescript",{"skillNo":100,"name":101,"nameZh":6,"description":102,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":103,"categories":104,"keywords":108,"publishedAt":37},"01M6GDRKEA0WE670SPFWX5GKCN","zoom-automation","Automate Zoom meeting creation, management, recordings, webinars, and participant tracking via Rube MCP (Composio). Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fzoom-automation\u002FSKILL.md",[105],{"categoryNo":106,"categoryName":107,"taxonomyType":79,"taxonomyTypeDesc":80},"01JBSEEDCAT000000000000023","Skill与智能体开发",[109,110,111,112,113,114,115,116,117,118,119,120,121,122,23,123,124,125],"automation","zoom automation","zoom","first","Tools","search","MCP","via","meeting","automate","critical","creation","webinars","composio","recordings","management","tracking",{"skillNo":127,"name":128,"nameZh":6,"description":129,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":130,"categories":131,"keywords":133,"publishedAt":37},"01M6GDRFS1452PC71JQ38S24HR","zoho-crm-automation","Automate Zoho CRM tasks via Rube MCP (Composio): create\u002Fupdate records, search contacts, manage leads, and convert leads. Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fzoho-crm-automation\u002FSKILL.md",[132],{"categoryNo":106,"categoryName":107,"taxonomyType":79,"taxonomyTypeDesc":80},[134,109,135,136,137,138,139,23,114,140,122,141,119,118,113,142,97,143,115,144],"crm automation","zoho crm","crm","zoho crm automation","zoho","leads","contacts","records","update","tasks","manage",{"skillNo":146,"name":147,"nameZh":6,"description":148,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":149,"categories":150,"keywords":154,"publishedAt":37},"01M6GDRCKQBAVTGHX5XBH26KPZ","zod-validation-expert","Expert in Zod — TypeScript-first schema validation. Covers parsing, custom errors, refinements, type inference, and integration with React Hook Form, Next.js, and tRPC.","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fzod-validation-expert\u002FSKILL.md",[151],{"categoryNo":152,"categoryName":153,"taxonomyType":79,"taxonomyTypeDesc":80},"01JBSEEDCAT000000000000009","前端开发",[24,155,156,157,158,98,36,159,160,161,162,163,94,164,165,166,167,23,168,169],"zod","zod validation expert","validation","react","parsing","errors","schema validation","react hook form","hook","trpc","form","type","next","schema","Next.js",{"skillNo":171,"name":172,"nameZh":6,"description":173,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":174,"categories":175,"keywords":177,"publishedAt":37},"01M6GDR658B08K4MY0RWD4A6EH","zeroize-audit","Detects missing zeroization of sensitive data in source code and identifies zeroization removed by compiler optimizations, with assembly-level analysis, and control-flow verification. Use for auditing C\u002FC++\u002FRust code handling secrets, keys, passwords, or other sensitive data.","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fzeroize-audit\u002FSKILL.md",[176],{"categoryNo":106,"categoryName":107,"taxonomyType":79,"taxonomyTypeDesc":80},[178,179,180,181,182,183,184,185,23,186,187,19,188,189,31,190,191,192,193,115],"zeroize audit","audit","write","passwords","get","project","c++","activate","assembly","read","secrets","analysis","flow","verification","code","rust"]