Call any GitHub REST endpoint via gh api: { path: "repos/OWNER/REPO/issues", method?, fields?, body?, jq?, paginate?, timeout_ms? } -> { value: <parsed JSON> }. fields become -f key=value form fields (default method flips to POST); body is sent verbatim as the JSON request body. Non-2xx responses are errors carrying gh's stderr.
bodyunknown
Raw JSON request body, piped to gh via `--input -`. Mutually exclusive with fields (gh rejects the combination).
fieldsobject
Form fields, each passed as `-f key=value` (string-typed on the wire).
jqstring
jq expression gh applies to the response (`--jq`); keeps large responses small.
methodstring
HTTP method. gh defaults to GET, or POST when fields/body are present.
paginateboolean
Follow pagination to the end (`--paginate`); combine with jq.
pathstring*required
Endpoint path, with concrete owner/repo values (e.g. "rate_limit" or "repos/cli/cli/issues") — placeholder expansion needs a checkout the worker does not have.
timeout_msinteger· uint64min 0
Per-call timeout in ms, clamped to the configured max_timeout_ms.
valueunknown*required
The JSON gh printed for the requested `--json` fields.
Run any gh command: { args: ["pr", "list", "-R", "owner/name"], stdin?, timeout_ms? } -> { stdout, stderr, exit_code, duration_ms, timed_out, stdout_truncated, stderr_truncated }. A non-zero exit or a timeout is DATA here, not an error. The escape hatch for everything without a typed github::* function.
argsstring[]*required
gh argv, without the leading `gh` (e.g. ["pr", "status", "-R", "o/r"]).
stdinstring
Bytes piped to gh's stdin (for flags like `--body-file -`).
timeout_msinteger· uint64min 0
Per-call timeout in ms, clamped to the configured max_timeout_ms.
duration_msinteger· uint64*requiredmin 0
Wall-clock duration of the invocation, in ms.
exit_codeinteger· int32
Process exit code; null when the process was killed (timeout).
stderrstring*required
Captured stderr (UTF-8 lossy), capped at `max_output_bytes`.
stderr_truncatedboolean*required
True when stderr exceeded `max_output_bytes` and was truncated.
stdoutstring*required
Captured stdout (UTF-8 lossy), capped at `max_output_bytes`.
stdout_truncatedboolean*required
True when stdout exceeded `max_output_bytes` and was truncated.
timed_outboolean*required
True when the timeout expired and the process group was killed.
github::issue::close
functionClose an issue: { repo, number, comment?, reason?: completed|not-planned } -> { output }.
commentstring
Closing comment.
numberinteger· uint64*requiredmin 0
Issue number.
reasonany of
Close reason.
any of (2)
variant 1
valuestringenum: completed, not-planned
repostring*required
Target repository, "owner/name".
outputstring*required
gh's stdout, trimmed.
github::issue::create
functionOpen an issue: { repo: "owner/name", title, body, labels?, assignees? } -> { output: <issue url> }.
assigneesstring[]
Assignee logins.
bodystring*required
Issue body (markdown).
labelsstring[]
Labels to apply.
repostring*required
Target repository, "owner/name".
titlestring*required
Issue title.
outputstring*required
gh's stdout, trimmed.
github::issue::edit
functionEdit an issue's title/body/labels/assignees: { repo, number, title?, body?, add_labels?, remove_labels?, add_assignees? } -> { output }.
add_assigneesstring[]
Assignee logins to add.
add_labelsstring[]
Labels to add.
bodystring
New body (markdown).
numberinteger· uint64*requiredmin 0
Issue number.
remove_labelsstring[]
Labels to remove.
repostring*required
Target repository, "owner/name".
outputstring*required
gh's stdout, trimmed.
github::issue::list
functionList issues: { repo: "owner/name", state?, limit?, author?, labels?, assignee?, search? } -> { value: [{number, title, state, url, author, labels, assignees, milestone, createdAt, updatedAt}] }.
assigneestring
Filter by assignee login.
authorstring
Filter by author login.
labelsstring[]
Filter by labels (all must match).
limitinteger· uint32min 0
Maximum number of results (gh default: 30).
repostring*required
Target repository, "owner/name".
searchstring
Search query narrowing the list further (GitHub search syntax).
stateany of
Filter by state (gh default: open).
any of (2)
variant 1
valuestringenum: open, closed, all
valueunknown*required
The JSON gh printed for the requested `--json` fields.
github::issue::view
functionView one issue with body and comments: { repo: "owner/name", number } -> { value }.
numberinteger· uint64*requiredmin 0
Issue number.
repostring*required
Target repository, "owner/name".
valueunknown*required
The JSON gh printed for the requested `--json` fields.
github::on-config-change
functionInternal: reload github configuration when it changes.
github::pr::checks
functionCI check rollup for a pull request: { repo, number } -> { value: [{bucket, name, state, link, workflow, description, startedAt, completedAt}] }. Failing or pending checks are data, not errors.
numberinteger· uint64*requiredmin 0
Pull request number.
repostring*required
Target repository, "owner/name".
valueunknown*required
The JSON gh printed for the requested `--json` fields.
github::pr::create
functionOpen a pull request: { repo: "owner/name", title, body, head, base?, draft? } -> { output: <pr url> }. head is required: the worker runs outside any checkout, so gh cannot infer a current branch.
basestring
Base branch to merge into (gh default: the repo default branch).
bodystring*required
Pull request body (markdown).
draftboolean
Open as draft.
headstring*required
Head branch the PR ships. Required: the worker runs outside any checkout, so gh cannot infer a current branch.
repostring*required
Target repository, "owner/name".
titlestring*required
Pull request title.
outputstring*required
gh's stdout, trimmed.
Unified diff of a pull request: { repo, number } -> { diff, truncated }. truncated is true when the diff exceeded the capture cap.
numberinteger· uint64*requiredmin 0
Pull request number.
repostring*required
Target repository, "owner/name".
diffstring*required
The unified diff as printed by `gh pr diff`.
truncatedboolean*required
True when the diff exceeded the capture cap and was cut off.
Edit a pull request's title/body/base/labels: { repo, number, title?, body?, base?, add_labels?, remove_labels? } -> { output }.
add_labelsstring[]
Labels to add.
basestring
New base branch.
bodystring
New body (markdown).
numberinteger· uint64*requiredmin 0
Pull request number.
remove_labelsstring[]
Labels to remove.
repostring*required
Target repository, "owner/name".
outputstring*required
gh's stdout, trimmed.
List pull requests: { repo: "owner/name", state?, limit?, author?, labels?, base?, search? } -> { value: [{number, title, state, url, author, headRefName, baseRefName, isDraft, labels, createdAt, updatedAt}] }.
authorstring
Filter by author login.
basestring
Filter by base branch.
labelsstring[]
Filter by labels (all must match).
limitinteger· uint32min 0
Maximum number of results (gh default: 30).
repostring*required
Target repository, "owner/name".
searchstring
Search query narrowing the list further (GitHub search syntax).
stateany of
Filter by state (gh default: open).
any of (2)
variant 1
valuestringenum: open, closed, merged, all
valueunknown*required
The JSON gh printed for the requested `--json` fields.
github::pr::merge
functionMerge a pull request: { repo, number, method: merge|squash|rebase, delete_branch?, auto? } -> { output }. auto enables auto-merge once requirements pass.
autoboolean
Enable auto-merge: merge automatically once requirements pass.
delete_branchboolean
Delete the head branch after merging.
methodall of*required
Merge method.
all of (1)
variant 1
valuestringenum: merge, squash, rebase
numberinteger· uint64*requiredmin 0
Pull request number.
repostring*required
Target repository, "owner/name".
outputstring*required
gh's stdout, trimmed.
github::pr::review
functionReview a pull request: { repo, number, event: approve|request-changes|comment, body? } -> { output }. gh requires body for request-changes and comment reviews.
bodystring
Review body (gh requires it for request-changes and comment).
eventall of*required
Review event.
all of (1)
variant 1
valuestringenum: approve, request-changes, comment
numberinteger· uint64*requiredmin 0
Pull request number.
repostring*required
Target repository, "owner/name".
outputstring*required
gh's stdout, trimmed.
View one pull request with body, mergeability, review decision, and diff stats: { repo: "owner/name", number } -> { value }.
numberinteger· uint64*requiredmin 0
Pull request number.
repostring*required
Target repository, "owner/name".
valueunknown*required
The JSON gh printed for the requested `--json` fields.
github::release::create
functionCreate a release: { repo, tag, title?, notes?, generate_notes?, draft?, prerelease?, target? } -> { output: <release url> }. generate_notes autogenerates from merged PRs.
draftboolean
Create as draft.
generate_notesboolean
Autogenerate notes from merged PRs since the last release.
notesstring
Release notes body (markdown).
prereleaseboolean
Mark as prerelease.
repostring*required
Target repository, "owner/name".
tagstring*required
Tag to release (created at target if it does not exist).
targetstring
Target branch or commit SHA for the tag (gh default: the default branch).
titlestring
Release title.
outputstring*required
gh's stdout, trimmed.
github::release::list
functionList releases: { repo: "owner/name", limit? } -> { value: [{tagName, name, isDraft, isLatest, isPrerelease, createdAt, publishedAt}] }.
limitinteger· uint32min 0
Maximum number of results (gh default: 30).
repostring*required
Target repository, "owner/name".
valueunknown*required
The JSON gh printed for the requested `--json` fields.
github::release::view
functionView one release including body and assets: { repo: "owner/name", tag } -> { value }.
repostring*required
Target repository, "owner/name".
tagstring*required
Release tag (e.g. "v1.2.0").
valueunknown*required
The JSON gh printed for the requested `--json` fields.
github::repo::list
functionList repositories of an owner: { owner?, limit? } -> { value: [{name, nameWithOwner, description, url, visibility, ...}] }. owner defaults to the authenticated user.
limitinteger· uint32min 0
Maximum number of results (gh default: 30).
ownerstring
User or organization login (default: the authenticated user).
valueunknown*required
The JSON gh printed for the requested `--json` fields.
github::repo::view
functionView a repository's metadata (description, default branch, visibility, stars, language, topics, latest release): { repo: "owner/name" } -> { value }.
repostring*required
Target repository, "owner/name".
valueunknown*required
The JSON gh printed for the requested `--json` fields.
github::run::cancel
functionCancel an in-progress workflow run: { repo, run_id } -> { output }.
repostring*required
Target repository, "owner/name".
run_idinteger· uint64*requiredmin 0
Workflow run id.
outputstring*required
gh's stdout, trimmed.
github::run::list
functionList GitHub Actions workflow runs: { repo: "owner/name", workflow?, branch?, status?, limit? } -> { value: [{databaseId, displayTitle, workflowName, headBranch, event, status, conclusion, url, ...}] }.
branchstring
Filter by branch.
limitinteger· uint32min 0
Maximum number of results (gh default: 20).
repostring*required
Target repository, "owner/name".
statusstring
Filter by status (e.g. completed, in_progress, queued, failure, success).
workflowstring
Filter by workflow (file name, e.g. "ci.yml").
valueunknown*required
The JSON gh printed for the requested `--json` fields.
github::run::rerun
functionRerun a workflow run: { repo, run_id, failed? } -> { output }. failed reruns only the failed jobs.
failedboolean
Rerun only the failed jobs.
repostring*required
Target repository, "owner/name".
run_idinteger· uint64*requiredmin 0
Workflow run id.
outputstring*required
gh's stdout, trimmed.
github::run::view
functionView one workflow run including its jobs and their steps: { repo: "owner/name", run_id } -> { value }.
repostring*required
Target repository, "owner/name".
run_idinteger· uint64*requiredmin 0
Workflow run id (databaseId from github::run::list).
valueunknown*required
The JSON gh printed for the requested `--json` fields.
github::search::code
functionSearch code: { query, limit? } -> { value: [{path, repository, sha, url, textMatches}] }. Use qualifiers like "repo:o/r language:rust symbol".
limitinteger· uint32min 0
Maximum number of results (gh default: 30).
querystring*required
Search query (GitHub search syntax, qualifiers included).
valueunknown*required
The JSON gh printed for the requested `--json` fields.
github::search::issues
functionSearch issues across repositories: { query, limit? } -> { value: [{number, title, state, url, repository, author, labels, commentsCount, ...}] }. Use qualifiers like "repo:o/r is:open label:bug".
limitinteger· uint32min 0
Maximum number of results (gh default: 30).
querystring*required
Search query (GitHub search syntax, qualifiers included).
valueunknown*required
The JSON gh printed for the requested `--json` fields.
github::search::prs
functionSearch pull requests across repositories: { query, limit? } -> { value }. Use qualifiers like "repo:o/r is:open review:required".
limitinteger· uint32min 0
Maximum number of results (gh default: 30).
querystring*required
Search query (GitHub search syntax, qualifiers included).
valueunknown*required
The JSON gh printed for the requested `--json` fields.
github::search::repos
functionSearch repositories: { query, limit? } -> { value: [{fullName, description, url, visibility, stargazersCount, language, updatedAt, ...}] }. GitHub search syntax (e.g. "language:rust stars:>100 topic:cli").
limitinteger· uint32min 0
Maximum number of results (gh default: 30).
querystring*required
Search query (GitHub search syntax, qualifiers included).
valueunknown*required
The JSON gh printed for the requested `--json` fields.
github::workflow::list
functionList workflows in a repo: { repo: "owner/name", all? } -> { value: [{id, name, path, state}] }. all includes disabled workflows.
allboolean
Include disabled workflows.
repostring*required
Target repository, "owner/name".
valueunknown*required
The JSON gh printed for the requested `--json` fields.
github::workflow::run
functionDispatch a workflow (workflow_dispatch): { repo, workflow: <file name or id>, ref?, inputs? } -> { output }. inputs become -f key=value pairs.
inputsobject
workflow_dispatch inputs, each passed as `-f key=value`.
refstring
Branch or tag to run on (gh default: the repo default branch).
repostring*required
Target repository, "owner/name".
workflowstring*required
Workflow file name (e.g. "release.yml") or numeric id.
outputstring*required
gh's stdout, trimmed.