github skill
✓ OfficialscriptsSynchronize GitHub issues, pull requests, and comments using pull, push, and activity runners with scoped authority.
- GitHub stars
- 103
- Files
- 6
- Last commit
- Nov 8, 2026
- License
- Apache-2.0
- Allowed tools
- —
What does the github skill do?
github is an agent skill. Synchronize GitHub issues, pull requests, and comments using pull, push, and activity runners with scoped authority.
Summary generated from the skill's SKILL.md.
About the github skill
Developers managing repository workflows can synchronize GitHub issues, pull requests, and comments through a structured system of pull and push operations. This skill allows an agent to inspect specific records by providing a repository name and resource kind, such as issues or comments, or to execute pre-decided changes using the sync method. It supports batching up to twenty mutations in a single push, such as creating new issues or updating existing pull requests, while ensuring every change is verified by an independent readback.
When an agent needs to summarize recent changes, the activity tool provides a compact view of everything updated in a repository since a specific timestamp. This is useful for generating daily summaries without processing entire GitHub records. The skill relies on an existing GitHub session or token and requires explicit repository identifiers to function. It distinguishes between planning a change and executing it, ensuring that no remote effects occur until a push is explicitly triggered.
What an agent can do with it
- 1Summarize recent repository changesAn agent can retrieve a compact list of all issues and pull requests updated since a specific time to create a summary report.
- 2Execute batch issue updatesA developer can send a single command to apply up to twenty different mutations, such as closing multiple issues at once.
- 3Verify changes with readbackThe system ensures that any pushed changes are actually applied by performing an independent read of the item after the update.
- 4Plan complex synchronization tasksUsers can generate a no-effect plan to see exactly what a pull or push operation intends to do before any remote state is modified.
Written from the skill's SKILL.md. Every use case is checked against a quote from it.
How to install the github skill
Each command copies the skill folder into the client's skills directory. Restart the client or start a new session to load it.Install the github skill in Claude Code
~/.claude/skills/github/SKILL.md
$ npx degit runxhq/runx/skills/github ~/.claude/skills/githubInstall the github skill in Claude Code (project)
.claude/skills/github/SKILL.md
$ npx degit runxhq/runx/skills/github .claude/skills/githubInstall the github skill in Codex
~/.agents/skills/github/SKILL.md
$ npx degit runxhq/runx/skills/github ~/.agents/skills/githubInstall the github skill in Gemini CLI
~/.gemini/skills/github/SKILL.md
$ npx degit runxhq/runx/skills/github ~/.gemini/skills/githubInstall the github skill in Claude.ai
npx degit runxhq/runx/skills/github github && zip -r github.zip github # claude.ai → Customize → Skills → + → Create skill → Upload a skill → github.zip
SKILL.md
View on GitHubGitHub
Read actual GitHub issues, pull requests and comments with the selected account,
or apply exact already-decided changes and confirm them independently. For a
normal read, give repo and optionally kind, number, page and limit.
The read authority is selected by the existing native operation; callers do not
need to construct synchronization direction or scope just to inspect an issue.
The default github runner reads one bounded page or exact numbered record.
kind is issues (the shared GitHub issue feed, including PRs), pull_requests
or comments. Comments are issue/PR conversation comments; review diff comments
are a different capability. comments requires the issue or PR number. Exact
numbered reads return the actual current record; state/label filters are for
list queries. Raw provider records and the original native operation evidence
are preserved. A bounded page never establishes complete conversation/history
coverage, including when filtering PRs out of an issue-feed page.
The explicit sync runner performs the requested advanced pull or push. plan
is the explicit no-effect runner; pull and push remain explicit execution
lanes for compatible callers. Pulls are bounded reads. A push carries one to
twenty typed mutations per call that one GitHub operation applies, and returns each
item's outcome. It closes only on an independent GitHub readback of every
applied item. An item whose outcome is unknown holds the push for
reconciliation and is never silently retried. activity reads what changed
in a repository since a time, compact enough to summarise. No GitHub token
enters this package.
When to use it
Use the default for actual bounded records. Resolve an omitted repository in the host with ordinary git remote/context tools, verify the exact owner/name, and pass it explicitly. Do not guess a repository, treat a folder name as one, or introduce a separate repository/cursor state store.
Use sync when an operator needs a reproducible pull or push contract for
issues, pull requests, or threads, especially when cursor state must survive
across runs. Use plan only when the requested outcome is a plan. Use pull
for an explicitly selected read lane. Use activity to learn what changed in
a repository since a time, such as since the last check of a daily summary:
it reads issues and pull requests together and returns the fields a reader
needs rather than GitHub's whole records. Use push for already-decided issue,
pull-request, or comment changes of one kind. A call accepts up to twenty changes, matching the connector's batch contract; split larger work into separate calls and retain each result. Batches are bounded and
best-effort, not atomic: a refused item does not stop the rest, the result
identifies each item, and the operator reconciles before retrying. Use github-issue-triage to decide what an issue means
and github-issue-to-pr to govern an implementation lane.
Do not use a plan as evidence that remote state was read or changed. Only the
native runx.provider.operation.v1 result from pull or push is provider
evidence. Do not silently turn a denied push into a pull.
How it works
- Validate the exact
owner/namerepository, direction, resource kind, bounded filters, maximum result count, and requested scope. - A
pullplan requires read scope and records the exact resources a provider may fetch. - A
pushplan requires write scope and one to twenty typed mutations per call that one GitHub operation applies:issues.create,issues.update,pullrequests.update,comments.create, orcomments.update. It rejects unknown fields, oversized content, and mixed kinds, then returnsready_for_execution; planning itself does not grant provider authority. - Optional
plan_and_append_cursorcalls the store'sevents.appendandprojection.readto append the bounded plan and read the projection back. That proves local cursor persistence, not GitHub synchronization; this package does not own a second cursor database or storage adapter. - The explicit
syncrunner selects the same bounded read or write path from the validated direction.pullcalls the planned read (issues.list,issues.read,pullrequests.list,pullrequests.read, orcomments.list) withrepo.read.pushcalls the planned write once underrepo.writefor issue and pull-request changes orissue.commentfor comment changes: the runtime sends each item, records each outcome, and reads every applied item back before the push closes. Both run under the GitHub instance selected here: the signed-inghsession or a stored token. activitycallsissues.listwithrepo.readfor one page of 100 of everything updated at or aftersince, open or closed. GitHub's listing holds pull requests too, so one read finds both. The result keeps each item's number, kind, title, state (mergedfor a merged pull request), whether it was opened at or aftersince, its author and whether that is a bot, its times, labels, assignees, comment count and link, and the first 600 characters of its body with the count left out. The provider is queried in updated/descending order, then the page is projected in that order; a full page names a possiblenext_page.
Inputs and result
repois exactlyowner/name.- The default needs only
repo: e.g.{repo: "runxhq/runx", kind: "pull_requests", number: 554}reads that exact PR. To continue comments usekind: comments, itsnumber, and the nextpage, retaining the same query and original provider receipt. directionispullorpushfor the explicitsyncand planning phases.resourcescontains the issue, PR, thread, orbatchselector and a limit no greater than 100. A push has one to twentymutationsentries withpath,op, and an exact typedpayload. Issue and PR changes useop: update; a new issue usespath: issuesandop: create; new thread comments useop: comment. Bodies are capped at 65,536 characters. Pulls return GitHub's records whole.scopeis the requested read or write scope.activitytakesrepo,since(RFC 3339) and an optionalpage, and returnsactivity: the repository,since, the page, its items, andnext_pagewhen more may follow. Its provider evidence is the read'srunx.provider.operation.v1, kept in the run's record.
The runx/github.sync_plan.v1 plan records exact direction, provider operation,
scope, filters, blockers, authority posture, cursor state when used, and the
explicit absence of remote effects. Execution additionally emits the native
provider-operation packet; it does not rewrite the planning packet to imply a
remote effect.
Stop conditions
- Refuse malformed repositories, unknown resource kinds, unbounded selectors, limits above the contract, more than twenty mutations in one call, unknown mutation fields, or content beyond the declared bounds.
- Refuse push when write scope is missing; do not degrade silently.
- Do not treat local cursor persistence as remote provider readback.
- Refuse a push that mixes new issues, issue, pull-request, and comment changes; send each kind as its own push.
- Refuse when no GitHub instance is selected, or the selected one lacks the scope. Never treat an available instance as evidence of the intended repository.
- Do not claim comments, labels, issues, or PRs were read or changed until the native provider operation proves the expected access, operation, and readback.
Example
A caller wants to pull the next 50 open issues after cursor 2. Planning can
persist that cursor locally; pull then performs issues.list through the
selected instance and returns the provider result. To close issue 241, a push
carries path: issues/241, op: update, and
payload: {state: closed, state_reason: completed}. Runx applies only that
issue update through issues.update under repo.write, and reads issue 241
back. A morning summary calls activity with since set to its last check
and reports the items that are new, or changed by someone else.
For composition, consume the returned native provider-operation packet directly.
Pass already read issue fields to github-issue-triage respond, preserving
repository, exact number, title, state, full relevant body and original source
link/receipt. This path does not fetch or post again. pull and push retain
their complete typed selectors for power users; the common reader does not
replace them. Local cursor persistence remains the explicit store-owned phase.
Files in this skill
6github skill questions
How do I install the github skill in Claude Code?
Run npx degit runxhq/runx/skills/github ~/.claude/skills/github. Claude Code loads skills from ~/.claude/skills (all projects) or .claude/skills (one project) and uses a skill when its description matches the task.
Which clients can use the github skill?
Any client that reads the Agent Skills format: Claude Code, Codex, Gemini CLI and claude.ai (upload as a ZIP). Scripts in the skill run only where the client allows code execution.
What can the activity runner do?
The activity runner reads what changed in a repository since a specific time, providing a compact summary of issues and pull requests.
How many mutations can be included in a single push call?
A single push call can carry between one and twenty typed mutations.
Can I mix different types of changes in one push operation?
No, you cannot mix new issues, pull requests, and comment changes in a single push; each kind must be sent as its own push.