[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M698X2DFY2A1J9K4D1SKB2G5":3,"skill-same:01M698X2DFY2A1J9K4D1SKB2G5":72},{"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":35,"linkOnly":36,"markdownContent":37,"markdownBody":38,"frontMatter":39,"refName":49,"commitSha":50,"skillDirectory":51,"forksCount":52,"repositoryHtmlUrl":53,"repositoryHomepageUrl":54,"ownerHtmlUrl":55,"ownerBlogUrl":54,"ownerDescription":56,"updatedAt":57,"install":58,"resources":71},"01M698X2DFY2A1J9K4D1SKB2G5","github",null,"GitHub CLI for issues, PRs, CI\u002Fcheck logs, comments, reviews, releases, repos, and gh api queries.","openclaw\u002Fopenclaw","openclaw","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F252820863?v=4","01M698P3FSAZ6B4R928ZF19KPT","01M698PDMDRVH56MV30D253NFP",394352,"MIT","https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fblob\u002Fmain\u002Fskills\u002Fgithub\u002FSKILL.md",[],[5,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34],"prs","cli","for","reviews","comments","github cli","queries","releases","install","brew","check","gh","api","ci","logs","issues","repos","2026-11-10 10:12:30",false,"---\nname: github\ndescription: \"GitHub CLI for issues, PRs, CI\u002Fcheck logs, comments, reviews, releases, repos, and gh api queries.\"\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"emoji\": \"?\",\n        \"requires\": { \"bins\": [\"gh\"] },\n        \"install\":\n          [\n            {\n              \"id\": \"brew\",\n              \"kind\": \"brew\",\n              \"formula\": \"gh\",\n              \"bins\": [\"gh\"],\n              \"label\": \"Install GitHub CLI (brew)\",\n            },\n          ],\n      },\n  }\n---\n\n# GitHub\n\nUse `gh` for GitHub. Use `git` for local commits\u002Fbranches\u002Fpush\u002Fpull. Use code-reading tools for deep reviews.\n\n## Auth\n\n```bash\ngh auth status\ngh auth login\n```\n\nGateway HOME can differ from operator HOME. If `gh` auth exists elsewhere, set `GH_CONFIG_DIR` in the gateway service env and restart.\n\n## PRs\n\n```bash\ngh pr list --repo owner\u002Frepo --json number,title,state,author,url\ngh pr view 55 --repo owner\u002Frepo --json title,body,author,files,commits,reviews,reviewDecision\ngh pr checks 55 --repo owner\u002Frepo\ngh pr diff 55 --repo owner\u002Frepo\ngh pr create --repo owner\u002Frepo --title \"feat: title\" --body-file \u002Ftmp\u002Fpr.md\n```\n\nWhen creating or refreshing a PR body, append this final footer only when the Runtime line supplies `sessionUrl=\u003Cexact-url>`. Replace `\u003CsessionUrl>` with that URL verbatim; do not construct or modify it. `sessionUrl` is supplied only for an explicitly public session. Omit the footer when it is absent; never substitute a private chat URL or enable sharing to obtain one. Preserve any publication marker before exactly one footer, and keep the footer final:\n\n```text\n---\n[View the OpenClaw team session](\u003CsessionUrl>)\n```\n\nURLs work directly: `gh pr view https:\u002F\u002Fgithub.com\u002Fowner\u002Frepo\u002Fpull\u002F55`.\n\n### Async merges\n\nUse the repository's native landing workflow when provided. For authorized\nprogrammatic merges elsewhere, use GitHub's [async merge API](https:\u002F\u002Fdocs.github.com\u002Fen\u002Frest\u002Fpulls\u002Fpulls#merge-a-pull-request-asynchronously)\nthrough `gh api`; `gh pr merge` does not select this API. Supply the reviewed head\nSHA, preserve required reviews\u002Fchecks, and check stack membership first: submitting\na stacked PR also merges or queues its open downstack PRs, which need their own\nreview and authorization.\n\n```bash\ngh api -H 'X-Octopool-Require: merge-async-v1' \\\n  --method PUT repos\u002Fowner\u002Frepo\u002Fpulls\u002F55\u002Fmerge-async \\\n  -H 'X-GitHub-Api-Version: 2026-03-10' \\\n  -f sha=REVIEWED_HEAD_SHA -f merge_method=squash -f merge_action=direct_merge\ngh api -H 'X-Octopool-Require: merge-async-v1' \\\n  repos\u002Fowner\u002Frepo\u002Fpulls\u002F55\u002Fmerge-async\u002FREQUEST_UUID \\\n  -H 'X-GitHub-Api-Version: 2026-03-10' -H 'Cache-Control: max-age=0'\n```\n\nKeep the Octopool guard header first after `api`. Protected older wrappers reject\nit before they can rewrite merge authority; use an Octopool build containing\n[the async guard](https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Foctopool\u002Fpull\u002F231) if it is refused.\nThe supported wrapper preserves SHA\u002Fmethod\u002Faction\u002Fbypass and only rewrites commit\ntext. Native `gh` can pass the header through. Do not remove it, disable policy,\nor select a raw binary to work around a rejection.\n\nRetain `details.uuid` from a `202` response before polling. `pending` means wait;\n`merged` includes `details.sha`, which still needs final PR\u002Fhead verification.\n`enqueued` means queued, not merged: monitor the PR itself. To honor a configured\nqueue, use `merge_action=default` (or `merge_queue` to explicitly enqueue), omitting\ndirect-only method\u002Ftitle\u002Fmessage fields. Never enable `bypass_rules` without authorization.\n\nOn `failed`, report `details.message`. A `409` identifies an existing request;\ninspect its UUID and options without resubmitting. Lost replies, polling errors,\nand result expiry after 24 hours require reconciliation, never a blind retry or\nsynchronous fallback. Poll with bounded waits and fresh reads. Async processing\ndoes not arm auto-merge for unmet checks; use the native workflow or `gh pr merge\n--auto` when that behavior is authorized.\n\n### Landing ownership\n\nWhen the user asks to land or merge a PR, the terminal outcome is the PR's verified\nGitHub state, not the end of a review, worker turn, or CI observation.\n\n- Keep the job active until `gh pr view ... --json state,mergedAt,mergeCommit`\n  proves `state` is `MERGED`.\n- Treat review findings, merge conflicts, failed checks, and requested changes as\n  continuation work when they are in scope. Patch them, rerun the required gates,\n  and re-evaluate the exact updated head.\n- A pending check is a wait state, not completion. Use the repository's supported\n  wait or merge workflow; do not claim success from partial green checks.\n- If work was delegated to a persistent session and that run stops before merge,\n  continue the same session rather than treating its report as the final result.\n- Stop as blocked only when continuing requires new authority, unavailable\n  credentials, or a product decision that cannot be inferred safely. Report the\n  exact blocker and leave the PR unmerged.\n\n## Issues\n\n```bash\ngh issue list --repo owner\u002Frepo --state open --json number,title,labels,url\ngh issue view 42 --repo owner\u002Frepo --json title,body,comments,labels,state\ngh issue create --repo owner\u002Frepo --title \"Bug: ...\" --body-file \u002Ftmp\u002Fissue.md\ngh issue comment 42 --repo owner\u002Frepo --body-file \u002Ftmp\u002Fcomment.md\ngh issue close 42 --repo owner\u002Frepo --comment \"Fixed in ...\"\n```\n\n## CI\u002Fruns\n\n```bash\ngh run list --repo owner\u002Frepo --limit 10\ngh run view \u003Crun-id> --repo owner\u002Frepo --json status,conclusion,headSha,url\ngh run view \u003Crun-id> --repo owner\u002Frepo --log-failed\ngh run rerun \u003Crun-id> --repo owner\u002Frepo --failed\n```\n\n## API\n\n```bash\ngh api repos\u002Fowner\u002Frepo\u002Fpulls\u002F55 --jq '.title, .state, .user.login'\ngh api repos\u002Fowner\u002Frepo\u002Flabels --jq '.[].name'\ngh api --cache 1h repos\u002Fowner\u002Frepo --jq '{stars: .stargazers_count, forks: .forks_count}'\n```\n\nUse `--json` + `--jq` for structured output. Use `--body-file` for comments\u002Fbodies containing backticks, shell snippets, env names, or user text.\n","# GitHub\n\nUse `gh` for GitHub. Use `git` for local commits\u002Fbranches\u002Fpush\u002Fpull. Use code-reading tools for deep reviews.\n\n## Auth\n\n```bash\ngh auth status\ngh auth login\n```\n\nGateway HOME can differ from operator HOME. If `gh` auth exists elsewhere, set `GH_CONFIG_DIR` in the gateway service env and restart.\n\n## PRs\n\n```bash\ngh pr list --repo owner\u002Frepo --json number,title,state,author,url\ngh pr view 55 --repo owner\u002Frepo --json title,body,author,files,commits,reviews,reviewDecision\ngh pr checks 55 --repo owner\u002Frepo\ngh pr diff 55 --repo owner\u002Frepo\ngh pr create --repo owner\u002Frepo --title \"feat: title\" --body-file \u002Ftmp\u002Fpr.md\n```\n\nWhen creating or refreshing a PR body, append this final footer only when the Runtime line supplies `sessionUrl=\u003Cexact-url>`. Replace `\u003CsessionUrl>` with that URL verbatim; do not construct or modify it. `sessionUrl` is supplied only for an explicitly public session. Omit the footer when it is absent; never substitute a private chat URL or enable sharing to obtain one. Preserve any publication marker before exactly one footer, and keep the footer final:\n\n```text\n---\n[View the OpenClaw team session](\u003CsessionUrl>)\n```\n\nURLs work directly: `gh pr view https:\u002F\u002Fgithub.com\u002Fowner\u002Frepo\u002Fpull\u002F55`.\n\n### Async merges\n\nUse the repository's native landing workflow when provided. For authorized\nprogrammatic merges elsewhere, use GitHub's [async merge API](https:\u002F\u002Fdocs.github.com\u002Fen\u002Frest\u002Fpulls\u002Fpulls#merge-a-pull-request-asynchronously)\nthrough `gh api`; `gh pr merge` does not select this API. Supply the reviewed head\nSHA, preserve required reviews\u002Fchecks, and check stack membership first: submitting\na stacked PR also merges or queues its open downstack PRs, which need their own\nreview and authorization.\n\n```bash\ngh api -H 'X-Octopool-Require: merge-async-v1' \\\n  --method PUT repos\u002Fowner\u002Frepo\u002Fpulls\u002F55\u002Fmerge-async \\\n  -H 'X-GitHub-Api-Version: 2026-03-10' \\\n  -f sha=REVIEWED_HEAD_SHA -f merge_method=squash -f merge_action=direct_merge\ngh api -H 'X-Octopool-Require: merge-async-v1' \\\n  repos\u002Fowner\u002Frepo\u002Fpulls\u002F55\u002Fmerge-async\u002FREQUEST_UUID \\\n  -H 'X-GitHub-Api-Version: 2026-03-10' -H 'Cache-Control: max-age=0'\n```\n\nKeep the Octopool guard header first after `api`. Protected older wrappers reject\nit before they can rewrite merge authority; use an Octopool build containing\n[the async guard](https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Foctopool\u002Fpull\u002F231) if it is refused.\nThe supported wrapper preserves SHA\u002Fmethod\u002Faction\u002Fbypass and only rewrites commit\ntext. Native `gh` can pass the header through. Do not remove it, disable policy,\nor select a raw binary to work around a rejection.\n\nRetain `details.uuid` from a `202` response before polling. `pending` means wait;\n`merged` includes `details.sha`, which still needs final PR\u002Fhead verification.\n`enqueued` means queued, not merged: monitor the PR itself. To honor a configured\nqueue, use `merge_action=default` (or `merge_queue` to explicitly enqueue), omitting\ndirect-only method\u002Ftitle\u002Fmessage fields. Never enable `bypass_rules` without authorization.\n\nOn `failed`, report `details.message`. A `409` identifies an existing request;\ninspect its UUID and options without resubmitting. Lost replies, polling errors,\nand result expiry after 24 hours require reconciliation, never a blind retry or\nsynchronous fallback. Poll with bounded waits and fresh reads. Async processing\ndoes not arm auto-merge for unmet checks; use the native workflow or `gh pr merge\n--auto` when that behavior is authorized.\n\n### Landing ownership\n\nWhen the user asks to land or merge a PR, the terminal outcome is the PR's verified\nGitHub state, not the end of a review, worker turn, or CI observation.\n\n- Keep the job active until `gh pr view ... --json state,mergedAt,mergeCommit`\n  proves `state` is `MERGED`.\n- Treat review findings, merge conflicts, failed checks, and requested changes as\n  continuation work when they are in scope. Patch them, rerun the required gates,\n  and re-evaluate the exact updated head.\n- A pending check is a wait state, not completion. Use the repository's supported\n  wait or merge workflow; do not claim success from partial green checks.\n- If work was delegated to a persistent session and that run stops before merge,\n  continue the same session rather than treating its report as the final result.\n- Stop as blocked only when continuing requires new authority, unavailable\n  credentials, or a product decision that cannot be inferred safely. Report the\n  exact blocker and leave the PR unmerged.\n\n## Issues\n\n```bash\ngh issue list --repo owner\u002Frepo --state open --json number,title,labels,url\ngh issue view 42 --repo owner\u002Frepo --json title,body,comments,labels,state\ngh issue create --repo owner\u002Frepo --title \"Bug: ...\" --body-file \u002Ftmp\u002Fissue.md\ngh issue comment 42 --repo owner\u002Frepo --body-file \u002Ftmp\u002Fcomment.md\ngh issue close 42 --repo owner\u002Frepo --comment \"Fixed in ...\"\n```\n\n## CI\u002Fruns\n\n```bash\ngh run list --repo owner\u002Frepo --limit 10\ngh run view \u003Crun-id> --repo owner\u002Frepo --json status,conclusion,headSha,url\ngh run view \u003Crun-id> --repo owner\u002Frepo --log-failed\ngh run rerun \u003Crun-id> --repo owner\u002Frepo --failed\n```\n\n## API\n\n```bash\ngh api repos\u002Fowner\u002Frepo\u002Fpulls\u002F55 --jq '.title, .state, .user.login'\ngh api repos\u002Fowner\u002Frepo\u002Flabels --jq '.[].name'\ngh api --cache 1h repos\u002Fowner\u002Frepo --jq '{stars: .stargazers_count, forks: .forks_count}'\n```\n\nUse `--json` + `--jq` for structured output. Use `--body-file` for comments\u002Fbodies containing backticks, shell snippets, env names, or user text.\n",{"name":5,"metadata":40,"description":7},{"openclaw":41},{"emoji":42,"install":43,"requires":47},"?",[44],{"id":27,"bins":45,"kind":27,"label":46,"formula":29},[29],"Install GitHub CLI (brew)",{"bins":48},[29],"main","f1c93577085244aa96aa87b53a2df9b59d293bd7","skills\u002Fgithub",82861,"https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw","https:\u002F\u002Fopenclaw.ai","https:\u002F\u002Fgithub.com\u002Fopenclaw","Your personal, open source AI assistant.","2026-11-12 03:01:25",{"source":8,"skillName":5,"commands":59,"prompt":69,"zipAvailable":70},[60,63,66],{"tool":61,"command":62},"npx","npx skills add openclaw\u002Fopenclaw --skill github",{"tool":64,"command":65},"bunx","bunx skills add openclaw\u002Fopenclaw --skill github",{"tool":67,"command":68},"pnpm","pnpm dlx skills add openclaw\u002Fopenclaw --skill github","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fblob\u002Fmain\u002Fskills\u002Fgithub\u002FSKILL.md",true,[],[73,79,97,115,137,161],{"skillNo":74,"name":75,"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":76,"categories":77,"keywords":78,"publishedAt":35},"01M698VP84FNM6G9MR1HPX7MF7","lobster","https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fblob\u002Fmain\u002Fextensions\u002Flobster\u002FSKILL.md",[],[75],{"skillNo":80,"name":81,"nameZh":6,"description":82,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":83,"categories":84,"keywords":85,"publishedAt":35},"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",[],[81,20,30,86,87,88,89,90,26,27,91,92,93,94,95,96,19],"calls","replies","posts","upload","tap","node","Media","search","npm","status","auth",{"skillNo":98,"name":99,"nameZh":6,"description":100,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":103,"publishedAt":35},"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",[],[99,104,105,26,106,27,107,108,109,110,111,112,20,113,114],"travel planning","travel","fetch","curl","https","help","planning","web","back","temperature","with",{"skillNo":116,"name":117,"nameZh":6,"description":118,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":119,"categories":120,"keywords":126,"publishedAt":35},"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",[121],{"categoryNo":122,"categoryName":123,"taxonomyType":124,"taxonomyTypeDesc":125},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[117,127,128,129,130,20,114,131,132,133,134,135,9,136],"widgets","openclaw dashboard","author","inline","show","code","create","visuals","dashboard","widget",{"skillNo":138,"name":139,"nameZh":6,"description":140,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":141,"categories":142,"keywords":151,"publishedAt":35},"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",[143,148],{"categoryNo":144,"categoryName":145,"taxonomyType":146,"taxonomyTypeDesc":147},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",{"categoryNo":149,"categoryName":150,"taxonomyType":124,"taxonomyTypeDesc":125},"01JBSEEDCAT000000000000030","开发工程师",[139,108,152,153,154,155,156,157,26,27,158,107,30,159,160],"cloud","manage","via","rest api","token","atlassian","jq","REST","developer",{"skillNo":162,"name":163,"nameZh":6,"description":164,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":165,"categories":166,"keywords":167,"publishedAt":35},"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",[],[163,26,168,169,20,170,171,172,173,174,175,176,27,177,178,179,180,181,182],"send","darwin","keys","paste","output","control","prompts","interactive","list","capture","panes","text","monitor","sessions","linux"]