[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CP1PZ9TSC71W7CD89NJVT7":3,"skill-same:01M6CP1PZ9TSC71W7CD89NJVT7":192},{"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":37,"linkOnly":38,"markdownContent":39,"markdownBody":40,"frontMatter":41,"refName":156,"commitSha":157,"skillDirectory":158,"forksCount":13,"repositoryHtmlUrl":159,"repositoryHomepageUrl":6,"ownerHtmlUrl":160,"ownerBlogUrl":161,"ownerDescription":6,"updatedAt":162,"install":163,"resources":176},"01M6CP1PZ9TSC71W7CD89NJVT7","github",null,"GitHub operations via the gh CLI — issues, PRs, branches, and CI checks.","ncmlabs\u002Fforge","ncmlabs","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F126867372?v=4","01M6CP1F8M06XXPC3FR9KDQTX5","01M6CP1FCVBY4DQZ1N5A2GCM9K",0,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fncmlabs\u002Fforge\u002Fblob\u002Fdevelopment\u002Fskills\u002Fgithub\u002FSKILL.md",[],[5,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36],"branches","cli","diff","view","check","repo","branch","gh","text","squash","Bash","api","ci","csv","issues","state","delete","create","pr","2026-11-10 10:12:30",false,"---\nname: github\ndescription: GitHub operations via the gh CLI — issues, PRs, branches, and CI checks.\ntimeout: 120\nallowed-tools:\n  - Bash(gh:*)\ncapabilities:\n  - name: create_issue\n    inputs: [Text, Text, Text]\n    output: Text\n  - name: list_issues\n    inputs: [Text, Text]\n    output: Text\n  - name: create_branch\n    inputs: [Text, Text]\n    output: Text\n  - name: create_pr\n    inputs: [Text, Text, Text, Text]\n    output: Text\n  - name: update_pr\n    inputs: [Text, Text, Text, Text]\n    output: Text\n    params: [repo, selector, title, body]\n    executor:\n      kind: command\n      argv: [gh, pr, edit, \"{selector}\", -R, \"{repo}\", --title, \"{title}\", --body, \"{body}\"]\n  - name: get_pr_for_branch\n    inputs: [Text, Text]\n    output: Text\n    params: [repo, branch]\n    executor:\n      kind: command\n      argv: [gh, pr, view, \"{branch}\", -R, \"{repo}\", --json, \"number,url,state,headRefName,baseRefName,title,body\"]\n  - name: create_labeled_issue\n    inputs: [Text, Text, Text, Text]\n    output: Text\n    params: [repo, title, body, labels_csv]\n    executor:\n      kind: command\n      argv: [gh, issue, create, -R, \"{repo}\", --title, \"{title}\", --body, \"{body}\", --label, \"{labels_csv}\"]\n  - name: check_ci\n    inputs: [Text, Text]\n    output: Text\n    params: [repo, ref]\n    executor:\n      kind: command\n      argv: [gh, pr, checks, \"{ref}\", -R, \"{repo}\"]\n  - name: list_prs\n    inputs: [Text, Text, Text]\n    output: Text\n    params: [repo, state, limit]\n    executor:\n      kind: command\n      argv: [gh, pr, list, -R, \"{repo}\", --state, \"{state}\", --limit, \"{limit}\", --json, \"number,title,author,state,mergedAt,createdAt,labels,reviewDecision,headRefName,baseRefName,additions,deletions,changedFiles\"]\n  - name: get_pr\n    inputs: [Text, Text]\n    output: Text\n    params: [repo, pr_number]\n    executor:\n      kind: command\n      argv: [gh, pr, view, \"{pr_number}\", -R, \"{repo}\", --json, \"title,number,baseRefName,headRefName,author,state,url,additions,deletions,changedFiles\"]\n  - name: get_pr_reviews\n    inputs: [Text, Text]\n    output: Text\n    params: [repo, pr_number]\n    executor:\n      kind: command\n      argv: [gh, api, \"repos\u002F{repo}\u002Fpulls\u002F{pr_number}\u002Freviews\", --paginate]\n  - name: get_pr_diff\n    inputs: [Text, Text]\n    output: Text\n    params: [repo, pr_number]\n    executor:\n      kind: command\n      argv: [gh, pr, diff, \"{pr_number}\", -R, \"{repo}\"]\n  - name: merge_pr\n    inputs: [Text, Text]\n    output: Text\n    params: [repo, pr_number]\n    executor:\n      kind: command\n      argv: [gh, pr, merge, \"{pr_number}\", -R, \"{repo}\", --squash, --delete-branch]\n  - name: delete_branch\n    inputs: [Text, Text]\n    output: Text\n  - name: close_issue\n    inputs: [Text, Text]\n    output: Text\n---\n\n# GitHub Skill\n\nUse this skill to perform GitHub operations via the `gh` CLI.\nOnly run commands that start with `gh`. Do not run arbitrary shell commands.\n\n## Prerequisites\n\nThe `gh` CLI must be installed and authenticated. Before any operation, verify:\n\n```bash\ngh auth status\n```\n\nIf this fails, return `\"ERROR: gh not authenticated. Run 'gh auth login' to authenticate.\"` and stop.\n\n## Capabilities\n\n### `create_issue(repo, title, body)`\n\nCreate a new issue on a GitHub repository.\n\n```bash\ngh issue create -R \"$repo\" --title \"$title\" --body \"$body\"\n```\n\nReturn the issue URL printed by `gh` on success.\n\nTo add labels, append `--label \"bug,urgent\"`. To assign, append `--assignee \"@me\"`.\n\n### `list_issues(repo, filter)`\n\nList issues with optional filtering. The `filter` parameter accepts space-separated flags.\n\n```bash\ngh issue list -R \"$repo\" --json number,title,state,labels,assignees --limit 30\n```\n\nCommon filters (append to command):\n- `--state open` or `--state closed`\n- `--label \"bug\"`\n- `--assignee \"@me\"`\n- `--search \"query\"`\n\nReturn the JSON array output.\n\n### `create_branch(repo, branch_name)`\n\nCreate a new branch from the default branch HEAD.\n\n```bash\ngh api \"repos\u002F$repo\u002Fgit\u002Frefs\" \\\n  -f \"ref=refs\u002Fheads\u002F$branch_name\" \\\n  -f \"sha=$(gh api \"repos\u002F$repo\u002Fgit\u002Fref\u002Fheads\u002Fmain\" -q '.object.sha')\"\n```\n\nIf the default branch is not `main`, first determine it:\n\n```bash\ngh repo view \"$repo\" --json defaultBranchRef -q '.defaultBranchRef.name'\n```\n\nReturn confirmation with the branch name and SHA on success.\n\n### `create_pr(repo, branch, title, body)`\n\nCreate a pull request from the given branch to the default branch.\n\n```bash\ngh pr create -R \"$repo\" --head \"$branch\" --title \"$title\" --body \"$body\"\n```\n\nTo target a different base branch, append `--base \"development\"`.\n\nReturn the PR URL printed by `gh` on success.\n\n### `update_pr(repo, selector, title, body)`\n\nUpdate an existing pull request selected by branch name, PR number, or URL.\nUse this after create\u002Freuse flows to repair stale PR bodies before merge.\n\n```bash\ngh pr edit \"$selector\" -R \"$repo\" --title \"$title\" --body \"$body\"\n```\n\nReturn the `gh` output on success.\n\n### `get_pr_for_branch(repo, branch)`\n\nFetch the pull request associated with a branch selector.\n\n```bash\ngh pr view \"$branch\" -R \"$repo\" --json number,url,state,headRefName,baseRefName,title,body\n```\n\nReturn the JSON output on success. Use this after uncertain PR creation to recover the existing PR URL and current body.\n\n### `create_labeled_issue(repo, title, body, labels_csv)`\n\nCreate a new issue with one or more labels attached. `labels_csv` is a\ncomma-separated list (e.g. `\"clone-dev,from:T7\"`); `gh --label` accepts\nthe CSV as-is.\n\n```bash\ngh issue create -R \"$repo\" --title \"$title\" --body \"$body\" --label \"$labels_csv\"\n```\n\nUnlike `create_issue`, this capability has a deterministic `command`\nexecutor — the argv is emitted directly to `gh`, so commas in the CSV\ncross the process boundary without shell interpolation.\n\nUse this over `create_issue` whenever downstream label routing matters\n(e.g. cross-project handoff, where the target repo's `dev_cycle` filters\non the label set).\n\nReturn the issue URL printed by `gh` on success.\n\n### `list_prs(repo, state, limit)`\n\nList pull requests with structured JSON output.\n\n```bash\ngh pr list -R \"$repo\" --state \"$state\" --limit \"$limit\" \\\n  --json number,title,author,state,mergedAt,createdAt,labels,reviewDecision,headRefName,baseRefName,additions,deletions,changedFiles\n```\n\nThe `state` parameter accepts `open`, `closed`, `merged`, or `all`.\n\nReturn the JSON array output. Each entry includes `reviewDecision` (`APPROVED`, `CHANGES_REQUESTED`, `REVIEW_REQUIRED`, or empty) and `mergedAt` (ISO-8601 timestamp, empty if not merged).\n\nTo filter by merge date, append `--search \"merged:>2024-01-15\"` to the command.\n\n### `get_pr_reviews(repo, pr_number)`\n\nFetch review objects for a pull request via the GitHub REST API.\n\n```bash\ngh api \"repos\u002F$repo\u002Fpulls\u002F$pr_number\u002Freviews\" --paginate\n```\n\nReturns a JSON array of review objects, each with `state` (`APPROVED`, `CHANGES_REQUESTED`, `COMMENTED`, `DISMISSED`), `body`, `user.login`, and `submitted_at`.\n\n### `get_pr_diff(repo, pr_number)`\n\nFetch the unified diff for a pull request.\n\n```bash\ngh pr diff \"$pr_number\" -R \"$repo\"\n```\n\nReturns the full unified diff text. Note: diffs can be very large — callers should truncate before sending to LLM reasoning.\n\n### `check_ci(repo, ref)`\n\nCheck CI status for a PR number or git ref.\n\nFor a PR number:\n\n```bash\ngh pr checks \"$ref\" -R \"$repo\" --json name,state,conclusion\n```\n\nFor a commit SHA:\n\n```bash\ngh run list -R \"$repo\" --commit \"$ref\" --json status,conclusion,name --limit 10\n```\n\nReturn the JSON output. Summarize pass\u002Ffail counts if multiple checks exist.\n\n### `merge_pr(repo, pr_number)`\n\nMerge a pull request.\n\nFirst verify the PR is mergeable:\n\n```bash\ngh pr view \"$pr_number\" -R \"$repo\" --json mergeable,mergeStateStatus -q '.mergeable'\n```\n\nIf mergeable, proceed:\n\n```bash\ngh pr merge \"$pr_number\" -R \"$repo\" --merge\n```\n\nUse `--merge` by default. Only use `--squash` or `--rebase` if the caller specifies it in the arguments.\n\nReturn the merge result message.\n\n### `delete_branch(repo, branch_name)`\n\nDelete a remote branch.\n\nFirst verify the branch exists and is not the default branch:\n\n```bash\ngh api \"repos\u002F$repo\u002Fgit\u002Fref\u002Fheads\u002F$branch_name\" -q '.ref'\n```\n\nIf it exists and is not the default branch:\n\n```bash\ngh api -X DELETE \"repos\u002F$repo\u002Fgit\u002Frefs\u002Fheads\u002F$branch_name\"\n```\n\nReturn confirmation or error.\n\n### `close_issue(repo, issue_number)`\n\nClose an issue.\n\n```bash\ngh issue close \"$issue_number\" -R \"$repo\"\n```\n\nTo close with a comment:\n\n```bash\ngh issue close \"$issue_number\" -R \"$repo\" --comment \"Closing: resolved\"\n```\n\nReturn confirmation message.\n\n## Error Handling\n\n### Authentication failures\n\nIf `gh auth status` returns non-zero or any command returns `\"not logged in\"`:\n\nReturn `\"ERROR: gh not authenticated. Run 'gh auth login' to authenticate.\"` — do not retry.\n\n### Rate limits\n\nIf a command returns `\"API rate limit exceeded\"` or HTTP 403 with rate-limit headers:\n\nReturn `\"ERROR: GitHub API rate limit exceeded. Retry after rate limit resets.\"` — do not retry.\n\n### Not found\n\nIf a command returns `\"Could not resolve\"`, `\"not found\"`, or HTTP 404:\n\nReturn `\"ERROR: Resource not found — verify the repo, issue number, or branch name.\"` — do not guess alternatives.\n\n### Merge conflicts\n\nIf `gh pr merge` fails with `\"not mergeable\"`, `\"merge conflict\"`, or `\"blocked\"`:\n\nReturn `\"ERROR: PR cannot be merged — conflicts or failing checks. Resolve before retrying.\"` — do not force merge.\n\n## Safety Rules\n\n- Only run commands starting with `gh`. No arbitrary shell commands.\n- Never force-push or delete the default branch.\n- Always verify a resource exists before attempting destructive operations (delete_branch, merge_pr).\n- Use `--merge` strategy by default. Only use `--squash` or `--rebase` when explicitly requested.\n- Return the full `gh` command that was run alongside the result for auditability.\n- Do not store or log authentication tokens.\n\n## Session Adapter Mapping\n\n| FORGE session field | gh CLI |\n|---|---|\n| `repo` | `-R \"$repo\"` flag on all commands |\n| `output_mode = json` | `--json` flag for structured output |\n| `timeout` | Managed by FORGE skill executor |\n| `auth` | `gh auth status` pre-check |\n\n## AgentResult Mapping\n\n| gh output | AgentResult field |\n|---|---|\n| Issue\u002FPR URL | `output` |\n| JSON list | `output` (structured) |\n| Error message | `output` (prefixed with `ERROR:`) |\n| Command executed | `metadata.command` |\n","# GitHub Skill\n\nUse this skill to perform GitHub operations via the `gh` CLI.\nOnly run commands that start with `gh`. Do not run arbitrary shell commands.\n\n## Prerequisites\n\nThe `gh` CLI must be installed and authenticated. Before any operation, verify:\n\n```bash\ngh auth status\n```\n\nIf this fails, return `\"ERROR: gh not authenticated. Run 'gh auth login' to authenticate.\"` and stop.\n\n## Capabilities\n\n### `create_issue(repo, title, body)`\n\nCreate a new issue on a GitHub repository.\n\n```bash\ngh issue create -R \"$repo\" --title \"$title\" --body \"$body\"\n```\n\nReturn the issue URL printed by `gh` on success.\n\nTo add labels, append `--label \"bug,urgent\"`. To assign, append `--assignee \"@me\"`.\n\n### `list_issues(repo, filter)`\n\nList issues with optional filtering. The `filter` parameter accepts space-separated flags.\n\n```bash\ngh issue list -R \"$repo\" --json number,title,state,labels,assignees --limit 30\n```\n\nCommon filters (append to command):\n- `--state open` or `--state closed`\n- `--label \"bug\"`\n- `--assignee \"@me\"`\n- `--search \"query\"`\n\nReturn the JSON array output.\n\n### `create_branch(repo, branch_name)`\n\nCreate a new branch from the default branch HEAD.\n\n```bash\ngh api \"repos\u002F$repo\u002Fgit\u002Frefs\" \\\n  -f \"ref=refs\u002Fheads\u002F$branch_name\" \\\n  -f \"sha=$(gh api \"repos\u002F$repo\u002Fgit\u002Fref\u002Fheads\u002Fmain\" -q '.object.sha')\"\n```\n\nIf the default branch is not `main`, first determine it:\n\n```bash\ngh repo view \"$repo\" --json defaultBranchRef -q '.defaultBranchRef.name'\n```\n\nReturn confirmation with the branch name and SHA on success.\n\n### `create_pr(repo, branch, title, body)`\n\nCreate a pull request from the given branch to the default branch.\n\n```bash\ngh pr create -R \"$repo\" --head \"$branch\" --title \"$title\" --body \"$body\"\n```\n\nTo target a different base branch, append `--base \"development\"`.\n\nReturn the PR URL printed by `gh` on success.\n\n### `update_pr(repo, selector, title, body)`\n\nUpdate an existing pull request selected by branch name, PR number, or URL.\nUse this after create\u002Freuse flows to repair stale PR bodies before merge.\n\n```bash\ngh pr edit \"$selector\" -R \"$repo\" --title \"$title\" --body \"$body\"\n```\n\nReturn the `gh` output on success.\n\n### `get_pr_for_branch(repo, branch)`\n\nFetch the pull request associated with a branch selector.\n\n```bash\ngh pr view \"$branch\" -R \"$repo\" --json number,url,state,headRefName,baseRefName,title,body\n```\n\nReturn the JSON output on success. Use this after uncertain PR creation to recover the existing PR URL and current body.\n\n### `create_labeled_issue(repo, title, body, labels_csv)`\n\nCreate a new issue with one or more labels attached. `labels_csv` is a\ncomma-separated list (e.g. `\"clone-dev,from:T7\"`); `gh --label` accepts\nthe CSV as-is.\n\n```bash\ngh issue create -R \"$repo\" --title \"$title\" --body \"$body\" --label \"$labels_csv\"\n```\n\nUnlike `create_issue`, this capability has a deterministic `command`\nexecutor — the argv is emitted directly to `gh`, so commas in the CSV\ncross the process boundary without shell interpolation.\n\nUse this over `create_issue` whenever downstream label routing matters\n(e.g. cross-project handoff, where the target repo's `dev_cycle` filters\non the label set).\n\nReturn the issue URL printed by `gh` on success.\n\n### `list_prs(repo, state, limit)`\n\nList pull requests with structured JSON output.\n\n```bash\ngh pr list -R \"$repo\" --state \"$state\" --limit \"$limit\" \\\n  --json number,title,author,state,mergedAt,createdAt,labels,reviewDecision,headRefName,baseRefName,additions,deletions,changedFiles\n```\n\nThe `state` parameter accepts `open`, `closed`, `merged`, or `all`.\n\nReturn the JSON array output. Each entry includes `reviewDecision` (`APPROVED`, `CHANGES_REQUESTED`, `REVIEW_REQUIRED`, or empty) and `mergedAt` (ISO-8601 timestamp, empty if not merged).\n\nTo filter by merge date, append `--search \"merged:>2024-01-15\"` to the command.\n\n### `get_pr_reviews(repo, pr_number)`\n\nFetch review objects for a pull request via the GitHub REST API.\n\n```bash\ngh api \"repos\u002F$repo\u002Fpulls\u002F$pr_number\u002Freviews\" --paginate\n```\n\nReturns a JSON array of review objects, each with `state` (`APPROVED`, `CHANGES_REQUESTED`, `COMMENTED`, `DISMISSED`), `body`, `user.login`, and `submitted_at`.\n\n### `get_pr_diff(repo, pr_number)`\n\nFetch the unified diff for a pull request.\n\n```bash\ngh pr diff \"$pr_number\" -R \"$repo\"\n```\n\nReturns the full unified diff text. Note: diffs can be very large — callers should truncate before sending to LLM reasoning.\n\n### `check_ci(repo, ref)`\n\nCheck CI status for a PR number or git ref.\n\nFor a PR number:\n\n```bash\ngh pr checks \"$ref\" -R \"$repo\" --json name,state,conclusion\n```\n\nFor a commit SHA:\n\n```bash\ngh run list -R \"$repo\" --commit \"$ref\" --json status,conclusion,name --limit 10\n```\n\nReturn the JSON output. Summarize pass\u002Ffail counts if multiple checks exist.\n\n### `merge_pr(repo, pr_number)`\n\nMerge a pull request.\n\nFirst verify the PR is mergeable:\n\n```bash\ngh pr view \"$pr_number\" -R \"$repo\" --json mergeable,mergeStateStatus -q '.mergeable'\n```\n\nIf mergeable, proceed:\n\n```bash\ngh pr merge \"$pr_number\" -R \"$repo\" --merge\n```\n\nUse `--merge` by default. Only use `--squash` or `--rebase` if the caller specifies it in the arguments.\n\nReturn the merge result message.\n\n### `delete_branch(repo, branch_name)`\n\nDelete a remote branch.\n\nFirst verify the branch exists and is not the default branch:\n\n```bash\ngh api \"repos\u002F$repo\u002Fgit\u002Fref\u002Fheads\u002F$branch_name\" -q '.ref'\n```\n\nIf it exists and is not the default branch:\n\n```bash\ngh api -X DELETE \"repos\u002F$repo\u002Fgit\u002Frefs\u002Fheads\u002F$branch_name\"\n```\n\nReturn confirmation or error.\n\n### `close_issue(repo, issue_number)`\n\nClose an issue.\n\n```bash\ngh issue close \"$issue_number\" -R \"$repo\"\n```\n\nTo close with a comment:\n\n```bash\ngh issue close \"$issue_number\" -R \"$repo\" --comment \"Closing: resolved\"\n```\n\nReturn confirmation message.\n\n## Error Handling\n\n### Authentication failures\n\nIf `gh auth status` returns non-zero or any command returns `\"not logged in\"`:\n\nReturn `\"ERROR: gh not authenticated. Run 'gh auth login' to authenticate.\"` — do not retry.\n\n### Rate limits\n\nIf a command returns `\"API rate limit exceeded\"` or HTTP 403 with rate-limit headers:\n\nReturn `\"ERROR: GitHub API rate limit exceeded. Retry after rate limit resets.\"` — do not retry.\n\n### Not found\n\nIf a command returns `\"Could not resolve\"`, `\"not found\"`, or HTTP 404:\n\nReturn `\"ERROR: Resource not found — verify the repo, issue number, or branch name.\"` — do not guess alternatives.\n\n### Merge conflicts\n\nIf `gh pr merge` fails with `\"not mergeable\"`, `\"merge conflict\"`, or `\"blocked\"`:\n\nReturn `\"ERROR: PR cannot be merged — conflicts or failing checks. Resolve before retrying.\"` — do not force merge.\n\n## Safety Rules\n\n- Only run commands starting with `gh`. No arbitrary shell commands.\n- Never force-push or delete the default branch.\n- Always verify a resource exists before attempting destructive operations (delete_branch, merge_pr).\n- Use `--merge` strategy by default. Only use `--squash` or `--rebase` when explicitly requested.\n- Return the full `gh` command that was run alongside the result for auditability.\n- Do not store or log authentication tokens.\n\n## Session Adapter Mapping\n\n| FORGE session field | gh CLI |\n|---|---|\n| `repo` | `-R \"$repo\"` flag on all commands |\n| `output_mode = json` | `--json` flag for structured output |\n| `timeout` | Managed by FORGE skill executor |\n| `auth` | `gh auth status` pre-check |\n\n## AgentResult Mapping\n\n| gh output | AgentResult field |\n|---|---|\n| Issue\u002FPR URL | `output` |\n| JSON list | `output` (structured) |\n| Error message | `output` (prefixed with `ERROR:`) |\n| Command executed | `metadata.command` |\n",{"name":5,"timeout":42,"description":7,"capabilities":43,"allowed-tools":154},120,[44,48,51,54,57,75,84,94,103,116,125,133,139,148,151],{"name":45,"inputs":46,"output":47},"create_issue",[47,47,47],"Text",{"name":49,"inputs":50,"output":47},"list_issues",[47,47],{"name":52,"inputs":53,"output":47},"create_branch",[47,47],{"name":55,"inputs":56,"output":47},"create_pr",[47,47,47,47],{"name":58,"inputs":59,"output":47,"params":60,"executor":64},"update_pr",[47,47,47,47],[23,61,62,63],"selector","title","body",{"argv":65,"kind":74},[25,36,66,67,68,69,70,71,72,73],"edit","{selector}","-R","{repo}","--title","{title}","--body","{body}","command",{"name":76,"inputs":77,"output":47,"params":78,"executor":79},"get_pr_for_branch",[47,47],[23,24],{"argv":80,"kind":74},[25,36,21,81,68,69,82,83],"{branch}","--json","number,url,state,headRefName,baseRefName,title,body",{"name":85,"inputs":86,"output":47,"params":87,"executor":89},"create_labeled_issue",[47,47,47,47],[23,62,63,88],"labels_csv",{"argv":90,"kind":74},[25,91,35,68,69,70,71,72,73,92,93],"issue","--label","{labels_csv}",{"name":95,"inputs":96,"output":47,"params":97,"executor":99},"check_ci",[47,47],[23,98],"ref",{"argv":100,"kind":74},[25,36,101,102,68,69],"checks","{ref}",{"name":104,"inputs":105,"output":47,"params":106,"executor":108},"list_prs",[47,47,47],[23,33,107],"limit",{"argv":109,"kind":74},[25,36,110,68,69,111,112,113,114,82,115],"list","--state","{state}","--limit","{limit}","number,title,author,state,mergedAt,createdAt,labels,reviewDecision,headRefName,baseRefName,additions,deletions,changedFiles",{"name":117,"inputs":118,"output":47,"params":119,"executor":121},"get_pr",[47,47],[23,120],"pr_number",{"argv":122,"kind":74},[25,36,21,123,68,69,82,124],"{pr_number}","title,number,baseRefName,headRefName,author,state,url,additions,deletions,changedFiles",{"name":126,"inputs":127,"output":47,"params":128,"executor":129},"get_pr_reviews",[47,47],[23,120],{"argv":130,"kind":74},[25,29,131,132],"repos\u002F{repo}\u002Fpulls\u002F{pr_number}\u002Freviews","--paginate",{"name":134,"inputs":135,"output":47,"params":136,"executor":137},"get_pr_diff",[47,47],[23,120],{"argv":138,"kind":74},[25,36,20,123,68,69],{"name":140,"inputs":141,"output":47,"params":142,"executor":143},"merge_pr",[47,47],[23,120],{"argv":144,"kind":74},[25,36,145,123,68,69,146,147],"merge","--squash","--delete-branch",{"name":149,"inputs":150,"output":47},"delete_branch",[47,47],{"name":152,"inputs":153,"output":47},"close_issue",[47,47],[155],"Bash(gh:*)","development","357dd4b767160fd37a6f66eed6488d9fae43be60","skills\u002Fgithub","https:\u002F\u002Fgithub.com\u002Fncmlabs\u002Fforge","https:\u002F\u002Fgithub.com\u002Fncmlabs","ncmlabs.com","2026-10-16 01:25:57",{"source":8,"skillName":5,"commands":164,"prompt":174,"zipAvailable":175},[165,168,171],{"tool":166,"command":167},"npx","npx skills add ncmlabs\u002Fforge --skill github",{"tool":169,"command":170},"bunx","bunx skills add ncmlabs\u002Fforge --skill github",{"tool":172,"command":173},"pnpm","pnpm dlx skills add ncmlabs\u002Fforge --skill github","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fncmlabs\u002Fforge\u002Fblob\u002Fdevelopment\u002Fskills\u002Fgithub\u002FSKILL.md",true,[177,182,188],{"path":178,"resourceType":178,"resourceTypeDesc":179,"sizeBytes":180,"sourceHtmlUrl":181},"LICENSE","许可证",1063,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-run-adversarial-input-tests\u002FLICENSE",{"path":183,"resourceType":184,"resourceTypeDesc":185,"sizeBytes":186,"sourceHtmlUrl":187},"SOURCE.md","REFERENCE","参考文档",353,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-run-adversarial-input-tests\u002FSOURCE.md",{"path":189,"resourceType":184,"resourceTypeDesc":185,"sizeBytes":190,"sourceHtmlUrl":191},"TRUST.auto.yaml",2217,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fpayments\u002F0xklen-run-adversarial-input-tests\u002FTRUST.auto.yaml",[193,202,215,244,271,284],{"skillNo":194,"name":195,"nameZh":6,"description":196,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":197,"categories":198,"keywords":199,"publishedAt":37},"01M6CP25SKSYXW6F6VW5QHCHR1","greeter","Greet a person by name.","https:\u002F\u002Fgithub.com\u002Fncmlabs\u002Fforge\u002Fblob\u002Fdevelopment\u002Ftests\u002Ffixtures\u002Fskill-project\u002Fskills\u002Fgreeter\u002FSKILL.md",[],[195,200,26,201],"hello","greet",{"skillNo":203,"name":204,"nameZh":6,"description":205,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":206,"categories":207,"keywords":208,"publishedAt":37},"01M6CP23Y84FG8XFP7Q6SM0JM3","git_analysis","Deep agentic analysis of git repository health and trends","https:\u002F\u002Fgithub.com\u002Fncmlabs\u002Fforge\u002Fblob\u002Fdevelopment\u002Ftests\u002Ffixtures\u002Fsentinel\u002Fskills\u002Fgit-analysis\u002FSKILL.md",[],[209,210,211,212,213,214,28],"git","analysis","git analysis","agentic","repository","health",{"skillNo":216,"name":217,"nameZh":6,"description":218,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":219,"categories":220,"keywords":231,"publishedAt":37},"01M6CP2116VHMB054AAZ88CXPY","write-forge","Writing, checking or running FORGE `.forge` programs — the authoring loop, the CLI's JSON envelope and exit codes, and the syntax and checker mistakes that break agents. Use when a task asks for a FORGE program or `.forge` file, names FORGE tasks\u002Fflows\u002Fagents\u002Fpools\u002Fwardens, or when the project has a forge.project.toml.","https:\u002F\u002Fgithub.com\u002Fncmlabs\u002Fforge\u002Fblob\u002Fdevelopment\u002Fskills\u002Fwrite-forge\u002FSKILL.md",[221,226],{"categoryNo":222,"categoryName":223,"taxonomyType":224,"taxonomyTypeDesc":225},"01JBSEEDCAT000000000000018","写作与文案","SCENARIO","使用场景",{"categoryNo":227,"categoryName":228,"taxonomyType":229,"taxonomyTypeDesc":230},"01JBSEEDCAT000000000000036","内容创作者","PROFESSION","适用职业",[232,233,234,235,19,236,237,238,239,240,241,242,243],"forge","write","write forge","writing","tasks","file","loop","json","syntax","use","exit","task",{"skillNo":245,"name":246,"nameZh":6,"description":247,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":248,"categories":249,"keywords":256,"publishedAt":37},"01M6CP1WS0J5FF0D45Q76FGJJ7","slack","Slack operations via the Web API — messages, channels, threads, reactions, and approvals.","https:\u002F\u002Fgithub.com\u002Fncmlabs\u002Fforge\u002Fblob\u002Fdevelopment\u002Fskills\u002Fslack\u002FSKILL.md",[250,253],{"categoryNo":251,"categoryName":252,"taxonomyType":224,"taxonomyTypeDesc":225},"01JBSEEDCAT000000000000005","邮件与沟通",{"categoryNo":254,"categoryName":255,"taxonomyType":224,"taxonomyTypeDesc":225},"01JBSEEDCAT000000000000010","后端与接口",[246,257,74,258,259,260,261,262,263,28,264,265,266,29,267,268,269,34,270,26],"read","operations","ok","timestamp","info","curl","message","history","bot","pin","messages","https","update","web",{"skillNo":272,"name":273,"nameZh":6,"description":274,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":275,"categories":276,"keywords":277,"publishedAt":37},"01M6CP1T778FD17PC9Z3GQMFX2","ollama","Use Ollama local inference for text generation, classification, and analysis via local GPU models.","https:\u002F\u002Fgithub.com\u002Fncmlabs\u002Fforge\u002Fblob\u002Fdevelopment\u002Fskills\u002Follama\u002FSKILL.md",[],[273,278,279,280,281,241,26,282,28,283,210],"generate","inference","gpu","models","analyze","classification",{"skillNo":285,"name":286,"nameZh":6,"description":287,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":288,"categories":289,"keywords":296,"publishedAt":37},"01M6CP1KXD4CY5EQ117Q2CQKY4","codex","Use Codex CLI as a bounded coding agent for repo exploration, implementation, review, and session resume.","https:\u002F\u002Fgithub.com\u002Fncmlabs\u002Fforge\u002Fblob\u002Fdevelopment\u002Fskills\u002Fcodex\u002FSKILL.md",[290,293],{"categoryNo":291,"categoryName":292,"taxonomyType":224,"taxonomyTypeDesc":225},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":294,"categoryName":295,"taxonomyType":229,"taxonomyTypeDesc":230},"01JBSEEDCAT000000000000038","人力资源",[286,297,298,299,300,241,301,23,26,302,28,303,304,305,19,306],"coding","exploration","implementation","resume","session","explore","codex cli","implement","coding agent","review"]