[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6E2GYWW5SQFKPKWMBCEBBMS":3,"skill-same:01M6E2GYWW5SQFKPKWMBCEBBMS":75},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":33,"linkOnly":34,"markdownContent":35,"markdownBody":36,"frontMatter":37,"refName":38,"commitSha":39,"skillDirectory":40,"forksCount":13,"repositoryHtmlUrl":41,"repositoryHomepageUrl":42,"ownerHtmlUrl":43,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":44,"install":45,"resources":58},"01M6E2GYWW5SQFKPKWMBCEBBMS","openclaw-secret-scanning-maintainer",null,"Triage, redact, clean up, and resolve OpenClaw GitHub Secret Scanning alerts in issues or PRs.","7dvq6yrkgs-stack\u002Fplaywright","7dvq6yrkgs-stack","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F251638143?v=4","01M6E061J2AMGWYZ6TK7Y8NM74","01M6E061PQCQJGQMPBERMCFN5G",0,"Apache-2.0","https:\u002F\u002Fgithub.com\u002F7dvq6yrkgs-stack\u002Fplaywright\u002Fblob\u002Fmain\u002Fskills\u002Fopenclaw-secret-scanning-maintainer\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",[23,24,25,26,27,28,29,30,31,32],"openclaw","openclaw secret scanning maintainer","secret scanning","scanning","github","triage","issues","up","clean","alerts","2026-11-10 10:12:30",false,"---\nname: openclaw-secret-scanning-maintainer\ndescription: Triage, redact, clean up, and resolve OpenClaw GitHub Secret Scanning alerts in issues or PRs.\n---\n\n# OpenClaw Secret Scanning Maintainer\n\n**Maintainer-only.** This skill requires repo admin \u002F maintainer permissions to edit or delete other users' comments and resolve secret scanning alerts.\n\nUse this skill when processing alerts from `https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fsecurity\u002Fsecret-scanning`.\n\n**Language rule:** All notification comments and replacement comments MUST be written in English.\n\n## Script\n\nAll mechanical operations (API calls, temp file management, security enforcements) are handled by:\n\n```\n$REPO_ROOT\u002F.agents\u002Fskills\u002Fopenclaw-secret-scanning-maintainer\u002Fscripts\u002Fsecret-scanning.mjs\n```\n\nThe script enforces:\n\n- `hide_secret=true` on all alert fetches (no plaintext secrets in stdout)\n- `mktemp` with random UUIDs for all temp files\n- `-F body=@file` for all body uploads (no inline shell quoting)\n- Notification templates branched by location type\n- Never prints `.secret` or `.body` to stdout\n\n## Overall Flow\n\nSupports single or multiple alerts. For multiple alerts, process in ascending order.\n\nFor each alert:\n\n1. **Identify** — `fetch-alert` + `fetch-content` to get metadata and body\n2. **Decide** — Agent reads the body file, identifies all secrets, produces redacted version\n3. **Redact** — `redact-body` for issue\u002FPR body; skip for comments (delete directly)\n4. **Purge** — `delete-comment` + `recreate-comment` for comments; cannot purge body history\n5. **Notify** — `notify` posts the right template per location type\n6. **Resolve** — `resolve` closes the alert\n7. **Summary** — `summary` prints formatted results\n\n## Step 1: Identify\n\n```bash\n# List all open alerts\nnode secret-scanning.mjs list-open\n\n# Fetch specific alert metadata + locations\nnode secret-scanning.mjs fetch-alert \u003CNUMBER>\n\n# Fetch content for each location (saves body to temp file)\nnode secret-scanning.mjs fetch-content '\u003Clocation-json>'\n```\n\nThe `fetch-content` output includes:\n\n- `body_file`: path to temp file with full body content\n- `author`: who posted it\n- `issue_number` \u002F `pr_number`: where it is\n- `edit_history_count`: number of existing edits\n- `type`: location type for routing\n- For `discussion_comment`, it also includes `comment_node_id`, `discussion_node_id`, and `reply_to_node_id` when the original comment was a reply.\n\n### Location type routing\n\n| type                          | Flow                                          |\n| ----------------------------- | --------------------------------------------- |\n| `issue_comment`               | Comment: delete+recreate                      |\n| `pull_request_comment`        | Comment: delete+recreate                      |\n| `pull_request_review_comment` | Comment: delete+recreate                      |\n| `discussion_comment`          | Discussion comment: delete+recreate (GraphQL) |\n| `issue_body`                  | Body: redact in place                         |\n| `pull_request_body`           | Body: redact in place                         |\n| `commit`                      | Notify only                                   |\n| _other_                       | Skip and report                               |\n\n## Step 2: Decide (Agent)\n\nThe agent reads the body file from `fetch-content` output and:\n\n1. Identifies ALL secrets in the content (there may be more than the alert flagged)\n2. Replaces each secret with `[REDACTED \u003Csecret_type>]` — **no partial values, no prefix\u002Fsuffix**\n3. Saves the redacted content to a new temp file\n\nThis is the only step that requires semantic understanding. Everything else is mechanical.\n\n## Step 3: Redact\n\n### For comments (issue_comment \u002F PR comments)\n\n**Do NOT redact.** Skip directly to Step 4 (delete + recreate). PATCHing before DELETE creates an unnecessary edit history revision.\n\n### For issue_body \u002F pull_request_body\n\n```bash\nnode secret-scanning.mjs redact-body \u003Cissue|pr> \u003CNUMBER> \u003Credacted-body-file>\n```\n\n## Step 4: Purge Edit History\n\n### Comments — Delete and Recreate\n\nFor issue\u002FPR comments:\n\n```bash\n# Delete original (all edit history gone)\nnode secret-scanning.mjs delete-comment \u003CCOMMENT_ID>\n\n# Recreate with redacted content\nnode secret-scanning.mjs recreate-comment \u003CISSUE_NUMBER> \u003Cbody-file>\n```\n\nFor discussion comments (uses GraphQL):\n\n```bash\n# Delete original\nnode secret-scanning.mjs delete-discussion-comment \u003CCOMMENT_NODE_ID>\n\n# Recreate with redacted content\nnode secret-scanning.mjs recreate-discussion-comment \u003CDISCUSSION_NODE_ID> \u003Cbody-file> [REPLY_TO_NODE_ID]\n```\n\nThe `fetch-content` output for `discussion_comment` includes `comment_node_id` and `discussion_node_id` for these commands. When the original discussion comment was a reply, it also includes `reply_to_node_id`; pass that optional third argument so the redacted replacement stays in the original thread.\n\nThe recreated comment should follow this format:\n\n```\n> **Note:** The original comment by @\u003CAUTHOR> has been removed due to secret leakage. Below is the redacted version of the original content.\n\n---\n\n\u003Credacted original content>\n```\n\n### issue_body \u002F pull_request_body — Cannot Purge\n\nEditing creates an edit history revision with the pre-edit plaintext. This cannot be cleared via API.\n\n**Output to maintainer terminal only (never in public comments):**\n\n```\n⚠️ Issue\u002FPR body edit history still contains plaintext secrets.\nContact GitHub Support to purge: https:\u002F\u002Fsupport.github.com\u002Fcontact\nRequest purge of issue\u002FPR #{NUMBER} userContentEdits.\n```\n\n> **CRITICAL:** Do NOT mention edit history or the \"edited\" button in any public comment or resolution_comment.\n\n### Commits\n\nCannot clean. Notify author to delete branch or force-push (for unmerged PRs).\n\n## Step 5: Notify\n\n```bash\nnode secret-scanning.mjs notify \u003CTARGET> \u003CAUTHOR> \u003CLOCATION_TYPE> \u003CSECRET_TYPES> [REPLY_TO_NODE_ID]\n```\n\n- For non-discussion types, `\u003CTARGET>` is the issue\u002FPR number.\n- For `discussion_comment`, `\u003CTARGET>` is the `discussion_node_id` returned by `fetch-content`.\n- For reply-style `discussion_comment` locations, pass the optional `reply_to_node_id` from `fetch-content` so the notification stays in the same thread.\n\nSecret types are comma-separated: `\"Discord Bot Token,Feishu App Secret\"`\n\nThe script picks the right template:\n\n- **comment types**: \"your comment … removed and replaced\"\n- **body types**: \"your issue\u002FPR description … redacted in place\"\n- **commit**: \"code you committed\"\n\n## Step 6: Resolve\n\n```bash\nnode secret-scanning.mjs resolve \u003CALERT_NUMBER>\n# or with custom resolution:\nnode secret-scanning.mjs resolve \u003CALERT_NUMBER> revoked \"Custom comment\"\n```\n\nResolution is `revoked` by default. As maintainers we cannot control whether users rotate — our responsibility is to redact + notify. The `revoked` means \"this secret should be considered leaked\", not \"I confirmed it was revoked\".\n\n## Step 7: Summary\n\nAfter processing, create a JSON results file and pass it to the summary command:\n\n```bash\nnode secret-scanning.mjs summary \u002Ftmp\u002Fresults.json\n```\n\nThe script outputs a block delimited by `---BEGIN SUMMARY---` and `---END SUMMARY---`. **You MUST output the content between these markers verbatim to the user. Do NOT rephrase, reformat, abbreviate, or create your own summary.** The script already includes full URLs for every alert and location.\n\nThe JSON format:\n\n```json\n[\n  {\n    \"number\": 72,\n    \"secret_type\": \"Discord Bot Token\",\n    \"location_label\": \"Issue #63101 comment\",\n    \"location_url\": \"https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fissues\u002F63101#issuecomment-xxx\",\n    \"actions\": \"Deleted+Recreated+Notified\",\n    \"history_cleared\": true\n  }\n]\n```\n\nFor unsupported types, add `\"skipped\": true, \"unsupported_type\": \"\u003Ctype>\"`.\n\n## Safety Rules\n\n- **Agent reads content, identifies secrets, produces redaction.** Script handles all API calls.\n- **Never include any portion of a secret** in public comments, redaction markers, or terminal output.\n- **Never include alert URLs or numbers** in public comments.\n- **For comments, skip PATCH — go directly to DELETE + recreate.**\n- **Never mention edit history, \"edited\" button, or commit SHAs** in any public content.\n- **Ask for confirmation** before deleting any comment.\n- **One alert at a time** unless user requests batch.\n- **All public comments in English.**\n- **Skip unsupported location types** and report in summary.\n","# OpenClaw Secret Scanning Maintainer\n\n**Maintainer-only.** This skill requires repo admin \u002F maintainer permissions to edit or delete other users' comments and resolve secret scanning alerts.\n\nUse this skill when processing alerts from `https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fsecurity\u002Fsecret-scanning`.\n\n**Language rule:** All notification comments and replacement comments MUST be written in English.\n\n## Script\n\nAll mechanical operations (API calls, temp file management, security enforcements) are handled by:\n\n```\n$REPO_ROOT\u002F.agents\u002Fskills\u002Fopenclaw-secret-scanning-maintainer\u002Fscripts\u002Fsecret-scanning.mjs\n```\n\nThe script enforces:\n\n- `hide_secret=true` on all alert fetches (no plaintext secrets in stdout)\n- `mktemp` with random UUIDs for all temp files\n- `-F body=@file` for all body uploads (no inline shell quoting)\n- Notification templates branched by location type\n- Never prints `.secret` or `.body` to stdout\n\n## Overall Flow\n\nSupports single or multiple alerts. For multiple alerts, process in ascending order.\n\nFor each alert:\n\n1. **Identify** — `fetch-alert` + `fetch-content` to get metadata and body\n2. **Decide** — Agent reads the body file, identifies all secrets, produces redacted version\n3. **Redact** — `redact-body` for issue\u002FPR body; skip for comments (delete directly)\n4. **Purge** — `delete-comment` + `recreate-comment` for comments; cannot purge body history\n5. **Notify** — `notify` posts the right template per location type\n6. **Resolve** — `resolve` closes the alert\n7. **Summary** — `summary` prints formatted results\n\n## Step 1: Identify\n\n```bash\n# List all open alerts\nnode secret-scanning.mjs list-open\n\n# Fetch specific alert metadata + locations\nnode secret-scanning.mjs fetch-alert \u003CNUMBER>\n\n# Fetch content for each location (saves body to temp file)\nnode secret-scanning.mjs fetch-content '\u003Clocation-json>'\n```\n\nThe `fetch-content` output includes:\n\n- `body_file`: path to temp file with full body content\n- `author`: who posted it\n- `issue_number` \u002F `pr_number`: where it is\n- `edit_history_count`: number of existing edits\n- `type`: location type for routing\n- For `discussion_comment`, it also includes `comment_node_id`, `discussion_node_id`, and `reply_to_node_id` when the original comment was a reply.\n\n### Location type routing\n\n| type                          | Flow                                          |\n| ----------------------------- | --------------------------------------------- |\n| `issue_comment`               | Comment: delete+recreate                      |\n| `pull_request_comment`        | Comment: delete+recreate                      |\n| `pull_request_review_comment` | Comment: delete+recreate                      |\n| `discussion_comment`          | Discussion comment: delete+recreate (GraphQL) |\n| `issue_body`                  | Body: redact in place                         |\n| `pull_request_body`           | Body: redact in place                         |\n| `commit`                      | Notify only                                   |\n| _other_                       | Skip and report                               |\n\n## Step 2: Decide (Agent)\n\nThe agent reads the body file from `fetch-content` output and:\n\n1. Identifies ALL secrets in the content (there may be more than the alert flagged)\n2. Replaces each secret with `[REDACTED \u003Csecret_type>]` — **no partial values, no prefix\u002Fsuffix**\n3. Saves the redacted content to a new temp file\n\nThis is the only step that requires semantic understanding. Everything else is mechanical.\n\n## Step 3: Redact\n\n### For comments (issue_comment \u002F PR comments)\n\n**Do NOT redact.** Skip directly to Step 4 (delete + recreate). PATCHing before DELETE creates an unnecessary edit history revision.\n\n### For issue_body \u002F pull_request_body\n\n```bash\nnode secret-scanning.mjs redact-body \u003Cissue|pr> \u003CNUMBER> \u003Credacted-body-file>\n```\n\n## Step 4: Purge Edit History\n\n### Comments — Delete and Recreate\n\nFor issue\u002FPR comments:\n\n```bash\n# Delete original (all edit history gone)\nnode secret-scanning.mjs delete-comment \u003CCOMMENT_ID>\n\n# Recreate with redacted content\nnode secret-scanning.mjs recreate-comment \u003CISSUE_NUMBER> \u003Cbody-file>\n```\n\nFor discussion comments (uses GraphQL):\n\n```bash\n# Delete original\nnode secret-scanning.mjs delete-discussion-comment \u003CCOMMENT_NODE_ID>\n\n# Recreate with redacted content\nnode secret-scanning.mjs recreate-discussion-comment \u003CDISCUSSION_NODE_ID> \u003Cbody-file> [REPLY_TO_NODE_ID]\n```\n\nThe `fetch-content` output for `discussion_comment` includes `comment_node_id` and `discussion_node_id` for these commands. When the original discussion comment was a reply, it also includes `reply_to_node_id`; pass that optional third argument so the redacted replacement stays in the original thread.\n\nThe recreated comment should follow this format:\n\n```\n> **Note:** The original comment by @\u003CAUTHOR> has been removed due to secret leakage. Below is the redacted version of the original content.\n\n---\n\n\u003Credacted original content>\n```\n\n### issue_body \u002F pull_request_body — Cannot Purge\n\nEditing creates an edit history revision with the pre-edit plaintext. This cannot be cleared via API.\n\n**Output to maintainer terminal only (never in public comments):**\n\n```\n⚠️ Issue\u002FPR body edit history still contains plaintext secrets.\nContact GitHub Support to purge: https:\u002F\u002Fsupport.github.com\u002Fcontact\nRequest purge of issue\u002FPR #{NUMBER} userContentEdits.\n```\n\n> **CRITICAL:** Do NOT mention edit history or the \"edited\" button in any public comment or resolution_comment.\n\n### Commits\n\nCannot clean. Notify author to delete branch or force-push (for unmerged PRs).\n\n## Step 5: Notify\n\n```bash\nnode secret-scanning.mjs notify \u003CTARGET> \u003CAUTHOR> \u003CLOCATION_TYPE> \u003CSECRET_TYPES> [REPLY_TO_NODE_ID]\n```\n\n- For non-discussion types, `\u003CTARGET>` is the issue\u002FPR number.\n- For `discussion_comment`, `\u003CTARGET>` is the `discussion_node_id` returned by `fetch-content`.\n- For reply-style `discussion_comment` locations, pass the optional `reply_to_node_id` from `fetch-content` so the notification stays in the same thread.\n\nSecret types are comma-separated: `\"Discord Bot Token,Feishu App Secret\"`\n\nThe script picks the right template:\n\n- **comment types**: \"your comment … removed and replaced\"\n- **body types**: \"your issue\u002FPR description … redacted in place\"\n- **commit**: \"code you committed\"\n\n## Step 6: Resolve\n\n```bash\nnode secret-scanning.mjs resolve \u003CALERT_NUMBER>\n# or with custom resolution:\nnode secret-scanning.mjs resolve \u003CALERT_NUMBER> revoked \"Custom comment\"\n```\n\nResolution is `revoked` by default. As maintainers we cannot control whether users rotate — our responsibility is to redact + notify. The `revoked` means \"this secret should be considered leaked\", not \"I confirmed it was revoked\".\n\n## Step 7: Summary\n\nAfter processing, create a JSON results file and pass it to the summary command:\n\n```bash\nnode secret-scanning.mjs summary \u002Ftmp\u002Fresults.json\n```\n\nThe script outputs a block delimited by `---BEGIN SUMMARY---` and `---END SUMMARY---`. **You MUST output the content between these markers verbatim to the user. Do NOT rephrase, reformat, abbreviate, or create your own summary.** The script already includes full URLs for every alert and location.\n\nThe JSON format:\n\n```json\n[\n  {\n    \"number\": 72,\n    \"secret_type\": \"Discord Bot Token\",\n    \"location_label\": \"Issue #63101 comment\",\n    \"location_url\": \"https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fissues\u002F63101#issuecomment-xxx\",\n    \"actions\": \"Deleted+Recreated+Notified\",\n    \"history_cleared\": true\n  }\n]\n```\n\nFor unsupported types, add `\"skipped\": true, \"unsupported_type\": \"\u003Ctype>\"`.\n\n## Safety Rules\n\n- **Agent reads content, identifies secrets, produces redaction.** Script handles all API calls.\n- **Never include any portion of a secret** in public comments, redaction markers, or terminal output.\n- **Never include alert URLs or numbers** in public comments.\n- **For comments, skip PATCH — go directly to DELETE + recreate.**\n- **Never mention edit history, \"edited\" button, or commit SHAs** in any public content.\n- **Ask for confirmation** before deleting any comment.\n- **One alert at a time** unless user requests batch.\n- **All public comments in English.**\n- **Skip unsupported location types** and report in summary.\n",{"name":5,"description":7},"main","a2e3284ed4488780397ee2f78217366e11470dfb","skills\u002Fopenclaw-secret-scanning-maintainer","https:\u002F\u002Fgithub.com\u002F7dvq6yrkgs-stack\u002Fplaywright","https:\u002F\u002Fplaywright.dev","https:\u002F\u002Fgithub.com\u002F7dvq6yrkgs-stack","2026-04-25 06:04:45",{"source":8,"skillName":5,"commands":46,"prompt":56,"zipAvailable":57},[47,50,53],{"tool":48,"command":49},"npx","npx skills add 7dvq6yrkgs-stack\u002Fplaywright --skill openclaw-secret-scanning-maintainer",{"tool":51,"command":52},"bunx","bunx skills add 7dvq6yrkgs-stack\u002Fplaywright --skill openclaw-secret-scanning-maintainer",{"tool":54,"command":55},"pnpm","pnpm dlx skills add 7dvq6yrkgs-stack\u002Fplaywright --skill openclaw-secret-scanning-maintainer","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002F7dvq6yrkgs-stack\u002Fplaywright\u002Fblob\u002Fmain\u002Fskills\u002Fopenclaw-secret-scanning-maintainer\u002FSKILL.md",true,[59,65,69],{"path":60,"resourceType":61,"resourceTypeDesc":62,"sizeBytes":63,"sourceHtmlUrl":64},".skillfish.json","REFERENCE","参考文档",271,"https:\u002F\u002Fgithub.com\u002F7dvq6yrkgs-stack\u002Fplaywright\u002Fblob\u002Fmain\u002Fskills\u002Fopenclaw-secret-scanning-maintainer\u002F.skillfish.json",{"path":66,"resourceType":61,"resourceTypeDesc":62,"sizeBytes":67,"sourceHtmlUrl":68},"resources\u002Fimplementation-playbook.md",17175,"https:\u002F\u002Fgithub.com\u002Fagency-black\u002FSkills\u002Fblob\u002Fmain\u002Fprojection-patterns\u002Fresources\u002Fimplementation-playbook.md",{"path":70,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":73,"sourceHtmlUrl":74},"scripts\u002Fsecret-scanning.mjs","SCRIPT","脚本",24805,"https:\u002F\u002Fgithub.com\u002F7dvq6yrkgs-stack\u002Fplaywright\u002Fblob\u002Fmain\u002Fskills\u002Fopenclaw-secret-scanning-maintainer\u002Fscripts\u002Fsecret-scanning.mjs",[76,106,116,126,141,156],{"skillNo":77,"name":78,"nameZh":6,"description":79,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":80,"categories":81,"keywords":94,"publishedAt":33},"01M6E3XK4PRPMQHM7Y98FQPTY1","zyte-api-automation","Automate Zyte API tasks via Rube MCP (Composio). Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002F7dvq6yrkgs-stack\u002Fplaywright\u002Fblob\u002Fmain\u002Fskills\u002Fzyte-api-automation\u002FSKILL.md",[82,83,86,89],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":84,"categoryName":85,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":87,"categoryName":88,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":90,"categoryName":91,"taxonomyType":92,"taxonomyTypeDesc":93},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[95,96,97,98,99,100,101,102,103,104,105],"zyte api automation","api","automation","MCP","tasks","search","Tools","first","automate","composio","via",{"skillNo":107,"name":108,"nameZh":6,"description":109,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":110,"categories":111,"keywords":114,"publishedAt":33},"01M6E3XFX6QSTR1QR59NFXJTMA","zylvie-automation","Automate Zylvie tasks via Rube MCP (Composio). Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002F7dvq6yrkgs-stack\u002Fplaywright\u002Fblob\u002Fmain\u002Fskills\u002Fzylvie-automation\u002FSKILL.md",[112,113],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":87,"categoryName":88,"taxonomyType":20,"taxonomyTypeDesc":21},[115,97,103,98,99,100,101,102,104,105],"zylvie automation",{"skillNo":117,"name":118,"nameZh":6,"description":119,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":120,"categories":121,"keywords":124,"publishedAt":33},"01M6E3XCX2GDYYCHN58ZJHT37M","zoominfo-automation","Automate Zoominfo tasks via Rube MCP (Composio). Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002F7dvq6yrkgs-stack\u002Fplaywright\u002Fblob\u002Fmain\u002Fskills\u002Fzoominfo-automation\u002FSKILL.md",[122,123],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":87,"categoryName":88,"taxonomyType":20,"taxonomyTypeDesc":21},[125,97,100,101,102,103,104,105,99,98],"zoominfo automation",{"skillNo":127,"name":128,"nameZh":6,"description":129,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":130,"categories":131,"keywords":134,"publishedAt":33},"01M6E3X9WJ2T73216WQHHTB9BD","zoho_mail-automation","Automate Zoho Mail tasks via Rube MCP (Composio): email sending, folders, labels, and mailbox management. Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002F7dvq6yrkgs-stack\u002Fplaywright\u002Fblob\u002Fmain\u002Fskills\u002Fzoho_mail-automation\u002FSKILL.md",[132,133],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":87,"categoryName":88,"taxonomyType":20,"taxonomyTypeDesc":21},[135,136,137,97,98,99,100,138,101,102,103,139,104,140,105],"mail","zoho mail automation","zoho","email","management","mailbox",{"skillNo":142,"name":143,"nameZh":6,"description":144,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":145,"categories":146,"keywords":152,"publishedAt":33},"01M6E3X719W648XZBW1EC6JQ64","zoho_invoice-automation","Automate Zoho Invoice tasks via Rube MCP (Composio): invoices, estimates, expenses, clients, and payment tracking. Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002F7dvq6yrkgs-stack\u002Fplaywright\u002Fblob\u002Fmain\u002Fskills\u002Fzoho_invoice-automation\u002FSKILL.md",[147,148,149],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":87,"categoryName":88,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":150,"categoryName":151,"taxonomyType":92,"taxonomyTypeDesc":93},"01JBSEEDCAT000000000000040","财务",[153,137,97,99,100,101,102,103,154,155,104,105,98],"zoho invoice automation","tracking","payment",{"skillNo":157,"name":158,"nameZh":6,"description":159,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":160,"categories":161,"keywords":164,"publishedAt":33},"01M6E3X28JYTC3QTK32AQF7BYB","zoho_inventory-automation","Automate Zoho Inventory tasks via Rube MCP (Composio): items, orders, warehouses, shipments, and stock management. Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002F7dvq6yrkgs-stack\u002Fplaywright\u002Fblob\u002Fmain\u002Fskills\u002Fzoho_inventory-automation\u002FSKILL.md",[162,163],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":87,"categoryName":88,"taxonomyType":20,"taxonomyTypeDesc":21},[97,165,137,166,102,103,101,100,99,98,104,105,167,168,139],"inventory","zoho inventory automation","stock","orders"]