github · imoonkey — Claude Code skill: features and installation
Search repositories, inspect project data and manage issues or subscriptions from an agent. Some write operations use different GitHub routes and have an authentication caveat.
npx skills add imoonkey/openweb --skill github -a claude-codeWhat github does
The skill gives an agent operations to search repositories, inspect repository and user details, read READMEs, issues, pull requests, and contributor lists. It can also create issues and comments, close or reopen issues, star or fork a repository, and manage watch subscriptions.
Write operations do not all use the same route. closeIssue, reopenIssue, watchRepo, unwatchRepo, and unstarRepo go through GitHub’s web interface. Several others, including createIssue, createComment, forkRepo, and starRepo, still call api.github.com and are affected by a cookie-session/Bearer-token mismatch. That can block those writes. Public-repository reads work without authentication, subject to a 60 requests per hour limit; cookie-authenticated reads allow 5000 requests per hour.
The persisted-query hashes used to close and reopen issues are hardcoded and can fall out of sync with GitHub web releases. If they break, they need to be captured again from a real request in DevTools. Check the route for the operation you plan to run before relying on a write.
What it helps with
- find repositories by query and programming language
- inspect repository details and read its README
- list a repository’s issues and pull requests
- close or reopen an issue
- change repository stars or watch subscriptions
Example prompts for the agent
- Find five TypeScript repositories matching
react language:typescript. - Read the details and README for
anthropics/claude-code. - List open issues in
anthropics/claude-code, then close issue1.
How to install github
1Skills CLI (Vercel)
npx skills add imoonkey/openweb --skill github -a claude-code2Manually: put the files in place
~/.claude/skills/github/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/github/
1Skills CLI (Vercel)
npx skills add imoonkey/openweb --skill github -a codex2Manually: put the files in place
.agents/skills/github/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add imoonkey/openweb --skill github -a cursor2Manually: put the files in place
.cursor/skills/github/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install imoonkey/openweb github2Manually: put the files in place
.github/skills/github/SKILL.md1Skills CLI (Vercel)
npx skills add imoonkey/openweb --skill github -a gemini-cli2Platform CLI
gemini skills install https://github.com/imoonkey/openweb --path src/sites/githubManually: put the files in place
.devin/skills/github/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add imoonkey/openweb --skill github -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about github
How do I install github in Claude Code?
Run npx skills add imoonkey/openweb --skill github -a claude-code. The skill file is at ~/.claude/skills/github/SKILL.md.
What does the github skill do?
It lets an agent search repositories and inspect their data, then perform operations on issues, comments, stars, forks, and watch subscriptions.
Which write operations have an authentication caveat?
starRepo, createIssue, createComment, deleteComment, forkRepo, and graphqlQuery still call api.github.com and are affected by the cookie-session/Bearer-token mismatch.
Source text
SKILL.md · MIT
# GitHub
## Overview
GitHub REST + GraphQL API — code hosting platform (developer tools archetype).
## Workflows
### Explore a repository
1. `searchRepos(q)` → pick result → `owner`, `repo` from `full_name`
2. `getRepo(owner, repo)` → description, stars, language
3. `getRepoReadme(owner, repo)` → base64-encoded README content
4. `listIssues(owner, repo)` → open issues
5. `listPullRequests(owner, repo)` → open PRs
### Investigate a user's work
1. `getUserProfile(username)` → bio, public_repos, followers
2. `searchRepos(q: "user:username")` → their repositories
### File an issue
1. `searchRepos(q)` → `owner`, `repo` from `full_name` (or use known repo)
2. `createIssue(owner, repo, title, body)` → `number`, `html_url`
### Manage issues
1. `listIssues(owner, repo)` → `issue_number`, `title`, `state`
2. `closeIssue(owner, repo, issue_number ← listIssues)` → `state: "closed"`
3. `reopenIssue(owner, repo, issue_number ← listIssues)` → `state: "open"`
4. `createComment(owner, repo, issue_number ← listIssues, body)` → `comment_id`, `html_url`
5. `deleteComment(owner, repo, comment_id ← createComment)` → 204
### Star / watch a repo
1. `searchRepos(q)` → `owner`, `repo` from `full_name`
2. `starRepo(owner, repo)` → 204
3. `unstarRepo(owner, repo)` → 204
4. `watchRepo(owner, repo)` → `subscribed`
5. `unwatchRepo(owner, repo)` → 204
## Operations
| Operation | Intent | Key Input | Key Output | Notes |
|-----------|--------|-----------|------------|-------|
| searchRepos | find repositories | q | total_count, items[].full_name, stargazers_count, language | entry point, paginated |
| getRepo | repository details | owner, repo | full_name, description, stargazers_count, forks_count, language | entry point |
| getUserProfile | user profile | username | login, name, bio, public_repos, followers, following | entry point |
| getRepoReadme | repository README | owner ← getRepo, repo ← getRepo | name, content (base64), encoding | |
| listIssues | repository issues | owner ← getRepo, repo ← getRepo | number, title, state, user.login, labels | paginated |
| listPullRequests | repository PRs | owner ← getRepo, repo ← getRepo | number, title, state, user.login, head.ref, base.ref | paginated |
| listContributors | repository contributors | owner ← getRepo, repo ← getRepo | login, contributions | paginated |
| createIssue | create an issue | owner ← getRepo, repo ← getRepo, title, body | number, html_url | write, CAUTION |
| closeIssue | close an issue | owner, repo, issue_number ← listIssues | data (GraphQL response) | write, CAUTION. Routes through github.com `/_graphql` |
| reopenIssue | reopen a closed issue | owner, repo, issue_number ← listIssues | data (GraphQL response) | write, CAUTION — reverse of closeIssue. Routes through github.com `/_graphql` |
| createComment | comment on issue/PR | owner, repo, issue_number ← listIssues, body | id, body, html_url | write, CAUTION |
| deleteComment | delete a comment | owner, repo, comment_id ← createComment | — (204) | write, CAUTION — reverse of createComment |
| forkRepo | fork a repository | owner ← getRepo, repo ← getRepo | full_name | write, CAUTION |
| starRepo | star a repository | owner ← getRepo, repo ← getRepo | — (204) | write, SAFE. (api.github.com — currently rejected by cookie_session, see DOC.md) |
| unstarRepo | unstar a repository | owner ← getRepo, repo ← getRepo | count (watcher count) | write, CAUTION — reverse of starRepo. Routes through github.com rails endpoint |
| watchRepo | watch a repository | owner ← getRepo, repo ← getRepo | count (watcher count) | write, CAUTION. Routes through github.com `/notifications/subscribe` |
| unwatchRepo | unwatch a repository | owner ← getRepo, repo ← getRepo | count (watcher count) | write, CAUTION — reverse of watchRepo. Routes through github.com `/notifications/subscribe` |
| graphqlQuery | execute GraphQL | query, variables | data | write (unrestricted mutations possible) |
## Quick Start
```bash
# Search repositories
openweb github exec searchRepos '{"q":"react language:typescript","per_page":5}'
# Get repository details
openweb github exec getRepo '{"owner":"anthropics","repo":"claude-code"}'
# List issues
openweb github exec listIssues '{"owner":"anthropics","repo":"claude-code","per_page":5}'
# Get user profile
openweb github exec getUserProfile '{"username":"anthropics"}'
# Close an issue
openweb github exec closeIssue '{"owner":"imoonkey","repo":"openweb-test","issue_number":1,"state":"closed"}'
# Comment on an issue
openweb github exec createComment '{"owner":"imoonkey","repo":"openweb-test","issue_number":1,"body":"Looks good!"}'
# Star / unstar a repo
openweb github exec starRepo '{"owner":"imoonkey","repo":"openweb-test"}'
openweb github exec unstarRepo '{"owner":"imoonkey","repo":"openweb-test"}'
# Watch / unwatch a repo
openweb github exec watchRepo '{"owner":"imoonkey","repo":"openweb-test"}'
openweb github exec unwatchRepo '{"owner":"imoonkey","repo":"openweb-test"}'
```
## Known Limitations
- **`closeIssue`, `reopenIssue`, `watchRepo`, `unwatchRepo`, `unstarRepo` route through github.com web UI** (transport: page) instead of api.github.com REST. They use the user's `_gh_sess` browser cookie + page-scraped `X-Fetch-Nonce` + per-form `authenticity_token`. Verify: 5/5 PASS (2026-04-19). The persisted-query hashes for close/reopen are hardcoded and **will drift** with GitHub web releases — re-capture from a real click via DevTools `_graphql` request when they break.
- **`starRepo`, `createIssue`, `createComment`, `deleteComment`, `forkRepo`, `graphqlQuery` still target api.github.com** and remain affected by the cookie-session/Bearer mismatch. Same web-rewrite pattern applies (see `adapters/github-web.ts`).
- Read ops on public repos work without auth (rate-limited to 60 req/h); authenticated read ops via cookies work too (5000 req/h).
© imoonkey · MIT · imoonkey/openweb
Similar skills
All skills for Git and GitHub →github by other authors comes first.