[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M698REAX74518A447YDDKXY4":3,"skill-same:01M698REAX74518A447YDDKXY4":62},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":28,"linkOnly":29,"markdownContent":30,"markdownBody":31,"frontMatter":32,"refName":33,"commitSha":34,"skillDirectory":35,"forksCount":36,"repositoryHtmlUrl":37,"repositoryHomepageUrl":38,"ownerHtmlUrl":39,"ownerBlogUrl":38,"ownerDescription":40,"updatedAt":41,"install":42,"resources":55},"01M698REAX74518A447YDDKXY4","openclaw-secret-scanning-maintainer",null,"Triage, redact, clean up, and resolve OpenClaw GitHub Secret Scanning alerts in issues or PRs.","openclaw\u002Fopenclaw","openclaw","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F252820863?v=4","01M698P3FSAZ6B4R928ZF19KPT","01M698PDMDRVH56MV30D253NFP",394302,"MIT","https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fopenclaw-secret-scanning-maintainer\u002FSKILL.md",[],[9,18,19,20,21,22,23,24,25,26,27],"openclaw secret scanning maintainer","secret scanning","scanning","github","triage","issues","up","clean","alerts","prs","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 whether plaintext secrets remain, and produces a redacted version only when needed\n3. **Redact** — `redact-body-if-needed` 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, unless the current issue\u002FPR body is already redacted\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. Determines whether any plaintext credential remains in the current body\n3. Replaces each remaining secret with `[REDACTED \u003Csecret_type>]` — **no partial values, no prefix\u002Fsuffix**\n4. Saves the redacted content to a new temp file\n\nThis is the only step that requires semantic understanding. Everything else is mechanical.\n\nFor `issue_body` and `pull_request_body`: if the current body has already been redacted by the author and no plaintext credential remains, **do not post a public notification comment**. This avoids creating a fresh public pointer to historical sensitive content. Record that redaction separately and use Step 6 to decide whether the evidence supports resolving the alert.\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-if-needed \u003Cissue|pr> \u003CNUMBER> \u003Ccurrent-body-file> \u003Credacted-body-file> \u003Cresult-file>\n```\n\nUse the `body_file` from `fetch-content` as `\u003Ccurrent-body-file>`. The command writes `notify_required` to `\u003Cresult-file>` and only PATCHes the body when the redacted file differs from the current body.\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 Edit History\n\nEditing creates an edit history revision with the pre-edit plaintext. This cannot be cleared via API.\n\nDo not advise authors publicly to delete\u002Frecreate issues or close\u002Freopen PRs. That can draw attention to historical content. Keep purge guidance maintainer-only.\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|BODY_REDACTION_RESULT_FILE]\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- For `issue_body` and `pull_request_body`, pass the `\u003Cresult-file>` from `redact-body-if-needed`. The script skips notification when `notify_required` is `false` and refuses body notifications without this file.\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\nFor `issue_body` and `pull_request_body`, only notify when the current body still contained plaintext and maintainers redacted it. If the user already redacted the current body, skip notification and continue to Step 6.\n\n## Step 6: Resolve\n\n```bash\nnode secret-scanning.mjs resolve \u003CALERT_NUMBER> \u003CRESOLUTION> [COMMENT]\n```\n\nChoose an explicit resolution supported by the evidence and the maintainer's authority:\n\n- `revoked`: the credential owner or issuer has confirmed revocation.\n- `false_positive`: the detection was confirmed to be a false positive.\n- `used_in_tests`: the credential was confirmed to be used for testing.\n- `wont_fix`: an authorized maintainer has accepted the risk and decided not to remediate; record that decision in the comment.\n\nRedaction and a request to rotate credentials do not establish revocation. If no resolution is substantiated, leave the alert open and report the redaction and notification outcomes separately. The command has no default resolution and adds a resolution comment only when one is supplied.\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 whether plaintext secrets remain, and produces a redacted version only when needed\n3. **Redact** — `redact-body-if-needed` 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, unless the current issue\u002FPR body is already redacted\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. Determines whether any plaintext credential remains in the current body\n3. Replaces each remaining secret with `[REDACTED \u003Csecret_type>]` — **no partial values, no prefix\u002Fsuffix**\n4. Saves the redacted content to a new temp file\n\nThis is the only step that requires semantic understanding. Everything else is mechanical.\n\nFor `issue_body` and `pull_request_body`: if the current body has already been redacted by the author and no plaintext credential remains, **do not post a public notification comment**. This avoids creating a fresh public pointer to historical sensitive content. Record that redaction separately and use Step 6 to decide whether the evidence supports resolving the alert.\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-if-needed \u003Cissue|pr> \u003CNUMBER> \u003Ccurrent-body-file> \u003Credacted-body-file> \u003Cresult-file>\n```\n\nUse the `body_file` from `fetch-content` as `\u003Ccurrent-body-file>`. The command writes `notify_required` to `\u003Cresult-file>` and only PATCHes the body when the redacted file differs from the current body.\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 Edit History\n\nEditing creates an edit history revision with the pre-edit plaintext. This cannot be cleared via API.\n\nDo not advise authors publicly to delete\u002Frecreate issues or close\u002Freopen PRs. That can draw attention to historical content. Keep purge guidance maintainer-only.\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|BODY_REDACTION_RESULT_FILE]\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- For `issue_body` and `pull_request_body`, pass the `\u003Cresult-file>` from `redact-body-if-needed`. The script skips notification when `notify_required` is `false` and refuses body notifications without this file.\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\nFor `issue_body` and `pull_request_body`, only notify when the current body still contained plaintext and maintainers redacted it. If the user already redacted the current body, skip notification and continue to Step 6.\n\n## Step 6: Resolve\n\n```bash\nnode secret-scanning.mjs resolve \u003CALERT_NUMBER> \u003CRESOLUTION> [COMMENT]\n```\n\nChoose an explicit resolution supported by the evidence and the maintainer's authority:\n\n- `revoked`: the credential owner or issuer has confirmed revocation.\n- `false_positive`: the detection was confirmed to be a false positive.\n- `used_in_tests`: the credential was confirmed to be used for testing.\n- `wont_fix`: an authorized maintainer has accepted the risk and decided not to remediate; record that decision in the comment.\n\nRedaction and a request to rotate credentials do not establish revocation. If no resolution is substantiated, leave the alert open and report the redaction and notification outcomes separately. The command has no default resolution and adds a resolution comment only when one is supplied.\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","df9d3240e52a533ea176e98cf047ed6b40cf37d6",".agents\u002Fskills\u002Fopenclaw-secret-scanning-maintainer",82862,"https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw","https:\u002F\u002Fopenclaw.ai","https:\u002F\u002Fgithub.com\u002Fopenclaw","Your personal, open source AI assistant.","2026-11-11 08:46:30",{"source":8,"skillName":5,"commands":43,"prompt":53,"zipAvailable":54},[44,47,50],{"tool":45,"command":46},"npx","npx skills add openclaw\u002Fopenclaw --skill openclaw-secret-scanning-maintainer",{"tool":48,"command":49},"bunx","bunx skills add openclaw\u002Fopenclaw --skill openclaw-secret-scanning-maintainer",{"tool":51,"command":52},"pnpm","pnpm dlx skills add openclaw\u002Fopenclaw --skill openclaw-secret-scanning-maintainer","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fopenclaw-secret-scanning-maintainer\u002FSKILL.md",true,[56],{"path":57,"resourceType":58,"resourceTypeDesc":59,"sizeBytes":60,"sourceHtmlUrl":61},"scripts\u002Fsecret-scanning.mjs","SCRIPT","脚本",26005,"https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fopenclaw-secret-scanning-maintainer\u002Fscripts\u002Fsecret-scanning.mjs",[63,69,92,110,132,156],{"skillNo":64,"name":65,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":66,"categories":67,"keywords":68,"publishedAt":28},"01M698VP84FNM6G9MR1HPX7MF7","lobster","https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fblob\u002Fmain\u002Fextensions\u002Flobster\u002FSKILL.md",[],[65],{"skillNo":70,"name":71,"nameZh":6,"description":72,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":73,"categories":74,"keywords":75,"publishedAt":28},"01M698YY8QGQ7S8TJNKJG6VTPH","xurl","xurl CLI for authenticated X posts, replies, reads\u002Fsearch, DMs, media upload, followers, auth status, or raw v2 API calls.","https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fblob\u002Fmain\u002Fskills\u002Fxurl\u002FSKILL.md",[],[71,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91],"for","api","calls","replies","posts","upload","tap","install","brew","node","Media","search","npm","status","auth","cli",{"skillNo":93,"name":94,"nameZh":6,"description":95,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":96,"categories":97,"keywords":98,"publishedAt":28},"01M698YWT1CJ0WK88WB909R9RT","weather","Current weather and forecasts with web_fetch, falling back to wttr.in curl for locations, rain, temperature, travel planning.","https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fblob\u002Fmain\u002Fskills\u002Fweather\u002FSKILL.md",[],[94,99,100,83,101,84,102,103,104,105,106,107,76,108,109],"travel planning","travel","fetch","curl","https","help","planning","web","back","temperature","with",{"skillNo":111,"name":112,"nameZh":6,"description":113,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":114,"categories":115,"keywords":121,"publishedAt":28},"01M698YV2Q0R0JJKAWGFS21K0N","visualize","Create inline visuals for code and explanations, or author persistent OpenClaw dashboard widgets with show_widget.","https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fblob\u002Fmain\u002Fskills\u002Fvisualize\u002FSKILL.md",[116],{"categoryNo":117,"categoryName":118,"taxonomyType":119,"taxonomyTypeDesc":120},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[112,122,123,124,125,76,109,126,127,128,129,130,9,131],"widgets","openclaw dashboard","author","inline","show","code","create","visuals","dashboard","widget",{"skillNo":133,"name":134,"nameZh":6,"description":135,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":136,"categories":137,"keywords":146,"publishedAt":28},"01M698YS2TRJH9ENG28HD9CD87","trello","Manage Trello boards, lists, and cards via the Trello REST API.","https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fblob\u002Fmain\u002Fskills\u002Ftrello\u002FSKILL.md",[138,143],{"categoryNo":139,"categoryName":140,"taxonomyType":141,"taxonomyTypeDesc":142},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",{"categoryNo":144,"categoryName":145,"taxonomyType":119,"taxonomyTypeDesc":120},"01JBSEEDCAT000000000000030","开发工程师",[134,103,147,148,149,150,151,152,83,84,153,102,77,154,155],"cloud","manage","via","rest api","token","atlassian","jq","REST","developer",{"skillNo":157,"name":158,"nameZh":6,"description":159,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":160,"categories":161,"keywords":162,"publishedAt":28},"01M698YQ9Q3M4W78EWV2KSCSVW","tmux","Control tmux sessions\u002Fpanes for interactive CLIs: list, capture output, send keys, paste text, monitor prompts.","https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fblob\u002Fmain\u002Fskills\u002Ftmux\u002FSKILL.md",[],[158,83,163,164,76,165,166,167,168,169,170,171,84,172,173,174,175,176,177],"send","darwin","keys","paste","output","control","prompts","interactive","list","capture","panes","text","monitor","sessions","linux"]