gh-image:命令行上传 GitHub 附件
从终端把截图、PDF、日志等文件直接传到 GitHub issue、PR 或 README,生成标准 user-attachments 链接,私有仓库的上传保持私有。
SKILL.md 的 allowed-tools 严格限定为 gh 子命令与只读工具,明确要求用户自行安装/认证、每次请求前确认目标仓库与文件、将 PR/issue 正文视为不可信注入源并给出隔离标记,会话凭据的完整账户权限风险被显著披露并给出泄露恢复路径;扣分点:底层凭据是等同密码的 user_session cookie(非最小权限),依赖 GitHub 未公开内部端点,且发布者身份未经注册库验证,故未达满分。
指令自洽,含版本检查、语义化比较、失败语义区分(嵌入失败≠上传失败)、SAML/过期会话等故障排查表,错误反馈设计良好;但为静态评审,未执行,仓库证据中未见覆盖该技能关键路径的已提交测试套件,按锚点不得高于 10。
触发描述具体('attach a screenshot to the PR' 等),能力边界清晰(--attach 之外的文件类型、只读仓库、README/提交消息场景),Limitations 一节明示未公开 API 与会话过期风险;扣分点:核心功能完全依赖 GitHub 网络(中国大陆访问不稳定)且无中文支持说明,边界证据主要来自作者自述。
SKILL.md 分层清晰(前置检查→路径→确认→嵌入→验证→排错),license 为 MIT,README 含安装、架构文档链接、CI lint 与带签名的发布流水线、SECURITY.md 漏洞报告流程、维护与支持版本策略;扣分点:frontmatter compatibility 写 v1.1.0+ 而正文要求 v1.4.0+,版本口径不一致,无变更日志级版本治理的直接证据。
产出为可直接粘贴的 user-attachments 引用,步骤含验证环节,与 gh --attach 的差异价值说明明确(任意文件类型、只读仓库、CI);但为静态评审,未复现任何上传输出,代表性输出的可用性未经执行验证,按校准上限不超过 7,扣除执行验证缺口。
存在可审计的一手材料:CI lint 工作流、带 build provenance 签名的发布工作流、SECURITY.md、协议架构文档、第三方使用案例(hermes-agent、openshift/console);但未见已提交的测试工作流覆盖关键路径,多数能力声明仍属作者自述,静态上限 5 内取 4。
- 该技能使用的 user_session cookie 拥有完整 GitHub 账户权限,等同密码;请优先使用 GH_SESSION_TOKEN 并配置专用机器人账户,避免 --token(可在 ps aux 中可见)。
- 依赖 GitHub 未公开的内部上传端点,GitHub 变更即可能失效,且该端点行为无官方保障。
- 核心功能依赖访问 github.com,中国大陆网络环境下可用性可能不稳定;无中文文档。
- SKILL.md frontmatter 的版本要求(v1.1.0+)与正文(v1.4.0+)不一致,使用前请以正文要求为准。
- 上传发布后无撤销手段,执行前请务必确认目标仓库与文件列表。
- 静态评审未执行任何命令,所有结论基于源码阅读,置信度低。
这个 Skill 能做什么,适合哪些场景?
gh-image 是一个 GitHub CLI 扩展,通过 GitHub 网页端内部使用的上传端点(无公开 API)把本地文件上传到 GitHub,并输出可直接粘贴的 Markdown 引用。配套的 Agent Skill(skills/github-image-upload)让 AI 编码代理能在你要求"给 PR 加截图"时自动完成上传与嵌入。它使用 gh token 或浏览器会话 cookie 认证,无需额外配置 OAuth。上传走 GitHub 的 S3 预签名流程,图片渲染为内嵌图、视频为播放器、其他文件为下载链接。
前置检查 gh 认证状态和 gh-image 扩展版本(需 v1.4.0+),报告失败但绝不代替用户安装或登录。解析并确认待上传文件路径与目标仓库后执行上传:可优先用 gh image <files> -- <gh 命令> 一步上传并发布到 issue/PR 评论或正文,也可单独捕获输出的引用链接,再通过 --body-file - 管道嵌入 PR/issue 正文。上传走 GitHub 内部端点:抓取仓库页获取 uploadToken,向 /upload/policies/assets 请求 S3 策略,预签名直传 S3,再回调 finalize 端点。最后用 grep 统计 user-attachments 出现次数验证嵌入是否成功。还支持 gh image download 拉取已有附件。
- 开发者在完成代码改动后,让代理自动把 before/after 截图嵌入 PR 描述或评论,供评审者直观查看效果。
- 测试工程师在提交 bug 报告时附带失败日志、错误截图或复现视频,即使对目标仓库只有读权限。
- 维护者更新 README 时需要演示图或演示视频的 user-attachments 链接(此类链接才能内联自动播放)。
- CI/CD 流水线(如 NousResearch/hermes-agent 的做法)用专用 bot 账号的 GH_SESSION_TOKEN,在每个 PR 上自动发布 E2E 截图证据。
- 团队 QA 流程(如 openshift/console 的 /qa-verify skill)把全分辨率 QA 证据附到 PR,避免 CDN 压缩降质。
这个 Skill 有哪些优点和局限?
- 支持任意 GitHub 接受的文件类型(PDF、zip、日志、CSV 等),而 gh v2.99.0 的原生 --attach 仅限九种图片/视频扩展名。
- 对只有读权限的仓库也能上传附件,原生 --attach 做不到。
- GitHub Actions 的 GITHUB_TOKEN 被 --attach 拒绝,此工具配合会话 token 可在 CI 无人值守运行。
- 无需配置 OAuth scope,复用已有的 gh token 或浏览器会话。
- Skill 设计谨慎:确认后才上传、把 issue 正文视为不可信数据、验证嵌入结果、绝不代替用户安装或认证。
- 依赖 GitHub 未公开的内部 API,可能随时变更而失效。
- 非图片/视频文件以及对无推送权限仓库的上传需要 user_session 会话 cookie——这是等同于完整账号权限的凭据,泄露风险需认真对待。
- Windows 上 Chrome 127+ 的 cookie 读取暂不支持,Android/Termux 无浏览器 cookie 存储,均需手动提供 GH_SESSION_TOKEN。
- 上传不可撤销——文件一经发布即公开可见(私有仓库内仍受限),Skill 也因此要求每请求确认一次。
- 源材料未展示自动化测试套件的覆盖情况;SAML SSO 组织需每约 24 小时重新授权会话。
如何安装这个 Skill?
- 安装 GitHub CLI 并运行
gh auth login。2. 运行gh extension install drogers0/gh-image(需 v1.4.0+,旧版用gh extension upgrade gh-image)。3. 安装 Skill:npx skills add drogers0/gh-image,可加--agent claude-code codex opencode --global指定多个代理。Skill 文件位于仓库的 skills/github-image-upload/SKILL.md。注意:本地交互使用需要受支持浏览器中的 GitHub 登录会话(Chrome/Brave/Chromium/Edge/Firefox/Opera/Safari);CI 环境改用 GH_SESSION_TOKEN 环境变量,建议专用 bot 账号。
如何使用这个 Skill?
自然语言触发即可,例如"把这个截图附到 PR 上"、"在 issue 里加这张图"、"把这份日志附到 issue"。手动用法示例:上传单文件 gh image screenshot.png(自动从 git remote 推断仓库,或用 --repo owner/repo 指定);一步上传并评论 gh image bug.png -- issue comment 42 --body-file repro.md;获取纯链接 gh image report.pdf --repo owner/repo;下载附件 gh image download <user-attachments-url>。每个成功上传在 stdout 输出一行可直接粘贴的引用。
这个 Skill 与同类方案有什么区别?
README 明确与 GitHub CLI v2.99.0(2026-09-01 起提供)的一等 --attach 标志做了对比:--attach 足以满足向有推送权限的仓库附加图片/视频;gh-image 补足其余场景——任意文件类型、只读仓库、独立链接、附件下载、CI 自动化——并且实际包装了 --attach(-- 后的 gh 命令优先走 gh --attach)。