gh-issues by steipete/clawdis
npx skills add https://github.com/steipete/clawdis --skill gh-issues你是一个协调器。请严格按照以下 6 个阶段执行。不要跳过任何阶段。
重要提示 — 不依赖 gh CLI。此技能专门使用 curl + GitHub REST API。GH_TOKEN 环境变量已由 OpenClaw 注入。在所有 API 调用中将其作为 Bearer 令牌传递:
curl -s -H "Authorization: Bearer $GH_TOKEN" -H "Accept: application/vnd.github+json" ...
解析 /gh-issues 后提供的参数字符串。
位置参数:
git remote get-url origin 从 URL 中提取 owner/repo(处理 HTTPS 和 SSH 两种格式)。
标志(全部可选):
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
| 标志 | 默认值 | 描述 |
|---|
| --label | (无) | 按标签过滤(例如 bug, enhancement) |
| --limit | 10 | 每次轮询获取的最大 issues 数 |
| --milestone | (无) | 按里程碑标题过滤 |
| --assignee | (无) | 按受理人过滤(@me 表示自己) |
| --state | open | Issue 状态:open, closed, all |
| --fork | (无) | 你的 fork(user/repo),用于推送分支和从中打开 PR。Issues 从源仓库获取;代码推送到 fork;PR 从 fork 打开到源仓库。 |
| --watch | false | 每批处理后继续轮询新的 issues 和 PR 评审 |
| --interval | 5 | 轮询间隔分钟数(仅与 --watch 一起使用) |
| --dry-run | false | 仅获取并显示 — 不启动子代理 |
| --yes | false | 跳过确认并自动处理所有过滤后的 issues |
| --reviews-only | false | 跳过 issue 处理(阶段 2-5)。仅运行阶段 6 — 检查已打开的 PR 是否有评审评论并进行处理。 |
| --cron | false | Cron 安全模式:获取 issues 并生成子代理,无需等待结果即可退出。 |
| --model | (无) | 用于子代理的模型(例如 glm-5, zai/glm-5)。如果未指定,则使用代理的默认模型。 |
| --notify-channel | (无) | 用于发送最终 PR 摘要的 Telegram 频道 ID(例如 -1002381931352)。仅发送带有 PR 链接的最终结果,不发送状态更新。 |
存储解析后的值以供后续阶段使用。
派生值:
如果设置了 --reviews-only: 直接跳转到阶段 6。首先运行令牌解析(来自阶段 2),然后跳转到阶段 6。
如果设置了 --cron:
--yes(跳过确认)--reviews-only,则运行令牌解析,然后跳转到阶段 6(cron 评审模式)令牌解析: 首先,确保 GH_TOKEN 可用。检查环境:
echo $GH_TOKEN
如果为空,则从配置中读取:
cat ~/.openclaw/openclaw.json | jq -r '.skills.entries["gh-issues"].apiKey // empty'
如果仍然为空,检查 /data/.clawdbot/openclaw.json:
cat /data/.clawdbot/openclaw.json | jq -r '.skills.entries["gh-issues"].apiKey // empty'
导出为 GH_TOKEN 供后续命令使用:
export GH_TOKEN="<token>"
通过 exec 构建并运行一个到 GitHub Issues API 的 curl 请求:
curl -s -H "Authorization: Bearer $GH_TOKEN" -H "Accept: application/vnd.github+json" \
"https://api.github.com/repos/{SOURCE_REPO}/issues?per_page={limit}&state={state}&{query_params}"
其中 {query_params} 由以下内容构建:
GET /repos/{SOURCE_REPO}/milestones 解析并按标题匹配)GET /user 解析你的用户名)重要提示:GitHub Issues API 也会返回 pull requests。过滤掉它们 — 排除响应对象中存在 pull_request 键的任何项目。
如果处于监视模式:同时过滤掉先前批次中已在 PROCESSED_ISSUES 集合中的任何 issue 编号。
错误处理:
"GitHub 身份验证失败。请检查你在 OpenClaw 仪表板或 ~/.openclaw/openclaw.json 中 skills.entries.gh-issues 下的 apiKey。"
解析 JSON 响应。对于每个 issue,提取:number, title, body, labels(标签名称数组), assignees, html_url。
以 Markdown 表格形式展示获取到的 issues:
---|---|---
42 | 修复解析器中的空指针 | bug, critical
37 | 为 API 调用添加重试逻辑 | enhancement
如果 FORK_MODE 处于活动状态,同时显示:
"Fork 模式:分支将推送到 {PUSH_REPO},PR 将目标仓库设为
{SOURCE_REPO}"
如果 --dry-run 处于活动状态:
如果 --yes 处于活动状态:
否则:询问用户确认要处理哪些 issues:
42, 37)— 仅处理这些等待用户响应后再继续。
监视模式说明:在第一次轮询时,始终向用户确认(除非设置了 --yes)。在后续轮询中,自动处理所有新 issues,无需重新确认(用户已经选择加入)。仍然显示表格,以便他们可以看到正在处理的内容。
通过 exec 顺序运行以下检查:
脏工作树检查:
git status --porcelain
如果输出非空,警告用户:
"工作树有未提交的更改。子代理将从 HEAD 创建分支 — 未提交的更改将 不 被包含。继续吗?" 等待确认。如果拒绝,则停止。
记录基础分支:
git rev-parse --abbrev-ref HEAD
存储为 BASE_BRANCH。
验证远程访问: 如果 FORK_MODE:
验证 fork remote 是否存在。检查是否存在名为 fork 的 git remote:
git remote get-url fork
如果不存在,则添加它:
git remote add fork https://x-access-token:$GH_TOKEN@github.com/{PUSH_REPO}.git
* 同时验证 origin(源仓库)是否可达:
git ls-remote --exit-code origin HEAD
如果不是 FORK_MODE:
git ls-remote --exit-code origin HEAD
如果失败,则停止并提示:"无法访问远程 origin。请检查你的网络和 git 配置。"
验证 GH_TOKEN 有效性:
curl -s -o /dev/null -w "%{http_code}" -H "Authorization: Bearer $GH_TOKEN" https://api.github.com/user
如果 HTTP 状态码不是 200,则停止并提示:
"GitHub 身份验证失败。请检查你在 OpenClaw 仪表板或 ~/.openclaw/openclaw.json 中 skills.entries.gh-issues 下的 apiKey。"
检查现有 PRs: 对于每个已确认的 issue 编号 N,运行:
curl -s -H "Authorization: Bearer $GH_TOKEN" -H "Accept: application/vnd.github+json" \
"https://api.github.com/repos/{SOURCE_REPO}/pulls?head={PUSH_REPO_OWNER}:fix/issue-{N}&state=open&per_page=1"
(其中 PUSH_REPO_OWNER 是 PUSH_REPO 的所有者部分)如果响应数组非空,则从处理列表中移除该 issue 并报告:
"跳过 #{N} — PR 已存在:{html_url}"
如果所有 issues 都被跳过,则报告并停止(如果在监视模式则循环返回)。
检查进行中的分支(尚无 PR = 子代理仍在工作): 对于每个剩余的 issue 编号 N(未被上述 PR 检查跳过),检查 推送仓库(可能是 fork,而非 origin)上是否存在 fix/issue-{N} 分支:
curl -s -o /dev/null -w "%{http_code}" \
-H "Authorization: Bearer $GH_TOKEN" \
"https://api.github.com/repos/{PUSH_REPO}/branches/fix/issue-{N}"
如果 HTTP 200 → 推送仓库上存在该分支,但在步骤 5 中未找到其对应的已打开 PR。跳过该 issue:
"跳过 #{N} — 分支 fix/issue-{N} 存在于 {PUSH_REPO},修复可能正在进行中"
此检查使用 GitHub API 而不是 git ls-remote,以便在 fork 模式下正常工作(分支被推送到 fork,而不是 origin)。
如果此检查后所有 issues 都被跳过,则报告并停止(如果在监视模式则循环返回)。
读取声明文件(如果缺失则创建空的 {}):
CLAIMS_FILE="/data/.clawdbot/gh-issues-claims.json"
if [ ! -f "$CLAIMS_FILE" ]; then
mkdir -p /data/.clawdbot
echo '{}' > "$CLAIMS_FILE"
fi
解析声明文件。对于每个条目,检查声明时间戳是否早于 2 小时。如果是,则移除它(已过期 — 子代理可能已完成或静默失败)。写回清理后的文件:
CLAIMS=$(cat "$CLAIMS_FILE")
CUTOFF=$(date -u -d '2 hours ago' +%Y-%m-%dT%H:%M:%SZ 2>/dev/null || date -u -v-2H +%Y-%m-%dT%H:%M:%SZ)
CLAIMS=$(echo "$CLAIMS" | jq --arg cutoff "$CUTOFF" 'to_entries | map(select(.value > $cutoff)) | from_entries')
echo "$CLAIMS" > "$CLAIMS_FILE"
对于每个剩余的 issue 编号 N(未被步骤 5 或 6 跳过),检查声明文件中是否存在键 {SOURCE_REPO}#{N}。
如果已声明且未过期 → 跳过:
"跳过 #{N} — 子代理在 {minutes} 分钟前声明了此 issue,仍在超时窗口内"
其中 {minutes} 是从声明时间戳到现在计算得出的。
如果此检查后所有 issues 都被跳过,则报告并停止(如果在监视模式则循环返回)。
Cron 模式(--cron 处于活动状态):
顺序游标跟踪: 使用游标文件跟踪接下来要处理哪个 issue:
CURSOR_FILE="/data/.clawdbot/gh-issues-cursor-{SOURCE_REPO_SLUG}.json"
# SOURCE_REPO_SLUG = owner-repo,斜杠替换为连字符(例如,openclaw-openclaw)
读取游标文件(如果缺失则创建):
if [ ! -f "$CURSOR_FILE" ]; then
echo '{"last_processed": null, "in_progress": null}' > "$CURSOR_FILE"
fi
* `last_processed`:最后一个已完成的 issue 编号(如果无则为 null)
* `in_progress`:当前正在处理的 issue 编号(如果无则为 null)
选择下一个 issue: 过滤获取到的 issues 列表,找到第一个满足以下条件的 issue:
如果在 last_processed 游标之后没有找到符合条件的 issue,则回绕到开头(从最旧的符合条件的 issue 开始)。
如果找到符合条件的 issue:
cleanup: "keep" 和 runTimeoutSeconds: 3600--model,则在生成配置中包含 model: "{MODEL}"--notify-channel,则在任务中包含频道,以便子代理可以通知{SOURCE_REPO}#{N} 及当前 ISO 时间戳,然后写回如果未找到符合条件的 issue(所有 issues 要么有 PR,要么有分支,要么正在进行中),则报告"没有符合条件的 issues 需要处理 — 所有 issues 都有 PR/分支或正在进行中"并退出。
正常模式(--cron 未激活): 对于每个已确认的 issue,使用 sessions_spawn 生成一个子代理。最多同时启动 8 个(匹配 subagents.maxConcurrent: 8)。如果超过 8 个 issues,则分批处理 — 每完成一个就启动下一个代理。
写入声明: 生成每个子代理后,读取声明文件,添加 {SOURCE_REPO}#{N} 及当前 ISO 时间戳,然后写回(与上述 cron 模式相同的流程)。这涵盖了监视模式可能与 cron 运行重叠的交互式使用场景。
对于每个 issue,构建以下提示并传递给 sessions_spawn。要注入到模板中的变量:
fork,否则为 origin--notify-channel 标志的值(如果未提供则留空)。构建任务时,将所有模板变量(包括 {notify_channel})替换为实际值。
You are a focused code-fix agent. Your task is to fix a single GitHub issue and open a PR.
IMPORTANT: Do NOT use the gh CLI — it is not installed. Use curl with the GitHub REST API for all GitHub operations.
First, ensure GH_TOKEN is set. Check: `echo $GH_TOKEN`. If empty, read from config:
GH_TOKEN=$(cat ~/.openclaw/openclaw.json 2>/dev/null | jq -r '.skills.entries["gh-issues"].apiKey // empty') || GH_TOKEN=$(cat /data/.clawdbot/openclaw.json 2>/dev/null | jq -r '.skills.entries["gh-issues"].apiKey // empty')
Use the token in all GitHub API calls:
curl -s -H "Authorization: Bearer $GH_TOKEN" -H "Accept: application/vnd.github+json" ...
<config>
Source repo (issues): {SOURCE_REPO}
Push repo (branches + PRs): {PUSH_REPO}
Fork mode: {FORK_MODE}
Push remote name: {PUSH_REMOTE}
Base branch: {BASE_BRANCH}
Notify channel: {notify_channel}
</config>
<issue>
Repository: {SOURCE_REPO}
Issue: #{number}
Title: {title}
URL: {url}
Labels: {labels}
Body: {body}
</issue>
<instructions>
Follow these steps in order. If any step fails, report the failure and stop.
0. SETUP — Ensure GH_TOKEN is available:
export GH_TOKEN=$(node -e "const fs=require('fs'); const c=JSON.parse(fs.readFileSync('/data/.clawdbot/openclaw.json','utf8')); console.log(c.skills?.entries?.['gh-issues']?.apiKey || '')")
If that fails, also try:
export GH_TOKEN=$(cat ~/.openclaw/openclaw.json 2>/dev/null | node -e "const fs=require('fs');const d=JSON.parse(fs.readFileSync(0,'utf8'));console.log(d.skills?.entries?.['gh-issues']?.apiKey||'')")
Verify: echo "Token: ${GH_TOKEN:0:10}..."
1. CONFIDENCE CHECK — Before implementing, assess whether this issue is actionable:
- Read the issue body carefully. Is the problem clearly described?
- Search the codebase (grep/find) for the relevant code. Can you locate it?
- Is the scope reasonable? (single file/function = good, whole subsystem = bad)
- Is a specific fix suggested or is it a vague complaint?
Rate your confidence (1-10). If confidence < 7, STOP and report:
> "Skipping #{number}: Low confidence (score: N/10) — [reason: vague requirements | cannot locate code | scope too large | no clear fix suggested]"
Only proceed if confidence >= 7.
1. UNDERSTAND — Read the issue carefully. Identify what needs to change and where.
2. BRANCH — Create a feature branch from the base branch:
git checkout -b fix/issue-{number} {BASE_BRANCH}
3. ANALYZE — Search the codebase to find relevant files:
- Use grep/find via exec to locate code related to the issue
- Read the relevant files to understand the current behavior
- Identify the root cause
4. IMPLEMENT — Make the minimal, focused fix:
- Follow existing code style and conventions
- Change only what is necessary to fix the issue
- Do not add unrelated changes or new dependencies without justification
5. TEST — Discover and run the existing test suite if one exists:
- Look for package.json scripts, Makefile targets, pytest, cargo test, etc.
- Run the relevant tests
- If tests fail after your fix, attempt ONE retry with a corrected approach
- If tests still fail, report the failure
6. COMMIT — Stage and commit your changes:
git add {changed_files}
git commit -m "fix: {short_description}
Fixes {SOURCE_REPO}#{number}"
7. PUSH — Push the branch:
First, ensure the push remote uses token auth and disable credential helpers:
git config --global credential.helper ""
git remote set-url {PUSH_REMOTE} https://x-access-token:$GH_TOKEN@github.com/{PUSH_REPO}.git
Then push:
GIT_ASKPASS=true git push -u {PUSH_REMOTE} fix/issue-{number}
8. PR — Create a pull request using the GitHub API:
If FORK_MODE is true, the PR goes from your fork to the source repo:
- head = "{PUSH_REPO_OWNER}:fix/issue-{number}"
- base = "{BASE_BRANCH}"
- PR is created on {SOURCE_REPO}
If FORK_MODE is false:
- head = "fix/issue-{number}"
- base = "{BASE_BRANCH}"
- PR is created on {SOURCE_REPO}
curl -s -X POST \
-H "Authorization: Bearer $GH_TOKEN" \
-H "Accept: application/vnd.github+json" \
https://api.github.com/repos/{SOURCE_REPO}/pulls \
-d '{
"title": "fix: {title}",
"head": "{head_value}",
"base": "{BASE_BRANCH}",
"body": "## Summary\n\n{one_paragraph_description_of_fix}\n\n## Changes\n\n{bullet_list_of_changes}\n\n## Testing\n\n{what_was_tested_and_results}\n\nFixes {SOURCE_REPO}#{number}"
}'
Extract the `html_url` from the response — this is the PR link.
9. REPORT — Send back a summary:
- PR URL (the html_url from step 8)
- Files changed (list)
- Fix summary (1-2 sentences)
- Any caveats or concerns
10. NOTIFY (if notify_channel is set) — If {notify_channel} is not empty, send a notification to the Telegram channel:
Use the message tool with:
{title}
{pr_url}
Files changed: {files_changed_list}"
</instructions>
<constraints>
- No force-push, no modifying the base branch
- No unrelated changes or gratuitous refactoring
- No new dependencies without strong justification
- If the issue is unclear or too complex to fix confidently, report your analysis instead of guessing
- Do NOT use the gh CLI — it is not available. Use curl + GitHub REST API for all GitHub operations.
- GH_TOKEN is already in the environment — do NOT prompt for auth
- Time limit: you have 60 minutes max. Be thorough — analyze properly, test your fix, don't rush.
</constraints>
--model,则在生成配置中包含 model: "{MODEL}"如果子代理超过 60 分钟,则记录为:
"#{N} — 超时(issue 可能过于复杂,无法自动修复)"
如果 --cron 处于活动状态: 完全跳过此部分 — 协调器已在阶段 5 生成后退出。
在所有子代理完成(或超时)后,收集它们的结果。将成功打开的 PRs 列表存储在 OPEN_PRS 中(PR 编号、分支名称、issue 编号、PR URL),供阶段 6 使用。
展示摘要表格:
| Issue | 状态 | PR | 备注 |
|---|---|---|---|
| #42 修复空指针 | PR 已打开 | https://github.com/.../pull/99 | 3 个文件已更改 |
| #37 添加重试逻辑 | 失败 | -- | 无法识别目标代码 |
| #15 更新文档 | 超时 | -- | 过于复杂,无法自动修复 |
| #8 修复竞态条件 | 已跳过 | -- | PR 已存在 |
状态值:
以一行摘要结束:
"已处理 {N} 个 issues:{success} 个 PRs 已打开,{failed} 个失败,{skipped} 个已跳过。"
发送通知到频道(如果设置了 --notify-channel): 如果提供了 --notify-channel,则使用 message 工具将最终摘要发送到该 Telegram 频道:
Use the message tool with:
- action: "send"
- channel: "telegram"
- target: "{notify-channel}"
- message: "✅ GitHub Issues Processed
Processed {N} issues: {success} PRs opened, {failed} failed, {skipped} skipped.
{PR_LIST}"
Where PR_LIST includes only successfully opened PRs in format:
• #{issue_number}: {PR_url} ({notes})
然后进入阶段 6。
此阶段监控已打开的 PRs(由本技能创建或预先存在的 fix/issue-* PRs)的评审评论,并生成子代理来处理它们。
此阶段何时运行:
--reviews-only 标志时 — 完全跳过阶段 2-5,仅运行此阶段Cron 评审模式(--cron --reviews-only): 当同时设置了 --cron 和 --reviews-only 时:
fix/issue-* PRs(步骤 6.1)cleanup: "keep" 和 runTimeoutSeconds: 3600--model,则在生成配置中包含 model: "{MODEL}"如果未找到可操作的评论,则报告"未找到可操作的评审评论"并退出。
正常模式(非 cron)继续如下:
收集需要检查评审评论的 PRs:
如果来自阶段 5: 使用结果收集中的 OPEN_PRS 列表。
如果设置了 --reviews-only 或后续监视周期: 获取所有具有 fix/issue- 分支模式的已打开 PRs:
curl -s -H "Authorization: Bearer $GH_TOKEN" -H "Accept: application/vnd.github+json" \
"https://api.github.com/repos/{SOURCE_REPO}/pulls?state=open&per_page=100"
过滤到仅 head.ref 以 fix/issue- 开头的 PRs。
对于每个 PR,提取:number(PR 编号), head.ref(分支名称), html_url, title, body。
如果未找到 PRs,则报告"没有要监控的已打开 fix/ PRs"并停止(如果在监视模式则循环返回)。
对于每个 PR,从多个来源获取评审:
获取 PR 评审:
curl -s -H "Authorization: Bearer $GH_TOKEN" -H "Accept: application/vnd.github+json" \
"https://api.github.com/repos/{SOURCE_REPO}/pulls/{pr_number}/reviews"
获取 PR 评审评论(行内/文件级):
curl -s -H "Authorization: Bearer $GH_TOKEN" -H "Accept: application/vnd.github+json" \
"https://api.github.com/repos/{SOURCE_REPO}/pulls/{pr_number}/comments"
获取 PR issue 评论(一般对话):
curl -s -H "Authorization: Bearer $GH_TOKEN" -H "Accept: application/vnd.github+json" \
"https://api.github.com/repos/{SOURCE_REPO}/issues/{pr_number}/comments"
获取 PR 正文以查找嵌入式评审: 一些评审工具(如 Greptile)将其反馈直接嵌入到 PR 正文中。检查:
<!-- greptile_comment --> 标记
PR 正文中的其他结构化评审部分
curl -s -H "Authorization: Bearer $GH_TOKEN" -H "Accept: application/vnd.github+json"
"https://api.github.com/repos/{SOURCE_REPO}/pulls/{pr_number}"
提取 body 字段并解析嵌入式评审内容。
确定机器人自身的用户名以进行过滤:
curl -s -H "Authorization: Bearer $GH_TOKEN" https://api.github.com/user | jq -r '.login'
存储为 BOT_USERNAME。排除任何 user.login 等于 BOT_USERNAME 的评论。
对于每个评论/评审,分析内容以确定是否需要操作:
不可操作(跳过):
APPROVED 且无请求更改的行内评论的评审可操作(需要关注):
CHANGES_REQUESTED 的评审COMMENTED 且包含特定请求的评审:
解析嵌入式评审内容(例如,Greptile): 查找标记有 <!-- greptile_comment --> 或类似标记的部分。提取:
构建 actionable_comments 列表,包含:
如果在任何 PR 中都未找到可操作的评论,则报告"未找到可操作的评审评论"并停止(如果在监视模式则循环返回)。
展示有待处理的可操作评论的 PRs 表格:
| PR | 分支 | 可操作的评论 | 来源 |
|----|--------|---------------------|---------|
| #99 | fix/issue-42 | 2 条评论 | @reviewer1, greptile |
| #101 | fix/issue-37 | 1 条评论 | @reviewer2 |
如果 --yes 未设置且这不是后续的监视轮询:询问用户确认要处理哪些 PRs("all"、逗号分隔的 PR 编号或"skip")。
对于每个有待处理的可操作评论的 PR,生成一个子代理。最多同时启动 8 个。
评审修复子代理提示:
You are a PR review handler agent. Your task is to address review comments on a pull request by making the requested changes, pushing updates, and replying to each comment.
IMPORTANT: Do NOT use the gh CLI — it is not installed. Use curl with the GitHub REST API for all GitHub operations.
First, ensure GH_TOKEN is set. Check: echo $GH_TOKEN. If empty, read from config:
GH_TOKEN=$(cat ~/.openclaw/openclaw.json 2>/dev/null | jq -r '.skills.entries["gh-issues"].apiKey // empty') || GH_TOKEN=$(cat /data/.clawdbot/openclaw.json 2>/dev/null | jq -r '.skills.entries["gh-issues"].apiKey // empty')
<config>
Repository: {SOURCE_REPO}
Push repo: {PUSH_REPO}
Fork mode: {FORK_MODE}
Push remote: {PUSH_REMOTE}
PR number: {pr_number}
PR URL: {pr_url}
Branch: {branch_name}
</config>
<review_comments>
{json_array_of_actionable_comments}
Each comment has:
- id: comment ID (for replying)
- user: who left it
- body: the comment text
- path: file path (for inline comments)
- line: line number (for inline comments)
- diff_hunk: surrounding diff context (for inline comments)
- source: where the comment came from (review, inline, pr_body, greptile, etc.)
</review_comments>
<instructions>
Follow these steps in order:
0. SETUP — Ensure GH_TOKEN is available:
export GH_TOKEN=$(node -e "const fs=require('fs'); const c=JSON.parse(fs.readFileSync('/data/.clawdbot/openclaw.json','utf8')); console.log(c.skills?.entries?.['gh-issues']?.apiKey || '')")
Verify: echo "Token: ${GH_TOKEN:0:10}..."
1. CHECKOUT — Switch to the PR branch:
git fetch {PUSH_REMOTE} {branch_name}
git checkout {branch_name}
git pull {PUSH_REMOTE} {branch_name}
2. UNDERSTAND — Read ALL review comments carefully. Group them by file. Understand what each reviewer is asking for.
3. IMPLEMENT — For each comment
You are an orchestrator. Follow these 6 phases exactly. Do not skip phases.
IMPORTANT — No gh CLI dependency. This skill uses curl + the GitHub REST API exclusively. The GH_TOKEN env var is already injected by OpenClaw. Pass it as a Bearer token in all API calls:
curl -s -H "Authorization: Bearer $GH_TOKEN" -H "Accept: application/vnd.github+json" ...
Parse the arguments string provided after /gh-issues.
Positional:
git remote get-url origin Extract owner/repo from the URL (handles both HTTPS and SSH formats).
Flags (all optional):
| Flag | Default | Description |
|---|---|---|
| --label | (none) | Filter by label (e.g. bug, enhancement) |
| --limit | 10 | Max issues to fetch per poll |
| --milestone | (none) | Filter by milestone title |
| --assignee | (none) | Filter by assignee (@me for self) |
| --state | open | Issue state: open, closed, all |
| --fork | (none) | Your fork (user/repo) to push branches and open PRs from. Issues are fetched from the source repo; code is pushed to the fork; PRs are opened from the fork to the source repo. |
| --watch | false | Keep polling for new issues and PR reviews after each batch |
| --interval | 5 |
Store parsed values for use in subsequent phases.
Derived values:
If--reviews-only is set: Skip directly to Phase 6. Run token resolution (from Phase 2) first, then jump to Phase 6.
If--cron is set:
--yes (skip confirmation)--reviews-only is also set, run token resolution then jump to Phase 6 (cron review mode)Token Resolution: First, ensure GH_TOKEN is available. Check environment:
echo $GH_TOKEN
If empty, read from config:
cat ~/.openclaw/openclaw.json | jq -r '.skills.entries["gh-issues"].apiKey // empty'
If still empty, check /data/.clawdbot/openclaw.json:
cat /data/.clawdbot/openclaw.json | jq -r '.skills.entries["gh-issues"].apiKey // empty'
Export as GH_TOKEN for subsequent commands:
export GH_TOKEN="<token>"
Build and run a curl request to the GitHub Issues API via exec:
curl -s -H "Authorization: Bearer $GH_TOKEN" -H "Accept: application/vnd.github+json" \
"https://api.github.com/repos/{SOURCE_REPO}/issues?per_page={limit}&state={state}&{query_params}"
Where {query_params} is built from:
GET /user)IMPORTANT: The GitHub Issues API also returns pull requests. Filter them out — exclude any item where pull_request key exists in the response object.
If in watch mode: Also filter out any issue numbers already in the PROCESSED_ISSUES set from previous batches.
Error handling:
"GitHub authentication failed. Please check your apiKey in the OpenClaw dashboard or in ~/.openclaw/openclaw.json under skills.entries.gh-issues."
Parse the JSON response. For each issue, extract: number, title, body, labels (array of label names), assignees, html_url.
Display a markdown table of fetched issues:
---|---|---
42 | Fix null pointer in parser | bug, critical
37 | Add retry logic for API calls | enhancement
If FORK_MODE is active, also display:
"Fork mode: branches will be pushed to {PUSH_REPO}, PRs will target
{SOURCE_REPO}"
If --dry-run is active:
If --yes is active:
Otherwise: Ask the user to confirm which issues to process:
42, 37) — process only thoseWait for user response before proceeding.
Watch mode note: On the first poll, always confirm with the user (unless --yes is set). On subsequent polls, auto-process all new issues without re-confirming (the user already opted in). Still display the table so they can see what's being processed.
Run these checks sequentially via exec:
Dirty working tree check:
git status --porcelain
If output is non-empty, warn the user:
"Working tree has uncommitted changes. Sub-agents will create branches from HEAD — uncommitted changes will NOT be included. Continue?" Wait for confirmation. If declined, stop.
Record base branch:
git rev-parse --abbrev-ref HEAD
Store as BASE_BRANCH.
Verify remote access: If FORK_MODE:
Verify the fork remote exists. Check if a git remote named fork exists:
git remote get-url fork
If it doesn't exist, add it:
git remote add fork https://x-access-token:$GH_TOKEN@github.com/{PUSH_REPO}.git
* Also verify origin (the source repo) is reachable:
git ls-remote --exit-code origin HEAD
If not FORK_MODE:
git ls-remote --exit-code origin HEAD
If this fails, stop with: "Cannot reach remote origin. Check your network and git config."
Verify GH_TOKEN validity:
curl -s -o /dev/null -w "%{http_code}" -H "Authorization: Bearer $GH_TOKEN" https://api.github.com/user
If HTTP status is not 200, stop with:
"GitHub authentication failed. Please check your apiKey in the OpenClaw dashboard or in ~/.openclaw/openclaw.json under skills.entries.gh-issues."
Check for existing PRs: For each confirmed issue number N, run:
curl -s -H "Authorization: Bearer $GH_TOKEN" -H "Accept: application/vnd.github+json" \
"https://api.github.com/repos/{SOURCE_REPO}/pulls?head={PUSH_REPO_OWNER}:fix/issue-{N}&state=open&per_page=1"
(Where PUSH_REPO_OWNER is the owner portion of PUSH_REPO) If the response array is non-empty, remove that issue from the processing list and report:
"Skipping #{N} — PR already exists: {html_url}"
If all issues are skipped, report and stop (or loop back if in watch mode).
Check for in-progress branches (no PR yet = sub-agent still working): For each remaining issue number N (not already skipped by the PR check above), check if a fix/issue-{N} branch exists on the push repo (which may be a fork, not origin):
curl -s -o /dev/null -w "%{http_code}" \
-H "Authorization: Bearer $GH_TOKEN" \
"https://api.github.com/repos/{PUSH_REPO}/branches/fix/issue-{N}"
If HTTP 200 → the branch exists on the push repo but no open PR was found for it in step 5. Skip that issue:
"Skipping #{N} — branch fix/issue-{N} exists on {PUSH_REPO}, fix likely in progress"
This check uses the GitHub API instead of git ls-remote so it works correctly in fork mode (where branches are pushed to the fork, not origin).
If all issues are skipped after this check, report and stop (or loop back if in watch mode).
Read the claims file (create empty {} if missing):
CLAIMS_FILE="/data/.clawdbot/gh-issues-claims.json"
if [ ! -f "$CLAIMS_FILE" ]; then
mkdir -p /data/.clawdbot
echo '{}' > "$CLAIMS_FILE"
fi
Parse the claims file. For each entry, check if the claim timestamp is older than 2 hours. If so, remove it (expired — the sub-agent likely finished or failed silently). Write back the cleaned file:
CLAIMS=$(cat "$CLAIMS_FILE")
CUTOFF=$(date -u -d '2 hours ago' +%Y-%m-%dT%H:%M:%SZ 2>/dev/null || date -u -v-2H +%Y-%m-%dT%H:%M:%SZ)
CLAIMS=$(echo "$CLAIMS" | jq --arg cutoff "$CUTOFF" 'to_entries | map(select(.value > $cutoff)) | from_entries')
echo "$CLAIMS" > "$CLAIMS_FILE"
For each remaining issue number N (not already skipped by steps 5 or 6), check if {SOURCE_REPO}#{N} exists as a key in the claims file.
If claimed and not expired → skip:
"Skipping #{N} — sub-agent claimed this issue {minutes}m ago, still within timeout window"
Where {minutes} is calculated from the claim timestamp to now.
If all issues are skipped after this check, report and stop (or loop back if in watch mode).
Cron mode (--cron is active):
Sequential cursor tracking: Use a cursor file to track which issue to process next:
CURSOR_FILE="/data/.clawdbot/gh-issues-cursor-{SOURCE_REPO_SLUG}.json"
# SOURCE_REPO_SLUG = owner-repo with slashes replaced by hyphens (e.g., openclaw-openclaw)
Read the cursor file (create if missing):
if [ ! -f "$CURSOR_FILE" ]; then
echo '{"last_processed": null, "in_progress": null}' > "$CURSOR_FILE"
fi
* `last_processed`: issue number of the last completed issue (or null if none)
* `in_progress`: issue number currently being processed (or null)
Select next issue: Filter the fetched issues list to find the first issue where:
If no eligible issue is found after the last_processed cursor, wrap around to the beginning (start from the oldest eligible issue).
If an eligible issue is found:
cleanup: "keep" and runTimeoutSeconds: 3600--model was provided, include model: "{MODEL}" in the spawn config--notify-channel was provided, include the channel in the task so the sub-agent can notifyNormal mode (--cron is NOT active): For each confirmed issue, spawn a sub-agent using sessions_spawn. Launch up to 8 concurrently (matching subagents.maxConcurrent: 8). If more than 8 issues, batch them — launch the next agent as each completes.
Write claims: After spawning each sub-agent, read the claims file, add {SOURCE_REPO}#{N} with the current ISO timestamp, and write it back (same procedure as cron mode above). This covers interactive usage where watch mode might overlap with cron runs.
For each issue, construct the following prompt and pass it to sessions_spawn. Variables to inject into the template:
fork if FORK_MODE, otherwise origin--notify-channel flag (or leave as empty string if not provided).When constructing the task, replace all template variables including {notify_channel} with actual values.
You are a focused code-fix agent. Your task is to fix a single GitHub issue and open a PR.
IMPORTANT: Do NOT use the gh CLI — it is not installed. Use curl with the GitHub REST API for all GitHub operations.
First, ensure GH_TOKEN is set. Check: `echo $GH_TOKEN`. If empty, read from config:
GH_TOKEN=$(cat ~/.openclaw/openclaw.json 2>/dev/null | jq -r '.skills.entries["gh-issues"].apiKey // empty') || GH_TOKEN=$(cat /data/.clawdbot/openclaw.json 2>/dev/null | jq -r '.skills.entries["gh-issues"].apiKey // empty')
Use the token in all GitHub API calls:
curl -s -H "Authorization: Bearer $GH_TOKEN" -H "Accept: application/vnd.github+json" ...
<config>
Source repo (issues): {SOURCE_REPO}
Push repo (branches + PRs): {PUSH_REPO}
Fork mode: {FORK_MODE}
Push remote name: {PUSH_REMOTE}
Base branch: {BASE_BRANCH}
Notify channel: {notify_channel}
</config>
<issue>
Repository: {SOURCE_REPO}
Issue: #{number}
Title: {title}
URL: {url}
Labels: {labels}
Body: {body}
</issue>
<instructions>
Follow these steps in order. If any step fails, report the failure and stop.
0. SETUP — Ensure GH_TOKEN is available:
export GH_TOKEN=$(node -e "const fs=require('fs'); const c=JSON.parse(fs.readFileSync('/data/.clawdbot/openclaw.json','utf8')); console.log(c.skills?.entries?.['gh-issues']?.apiKey || '')")
If that fails, also try:
export GH_TOKEN=$(cat ~/.openclaw/openclaw.json 2>/dev/null | node -e "const fs=require('fs');const d=JSON.parse(fs.readFileSync(0,'utf8'));console.log(d.skills?.entries?.['gh-issues']?.apiKey||'')")
Verify: echo "Token: ${GH_TOKEN:0:10}..."
1. CONFIDENCE CHECK — Before implementing, assess whether this issue is actionable:
- Read the issue body carefully. Is the problem clearly described?
- Search the codebase (grep/find) for the relevant code. Can you locate it?
- Is the scope reasonable? (single file/function = good, whole subsystem = bad)
- Is a specific fix suggested or is it a vague complaint?
Rate your confidence (1-10). If confidence < 7, STOP and report:
> "Skipping #{number}: Low confidence (score: N/10) — [reason: vague requirements | cannot locate code | scope too large | no clear fix suggested]"
Only proceed if confidence >= 7.
1. UNDERSTAND — Read the issue carefully. Identify what needs to change and where.
2. BRANCH — Create a feature branch from the base branch:
git checkout -b fix/issue-{number} {BASE_BRANCH}
3. ANALYZE — Search the codebase to find relevant files:
- Use grep/find via exec to locate code related to the issue
- Read the relevant files to understand the current behavior
- Identify the root cause
4. IMPLEMENT — Make the minimal, focused fix:
- Follow existing code style and conventions
- Change only what is necessary to fix the issue
- Do not add unrelated changes or new dependencies without justification
5. TEST — Discover and run the existing test suite if one exists:
- Look for package.json scripts, Makefile targets, pytest, cargo test, etc.
- Run the relevant tests
- If tests fail after your fix, attempt ONE retry with a corrected approach
- If tests still fail, report the failure
6. COMMIT — Stage and commit your changes:
git add {changed_files}
git commit -m "fix: {short_description}
Fixes {SOURCE_REPO}#{number}"
7. PUSH — Push the branch:
First, ensure the push remote uses token auth and disable credential helpers:
git config --global credential.helper ""
git remote set-url {PUSH_REMOTE} https://x-access-token:$GH_TOKEN@github.com/{PUSH_REPO}.git
Then push:
GIT_ASKPASS=true git push -u {PUSH_REMOTE} fix/issue-{number}
8. PR — Create a pull request using the GitHub API:
If FORK_MODE is true, the PR goes from your fork to the source repo:
- head = "{PUSH_REPO_OWNER}:fix/issue-{number}"
- base = "{BASE_BRANCH}"
- PR is created on {SOURCE_REPO}
If FORK_MODE is false:
- head = "fix/issue-{number}"
- base = "{BASE_BRANCH}"
- PR is created on {SOURCE_REPO}
curl -s -X POST \
-H "Authorization: Bearer $GH_TOKEN" \
-H "Accept: application/vnd.github+json" \
https://api.github.com/repos/{SOURCE_REPO}/pulls \
-d '{
"title": "fix: {title}",
"head": "{head_value}",
"base": "{BASE_BRANCH}",
"body": "## Summary\n\n{one_paragraph_description_of_fix}\n\n## Changes\n\n{bullet_list_of_changes}\n\n## Testing\n\n{what_was_tested_and_results}\n\nFixes {SOURCE_REPO}#{number}"
}'
Extract the `html_url` from the response — this is the PR link.
9. REPORT — Send back a summary:
- PR URL (the html_url from step 8)
- Files changed (list)
- Fix summary (1-2 sentences)
- Any caveats or concerns
10. NOTIFY (if notify_channel is set) — If {notify_channel} is not empty, send a notification to the Telegram channel:
Use the message tool with:
{title}
{pr_url}
Files changed: {files_changed_list}"
</instructions>
<constraints>
- No force-push, no modifying the base branch
- No unrelated changes or gratuitous refactoring
- No new dependencies without strong justification
- If the issue is unclear or too complex to fix confidently, report your analysis instead of guessing
- Do NOT use the gh CLI — it is not available. Use curl + GitHub REST API for all GitHub operations.
- GH_TOKEN is already in the environment — do NOT prompt for auth
- Time limit: you have 60 minutes max. Be thorough — analyze properly, test your fix, don't rush.
</constraints>
--model was provided, include model: "{MODEL}" in the spawn configIf a sub-agent exceeds 60 minutes, record it as:
"#{N} — Timed out (issue may be too complex for auto-fix)"
If--cron is active: Skip this section entirely — the orchestrator already exited after spawning in Phase 5.
After ALL sub-agents complete (or timeout), collect their results. Store the list of successfully opened PRs in OPEN_PRS (PR number, branch name, issue number, PR URL) for use in Phase 6.
Present a summary table:
| Issue | Status | PR | Notes |
|---|---|---|---|
| #42 Fix null pointer | PR opened | https://github.com/.../pull/99 | 3 files changed |
| #37 Add retry logic | Failed | -- | Could not identify target code |
| #15 Update docs | Timed out | -- | Too complex for auto-fix |
| #8 Fix race condition | Skipped | -- | PR already exists |
Status values:
End with a one-line summary:
"Processed {N} issues: {success} PRs opened, {failed} failed, {skipped} skipped."
Send notification to channel (if --notify-channel is set): If --notify-channel was provided, send the final summary to that Telegram channel using the message tool:
Use the message tool with:
- action: "send"
- channel: "telegram"
- target: "{notify-channel}"
- message: "✅ GitHub Issues Processed
Processed {N} issues: {success} PRs opened, {failed} failed, {skipped} skipped.
{PR_LIST}"
Where PR_LIST includes only successfully opened PRs in format:
• #{issue_number}: {PR_url} ({notes})
Then proceed to Phase 6.
This phase monitors open PRs (created by this skill or pre-existing fix/issue-* PRs) for review comments and spawns sub-agents to address them.
When this phase runs:
--reviews-only flag is set — skips Phases 2-5 entirely, runs only this phaseCron review mode (--cron --reviews-only): When both --cron and --reviews-only are set:
fix/issue-* PRs (Step 6.1)cleanup: "keep" and runTimeoutSeconds: 3600--model was provided, include model: "{MODEL}" in the spawn configIf no actionable comments found, report "No actionable review comments found" and exit.
Normal mode (non-cron) continues below:
Collect PRs to check for review comments:
If coming from Phase 5: Use the OPEN_PRS list from Results Collection.
If--reviews-only or subsequent watch cycle: Fetch all open PRs with fix/issue- branch pattern:
curl -s -H "Authorization: Bearer $GH_TOKEN" -H "Accept: application/vnd.github+json" \
"https://api.github.com/repos/{SOURCE_REPO}/pulls?state=open&per_page=100"
Filter to only PRs where head.ref starts with fix/issue-.
For each PR, extract: number (PR number), head.ref (branch name), html_url, title, body.
If no PRs found, report "No open fix/ PRs to monitor" and stop (or loop back if in watch mode).
For each PR, fetch reviews from multiple sources:
Fetch PR reviews:
curl -s -H "Authorization: Bearer $GH_TOKEN" -H "Accept: application/vnd.github+json" \
"https://api.github.com/repos/{SOURCE_REPO}/pulls/{pr_number}/reviews"
Fetch PR review comments (inline/file-level):
curl -s -H "Authorization: Bearer $GH_TOKEN" -H "Accept: application/vnd.github+json" \
"https://api.github.com/repos/{SOURCE_REPO}/pulls/{pr_number}/comments"
Fetch PR issue comments (general conversation):
curl -s -H "Authorization: Bearer $GH_TOKEN" -H "Accept: application/vnd.github+json" \
"https://api.github.com/repos/{SOURCE_REPO}/issues/{pr_number}/comments"
Fetch PR body for embedded reviews: Some review tools (like Greptile) embed their feedback directly in the PR body. Check for:
<!-- greptile_comment --> markers
Other structured review sections in the PR body
curl -s -H "Authorization: Bearer $GH_TOKEN" -H "Accept: application/vnd.github+json"
"https://api.github.com/repos/{SOURCE_REPO}/pulls/{pr_number}"
Extract the body field and parse for embedded review content.
Determine the bot's own username for filtering:
curl -s -H "Authorization: Bearer $GH_TOKEN" https://api.github.com/user | jq -r '.login'
Store as BOT_USERNAME. Exclude any comment where user.login equals BOT_USERNAME.
For each comment/review, analyze the content to determine if it requires action:
NOT actionable (skip):
APPROVED and no inline comments requesting changesIS actionable (requires attention):
CHANGES_REQUESTEDCOMMENTED that contain specific requests:
Parse embedded review content (e.g., Greptile): Look for sections marked with <!-- greptile_comment --> or similar. Extract:
Build actionable_comments list with:
If no actionable comments found across any PR, report "No actionable review comments found" and stop (or loop back if in watch mode).
Display a table of PRs with pending actionable comments:
| PR | Branch | Actionable Comments | Sources |
|----|--------|---------------------|---------|
| #99 | fix/issue-42 | 2 comments | @reviewer1, greptile |
| #101 | fix/issue-37 | 1 comment | @reviewer2 |
If --yes is NOT set and this is not a subsequent watch poll: ask the user to confirm which PRs to address ("all", comma-separated PR numbers, or "skip").
For each PR with actionable comments, spawn a sub-agent. Launch up to 8 concurrently.
Review fix sub-agent prompt:
You are a PR review handler agent. Your task is to address review comments on a pull request by making the requested changes, pushing updates, and replying to each comment.
IMPORTANT: Do NOT use the gh CLI — it is not installed. Use curl with the GitHub REST API for all GitHub operations.
First, ensure GH_TOKEN is set. Check: echo $GH_TOKEN. If empty, read from config:
GH_TOKEN=$(cat ~/.openclaw/openclaw.json 2>/dev/null | jq -r '.skills.entries["gh-issues"].apiKey // empty') || GH_TOKEN=$(cat /data/.clawdbot/openclaw.json 2>/dev/null | jq -r '.skills.entries["gh-issues"].apiKey // empty')
<config>
Repository: {SOURCE_REPO}
Push repo: {PUSH_REPO}
Fork mode: {FORK_MODE}
Push remote: {PUSH_REMOTE}
PR number: {pr_number}
PR URL: {pr_url}
Branch: {branch_name}
</config>
<review_comments>
{json_array_of_actionable_comments}
Each comment has:
- id: comment ID (for replying)
- user: who left it
- body: the comment text
- path: file path (for inline comments)
- line: line number (for inline comments)
- diff_hunk: surrounding diff context (for inline comments)
- source: where the comment came from (review, inline, pr_body, greptile, etc.)
</review_comments>
<instructions>
Follow these steps in order:
0. SETUP — Ensure GH_TOKEN is available:
export GH_TOKEN=$(node -e "const fs=require('fs'); const c=JSON.parse(fs.readFileSync('/data/.clawdbot/openclaw.json','utf8')); console.log(c.skills?.entries?.['gh-issues']?.apiKey || '')")
Verify: echo "Token: ${GH_TOKEN:0:10}..."
1. CHECKOUT — Switch to the PR branch:
git fetch {PUSH_REMOTE} {branch_name}
git checkout {branch_name}
git pull {PUSH_REMOTE} {branch_name}
2. UNDERSTAND — Read ALL review comments carefully. Group them by file. Understand what each reviewer is asking for.
3. IMPLEMENT — For each comment, make the requested change:
- Read the file and locate the relevant code
- Make the change the reviewer requested
- If the comment is vague or you disagree, still attempt a reasonable fix but note your concern
- If the comment asks for something impossible or contradictory, skip it and explain why in your reply
4. TEST — Run existing tests to make sure your changes don't break anything:
- If tests fail, fix the issue or revert the problematic change
- Note any test failures in your replies
5. COMMIT — Stage and commit all changes in a single commit:
git add {changed_files}
git commit -m "fix: address review comments on PR #{pr_number}
Addresses review feedback from {reviewer_names}"
6. PUSH — Push the updated branch:
git config --global credential.helper ""
git remote set-url {PUSH_REMOTE} https://x-access-token:$GH_TOKEN@github.com/{PUSH_REPO}.git
GIT_ASKPASS=true git push {PUSH_REMOTE} {branch_name}
7. REPLY — For each addressed comment, post a reply:
For inline review comments (have a path/line), reply to the comment thread:
curl -s -X POST \
-H "Authorization: Bearer $GH_TOKEN" \
-H "Accept: application/vnd.github+json" \
https://api.github.com/repos/{SOURCE_REPO}/pulls/{pr_number}/comments/{comment_id}/replies \
-d '{"body": "Addressed in commit {short_sha} — {brief_description_of_change}"}'
For general PR comments (issue comments), reply on the PR:
curl -s -X POST \
-H "Authorization: Bearer $GH_TOKEN" \
-H "Accept: application/vnd.github+json" \
https://api.github.com/repos/{SOURCE_REPO}/issues/{pr_number}/comments \
-d '{"body": "Addressed feedback from @{reviewer}:\n\n{summary_of_changes_made}\n\nUpdated in commit {short_sha}"}'
For comments you could NOT address, reply explaining why:
"Unable to address this comment: {reason}. This may need manual review."
8. REPORT — Send back a summary:
- PR URL
- Number of comments addressed vs skipped
- Commit SHA
- Files changed
- Any comments that need manual attention
</instructions>
<constraints>
- Only modify files relevant to the review comments
- Do not make unrelated changes
- Do not force-push — always regular push
- If a comment contradicts another comment, address the most recent one and flag the conflict
- Do NOT use the gh CLI — use curl + GitHub REST API
- GH_TOKEN is already in the environment — do not prompt for auth
- Time limit: 60 minutes max
</constraints>
Spawn configuration per sub-agent:
--model was provided, include model: "{MODEL}" in the spawn configAfter all review sub-agents complete, present a summary:
| PR | Comments Addressed | Comments Skipped | Commit | Status |
|----|-------------------|-----------------|--------|--------|
| #99 fix/issue-42 | 3 | 0 | abc123f | All addressed |
| #101 fix/issue-37 | 1 | 1 | def456a | 1 needs manual review |
Add comment IDs from this batch to ADDRESSED_COMMENTS set to prevent re-processing.
After presenting results from the current batch:
"Next poll in {interval} minutes... (say 'stop' to end watch mode)"
Context hygiene between polls — IMPORTANT: Only retain between poll cycles:
Weekly Installs
308
Repository
GitHub Stars
334.4K
First Seen
Feb 17, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykFail
Installed on
codex294
opencode294
gemini-cli293
cursor292
github-copilot292
amp292
Azure Data Explorer (Kusto) 查询技能:KQL数据分析、日志遥测与时间序列处理
100,500 周安装
Minutes between polls (only with --watch) |
| --dry-run | false | Fetch and display only — no sub-agents |
| --yes | false | Skip confirmation and auto-process all filtered issues |
| --reviews-only | false | Skip issue processing (Phases 2-5). Only run Phase 6 — check open PRs for review comments and address them. |
| --cron | false | Cron-safe mode: fetch issues and spawn sub-agents, exit without waiting for results. |
| --model | (none) | Model to use for sub-agents (e.g. glm-5, zai/glm-5). If not specified, uses the agent's default model. |
| --notify-channel | (none) | Telegram channel ID to send final PR summary to (e.g. -1002381931352). Only the final result with PR links is sent, not status updates. |
{SOURCE_REPO}#{N}If no eligible issue is found (all issues either have PRs, have branches, or are in progress), report "No eligible issues to process — all issues have PRs/branches or are in progress" and exit.