一键导入
github
GitHub API integration via HTTP tool with automatic credential injection
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
GitHub API integration via HTTP tool with automatic credential injection
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Use when adding or reviewing tests for Reborn behavior — choosing a test tier, covering a bug fix, testing model/tool-choice behavior, touching tests/integration or tests/fixtures/llm_traces, or when a test needs Postgres, Docker, or a live LLM.
Navigate building a user-facing feature in the Reborn stack (a capability that crosses product_workflow → composition → webui_v2 → runtime/serve → frontend). Use when planning or implementing any new Reborn settings page, endpoint, facade method, or runtime-backed capability — especially before writing code, to avoid rebuilding what already exists and to wire it in one pass instead of layer-by-layer.
Use when asked to "review the open PRs", review a batch or stack of pull requests, or run a recurring PR-review pass on a repo — especially with many PRs, stacked branches, conflicts, or security-sensitive changes. Covers grouping, fan-out to review subagents, verdict synthesis, and posting.
Generate or update the IronClaw architecture overview video using Remotion. Use when asked to update, regenerate, or modify the architecture video, add/remove scenes, or reflect codebase changes in the video.
Use when writing or reviewing a change in crates/ that adds a trait, a crate, a dependency edge, a re-export, or code in ironclaw_reborn_composition — or when deciding whether an abstraction, layer, or crate boundary is justified in the IronClaw Reborn stack.
Use when starting work in the IronClaw repo, deciding where a feature/fix/prompt/doc belongs, tracing how a request flows, looking up which crate owns a subsystem, or when repo docs, the knowledge graph, or component names seem stale, missing, or contradictory.
| name | github |
| version | 1.0.0 |
| description | GitHub API integration via HTTP tool with automatic credential injection |
| activation | {"keywords":["github","issues","pull request","repository","commit","branch"],"exclude_keywords":["gitlab","bitbucket"],"patterns":["(?i)(list|show|get|fetch|open|close|create|file|merge)\\s.*(issue|PR|pull request|repo)","(?i)github\\.com"],"tags":["git","code-review","devops"],"max_context_tokens":2000} |
| credentials | [{"name":"github_token","provider":"github","location":{"type":"bearer"},"hosts":["api.github.com"],"oauth":{"authorization_url":"https://github.com/login/oauth/authorize","token_url":"https://github.com/login/oauth/access_token","scopes":["repo","read:org"],"refresh":{"strategy":"reauthorize_only"}},"setup_instructions":"Create a personal access token at https://github.com/settings/tokens"}] |
You have access to the GitHub REST API via the http tool. Credentials are automatically injected — never construct Authorization headers manually. When the URL host is api.github.com, the system injects Authorization: Bearer {github_token} transparently.
All endpoints use https://api.github.com as the base URL. Common headers are injected automatically.
List issues:
http(method="GET", url="https://api.github.com/repos/{owner}/{repo}/issues?state=open&sort=created&direction=desc&per_page=30")
Get single issue:
http(method="GET", url="https://api.github.com/repos/{owner}/{repo}/issues/{number}")
Create issue:
http(method="POST", url="https://api.github.com/repos/{owner}/{repo}/issues", body={"title": "...", "body": "...", "labels": ["bug"]})
Add comment:
http(method="POST", url="https://api.github.com/repos/{owner}/{repo}/issues/{number}/comments", body={"body": "..."})
List PRs:
http(method="GET", url="https://api.github.com/repos/{owner}/{repo}/pulls?state=open&sort=created&direction=desc&per_page=30")
Create PR:
http(method="POST", url="https://api.github.com/repos/{owner}/{repo}/pulls", body={"title": "...", "body": "...", "head": "feature-branch", "base": "main", "draft": true})
Get PR diff:
http(method="GET", url="https://api.github.com/repos/{owner}/{repo}/pulls/{number}", headers=[{"name": "Accept", "value": "application/vnd.github.v3.diff"}])
Get repo info:
http(method="GET", url="https://api.github.com/repos/{owner}/{repo}")
List branches:
http(method="GET", url="https://api.github.com/repos/{owner}/{repo}/branches")
List recent commits:
http(method="GET", url="https://api.github.com/repos/{owner}/{repo}/commits?per_page=10")
When the user says "my PRs", "my issues", or "my repos", they mean the user who owns github_token. Don't try to list a single repo, hit the search/user endpoints instead.
Get the authenticated user (resolves who @me is):
http(method="GET", url="https://api.github.com/user")
My latest PRs across all repos:
http(method="GET", url="https://api.github.com/search/issues?q=is:pr+author:%40me+sort:updated-desc&per_page=20")
My open issues across all repos (assigned to me):
http(method="GET", url="https://api.github.com/search/issues?q=is:issue+is:open+assignee:%40me&per_page=20")
PRs that need my review:
http(method="GET", url="https://api.github.com/search/issues?q=is:pr+is:open+review-requested:%40me")
My repos (list all repos accessible to the token):
http(method="GET", url="https://api.github.com/user/repos?sort=updated&per_page=30")
GitHub has three search endpoints. Build queries with the search syntax.
Search issues and PRs (one endpoint, filter with is:pr or is:issue):
http(method="GET", url="https://api.github.com/search/issues?q=repo:{owner}/{repo}+is:pr+is:open+label:bug")
/search/pulls endpoint; /search/issues is the unified endpoint for both issues and PRs.Search code:
http(method="GET", url="https://api.github.com/search/code?q=fn+main+language:rust+repo:{owner}/{repo}")
Search repositories:
http(method="GET", url="https://api.github.com/search/repositories?q=tetris+language:rust&sort=stars")
URL-encode @ as %40 and spaces as + in q= values.
The http tool returns an envelope:
{"status": 200, "headers": {...}, "body": <parsed value>}
body is already a parsed Python dict or list. Do not call json.loads() on it. Example:
r = await http(method="GET", url="https://api.github.com/repos/{owner}/{repo}/pulls/123")
if r["status"] != 200:
FINAL(f"GitHub returned HTTP {r['status']}: {r['body']}")
pr = r["body"] # dict, not a string
title = pr["title"] # use direct indexing; these keys always exist on a 2xx
state = pr["state"]
head = pr["head"]["ref"]
base = pr["base"]["ref"]
Accept: application/vnd.github.v3.diff etc.) — body is a str containing the raw unified diff; use it as-is.body = pr_meta.get("body", pr_meta) as a "safety net" — it hides real errors. If status isn't 2xx, fail fast.Link header for pagination.X-RateLimit-Remaining if doing bulk ops.{"message": "..."} with a non-2xx status — surface them literally in your FINAL answer.Authorization header — it is injected automatically by the credential system.draft: true unless the user explicitly says "ready for review".state parameter for issues/PRs is open, closed, or all — not active/inactive.per_page to control result count (max 100). Default is 30./search/issues?q=...+author:%40me. Do NOT loop over /repos/{owner}/{repo}/pulls for every repo; that's slow and you usually don't have the full repo list.