Skip to content

gh

Served by plugin-gh
Placement runtime (out-of-process over gRPC)
Version 2026.265.2200

gh is a command word served by the plugin-gh plugin candy. This plugin is not listed in charly/charly.yml’s compiled_plugins:. It is not part of the shipped binary: charly builds and loads it out-of-process over gRPC when a plan references one of its words (the coexist path).

The canonical GitHub surface — one implementation of the gh read ops (pr_meta, pr_files, pr_diff, pr_commits, pr_thread, head_sha) plus document, which fetches a whole issue OR pull request (body, every comment, every review and inline review comment, the commits, and every changed file’s patch AND full content at head) and emits it as a #GhDocument JSON or YAML artifact, plus issues, which lists a repo’s OR an entire organization’s issues AND pull requests as a compact #GhIssueIndex (scope, per-row repo/kind/labels/comment-count, the PR’s cheap head signals, optional body) in ONE paginated call — /orgs/{org}/issues for the whole org, /repos/{owner}/{repo}/issues for one repo. Exposed as a typed, declarative verb (gh: {op: ..., repo: ...|org: ..., number: ..., state: ..., kind: ...}) and the standalone charly gh CLI. Replaces every hand-rolled exec.Command(“gh”) call: the client resolves the token explicitly (GH_TOKEN/GITHUB_TOKEN → the gh hosts.yml auth; an unauthenticated client omits the header so public reads work), targets api.github.com directly (never an ambiguous default-host redirect), surfaces the HTTP status + body on every non-2xx, paginates by the Link header’s rel=“next” (the ONE mechanism — no page-count guesswork), and caches every response on the shared charly cache ArtifactStore (ETag-revalidated for mutable reads, content-addressed for immutable blobs) so unchanged data is never re-fetched.

charly --help prints the command tree, including where gh is invoked and under which parent.