{
  "markdown": "# gh-pr-skills\n\nEight skills for the GitHub **commit-to-merge lifecycle** — everything that\nhappens once a branch has something on it. Commit it, open the PR, get a\nsecond-opinion review from an external AI CLI, answer every review comment,\napprove, merge. Plus the two skills for when the straight line does not hold: an\naudited emergency override and a serial merge train. Packaged as a single plugin\nnamed `gh-pr`, installable on six coding-agent harnesses.\n\nIts siblings own the rest of the pipeline:\n[`gh-issue-skills`](https://github.com/dEitY719/gh-issue-skills) (issue and\ndiscussion lifecycle) and\n[`gh-flow-skills`](https://github.com/dEitY719/gh-flow-skills) (one-shot\ncompositions that chain both). Like\n[`gh-issue-skills`](https://github.com/dEitY719/gh-issue-skills), this repo owns\nno shared assets — it links out for the\n[per-harness tool mappings and the CI workflow](#shared-assets).\n\n## Skills\n\n| Skill | Invoke | What it does |\n|-------|--------|--------------|\n| `commit` | `/gh-pr:commit [issue] [remote]` | Creates one commit in the repo's own style, auto-linking a GitHub issue number. **Commits only** — never pushes, never opens a PR. |\n| `create` | `/gh-pr:create [issue] [remote]` | Opens the PR from **every commit since the branch diverged from base**, not just HEAD. Ensures the `Closes #N` footer. No review, no merge. |\n| `review` | `/gh-pr:review <PR#> --ai <cli> [remote]` | Delegates a second-opinion review to one external AI CLI (`codex`/`agy`/`claude`/`opencode`/`hermes`) and posts one aggregate comment. **Submits no verdict.** |\n| `reply` | `/gh-pr:reply <PR#> [remote]` | Replies to **every** review comment individually, bots included, and applies the fixes that hold up. Not a summary comment. |\n| `approve` | `/gh-pr:approve <PR#> [remote]` | The only skill that submits a verdict. Blockers become `request changes`; everything else becomes a follow-up issue. A self-authored PR can never be approved — `--self-record` and `--admin-merge` are the audited alternatives. |\n| `merge` | `/gh-pr:merge <PR#> [strategy] [remote]` | Rebase by default, or squash/merge. Refuses un-approved PRs, failing CI, drafts, and conflicts. Always `--delete-branch`. |\n| `merge-emergency` | `/gh-pr:merge-emergency <PR#> \"<reason>\"` | Admin-overrides the approval gate, forcing an audit trail: a reason comment plus a follow-up incident issue. **CI still gates.** |\n| `merge-train` | `/gh-pr:merge-train [repo] [remote]` | Walks your own open PRs one at a time, routing each to `gh-resolve:outdated` / `:conflict` / `:ci-fail` before handing it to `merge`. |\n\n`review` and `approve` are a pair split by *authority*: `review` gathers an\noutside opinion and can only comment, `approve` is the one place a verdict is\nsubmitted. `reply` sits between them and is where the fixes actually land.\n\n`merge` and `merge-emergency` are the same split applied to merging: the first\nrefuses, the second overrides — and pays for the override in writing.\n\nUnlike `gh-issue-skills`, there is **no read-only skill here**. All eight write\nto a live repo.\n\n### Visual guides and worked examples (GitHub Pages)\n\n- `commit` — [visual guide](https://deity719.github.io/gh-pr-skills/skill-guides/commit.html) · [usage example](https://deity719.github.io/gh-pr-skills/skill-output/commit-usage.html) (working tree changes to one commit)\n- `create` — [visual guide](https://deity719.github.io/gh-pr-skills/skill-guides/create.html) · [usage example](https://deity719.github.io/gh-pr-skills/skill-output/create-usage.html) (branch commits to a Pull Request)\n- `review` — [visual guide](https://deity719.github.io/gh-pr-skills/skill-guides/review.html) · [usage example](https://deity719.github.io/gh-pr-skills/skill-output/review-usage.html) (PR diff to one aggregate comment)\n- `reply` — [visual guide](https://deity719.github.io/gh-pr-skills/skill-guides/reply.html) · [usage example](https://deity719.github.io/gh-pr-skills/skill-output/reply-usage.html) (review comments to per-comment replies and fixes)\n- `approve` — [visual guide](https://deity719.github.io/gh-pr-skills/skill-guides/approve.html) · [usage example](https://deity719.github.io/gh-pr-skills/skill-output/approve-usage.html) (PR diff to a review verdict and follow-up issues)\n- `merge` — [visual guide](https://deity719.github.io/gh-pr-skills/skill-guides/merge.html) · [usage example](https://deity719.github.io/gh-pr-skills/skill-output/merge-usage.html) (approved PR to a merged PR)\n- `merge-emergency` — [visual guide](https://deity719.github.io/gh-pr-skills/skill-guides/merge-emergency.html) · [usage example](https://deity719.github.io/gh-pr-skills/skill-output/merge-emergency-usage.html) (unapproved PR to a merged PR plus an incident issue)\n- `merge-train` — [visual guide](https://deity719.github.io/gh-pr-skills/skill-guides/merge-train.html) · [usage example](https://deity719.github.io/gh-pr-skills/skill-output/merge-train-usage.html) (open PR list to serially merged PRs)\n\nEach page is generated from a Markdown source under\n[`docs/skill-guides/`](docs/skill-guides) and [`docs/skill-output/`](docs/skill-output).\n\n## Requirements\n\n| Skill | Needs |\n|-------|-------|\n| `commit` | `git` and a repo with staged or unstaged changes. Metrics and board sync additionally need `gh` with write access. |\n| `create` | `gh` with write access to PRs, plus a feature branch with an upstream it can push to. |\n| `review` | The external AI CLI named by its required `--ai` flag, on `PATH` (`codex`, `agy`, `claude`, `opencode`, `hermes`). It delegates the reading; it does not review the diff itself. |\n| `reply` | `gh` with write access to PR review comments, and a working tree it can edit for the fixes. |\n| `approve` | `gh` with permission to submit reviews on the target repo. Cannot act on a PR authored by the same user. |\n| `merge`, `merge-emergency` | `gh` with merge permission. `merge-emergency` additionally needs admin rights to bypass branch protection, and files an incident issue. |\n| `merge-train` | Everything `merge` needs, plus the `gh-resolve` plugin for the per-PR remediation routes. |\n\nEvery skill carries `GH_HOST` **and** `--repo` on every `gh` call, both resolved\nfrom the same remote URL. `--repo` alone names no server: on a dual-host login\n(github.com plus a GHES instance) a bare call silently queries the wrong one\n(dEitY719/dotfiles#1403 / dEitY719/dotfiles#1407).\n\n## Install\n\n### Claude Code\n\n```\n/plugin marketplace add dEitY719/gh-pr-skills\n/plugin install gh-pr@gh-pr-skills\n```\n\n### Codex\n\n```\ncodex plugin install dEitY719/gh-pr-skills\n```\n\n### Kimi CLI\n\n```\nkimi plugin install dEitY719/gh-pr-skills\n```\n\n### Hermes Agent\n\n```\nhermes plugins install dEitY719/gh-pr-skills\n```\n\n### OpenCode\n\nSee [`.opencode/INSTALL.md`](.opencode/INSTALL.md).\n\n### Gemini CLI / Antigravity\n\n```\ngemini extensions install https://github.com/dEitY719/gh-pr-skills\n```\n\nAntigravity (`agy`) shares `~/.gemini`, so it inherits the install.\n\n## Harness support\n\nThese are `gh` CLI calls, `git` calls, and file writes, so they port cleanly\nwith two exceptions — `merge-train` chains the other skills through Claude\nCode's `Skill()` tool, and `approve` / `review` hand a large diff to a subagent.\nThe per-skill matrix and what each degraded cell means are in\n[`docs/harness-support.md`](docs/harness-support.md). Every gap and its\nworkaround is documented per harness in\n[`harness-skills/references/`](https://github.com/dEitY719/harness-skills/tree/main/references);\nread the one file for the harness you are on.\n\n## Shared assets\n\nThis repo owns none — deliberately.\n\n- **Per-harness tool mappings** live in\n  [`harness-skills/references/`](https://github.com/dEitY719/harness-skills/tree/main/references)\n  (`{codex,kimi,gemini,antigravity,hermes,opencode}-tools.md`). That repo is\n  their sole owner; the other fourteen `*-skills` repos link there rather than\n  carrying copies, so one tool rename is one edit, not fifteen\n  (dEitY719/dotfiles#1410 F-5 / NF-2). The only condensed mirror here is\n  `.kimi-plugin/plugin.json`'s `skillInstructions`, because Kimi CLI cannot read\n  a reference file at load time — it points back to the canonical file.\n- **The reusable CI workflow** is\n  [`harness-skills/.github/workflows/skill-check.yml`](https://github.com/dEitY719/harness-skills/blob/main/.github/workflows/skill-check.yml)\n  (dEitY719/dotfiles#1410 D-10). See [CI](#ci).\n\n## Layout\n\nManifests live at the repo root and all point at one flat `skills/` directory:\n\n```\n.\n├── skills/{commit,create,review,reply,approve,merge,merge-emergency,merge-train}/\n│   ├── SKILL.md\n│   └── references/\n├── .claude-plugin/{marketplace,plugin}.json     Claude Code\n├── .codex-plugin/plugin.json                    Codex\n├── .kimi-plugin/plugin.json                     Kimi CLI\n├── .hermes-plugin/{plugin.yaml,__init__.py}     Hermes Agent\n├── .opencode/plugins/gh-pr.js + INSTALL.md      OpenCode\n├── .agents/plugins/marketplace.json             Antigravity\n├── gemini-extension.json + GEMINI.md            Gemini CLI\n├── tests/pmv-dispatch-resolves.sh               Regression guard (run by hand)\n├── package.json\n├── CLAUDE.md · AGENTS.md -> CLAUDE.md\n└── LICENSE\n```\n\nOnly Claude Code understands a nested `plugins/<name>/skills/` layout. The other\nfive harnesses resolve manifests at the repo root and a skills tree at\n`./skills/`, so this repo keeps everything flat. See [`CLAUDE.md`](CLAUDE.md) for\nthe full rationale and contribution rules.\n\nSkill directory names dropped their old `gh-pr-` / `gh-` prefixes in the\nmigration: `/gh-pr:gh-pr-merge` stutters, and the plugin namespace already\ncarries the meaning the prefix used to (dEitY719/dotfiles#1410 F-4).\n\nOne name needed a judgement call. `gh:pr` was the only skill whose directory\nname was *identical* to the plugin name, so stripping the redundant prefix would\nhave left nothing. It became `create` — the verb for what it actually does, and\na deliberate mirror of `gh-issue:create`, so the same word means \"file the\nthing\" in both plugins (dEitY719/dotfiles#1677 §3).\n\nThe `.kimi-plugin/` manifest is pre-provisioned: Kimi CLI is not installed on the\nmaintainer's machines yet, and shipping the manifest now costs nothing and saves\na migration later.\n\n## Cross-repo names\n\nLike `gh-issue-skills` and unlike the Phase 2 repos, this one was migrated\n**after** the Phase 3 names were fixed, so every reference to a sibling repo is\nwritten in its final form (dEitY719/dotfiles#1677 §2), and the step-marker wire format moved here\nwith it. The full old-to-new mapping and the marker details are in\n[`docs/cross-repo-names.md`](docs/cross-repo-names.md).\n\n## CI\n\n[`.github/workflows/validate.yml`](.github/workflows/validate.yml) calls the\nreusable workflow owned by `harness-skills`:\n\n```yaml\njobs:\n  validate:\n    uses: dEitY719/harness-skills/.github/workflows/skill-check.yml@main\n    with:\n      plugin-name: gh-pr\n      max-skill-lines: 197\n      allow-emoji-paths: |\n        skills/approve/references/ai-metrics.md\n        ...\n```\n\nIt validates manifests, skill frontmatter (the `name:` must be bare and match\nthe directory), progressive-disclosure line limits, the Codex description budget,\nversion agreement across all seven manifests, shell scripts, and the no-emoji\nrule. There is no local copy to keep in sync; a check added upstream applies here\non the next run.\n\n`max-skill-lines` is pinned above the 100-line default because four `SKILL.md`\nfiles arrived from dotfiles already over it (`merge` 197, `merge-train` 148,\n`reply` 143, `review` 110). That is tracked migration debt, not a new standard —\nsee [`CLAUDE.md`](CLAUDE.md) → \"Known migration debt\".\n\nThe `allow-emoji-paths` entries cover text the skills **quote** rather than\ndecorate with: the ai-metrics footer, whose chart / person / robot glyphs are the\nwire format itself (dEitY719/dotfiles#317 F-2, PR dEitY719/dotfiles#320). Nothing else in the repo may\ncarry an emoji.\n\n## Provenance\n\nExtracted from [`dEitY719/dotfiles`](https://github.com/dEitY719/dotfiles) as a\ncontent snapshot in Phase 3 of the dEitY719/dotfiles#1410 migration. Behaviour is unchanged; only\nthe namespace moved, from `gh:` to `gh-pr:`. The snapshot sources, the coupling\nthat came across with it, and the phase map are in\n[`docs/provenance.md`](docs/provenance.md).\n\n## License\n\nMIT. See [LICENSE](LICENSE).\n",
  "bytes": 12300,
  "sha": "7f71a08af74602365087dc994ec44b3a426f7db3be85ab928e8a35645cac6c6d",
  "repo_slug": "deity719/gh-pr-skills",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/plg_deity719_gh_pr_skills_cfbac898/readme"
}