{"id":"5ccd29de-7726-4756-ac86-f722c47bea31","shortId":"cry35k","kind":"skill","title":"gh","tagline":"GitHub CLI — source control, CI, code review, and issues for OSS and personal repos","description":"# Skill: gh\n\nGitHub CLI (`gh`) gotchas that `--help` won't tell you.\n\n## Reading PR/issue comments — prefer `gh pr view --json`\n\nFor plain comment reads, use `gh pr view N --json comments,reviews --jq ...` (or `gh issue view`) instead of `gh api repos/.../pulls/N/comments`. The `gh pr view` form is allow-listed as read-only; `gh api` is on `ask` because it accepts `-X POST/PATCH/DELETE`.\n\n```bash\n# Top-level PR comments\ngh pr view \"$PR\" --json comments --jq '.comments[] | {user: .author.login, body: .body}'\n\n# Inline review comments\ngh pr view \"$PR\" --json reviews --jq '.reviews[] | {user: .author.login, state, body: .body}'\n```\n\nField names differ from REST: `.author.login` (not `.user.login`), no `commit_id` or `in_reply_to_id`. Drop down to `gh api .../comments` only when you need those REST-only fields (e.g. the automated-review flow below).\n\n## What needs action across repos\n\nBucket cross-repo PR work on `latestReviews[].state` and `mergeStateStatus`:\n\n```bash\ngh api graphql -f query='{\n  viewer { pullRequests(first: 50, states: OPEN) { nodes {\n    number title url isDraft mergeStateStatus\n    repository { nameWithOwner }\n    reviewRequests(first: 20) { nodes { requestedReviewer { ... on User { login } ... on Bot { login } } } }\n    latestReviews(first: 20) { nodes { state author { login } submittedAt } }\n    commits(last: 1) { nodes { commit { committedDate } } }\n  } } }\n  search(query: \"is:pr is:open review-requested:@me\", type: ISSUE, first: 50) { nodes { ... on PullRequest {\n    number title url repository { nameWithOwner }\n  } } }\n}'\n```\n\nBucket your authored PRs (closest-to-done first). `lastCommit = commits[-1].commit.committedDate`:\n\n| Bucket | Rule |\n|---|---|\n| **conflict** | `mergeStateStatus == DIRTY` — fix first |\n| **ci-failing** | `mergeStateStatus == UNSTABLE` |\n| **review-to-address** | any `latestReviews[].state` in `(CHANGES_REQUESTED, COMMENTED)` with `submittedAt > lastCommit` — bots count |\n| **ready-to-merge** | `mergeStateStatus == CLEAN` AND any `APPROVED` in `latestReviews[].state` AND no `CHANGES_REQUESTED`/`COMMENTED` newer than `lastCommit` |\n| **waiting-for-review** | none of the above; `reviewRequests` non-empty or no review yet |\n\nThe `search` block returns others' PRs requesting your review (**review-requested**). For mentions and assigned issues without PRs, use `gh status` (`--org <org>` to scope, `-e <owner/repo>` to exclude).\n\n### `mergeStateStatus` values\n\n| Value | Means |\n|---|---|\n| `CLEAN` | No conflicts, branch protection satisfied |\n| `DIRTY` | Merge conflicts |\n| `UNSTABLE` | CI failing |\n| `BLOCKED` | Branch protection unsatisfied (e.g. required approval missing) — **not a conflict** |\n| `BEHIND` | Behind base branch |\n| `HAS_HOOKS` | Mergeable with passing status and pre-receive hooks |\n| `UNKNOWN` | Retry |\n\n### Known silent failures\n\n- `gh pr list --reviewer @me` returns empty even when review requests exist — use the GraphQL `search` block above (or `gh search prs --review-requested=@me`).\n- `gh search prs --reviewed-by @me` returns empty — for PRs you've reviewed, query per-repo with `gh pr list --json author,reviews` and filter `reviews[].author.login == @me AND author.login != @me`.\n\n## Automated review (Copilot, Codex, etc.)\n\n`gh` is the transport for GitHub-hosted automated reviewers. Per-org config lives in `~/.local/share/chezmoi/.chezmoidata/local.yaml` under `orgs.<org>.automated_review` (see `local.yaml.example` in the dotfiles repo root for schema). Orgs without that block have no automated review available.\n\n### Is automated review available for this repo?\n\n**Run this exact command. Do not infer availability from collaborator lists, repo settings, prior PRs, or anything else.**\n\n```bash\nORG=$(gh repo view --json owner -q '.owner.login')\nchezmoi data --format json | jq -r \".orgs[\\\"$ORG\\\"].automated_review // empty\"\n```\n\n- **Non-empty output** = available. The returned object has `bot_login`, `auto_runs`, and `trigger`. Proceed with the trigger/wait/fetch flow below.\n- **Empty output** = not configured for this org. Only then fall back to the no-automation pipeline.\n\nCommon wrong checks that will give you a false negative:\n- Listing repo collaborators and looking for the bot login — the bot is not added as a collaborator\n- Checking org-level installed apps via `gh api` — the bot may be installed at GitHub-account level rather than per-org\n- Looking at prior PRs for bot reviews — a repo with no prior bot reviews may still be configured\n\n### Fetch the latest automated review for a PR\n\nPull all reviews authored by the configured `bot_login`. Most recent first; take `[0]` for the latest:\n\n```bash\ngh api \"repos/$OWNER/$REPO/pulls/$PR/reviews\" --paginate \\\n  --jq \"[.[] | select(.user.login == \\\"$BOT_LOGIN\\\")] | sort_by(.submitted_at) | reverse\"\n```\n\nEach review has `commit_id` (the head SHA at review time — needed for staleness checks) and `submitted_at`. Inline comments live separately:\n\n```bash\ngh api \"repos/$OWNER/$REPO/pulls/$PR/comments\" --paginate \\\n  --jq \"[.[] | select(.user.login == \\\"$BOT_LOGIN\\\") | {path, line, body, id, in_reply_to_id, commit_id}]\"\n```\n\nReply threads on a comment use `in_reply_to_id` chains.\n\n### Trigger automated review\n\n**Use only the commands below. Do not invent alternatives.** The REST endpoint `POST /repos/{o}/{r}/pulls/{n}/requested_reviewers` returns 422 *\"Reviews may only be requested from collaborators\"* when given `copilot-pull-request-reviewer` — the bot is not a collaborator. Only `gh pr edit --add-reviewer \"@copilot\"` works, because `@copilot` is a special handle that `gh` resolves client-side (see `gh pr edit --help`).\n\nThe `trigger` field returned by the availability check tells you which form. Parse it and run the corresponding command — do not hardcode the handle or text:\n\n- `add_reviewer @handle` → `gh pr edit $PR --add-reviewer \"@handle\"`\n- `comment @handle <text>` → `gh pr comment $PR --body \"@handle <text>\"`\n\n```bash\nTRIGGER=$(chezmoi data --format json | jq -r \".orgs[\\\"$ORG\\\"].automated_review.trigger\")\nFORM=\"${TRIGGER%% *}\"          # \"add_reviewer\" or \"comment\"\nARGS=\"${TRIGGER#* }\"           # everything after the first word\n\nif [[ \"$FORM\" == \"add_reviewer\" ]]; then\n  gh pr edit \"$PR\" --add-reviewer \"$ARGS\"\nelse\n  gh pr comment \"$PR\" --body \"$ARGS\"\nfi\n```\n\nTriggering is a public action — it appears in the timeline. Announce it before doing it.\n\nAfter triggering, verify the bot was actually added as a reviewer before waiting:\n\n```bash\ngh api \"repos/$OWNER/$REPO/pulls/$PR/requested_reviewers\" --jq '.users[].login, (.users[] | select(.type==\"Bot\") | .login)'\n```\n\nNote: Copilot appears in `requested_reviewers` as login `Copilot` (a Bot user, app slug `copilot-pull-request-reviewer`), but its review submissions use login `copilot-pull-request-reviewer[bot]` — the `bot_login` from the availability check matches the *review author*, not the requested-reviewer login.\n\n### Wait for a fresh review\n\nAfter triggering (or to wait for an auto-running bot), poll until a review exists with a `commit_id` matching the current HEAD (or just newer than `since_sha`). Reasonable cadence: every 5s, timeout 120s.\n\n```bash\nTARGET_SHA=$(gh pr view \"$PR\" --json headRefOid -q .headRefOid)\nfor i in {1..24}; do\n  LATEST=$(gh api \"repos/$OWNER/$REPO/pulls/$PR/reviews\" --paginate \\\n    --jq \"[.[] | select(.user.login == \\\"$BOT_LOGIN\\\")] | sort_by(.submitted_at) | reverse | .[0].commit_id\")\n  [[ \"$LATEST\" == \"$TARGET_SHA\" ]] && break\n  sleep 5\ndone\n```\n\n### Was a prior review already requested-and-dismissed?\n\nDon't re-trigger if the human author dismissed the bot without a fix and the diff hasn't materially changed. Check review timeline events:\n\n```bash\ngh api \"repos/$OWNER/$REPO/pulls/$PR/reviews\" --paginate \\\n  --jq \"[.[] | select(.user.login == \\\"$BOT_LOGIN\\\") | {state, dismissed: .state == \\\"DISMISSED\\\", submitted_at, commit_id}]\"\n```\n\n`state == \"DISMISSED\"` with no follow-up review means the author chose not to act on it.\n\n## Checking repo visibility\n\n```bash\ngh repo view --json visibility -q '.visibility'\n```\n\n## CI status\n\n```bash\n# Latest run on a branch\ngh run list --branch <branch> --limit 1\n\n# Failed step logs\ngh run view <run-id> --log-failed\n```\n\n## Inline Review Comments\n\n`gh pr review` doesn't support inline comments on specific lines. Use `gh api` instead.\n\n### Posting Inline Comments\n\nUse `--input -` with heredoc JSON (not `-f 'comments=[...]'` which gets stringified):\n\n```bash\ngh api repos/{owner}/{repo}/pulls/{pr_number}/reviews \\\n  --method POST \\\n  --input - << 'EOF'\n{\n  \"event\": \"REQUEST_CHANGES\",\n  \"comments\": [\n    {\"path\":\"file.rb\",\"line\":10,\"body\":\"Comment text\"},\n    {\"path\":\"other.rb\",\"line\":25,\"body\":\"Another comment\"}\n  ]\n}\nEOF\n```\n\nEvent types: `COMMENT`, `APPROVE`, `REQUEST_CHANGES`.\n\n### Approving with Nits\n\nWhen approving with non-blocking feedback (nits), disable auto-merge so the author has a chance to address them before the merge lands:\n\n```bash\ngh pr merge --disable-auto {pr_number}\n```\n\nDo this **before** posting the review. If auto-merge wasn't enabled, the command is a no-op that exits cleanly.\n\n### Multi-line Comments\n\n```json\n{\"path\":\"file.rb\",\"start_line\":5,\"line\":10,\"body\":\"This block...\"}\n```\n\n### Responding to Review Feedback\n\nWhen addressing reviewer comments after making fixes:\n\n1. **Fixed it?** Resolve the conversation thread (no reply needed).\n2. **Not addressing it?** Reply explaining why.\n\n**Push before resolving.** GitHub ties thread resolution to the commit that addressed it.\n\n### Listing Review Threads\n\n```bash\ngh api graphql -f query='\n  query($owner:String!,$repo:String!,$pr:Int!) {\n    repository(owner:$owner,name:$repo) {\n      pullRequest(number:$pr) {\n        reviewThreads(first:100) {\n          nodes {\n            id isResolved path line\n            comments(first:5) {\n              nodes { id body author { login } }\n            }\n          }\n        }\n      }\n    }\n  }' -f owner=OWNER -f repo=REPO -F pr=NUMBER\n```\n\n### Resolving a Thread\n\n```bash\ngh api graphql -f query='\n  mutation($id:ID!) {\n    resolveReviewThread(input:{threadId:$id}) {\n      thread { isResolved }\n    }\n  }' -f id=PRRT_kwDOxxxxxxx\n```\n\n### Replying to a Thread\n\nUse the REST API with the **top comment's numeric ID**:\n\n```bash\ngh api repos/{owner}/{repo}/pulls/{pr_number}/comments/{comment_id}/replies \\\n  --method POST \\\n  -f body=\"Intentionally left as-is because...\"\n```\n\n### Line Number Gotchas\n\n- Line numbers are file lines in HEAD commit (new file version)\n- GitHub's diff display can be off-by-one from what you expect\n- To delete a misplaced comment: `gh api repos/{owner}/{repo}/pulls/comments/{id} --method DELETE`\n\n### Notes\n\n- Omit top-level `body` field to skip summary comment\n- Each comment needs: `path`, `line`, `body`\n\n## GitHub Issues\n\n`gh issue` handles GitHub Issues for OSS and personal repos (non-Linear trackers). Use `gh issue create`, `gh issue list`, `gh issue view`, and `gh issue edit`. GitHub issue templates live in `.github/ISSUE_TEMPLATE/*.md` — `gh issue create --template` only works interactively; read the template file directly and pass content via `--body-file`.","tags":["dotfiles","athal7","agent-skills"],"capabilities":["skill","source-athal7","skill-gh","topic-agent-skills"],"categories":["dotfiles"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/athal7/dotfiles/gh","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add athal7/dotfiles","source_repo":"https://github.com/athal7/dotfiles","install_from":"skills.sh"}},"qualityScore":"0.453","qualityRationale":"deterministic score 0.45 from registry signals: · indexed on github topic:agent-skills · 6 github stars · SKILL.md body (11,111 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:14:34.788Z","embedding":null,"createdAt":"2026-05-18T13:22:29.792Z","updatedAt":"2026-05-18T19:14:34.788Z","lastSeenAt":"2026-05-18T19:14:34.788Z","tsv":"'-1':248 '/.local/share/chezmoi/.chezmoidata/local.yaml':470 '/comments':137,1470 '/pulls':763,1226,1467 '/pulls/comments':1522 '/pulls/n/comments':58 '/replies':1473 '/repos':760 '/requested_reviewers':765 '/reviews':1229 '0':666,1071 '1':211,1050,1178,1345 '10':1241,1330 '100':1401 '120s':1035 '2':1355 '20':192,203 '24':1051 '25':1248 '422':767 '5':1079,1328,1409 '50':179,228 '5s':1033 'accept':79 'account':620 'across':157 'act':1151 'action':156,908 'actual':925 'ad':599,926 'add':793,840,848,872,885,893 'add-review':792,847,892 'address':265,1281,1339,1357,1373 'allow':66 'allow-list':65 'alreadi':1085 'altern':755 'announc':914 'anoth':1250 'anyth':516 'api':56,73,136,172,611,672,712,934,1055,1118,1204,1222,1380,1429,1453,1463,1518 'app':608,959 'appear':910,949 'approv':286,365,1256,1259,1263 'arg':876,895,902 'as-i':1480 'ask':76 'assign':329 'author':206,239,439,656,988,1098,1147,1276,1413 'author.login':97,112,121,444,447 'auto':549,1008,1272,1293,1304 'auto-merg':1271,1303 'auto-run':1007 'autom':150,449,462,473,490,494,535,574,648,745 'automated-review':149 'automated_review.trigger':869 'avail':492,496,507,542,820,983 'back':569 'base':372 'bash':82,170,518,670,710,859,932,1036,1116,1157,1167,1220,1287,1378,1427,1461 'behind':370,371 'block':316,359,406,487,1267,1333 'bodi':98,99,114,115,725,857,901,1242,1249,1331,1412,1477,1531,1542,1597 'body-fil':1596 'bot':199,276,547,593,596,613,632,639,660,681,721,783,923,945,957,977,979,1010,1064,1101,1127 'branch':350,360,373,1172,1176 'break':1077 'bucket':159,237,250 'cadenc':1031 'chain':743 'chanc':1279 'chang':270,292,1111,1236,1258 'check':578,603,702,821,984,1112,1154 'chezmoi':527,861 'chose':1148 'ci':6,258,357,1165 'ci-fail':257 'clean':283,347,1318 'cli':3,19 'client':807 'client-sid':806 'closest':242 'closest-to-don':241 'code':7 'codex':452 'collabor':509,588,602,774,787 'command':503,750,832,1310 'comment':30,38,46,87,93,95,102,272,294,707,737,851,855,875,899,1190,1198,1208,1216,1237,1243,1251,1255,1322,1341,1407,1457,1471,1516,1536,1538 'commit':125,209,213,247,691,731,1018,1072,1135,1371,1494 'commit.committeddate':249 'committedd':214 'common':576 'config':467 'configur':562,644,659 'conflict':252,349,355,369 'content':1594 'control':5 'convers':1350 'copilot':451,778,795,798,948,955,962,973 'copilot-pull-request-review':777,961,972 'correspond':831 'count':277 'creat':1562,1582 'cross':161 'cross-repo':160 'current':1022 'data':528,862 'delet':1513,1525 'diff':1107,1500 'differ':118 'direct':1591 'dirti':254,353 'disabl':1270,1292 'disable-auto':1291 'dismiss':1089,1099,1130,1132,1138 'display':1501 'doesn':1194 'done':244,1080 'dotfil':479 'drop':132 'e':339 'e.g':147,363 'edit':791,812,845,890,1572 'els':517,896 'empti':309,396,424,537,540,559 'enabl':1308 'endpoint':758 'eof':1233,1252 'etc':453 'even':397 'event':1115,1234,1253 'everi':1032 'everyth':878 'exact':502 'exclud':342 'exist':401,1015 'exit':1317 'expect':1511 'explain':1360 'f':174,1215,1382,1415,1418,1421,1431,1442,1476 'fail':259,358,1179,1187 'failur':389 'fall':568 'fals':584 'feedback':1268,1337 'fetch':645 'fi':903 'field':116,146,816,1532 'file':1490,1496,1590,1598 'file.rb':1239,1325 'filter':442 'first':178,191,202,227,245,256,664,881,1400,1408 'fix':255,1104,1344,1346 'flow':152,557 'follow':1142 'follow-up':1141 'form':63,825,870,884 'format':529,863 'fresh':998 'get':1218 'gh':1,17,20,32,41,50,55,60,72,88,103,135,171,334,390,409,416,435,454,520,610,671,711,789,804,810,843,853,888,897,933,1039,1054,1117,1158,1173,1182,1191,1203,1221,1288,1379,1428,1462,1517,1545,1560,1563,1566,1570,1580 'github':2,18,460,619,1365,1498,1543,1548,1573 'github-account':618 'github-host':459 'github/issue_template':1578 'give':581 'given':776 'gotcha':21,1486 'graphql':173,404,1381,1430 'handl':802,837,842,850,852,858,1547 'hardcod':835 'hasn':1108 'head':694,1023,1493 'headrefoid':1044,1046 'help':23,813 'heredoc':1212 'hook':375,384 'host':461 'human':1097 'id':126,131,692,726,730,732,742,1019,1073,1136,1403,1411,1434,1435,1439,1443,1460,1472,1523 'infer':506 'inlin':100,706,1188,1197,1207 'input':1210,1232,1437 'instal':607,616 'instead':53,1205 'int':1390 'intent':1478 'interact':1586 'invent':754 'isdraft':186 'isresolv':1404,1441 'issu':10,51,226,330,1544,1546,1549,1561,1564,1567,1571,1574,1581 'jq':48,94,109,531,678,718,865,939,1061,1124 'json':35,45,92,107,438,523,530,864,1043,1161,1213,1323 'known':387 'kwdoxxxxxxx':1445 'land':1286 'last':210 'lastcommit':246,275,297 'latest':647,669,1053,1074,1168 'latestreview':166,201,267,288 'left':1479 'level':85,606,621,1530 'limit':1177 'line':724,1201,1240,1247,1321,1327,1329,1406,1484,1487,1491,1541 'linear':1557 'list':67,392,437,510,586,1175,1375,1565 'live':468,708,1576 'local.yaml.example':476 'log':1181,1186 'log-fail':1185 'login':197,200,207,548,594,661,682,722,941,946,954,971,980,994,1065,1128,1414 'look':590,627 'make':1343 'match':985,1020 'materi':1110 'may':614,641,769 'md':1579 'mean':346,1145 'mention':327 'merg':281,354,1273,1285,1290,1305 'mergeabl':376 'mergestatestatus':169,187,253,260,282,343 'method':1230,1474,1524 'misplac':1515 'miss':366 'multi':1320 'multi-lin':1319 'mutat':1433 'n':44,764 'name':117,1394 'namewithown':189,236 'need':141,155,699,1354,1539 'negat':585 'new':1495 'newer':295,1026 'nit':1261,1269 'no-autom':572 'no-op':1313 'node':182,193,204,212,229,1402,1410 'non':308,539,1266,1556 'non-block':1265 'non-empti':307,538 'non-linear':1555 'none':302 'note':947,1526 'number':183,232,1228,1295,1397,1423,1469,1485,1488 'numer':1459 'o':761 'object':545 'off-by-on':1504 'omit':1527 'one':1507 'op':1315 'open':181,220 'org':336,466,472,484,519,533,534,565,605,626,867,868 'org-level':604 'oss':12,1551 'other':318 'other.rb':1246 'output':541,560 'owner':524,674,714,936,1057,1120,1224,1385,1392,1393,1416,1417,1465,1520 'owner.login':526 'owner/repo':340 'pagin':677,717,1060,1123 'pars':826 'pass':378,1593 'path':723,1238,1245,1324,1405,1540 'per':432,465,625 'per-org':464,624 'per-repo':431 'person':14,1553 'pipelin':575 'plain':37 'poll':1011 'post':759,1206,1231,1299,1475 'post/patch/delete':81 'pr':33,42,61,86,89,91,104,106,163,218,391,436,652,790,811,844,846,854,856,889,891,898,900,1040,1042,1192,1227,1289,1294,1389,1398,1422,1468 'pr/comments':716 'pr/issue':29 'pr/requested_reviewers':938 'pr/reviews':676,1059,1122 'pre':382 'pre-rec':381 'prefer':31 'prior':513,629,638,1083 'proceed':553 'protect':351,361 'prrt':1444 'prs':240,319,332,411,418,426,514,630 'public':907 'pull':653,779,963,974 'pullrequest':177,231,1396 'push':1362 'q':525,1045,1163 'queri':175,216,430,1383,1384,1432 'r':532,762,866 'rather':622 're':1093 're-trigg':1092 'read':28,39,70,1587 'read-on':69 'readi':279 'ready-to-merg':278 'reason':1030 'receiv':383 'recent':663 'repli':129,728,733,740,1353,1359,1446 'repo':15,57,158,162,433,480,499,511,521,587,635,673,713,935,1056,1119,1155,1159,1223,1225,1387,1395,1419,1420,1464,1466,1519,1521,1554 'repo/pulls':675,715,937,1058,1121 'repositori':188,235,1391 'request':223,271,293,320,325,400,414,772,780,951,964,975,992,1087,1235,1257 'requested-and-dismiss':1086 'requested-review':991 'requestedreview':194 'requir':364 'resolut':1368 'resolv':805,1348,1364,1424 'resolvereviewthread':1436 'respond':1334 'rest':120,144,757,1452 'rest-on':143 'retri':386 'return':317,395,423,544,766,817 'revers':687,1070 'review':8,47,101,108,110,151,222,263,301,312,322,324,393,399,413,420,429,440,443,450,463,474,491,495,536,633,640,649,655,689,697,746,768,781,794,841,849,873,886,894,929,952,965,968,976,987,993,999,1014,1084,1113,1144,1189,1193,1301,1336,1340,1376 'review-request':221,323,412 'review-to-address':262 'reviewed-bi':419 'reviewrequest':190,306 'reviewthread':1399 'root':481 'rule':251 'run':500,550,829,1009,1169,1174,1183 'satisfi':352 'schema':483 'scope':338 'search':215,315,405,410,417 'see':475,809 'select':679,719,943,1062,1125 'separ':709 'set':512 'sha':695,1029,1038,1076 'side':808 'silent':388 'sinc':1028 'skill':16 'skill-gh' 'skip':1534 'sleep':1078 'slug':960 'sort':683,1066 'sourc':4 'source-athal7' 'special':801 'specif':1200 'stale':701 'start':1326 'state':113,167,180,205,268,289,1129,1131,1137 'status':335,379,1166 'step':1180 'still':642 'string':1386,1388 'stringifi':1219 'submiss':969 'submit':685,704,1068,1133 'submittedat':208,274 'summari':1535 'support':1196 'take':665 'target':1037,1075 'tell':26,822 'templat':1575,1583,1589 'text':839,1244 'thread':734,1351,1367,1377,1426,1440,1449 'threadid':1438 'tie':1366 'time':698 'timelin':913,1114 'timeout':1034 'titl':184,233 'top':84,1456,1529 'top-level':83,1528 'topic-agent-skills' 'tracker':1558 'transport':457 'trigger':552,744,815,860,871,877,904,920,1001,1094 'trigger/wait/fetch':556 'type':225,944,1254 'unknown':385 'unsatisfi':362 'unstabl':261,356 'url':185,234 'use':40,333,402,738,747,970,1202,1209,1450,1559 'user':96,111,196,940,942,958 'user.login':123,680,720,1063,1126 'valu':344,345 've':428 'verifi':921 'version':1497 'via':609,1595 'view':34,43,52,62,90,105,522,1041,1160,1184,1568 'viewer':176 'visibl':1156,1162,1164 'wait':299,931,995,1004 'waiting-for-review':298 'wasn':1306 'without':331,485,1102 'won':24 'word':882 'work':164,796,1585 'wrong':577 'x':80 'yet':313","prices":[{"id":"6432b54f-9e8c-4911-b711-279b46dfe080","listingId":"5ccd29de-7726-4756-ac86-f722c47bea31","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"athal7","category":"dotfiles","install_from":"skills.sh"},"createdAt":"2026-05-18T13:22:29.792Z"}],"sources":[{"listingId":"5ccd29de-7726-4756-ac86-f722c47bea31","source":"github","sourceId":"athal7/dotfiles/gh","sourceUrl":"https://github.com/athal7/dotfiles/tree/main/skills/gh","isPrimary":false,"firstSeenAt":"2026-05-18T13:22:29.792Z","lastSeenAt":"2026-05-18T19:14:34.788Z"}],"details":{"listingId":"5ccd29de-7726-4756-ac86-f722c47bea31","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"athal7","slug":"gh","github":{"repo":"athal7/dotfiles","stars":6,"topics":["agent-skills"],"license":null,"html_url":"https://github.com/athal7/dotfiles","pushed_at":"2026-05-18T18:53:57Z","description":null,"skill_md_sha":"18458396f397b166fa2441d537855d8036635727","skill_md_path":"skills/gh/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/athal7/dotfiles/tree/main/skills/gh"},"layout":"multi","source":"github","category":"dotfiles","frontmatter":{"name":"gh","license":"MIT","description":"GitHub CLI — source control, CI, code review, and issues for OSS and personal repos","compatibility":"opencode"},"skills_sh_url":"https://skills.sh/athal7/dotfiles/gh"},"updatedAt":"2026-05-18T19:14:34.788Z"}}