[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6HYNCDX0MS03SW78R8HRNNM":3,"skill-same:01M6HYNCDX0MS03SW78R8HRNNM":247},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":34,"linkOnly":35,"markdownContent":36,"markdownBody":37,"frontMatter":38,"refName":44,"commitSha":45,"skillDirectory":46,"forksCount":47,"repositoryHtmlUrl":42,"repositoryHomepageUrl":48,"ownerHtmlUrl":49,"ownerBlogUrl":50,"ownerDescription":6,"updatedAt":51,"install":52,"resources":64},"01M6HYNCDX0MS03SW78R8HRNNM","github",null,"Load to work or watch GitHub pull requests: threads, comments, reviews, CI logs, merges.","vanillagreencom\u002Fkendex","vanillagreencom","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F960140?v=4","01M6HYKK40E293HJHZHAXBHRP3","vanillagreen","01M6HYKK8C03G1JWBP1S14HHFN",93,"MIT","https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fgithub\u002FSKILL.md",[],[5,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33],"pull requests","issues","pull","https","logs","ci","work","watch","comments","reviews","threads","requests","true","load","ci logs","2026-11-10 10:12:30",false,"---\nname: github\ndescription: \"Load to work or watch GitHub pull requests: threads, comments, reviews, CI logs, merges.\"\nlicense: MIT\nuser-invocable: true\nmetadata:\n  author: \"vanillagreen\"\n  source: \"kendex\"\n  repository: \"https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\"\n  bugs: \"https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fissues\"\n---\n\n\u003C!-- kendex:project-instructions:start -->\n## Project Instructions\n\n\u003C!-- kendex:shared-instructions:start -->\nProblems with a kendex-owned skill go through `kendex report`; check ownership in the file first.\n\u003C!-- kendex:shared-instructions:end -->\n\u003C!-- kendex:project-instructions:end -->\n\n# GitHub pull requests\n\n```bash\n.agents\u002Fskills\u002Fgithub\u002Fscripts\u002Fgithub.sh [-C \u003Cpath>] \u003Ccommand> [options]\n```\n\n## Commands\n\n| Command | Purpose |\n|---------|---------|\n| `pr-data \u003CN> [--actionable]` | Get PR with threads, comments, files. `--actionable`: unresolved non-outdated only. |\n| `pr-view [N] [--json FIELDS]` | View PR details (wraps gh pr view with bounded auth\u002Fno-PR errors) |\n| `pr-threads \u003CN> [--unresolved\\|--resolved] [--format=safe\\|raw]` | Complete paginated thread list\u002Fcount, outdated included. Both filters apply in both formats. See *PR blocked with no visible conversations*. |\n| `pr-timeline \u003CN> [--repo OWNER\u002FREPO] [--gate-context NAME]` | One PR's phase stamps, push and bot review times, CI spans, and review and fix rounds as one JSON object. Bot reviews exclude reply-only reviews. CI figures exclude Copilot review checks. `--help` defines the clean span over each workflow run's latest attempt and the read limits. |\n| `pr-list-ready [--all] [--format=safe\\|table]` | List PRs ready for merge |\n| `pr-list-failing [--all] [--format=safe\\|table]` | List PRs with CI failures |\n| `pr-create [--title T] [--body B \\| --body-file PATH] [--base B] [--draft] [--dry-run] [--force]` | Create PR as bot against `--base`, else the repository's default branch: `WORKTREE_DEFAULT_BRANCH` when set, else GitHub's. Safety checks: the head is not the base, has commits, pushed; `--force` skips them. |\n| `pr-edit-body \u003CN> --body-file PATH` | Update an existing PR body through the sanitized router. |\n| `pr-merge \u003CN> [--check\\|--auto]` | Merge PR. `--check` reports readiness as JSON on stdout plus a one-word verdict and `head-run: \u003Cids>` (the run scope of the CI classification) on stderr; `--auto` queues a currently-blocked PR, and arms only where the base branch's rulesets require at least 1 approval and thread resolution and dismiss stale approvals on push, and refuses the admin route unless `--queue` explicitly requests a queue arm; the immediate merge passes `--admin` to GitHub only where the queue is all its token would bypass and the PR is not queue-only. Three exit codes. See *PR Merge Outcomes*. |\n| `ci-classify-refusal \u003CN>` | Name the cause of a pr-merge refusal. Output and retry contract: `ci-classify-refusal --help`. |\n| `check-review-replies \u003CN>` | Judge what the PR's review replies say, read live and read-only. See *Review reply check*. |\n| `pr-cross-check [N...] [--quick\\|--verify]` | Cross-PR analysis. `--verify`: full build+test (auto-detects build system). |\n| `pr-issue \u003CN> [--format=safe\\|text]` | Extract issue ID from PR branch (configurable via `GH_ISSUE_PATTERN`) |\n| `label-add \u003CPR-or-issue> \u003Clabel> [--issue] [--required\\|--optional]` | Add a label after checking the live inventory. Mode semantics and exit codes: `label-add --help`. |\n| `label-remove \u003CPR-or-issue> \u003Clabel> [--issue]` | Remove a label through the sanitized router. |\n| `ci-logs \u003CN> [--lines N] [--format=safe\\|text]` | Get CI failure logs for PR |\n| `bot-token [--format=safe\\|text]` | Check if bot token is configured, naming the selected variable as `source` |\n| `dismiss-review \u003CPR> [--bot\\|--user NAME] [--message M]` | Dismiss blocking review. The exit status reports whether the dismissals landed: `dismiss-review --help`. |\n| `resolve-thread \u003CPRRT_...>` | Mark thread(s) resolved. Works on threads the UI cannot render. The exit status reports whether the mutations landed: `resolve-thread --help`. See *PR blocked with no visible conversations*. |\n| `unresolve-thread \u003CPRRT_...>` | Reopen thread(s). The exit status reports whether the mutations landed: `unresolve-thread --help`. |\n| `post-reply \u003CPRRT_...\\|numeric-id> [body \\| --body-file PATH] [--pr N]` | Reply to review comment. `--pr N` is REQUIRED for numeric comment IDs; thread `PRRT_...` IDs need no PR number. |\n| `post-comment \u003CPR> [body \\| --body-file PATH]` | Post PR-level comment. |\n| `find-comment \u003CPR> --pattern \u003Cregex>` | Find comment by pattern\u002Fauthor |\n| `edit-comment \u003Cid> [body \\| --body-file PATH]` | Edit an existing comment, PR-level (`#issuecomment-\u003Cid>`) or inside a review thread (`#discussion_r\u003Cid>`). Endpoint order and the unknown-id refusal: `edit-comment --help`. |\n| `sticky-comment \u003CPR> [--verdict\\|--analysis\\|--body]` | Get bot sticky comment. `--verdict`: quick pass\u002Ffail. `--analysis`: deep recommendation. |\n\nCI waiting belongs to `.agents\u002Fskills\u002Forch\u002Fscripts\u002Fci-wait`.\n\nContracts: `label-add --help`, `edit-comment --help`, `git-https-auth --help`, `git-diff-summary --help`.\n\n### PR Merge Outcomes\n\nThe `pr-merge` readiness check blocks only on contexts the base branch requires, read from its rulesets and classic protection. Required workflows contribute check identities from their current completed runs on the head, executed in the consumer repository. Workflow file metadata must prove the source repository, path and configured revision. Distinct source definitions cannot share an execution. Classic required contexts remain name-based. A red check outside that set is a `ci_optional_failed:` warning, matching what GitHub itself merges over. A required context that has registered no check on the head is `ci_pending: \u003Ccontext> (missing)`. Optional pending or queued checks hold neither the merge nor the required-only CI wait. A pending required workflow or unregistered workflow jobs hold as ci_pending. Unreadable workflow evidence refuses as ci_fetch_failed, even when every visible job passes. A failed required workflow holds as ci_failed. Other unreadable protection, unnameable rule types and a base that requires nothing count every check. `--check`, the immediate merge and `--auto` run that readiness check; `ci-classify-refusal` reads the same required set. The orch `ci-wait` waiter counts every red check by default; `ci-wait --required-only`, which orch `queue-wait` runs, applies the same required set.\n\nFull contract: `pr-merge --help`. Exit `75` is volatile: the caller arms one exact head and waits on that head with the orch skill's `queue-wait`, whose `--help` § Verdicts maps each verdict to a route; an unrecognized verdict is never re-armed. If `can_merge` is false with no `issues`, read `state`. `pr-merge` resolves no review thread. The readiness check each call runs (`--check`, the merge and the `--auto` arm) runs the reply check below, which holds at that moment and no later: `--auto` arms nothing while the check fails, and `pr-merge` does not read again a PR armed before its replies existed while it stays armed or queued. `--auto` refuses with `arm: no-merge-gate=required_approval`, `required_thread_resolution` or `dismiss_stale_reviews` where the base's rulesets do not require an approval, thread resolution and stale-approval dismissal, because GitHub would merge that armed PR before any review, past an open thread, or on an approval of an earlier head; the rule is `pr-merge --help` § Approvals and review threads. On a base that requires a merge queue, `--auto` enrolls the PR and exits `75`, except on an admin route without `--queue`: where the route below reads admin, it arms nothing and exits `1` with `merge-route: admin cause=queue-bypass-safe` as its first stderr line. The immediate merge first reads its route under the merge's own token and names it on a `merge-route:` line: where the merge queue is all `--admin` would skip and the harness-ci skill's `change-class` reads the PR not queue-only at the base branch's tip, the PR's recorded base being that tip, it merges with `--admin` bound to the verified head and exits `0`; any other answer passes `--auto`, which enrolls the PR, and exits `75`, since GitHub refuses a merge on a queue base that passes neither `--auto` nor `--admin`. GitHub still holds an admin merge to every other ruleset. Each condition of the admin route and each queue `cause=`: `pr-merge --help` § Merge route. The merge method is the one the base branch allows, read from GitHub; the admin route merges past the queue, so it takes a method a direct merge allows, and takes the queue where there is none. `--delete-branch` deletes the head only where the repository's `delete_branch_on_merge` is off and the head is not a fork's: `pr-merge --help` § Merge method and § Branch deletion.\n\n### Review reply check\n\n```bash\n.agents\u002Fskills\u002Fgithub\u002Fscripts\u002Fgithub.sh check-review-replies \u003CN>\n```\n\nGitHub's approval and thread resolution prove that a reply exists, never what it says, and an author can edit a reply without a push. This read-only command reads the pull request's replies live, through the same PR API readers, project env and token selection as the commands above. It fails on four rules: a tracking reply that names no issue (`untracked-claim`), a decline that names no mechanism (`unreasoned-decline`), a thread holding more comments than one read returns (`thread-replies`), and findings a review lists only in its body at the current head with no head-bound answer (`suppressed-findings`). A review body counts only from a bot or an `OWNER`, `MEMBER` or `COLLABORATOR` who is not the PR author; a reply counts only from the PR author, an app author included, the identity the check runs as, or such a member. A thread's first comment is the finding it opens, never a reply. It needs no review-gate installation and writes nothing. `pr-merge`'s readiness check runs it, orch's submit-pr workflow runs it in its final live gate, orch's Copilot head route runs it before a `copilot-declined-unchanged` or `copilot-fallback` notice, and the overseer runs it before each app approval. Exit `0` passes; `1` fails, printing a `review-replies: fail head=\u003Csha>` line, a line per failing rule and a `suppressed-entry` line per unanswered body finding; `2` reached no verdict. The grammar of a body-finding answer, a `Dispositions at \u003Csha>` comment, and the output lines: `check-review-replies --help`. What a decline must say is reviewer conduct: `.agents\u002Fskills\u002Freviewer\u002Freferences\u002Ffinding-disposition.md` § Decision flow.\n\n### PR blocked with no visible conversations\n\nUnder `required_conversation_resolution`, an outdated thread can block a merge while the UI shows none; `resolve-thread` reaches it by id.\n\n```bash\ngithub.sh pr-threads 42                  # complete list, outdated included\ngithub.sh resolve-thread PRRT_kwDO...    # resolve by thread id\n```\n\n`pr-threads` follows every page and fails rather than returning a partial list, so a thread id absent from its output is genuinely absent. Repeat `resolve-thread` per blocking id until the merge clears.\n\n### Waiting for merge state\n\nRead a pull request's merge time from `mergedAt`. An approval or a \"merging\" notice does not establish that time. Read its queue entry through a GraphQL query for `pullRequest { mergeQueueEntry { position } }`; `gh pr view --json` exposes no `mergeQueueEntry` field.\n\n**Never gate termination on `gh pr view --json mergeable`.** That field stays `UNKNOWN` permanently after a merge: read `state`, which `pr-merge --check` carries. For a PR whose merge state GitHub is still computing, follow the orch skill's `merge-pr.md` § 5 step 1 explicit arm path. The route contract is `pr-merge --help` § Merge route. To watch MANY PRs, do not hand-roll a poll loop keyed on state transitions: see *Watching pull requests*.\n\n### Watching pull requests\n\n```bash\nGH_REPO=OWNER\u002FREPO .agents\u002Fskills\u002Fgithub\u002Fscripts\u002Fpr-watch.sh [PR# ...]\n```\n\nRun it through the harness's wake-up mechanism. It reduces every open pull request, or the named ones, to attention lines read from GitHub's review state, and prints nothing for a healthy one. Read its attention lines rather than watching review-state transitions. Attention kinds, output format, exit codes and settings: `pr-watch.sh --help`. Which pull requests draw an automatic review, and what to do when none arrives: [references\u002Fautomatic-review.md](references\u002Fautomatic-review.md).\n\n## Output Formats\n\nFormats and flag rules: `github.sh --help`.\n\n## Configuration\n\nKeep secrets in `.env.local`; commit non-secret defaults to `kendex.settings.toml` under `[env]`. Other contracts: `github.sh --help`.\n\n## Troubleshooting\n\nA [new required-workflow rule](https:\u002F\u002Fdocs.github.com\u002Fen\u002Fenterprise-cloud@latest\u002Frepositories\u002Fconfiguring-branches-and-merges-in-your-repository\u002Fmanaging-rulesets\u002Ftroubleshooting-rules#ruleset-workflows-for-open-pull-requests) does not automatically start its workflow for an open pull request. A new commit, a branch update or closing and reopening the pull request triggers it. Read the workflow run against the current rule before reporting that its requirement is met.\n\n**`VAR_SIGN`**: use a multi-line GraphQL query with `-F` variables.\n\n**Stale-token `HTTP 401`**: clear both environment tokens:\n\n```bash\nenv -u GH_TOKEN -u GITHUB_TOKEN gh pr list\n```\n\n`github.sh` falls back when keyring auth succeeds.\n\n## Dependencies\n\n- `gh` CLI (authenticated)\n- `jq`\n- `op` CLI (optional, 1Password token references)\n","\u003C!-- kendex:project-instructions:start -->\n## Project Instructions\n\n\u003C!-- kendex:shared-instructions:start -->\nProblems with a kendex-owned skill go through `kendex report`; check ownership in the file first.\n\u003C!-- kendex:shared-instructions:end -->\n\u003C!-- kendex:project-instructions:end -->\n\n# GitHub pull requests\n\n```bash\n.agents\u002Fskills\u002Fgithub\u002Fscripts\u002Fgithub.sh [-C \u003Cpath>] \u003Ccommand> [options]\n```\n\n## Commands\n\n| Command | Purpose |\n|---------|---------|\n| `pr-data \u003CN> [--actionable]` | Get PR with threads, comments, files. `--actionable`: unresolved non-outdated only. |\n| `pr-view [N] [--json FIELDS]` | View PR details (wraps gh pr view with bounded auth\u002Fno-PR errors) |\n| `pr-threads \u003CN> [--unresolved\\|--resolved] [--format=safe\\|raw]` | Complete paginated thread list\u002Fcount, outdated included. Both filters apply in both formats. See *PR blocked with no visible conversations*. |\n| `pr-timeline \u003CN> [--repo OWNER\u002FREPO] [--gate-context NAME]` | One PR's phase stamps, push and bot review times, CI spans, and review and fix rounds as one JSON object. Bot reviews exclude reply-only reviews. CI figures exclude Copilot review checks. `--help` defines the clean span over each workflow run's latest attempt and the read limits. |\n| `pr-list-ready [--all] [--format=safe\\|table]` | List PRs ready for merge |\n| `pr-list-failing [--all] [--format=safe\\|table]` | List PRs with CI failures |\n| `pr-create [--title T] [--body B \\| --body-file PATH] [--base B] [--draft] [--dry-run] [--force]` | Create PR as bot against `--base`, else the repository's default branch: `WORKTREE_DEFAULT_BRANCH` when set, else GitHub's. Safety checks: the head is not the base, has commits, pushed; `--force` skips them. |\n| `pr-edit-body \u003CN> --body-file PATH` | Update an existing PR body through the sanitized router. |\n| `pr-merge \u003CN> [--check\\|--auto]` | Merge PR. `--check` reports readiness as JSON on stdout plus a one-word verdict and `head-run: \u003Cids>` (the run scope of the CI classification) on stderr; `--auto` queues a currently-blocked PR, and arms only where the base branch's rulesets require at least 1 approval and thread resolution and dismiss stale approvals on push, and refuses the admin route unless `--queue` explicitly requests a queue arm; the immediate merge passes `--admin` to GitHub only where the queue is all its token would bypass and the PR is not queue-only. Three exit codes. See *PR Merge Outcomes*. |\n| `ci-classify-refusal \u003CN>` | Name the cause of a pr-merge refusal. Output and retry contract: `ci-classify-refusal --help`. |\n| `check-review-replies \u003CN>` | Judge what the PR's review replies say, read live and read-only. See *Review reply check*. |\n| `pr-cross-check [N...] [--quick\\|--verify]` | Cross-PR analysis. `--verify`: full build+test (auto-detects build system). |\n| `pr-issue \u003CN> [--format=safe\\|text]` | Extract issue ID from PR branch (configurable via `GH_ISSUE_PATTERN`) |\n| `label-add \u003CPR-or-issue> \u003Clabel> [--issue] [--required\\|--optional]` | Add a label after checking the live inventory. Mode semantics and exit codes: `label-add --help`. |\n| `label-remove \u003CPR-or-issue> \u003Clabel> [--issue]` | Remove a label through the sanitized router. |\n| `ci-logs \u003CN> [--lines N] [--format=safe\\|text]` | Get CI failure logs for PR |\n| `bot-token [--format=safe\\|text]` | Check if bot token is configured, naming the selected variable as `source` |\n| `dismiss-review \u003CPR> [--bot\\|--user NAME] [--message M]` | Dismiss blocking review. The exit status reports whether the dismissals landed: `dismiss-review --help`. |\n| `resolve-thread \u003CPRRT_...>` | Mark thread(s) resolved. Works on threads the UI cannot render. The exit status reports whether the mutations landed: `resolve-thread --help`. See *PR blocked with no visible conversations*. |\n| `unresolve-thread \u003CPRRT_...>` | Reopen thread(s). The exit status reports whether the mutations landed: `unresolve-thread --help`. |\n| `post-reply \u003CPRRT_...\\|numeric-id> [body \\| --body-file PATH] [--pr N]` | Reply to review comment. `--pr N` is REQUIRED for numeric comment IDs; thread `PRRT_...` IDs need no PR number. |\n| `post-comment \u003CPR> [body \\| --body-file PATH]` | Post PR-level comment. |\n| `find-comment \u003CPR> --pattern \u003Cregex>` | Find comment by pattern\u002Fauthor |\n| `edit-comment \u003Cid> [body \\| --body-file PATH]` | Edit an existing comment, PR-level (`#issuecomment-\u003Cid>`) or inside a review thread (`#discussion_r\u003Cid>`). Endpoint order and the unknown-id refusal: `edit-comment --help`. |\n| `sticky-comment \u003CPR> [--verdict\\|--analysis\\|--body]` | Get bot sticky comment. `--verdict`: quick pass\u002Ffail. `--analysis`: deep recommendation. |\n\nCI waiting belongs to `.agents\u002Fskills\u002Forch\u002Fscripts\u002Fci-wait`.\n\nContracts: `label-add --help`, `edit-comment --help`, `git-https-auth --help`, `git-diff-summary --help`.\n\n### PR Merge Outcomes\n\nThe `pr-merge` readiness check blocks only on contexts the base branch requires, read from its rulesets and classic protection. Required workflows contribute check identities from their current completed runs on the head, executed in the consumer repository. Workflow file metadata must prove the source repository, path and configured revision. Distinct source definitions cannot share an execution. Classic required contexts remain name-based. A red check outside that set is a `ci_optional_failed:` warning, matching what GitHub itself merges over. A required context that has registered no check on the head is `ci_pending: \u003Ccontext> (missing)`. Optional pending or queued checks hold neither the merge nor the required-only CI wait. A pending required workflow or unregistered workflow jobs hold as ci_pending. Unreadable workflow evidence refuses as ci_fetch_failed, even when every visible job passes. A failed required workflow holds as ci_failed. Other unreadable protection, unnameable rule types and a base that requires nothing count every check. `--check`, the immediate merge and `--auto` run that readiness check; `ci-classify-refusal` reads the same required set. The orch `ci-wait` waiter counts every red check by default; `ci-wait --required-only`, which orch `queue-wait` runs, applies the same required set.\n\nFull contract: `pr-merge --help`. Exit `75` is volatile: the caller arms one exact head and waits on that head with the orch skill's `queue-wait`, whose `--help` § Verdicts maps each verdict to a route; an unrecognized verdict is never re-armed. If `can_merge` is false with no `issues`, read `state`. `pr-merge` resolves no review thread. The readiness check each call runs (`--check`, the merge and the `--auto` arm) runs the reply check below, which holds at that moment and no later: `--auto` arms nothing while the check fails, and `pr-merge` does not read again a PR armed before its replies existed while it stays armed or queued. `--auto` refuses with `arm: no-merge-gate=required_approval`, `required_thread_resolution` or `dismiss_stale_reviews` where the base's rulesets do not require an approval, thread resolution and stale-approval dismissal, because GitHub would merge that armed PR before any review, past an open thread, or on an approval of an earlier head; the rule is `pr-merge --help` § Approvals and review threads. On a base that requires a merge queue, `--auto` enrolls the PR and exits `75`, except on an admin route without `--queue`: where the route below reads admin, it arms nothing and exits `1` with `merge-route: admin cause=queue-bypass-safe` as its first stderr line. The immediate merge first reads its route under the merge's own token and names it on a `merge-route:` line: where the merge queue is all `--admin` would skip and the harness-ci skill's `change-class` reads the PR not queue-only at the base branch's tip, the PR's recorded base being that tip, it merges with `--admin` bound to the verified head and exits `0`; any other answer passes `--auto`, which enrolls the PR, and exits `75`, since GitHub refuses a merge on a queue base that passes neither `--auto` nor `--admin`. GitHub still holds an admin merge to every other ruleset. Each condition of the admin route and each queue `cause=`: `pr-merge --help` § Merge route. The merge method is the one the base branch allows, read from GitHub; the admin route merges past the queue, so it takes a method a direct merge allows, and takes the queue where there is none. `--delete-branch` deletes the head only where the repository's `delete_branch_on_merge` is off and the head is not a fork's: `pr-merge --help` § Merge method and § Branch deletion.\n\n### Review reply check\n\n```bash\n.agents\u002Fskills\u002Fgithub\u002Fscripts\u002Fgithub.sh check-review-replies \u003CN>\n```\n\nGitHub's approval and thread resolution prove that a reply exists, never what it says, and an author can edit a reply without a push. This read-only command reads the pull request's replies live, through the same PR API readers, project env and token selection as the commands above. It fails on four rules: a tracking reply that names no issue (`untracked-claim`), a decline that names no mechanism (`unreasoned-decline`), a thread holding more comments than one read returns (`thread-replies`), and findings a review lists only in its body at the current head with no head-bound answer (`suppressed-findings`). A review body counts only from a bot or an `OWNER`, `MEMBER` or `COLLABORATOR` who is not the PR author; a reply counts only from the PR author, an app author included, the identity the check runs as, or such a member. A thread's first comment is the finding it opens, never a reply. It needs no review-gate installation and writes nothing. `pr-merge`'s readiness check runs it, orch's submit-pr workflow runs it in its final live gate, orch's Copilot head route runs it before a `copilot-declined-unchanged` or `copilot-fallback` notice, and the overseer runs it before each app approval. Exit `0` passes; `1` fails, printing a `review-replies: fail head=\u003Csha>` line, a line per failing rule and a `suppressed-entry` line per unanswered body finding; `2` reached no verdict. The grammar of a body-finding answer, a `Dispositions at \u003Csha>` comment, and the output lines: `check-review-replies --help`. What a decline must say is reviewer conduct: `.agents\u002Fskills\u002Freviewer\u002Freferences\u002Ffinding-disposition.md` § Decision flow.\n\n### PR blocked with no visible conversations\n\nUnder `required_conversation_resolution`, an outdated thread can block a merge while the UI shows none; `resolve-thread` reaches it by id.\n\n```bash\ngithub.sh pr-threads 42                  # complete list, outdated included\ngithub.sh resolve-thread PRRT_kwDO...    # resolve by thread id\n```\n\n`pr-threads` follows every page and fails rather than returning a partial list, so a thread id absent from its output is genuinely absent. Repeat `resolve-thread` per blocking id until the merge clears.\n\n### Waiting for merge state\n\nRead a pull request's merge time from `mergedAt`. An approval or a \"merging\" notice does not establish that time. Read its queue entry through a GraphQL query for `pullRequest { mergeQueueEntry { position } }`; `gh pr view --json` exposes no `mergeQueueEntry` field.\n\n**Never gate termination on `gh pr view --json mergeable`.** That field stays `UNKNOWN` permanently after a merge: read `state`, which `pr-merge --check` carries. For a PR whose merge state GitHub is still computing, follow the orch skill's `merge-pr.md` § 5 step 1 explicit arm path. The route contract is `pr-merge --help` § Merge route. To watch MANY PRs, do not hand-roll a poll loop keyed on state transitions: see *Watching pull requests*.\n\n### Watching pull requests\n\n```bash\nGH_REPO=OWNER\u002FREPO .agents\u002Fskills\u002Fgithub\u002Fscripts\u002Fpr-watch.sh [PR# ...]\n```\n\nRun it through the harness's wake-up mechanism. It reduces every open pull request, or the named ones, to attention lines read from GitHub's review state, and prints nothing for a healthy one. Read its attention lines rather than watching review-state transitions. Attention kinds, output format, exit codes and settings: `pr-watch.sh --help`. Which pull requests draw an automatic review, and what to do when none arrives: [references\u002Fautomatic-review.md](references\u002Fautomatic-review.md).\n\n## Output Formats\n\nFormats and flag rules: `github.sh --help`.\n\n## Configuration\n\nKeep secrets in `.env.local`; commit non-secret defaults to `kendex.settings.toml` under `[env]`. Other contracts: `github.sh --help`.\n\n## Troubleshooting\n\nA [new required-workflow rule](https:\u002F\u002Fdocs.github.com\u002Fen\u002Fenterprise-cloud@latest\u002Frepositories\u002Fconfiguring-branches-and-merges-in-your-repository\u002Fmanaging-rulesets\u002Ftroubleshooting-rules#ruleset-workflows-for-open-pull-requests) does not automatically start its workflow for an open pull request. A new commit, a branch update or closing and reopening the pull request triggers it. Read the workflow run against the current rule before reporting that its requirement is met.\n\n**`VAR_SIGN`**: use a multi-line GraphQL query with `-F` variables.\n\n**Stale-token `HTTP 401`**: clear both environment tokens:\n\n```bash\nenv -u GH_TOKEN -u GITHUB_TOKEN gh pr list\n```\n\n`github.sh` falls back when keyring auth succeeds.\n\n## Dependencies\n\n- `gh` CLI (authenticated)\n- `jq`\n- `op` CLI (optional, 1Password token references)\n",{"name":5,"license":15,"metadata":39,"description":7,"user-invocable":43},{"bugs":40,"author":12,"source":41,"repository":42},"https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fissues","kendex","https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex",true,"main","0ed06e4c0bac91ac09d898349d1c5a34c98aa996",".agents\u002Fskills\u002Fgithub",37,"https:\u002F\u002Fkendex.ai","https:\u002F\u002Fgithub.com\u002Fvanillagreencom","http:\u002F\u002Fvanillagreen.com","2026-11-14 03:55:14",{"source":8,"skillName":5,"commands":53,"prompt":63,"zipAvailable":43},[54,57,60],{"tool":55,"command":56},"npx","npx skills add vanillagreencom\u002Fkendex --skill github",{"tool":58,"command":59},"bunx","bunx skills add vanillagreencom\u002Fkendex --skill github",{"tool":61,"command":62},"pnpm","pnpm dlx skills add vanillagreencom\u002Fkendex --skill github","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fgithub\u002FSKILL.md",[65,71,77,81,87,91,95,99,103,107,111,115,119,123,127,131,135,139,143,147,151,155,159,163,167,171,175,179,183,187,191,195,199,203,207,211,215,219,223,227,231,235,239,243],{"path":66,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":69,"sourceHtmlUrl":70},"kendex.settings.toml.example","OTHER","其他",1740,"https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fgithub\u002Fkendex.settings.toml.example",{"path":72,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":75,"sourceHtmlUrl":76},"README.md","REFERENCE","参考文档",3004,"https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fgithub\u002FREADME.md",{"path":78,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":79,"sourceHtmlUrl":80},"references\u002Fautomatic-review.md",4536,"https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fgithub\u002Freferences\u002Fautomatic-review.md",{"path":82,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":85,"sourceHtmlUrl":86},"scripts\u002Fcommands\u002Fbot-token.sh","SCRIPT","脚本",1366,"https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fgithub\u002Fscripts\u002Fcommands\u002Fbot-token.sh",{"path":88,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":89,"sourceHtmlUrl":90},"scripts\u002Fcommands\u002Fcheck-review-replies.sh",37195,"https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fgithub\u002Fscripts\u002Fcommands\u002Fcheck-review-replies.sh",{"path":92,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":93,"sourceHtmlUrl":94},"scripts\u002Fcommands\u002Fci-classify-refusal.sh",12229,"https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fgithub\u002Fscripts\u002Fcommands\u002Fci-classify-refusal.sh",{"path":96,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":97,"sourceHtmlUrl":98},"scripts\u002Fcommands\u002Fci-logs.sh",8425,"https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fgithub\u002Fscripts\u002Fcommands\u002Fci-logs.sh",{"path":100,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":101,"sourceHtmlUrl":102},"scripts\u002Fcommands\u002Fdismiss-review.sh",6059,"https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fgithub\u002Fscripts\u002Fcommands\u002Fdismiss-review.sh",{"path":104,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":105,"sourceHtmlUrl":106},"scripts\u002Fcommands\u002Fedit-comment.sh",7579,"https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fgithub\u002Fscripts\u002Fcommands\u002Fedit-comment.sh",{"path":108,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":109,"sourceHtmlUrl":110},"scripts\u002Fcommands\u002Ffind-comment.sh",6122,"https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fgithub\u002Fscripts\u002Fcommands\u002Ffind-comment.sh",{"path":112,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":113,"sourceHtmlUrl":114},"scripts\u002Fcommands\u002Flabel-add.sh",10147,"https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fgithub\u002Fscripts\u002Fcommands\u002Flabel-add.sh",{"path":116,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":117,"sourceHtmlUrl":118},"scripts\u002Fcommands\u002Flabel-remove.sh",2420,"https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fgithub\u002Fscripts\u002Fcommands\u002Flabel-remove.sh",{"path":120,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":121,"sourceHtmlUrl":122},"scripts\u002Fcommands\u002Fpost-comment.sh",4059,"https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fgithub\u002Fscripts\u002Fcommands\u002Fpost-comment.sh",{"path":124,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":125,"sourceHtmlUrl":126},"scripts\u002Fcommands\u002Fpost-reply.sh",6446,"https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fgithub\u002Fscripts\u002Fcommands\u002Fpost-reply.sh",{"path":128,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":129,"sourceHtmlUrl":130},"scripts\u002Fcommands\u002Fpr-create.sh",9656,"https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fgithub\u002Fscripts\u002Fcommands\u002Fpr-create.sh",{"path":132,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":133,"sourceHtmlUrl":134},"scripts\u002Fcommands\u002Fpr-cross-check.sh",11137,"https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fgithub\u002Fscripts\u002Fcommands\u002Fpr-cross-check.sh",{"path":136,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":137,"sourceHtmlUrl":138},"scripts\u002Fcommands\u002Fpr-data.sh",9616,"https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fgithub\u002Fscripts\u002Fcommands\u002Fpr-data.sh",{"path":140,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":141,"sourceHtmlUrl":142},"scripts\u002Fcommands\u002Fpr-edit-body.sh",1968,"https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fgithub\u002Fscripts\u002Fcommands\u002Fpr-edit-body.sh",{"path":144,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":145,"sourceHtmlUrl":146},"scripts\u002Fcommands\u002Fpr-issue.sh",2094,"https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fgithub\u002Fscripts\u002Fcommands\u002Fpr-issue.sh",{"path":148,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":149,"sourceHtmlUrl":150},"scripts\u002Fcommands\u002Fpr-list-failing.sh",4068,"https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fgithub\u002Fscripts\u002Fcommands\u002Fpr-list-failing.sh",{"path":152,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":153,"sourceHtmlUrl":154},"scripts\u002Fcommands\u002Fpr-list-ready.sh",7013,"https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fgithub\u002Fscripts\u002Fcommands\u002Fpr-list-ready.sh",{"path":156,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":157,"sourceHtmlUrl":158},"scripts\u002Fcommands\u002Fpr-merge.sh",69832,"https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fgithub\u002Fscripts\u002Fcommands\u002Fpr-merge.sh",{"path":160,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":161,"sourceHtmlUrl":162},"scripts\u002Fcommands\u002Fpr-threads.sh",6714,"https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fgithub\u002Fscripts\u002Fcommands\u002Fpr-threads.sh",{"path":164,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":165,"sourceHtmlUrl":166},"scripts\u002Fcommands\u002Fpr-timeline.sh",31031,"https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fgithub\u002Fscripts\u002Fcommands\u002Fpr-timeline.sh",{"path":168,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":169,"sourceHtmlUrl":170},"scripts\u002Fcommands\u002Fpr-view.sh",7134,"https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fgithub\u002Fscripts\u002Fcommands\u002Fpr-view.sh",{"path":172,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":173,"sourceHtmlUrl":174},"scripts\u002Fcommands\u002Fresolve-thread.sh",5385,"https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fgithub\u002Fscripts\u002Fcommands\u002Fresolve-thread.sh",{"path":176,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":177,"sourceHtmlUrl":178},"scripts\u002Fcommands\u002Fsticky-comment.sh",9758,"https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fgithub\u002Fscripts\u002Fcommands\u002Fsticky-comment.sh",{"path":180,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":181,"sourceHtmlUrl":182},"scripts\u002Fcommands\u002Funresolve-thread.sh",5082,"https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fgithub\u002Fscripts\u002Fcommands\u002Funresolve-thread.sh",{"path":184,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":185,"sourceHtmlUrl":186},"scripts\u002Fgit-diff-summary",27158,"https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fgithub\u002Fscripts\u002Fgit-diff-summary",{"path":188,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":189,"sourceHtmlUrl":190},"scripts\u002Fgit-https-auth",1183,"https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fgithub\u002Fscripts\u002Fgit-https-auth",{"path":192,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":193,"sourceHtmlUrl":194},"scripts\u002Fgithub.sh",11960,"https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fgithub\u002Fscripts\u002Fgithub.sh",{"path":196,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":197,"sourceHtmlUrl":198},"scripts\u002Flib\u002Fbounded.sh",6580,"https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fgithub\u002Fscripts\u002Flib\u002Fbounded.sh",{"path":200,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":201,"sourceHtmlUrl":202},"scripts\u002Flib\u002Fci-run-correlation.sh",32113,"https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fgithub\u002Fscripts\u002Flib\u002Fci-run-correlation.sh",{"path":204,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":205,"sourceHtmlUrl":206},"scripts\u002Flib\u002Fgh-auth.sh",19030,"https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fgithub\u002Fscripts\u002Flib\u002Fgh-auth.sh",{"path":208,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":209,"sourceHtmlUrl":210},"scripts\u002Flib\u002Fgh-repo.sh",4804,"https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fgithub\u002Fscripts\u002Flib\u002Fgh-repo.sh",{"path":212,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":213,"sourceHtmlUrl":214},"scripts\u002Flib\u002Fgithub-api.sh",28081,"https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fgithub\u002Fscripts\u002Flib\u002Fgithub-api.sh",{"path":216,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":217,"sourceHtmlUrl":218},"scripts\u002Flib\u002Fgroup-leader.sh",3165,"https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fgithub\u002Fscripts\u002Flib\u002Fgroup-leader.sh",{"path":220,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":221,"sourceHtmlUrl":222},"scripts\u002Flib\u002Fjson-error.sh",485,"https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fgithub\u002Fscripts\u002Flib\u002Fjson-error.sh",{"path":224,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":225,"sourceHtmlUrl":226},"scripts\u002Flib\u002Fkendex-env.sh",18400,"https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fgithub\u002Fscripts\u002Flib\u002Fkendex-env.sh",{"path":228,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":229,"sourceHtmlUrl":230},"scripts\u002Flib\u002Fmerge-queue.sh",1936,"https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fgithub\u002Fscripts\u002Flib\u002Fmerge-queue.sh",{"path":232,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":233,"sourceHtmlUrl":234},"scripts\u002Flib\u002Frefresh-identity.sh",283,"https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fgithub\u002Fscripts\u002Flib\u002Frefresh-identity.sh",{"path":236,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":237,"sourceHtmlUrl":238},"scripts\u002Flib\u002Frepo-settings.sh",5881,"https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fgithub\u002Fscripts\u002Flib\u002Frepo-settings.sh",{"path":240,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":241,"sourceHtmlUrl":242},"scripts\u002Flib\u002Fverify-lib.sh",19137,"https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fgithub\u002Fscripts\u002Flib\u002Fverify-lib.sh",{"path":244,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":245,"sourceHtmlUrl":246},"scripts\u002Fpr-watch.sh",33021,"https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fgithub\u002Fscripts\u002Fpr-watch.sh",[248,271,301,324,364,392],{"skillNo":249,"name":250,"nameZh":6,"description":251,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":252,"categories":253,"keywords":254,"publishedAt":34},"01M6HZ0GYHMRX8JCH9RPPAY59N","youtube-publish","Load to draft a YouTube upload, comment or reply, or send a draft after the user's recorded approval.","https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002Fskills\u002Fyoutube-publish\u002FSKILL.md",[],[255,256,257,258,20,31,259,32,260,261,262,263,264,265,5,266,22,267,268,269,270],"youtube publish","publish","youtube","youtube upload","publishing","upload","api","synthetic","check","draft","with","integration","data","youtube data","content","send",{"skillNo":272,"name":273,"nameZh":6,"description":274,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":275,"categories":276,"keywords":282,"publishedAt":34},"01M6HZ0CT05TA9746ZG5Q4K1E0","xcode-run","Load to install or dispatch a macOS GitHub Actions build, test or simulator screenshot run for an Xcode project.","https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002Fskills\u002Fxcode-run\u002FSKILL.md",[277],{"categoryNo":278,"categoryName":279,"taxonomyType":280,"taxonomyTypeDesc":281},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",[283,284,285,286,287,288,289,20,290,291,292,23,293,294,295,296,297,298,299,300],"xcode","run","xcode run","SET","project","actions","testing","github actions","workflows","workflow","delete","artifact","scripts","repository","install","screenshot","macos","screenshots",{"skillNo":302,"name":303,"nameZh":6,"description":304,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":305,"categories":306,"keywords":307,"publishedAt":34},"01M6HZ060RP0FKH75JKN214909","worktree","Load to create, list, remove, push, or repair a git worktree.","https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002Fskills\u002Fworktree\u002FSKILL.md",[],[303,308,309,20,310,311,312,313,314,315,316,317,318,319,320,31,321,322,32,323],"branch","remove","create","git worktree","config","git","list","path","push","repair","conflict","pr","continue","reuse","replay","keep",{"skillNo":325,"name":326,"nameZh":6,"description":327,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":328,"sourceHtmlUrl":329,"categories":330,"keywords":345,"publishedAt":34},"01M6HZ01AB8P28NTWWMHDMTM0A","social-media-content-calendar","Load to plan a social media campaign, build a content calendar, or adapt existing material into post drafts.","https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002Fskills\u002Fsocial-media-content-calendar\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002Fskills\u002Fsocial-media-content-calendar\u002FSKILL.md",[331,334,337,342],{"categoryNo":332,"categoryName":333,"taxonomyType":280,"taxonomyTypeDesc":281},"01JBSEEDCAT000000000000019","营销推广",{"categoryNo":335,"categoryName":336,"taxonomyType":280,"taxonomyTypeDesc":281},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":338,"categoryName":339,"taxonomyType":340,"taxonomyTypeDesc":341},"01JBSEEDCAT000000000000035","市场营销","PROFESSION","适用职业",{"categoryNo":343,"categoryName":344,"taxonomyType":340,"taxonomyTypeDesc":341},"01JBSEEDCAT000000000000036","内容创作者",[346,347,348,349,350,351,269,352,20,353,354,355,356,357,358,359,360,361,31,362,363],"Media","social","calendar","content calendar","social media content calendar","social media","adaptation","campaign","plan","drafts","asset","briefs","platform","planning","for","adapt","material","approval gate",{"skillNo":365,"name":366,"nameZh":6,"description":367,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":368,"categories":369,"keywords":373,"publishedAt":34},"01M6HYZS25D7RJK8CZ93MCZ3V8","slack","Load to bind an overseer's mailbox to a private Slack channel, run or check the relay, or post an alert or a file to Slack.","https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002Fskills\u002Fslack\u002FSKILL.md",[370],{"categoryNo":371,"categoryName":372,"taxonomyType":280,"taxonomyTypeDesc":281},"01JBSEEDCAT000000000000005","邮件与沟通",[366,374,375,376,377,378,379,380,381,20,31,32,382,383,384,385,386,284,297,387,388,389,263,390,391],"bind","back","checkout","lane","relay","messages","socket","mode","compact","alert","orchestration","mail","communication","linear","receiver","file","store","post",{"skillNo":393,"name":394,"nameZh":6,"description":395,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":396,"categories":397,"keywords":398,"publishedAt":34},"01M6HYZHPANA68C9WQQ11A1B5Z","second-opinion","Load for a cross-model review, challenge, audit, or quick consult.","https:\u002F\u002Fgithub.com\u002Fvanillagreencom\u002Fkendex\u002Fblob\u002Fmain\u002Fskills\u002Fsecond-opinion\u002FSKILL.md",[],[399,400,401,402,403,404,360,405,20,406,407,31,408,32,409,410,411,412,5,413,22],"second opinion","second","quick","ai cli","scope","model","pi","copilot","challenge","question","consult","review","codex","cli","audit"]