gh-image CLI

Расширение GitHub CLI и скилл для агентов: загружает скриншоты, PDF, архивы и логи в задачи и запросы на слияние из терминала и возвращает готовую ссылку

  • 279 ★ репозитория
  • Последний коммит
  • MIT
CLI

Широкий доступ

Почему такой уровень

  • Читает зашифрованное хранилище куки браузера и берет `user_session`, который дает полный доступ к аккаунту GitHub
  • Публикует выбранные файлы на GitHub под вашим именем, удалить загрузку нельзя
  • Посылает запросы к недокументированным адресам GitHub, а `gh image -- ...` еще и пишет в issues и PR
Все причины и проверки

drogers0/gh-image

Установка

Ручная установка

gh extension install drogers0/gh-image

Нужен установленный и авторизованный `gh`. Готовые сборки есть для macOS, Linux, Windows и Android (Termux).

Доступ и проверки

Как мы проверяем

Широкий доступИнструмент может менять данные, выполнять команды или работать с секретами.

  • Читает зашифрованное хранилище куки браузера и берет `user_session`, который дает полный доступ к аккаунту GitHub
  • Публикует выбранные файлы на GitHub под вашим именем, удалить загрузку нельзя
  • Посылает запросы к недокументированным адресам GitHub, а `gh image -- ...` еще и пишет в issues и PR

Это чужой код. Посмотрите файлы в репозитории перед установкой.

Что делает

gh-image — расширение для `gh` на Go. Команда `gh image screenshot.png` загружает файл через внутренний адрес, которым пользуется веб-интерфейс GitHub, и печатает готовую ссылку: встроенный предпросмотр для изображений, голый адрес для видео, которое GitHub показывает плеером, и ссылку на скачивание для остальных файлов. Можно передать несколько файлов сразу и указать репозиторий ключом `--repo` или взять его из `origin` текущей папки. Если после `--` идет команда `gh`, расширение загружает файлы и подставляет ссылки в тело сообщения: `gh image bug.png -- issue comment 42 --body-file repro.md`. Ссылки на локальные файлы вида `![до](./before.png)` заменяются на загруженные, а файлы, которые в тексте нигде не упомянуты, дописываются в конец. Подкоманда `gh image download` скачивает вложения обратно на диск. Изображения и видео в репозитории, куда вы можете пушить, уходят с токеном `gh`. Остальные типы файлов и чужие репозитории расширение грузит от имени вашей сессии: читает куки `user_session` из хранилища браузера или берет токен из `GH_SESSION_TOKEN`. Затем берет `uploadToken` со страницы репозитория, запрашивает политику загрузки, отправляет файл на S3 и подтверждает загрузку у GitHub. В комплекте скилл `github-image-upload`: он проверяет, что расширение установлено, спрашивает подтверждение и вставляет результат в описание PR, задачи или комментарий.

Для кого. Для тех, кто просит агента или сам вставляет скриншоты, логи и PDF в задачи, запросы на слияние и README GitHub, особенно в чужие репозитории, где нет прав на запись.

Подходит, если

  • К баг-репорту в проекте, куда у вас нет прав на запись, нужно приложить скриншот
  • В issue или PR надо приложить PDF, архив, CSV или журнал, а не только картинку
  • Нужна ссылка на файл для README, сообщения коммита или чата, а не для issue
  • Агент должен прикрепить доказательства к PR по запросу «добавь скриншот в описание»
  • В CI нужно публиковать скриншоты тестов в PR без участия человека

Не подходит, если

  • Вложение уходит в issue или PR репозитория, где вы можете пушить, и это картинка или видео: у `gh` версии 2.99.0 и новее для этого есть ключ `--attach`
  • Нельзя дать расширению доступ к сессии GitHub: часть загрузок работает только через куки `user_session` или `GH_SESSION_TOKEN`
  • Нужен стабильный контракт: расширение использует недокументированный внутренний интерфейс GitHub, который могут изменить без предупреждения
  • Вы на Windows с Chrome 127 и новее или в Termux без браузера, и токен сессии нечем заменить: хранилище куки там недоступно

Пример запроса к агенту

Прикрепи этот скриншот к комментарию в PR номер 42, чтобы он отображался в тексте

Ограничения

  • Инструмент нужно применять только к своей учетной записи GitHub и к репозиториям, куда у вас есть доступ. Куки `user_session` дают полный доступ к аккаунту и не ограничены областями, как личный токен. При утечке выйдите из GitHub на этой машине или отзовите сессию в настройках.
  • Расширение читает зашифрованное хранилище куки Chrome, Brave, Chromium, Edge, Firefox, Opera или Safari. На macOS может появиться запрос Keychain.
  • Использует недокументированный внутренний интерфейс GitHub. Загрузки привязаны к аккаунту, чью сессию нашли: если браузер и `gh` авторизованы под разными учетными записями, изображения и другие файлы окажутся у разных авторов.
  • Файл, на который нет ссылки в опубликованном тексте, виден по адресу только загрузившему.
  • Для CI авторы советуют отдельную учетную запись бота: при утечке секрета личной сессии пострадает аккаунт.
  • Сборка из исходников требует Go 1.26 и новее. Лицензия MIT.

Как отключить. Выполните `gh extension remove gh-image`. Скилл, поставленный командой `npx skills add drogers0/gh-image`, снимается через `npx skills remove`. Если токен сессии лежит в секретах CI или в переменной `GH_SESSION_TOKEN`, удалите его и при сомнениях завершите сессию на странице Settings, Sessions. Загруженные вложения остаются на GitHub, пока на них ссылаются.

Частые вопросы

Зачем нужен gh-image, если у gh появился --attach?

С 1 сентября 2026 года `gh` версии 2.99.0 и новее умеет прикреплять картинку или видео к задаче и PR в репозитории, куда вы можете пушить, и ключ принимает девять форматов файлов. Расширение закрывает остальное: любые типы файлов, репозитории без прав записи, ссылку отдельно от задачи, скачивание вложений и CI, где `--attach` отклоняет токен `GITHUB_TOKEN`.

Откуда берется токен сессии?

Порядок такой: ключ `--token`, затем переменная `GH_SESSION_TOKEN`, затем хранилище куки браузера. Подкоманда `gh image extract-token` печатает токен в стандартный вывод, а `gh image check-token --token ...` проверяет, под каким пользователем он работает. Ключ `--token` виден в списке процессов, поэтому переменная предпочтительнее.

Кто увидит загруженный файл?

Пока ссылка не попала в опубликованный текст, адрес открывается только загрузившему, даже в публичном репозитории. После ссылки видимость следует за видимостью текста, а загрузки в приватные репозитории остаются приватными.

Как запустить в GitHub Actions?

Получите токен локально через `extract-token`, создайте окружение с ограничением веток, положите токен в его секрет `GH_SESSION_TOKEN` и вызовите `gh image` в рабочем процессе с этим окружением. Авторы советуют отдельную учетную запись бота и плановую проверку `check-token`: сессия истекает, когда GitHub ее инвалидирует.

Как проверить подлинность бинарника?

Релизы подписаны аттестациями происхождения сборки. Скачайте файл со страницы релизов и выполните `gh attestation verify darwin-arm64 --owner drogers0`, подставив имя своего файла. Сама команда `gh extension install` аттестации не проверяет.

Обсуждение

Вопросов и отзывов пока нет.

Официальный

Расширение GitHub CLI gh stack и скилл для агента: цепочка зависимых веток и PR, перебазирование, отправка и слияние всего стека целиком

CLIШирокий доступ1,7 тыс.Звезды репозитория

Скиллы GitHub CLI

GitHub CLI skills (gh, gh-skill)

Выбор редакции

Официальные скиллы GitHub CLI: как агенту правильно вызывать gh и как управлять скиллами командой gh skill

СкиллРасширенный доступ46,7 тыс.Звезды репозитория

CLI открывает локальный git diff в браузере как просмотр правок в пулл-реквесте GitHub; комментарии копируются промптом для агента

CLIРасширенный доступ3,3 тыс.Звезды репозитория

Терминальный просмотрщик диффов: все файлы одним потоком, а агент через скилл hunk-review ведет по изменениям и оставляет комментарии к строкам

CLIРасширенный доступ9,7 тыс.Звезды репозитория

CLI для git worktree с нечетким поиском: отдельная папка на каждую ветку, чтобы несколько агентов работали параллельно без конфликтов

CLIШирокий доступ475Звезды репозитория
Российский стек

MCP-сервер с 76 типизированными инструментами поверх CLI для GitFlic: слияния, задачи, релизы, реестр пакетов, с фильтрами групп и read-only режимом

MCP-серверРасширенный доступ

Сравнение с похожими

Записи с тем же главным запросом: чем они отличаются.

ЗаписьОфициальныйЗвезды репозиторияГлавное отличие
gh-image (эта запись)нет279
Скиллы GitHub CLIнет46 712официальные скиллы GitHub CLI о том, как агенту вызывать gh и управлять скиллами, без загрузки вложений
gh-axiнет345обертка над gh с компактным выводом TOON и подсказками следующего шага для issues, PR и CI

Коротко о README

Описание открывается баннером и примером вывода, затем объясняет, чем расширение дополняет встроенный `--attach`. Дальше установка с проверкой происхождения сборки, сборка из исходников и вариант с другим читателем куки, использование, скачивание и публикация одной командой, раздел про агентов, примеры пользователей, способы авторизации, CI, схема работы и ограничения. Отдельно в папке `documentation` лежат описание архитектуры и восстановленные протоколы загрузки и скачивания.

Бейдж для README

Исходный SKILL.md

---
name: github-image-upload
description: >-
  Upload local images and other files (PDF, zip, log, …) to GitHub and embed them
  in a pull request description, an issue, or a comment — producing canonical
  github.com/user-attachments URLs (private-repo uploads stay private). Use when
  asked to "attach a screenshot to the PR", "add an image to the PR description",
  "put this image in the issue", "attach this PDF/log/zip to the issue", "show test
  results in the PR", "embed before/after screenshots", or any request to visually
  document or attach files to changes on GitHub. Powered by the `gh-image` gh CLI
  extension.
license: MIT
compatibility: Requires the GitHub CLI (`gh`), network access to GitHub, and the `drogers0/gh-image` extension v1.1.0 or newer.
# gh pr/issue edit and comment are listed for hosts that check each pipeline stage;
# whole-string matchers resolve them via the leading printf.
allowed-tools: >-
  Glob Bash(gh auth status) Bash(gh extension list:*) Bash(gh image:*)
  Bash(gh pr view:*) Bash(gh pr edit:*) Bash(gh pr comment:*)
  Bash(gh issue view:*) Bash(gh issue edit:*) Bash(gh issue comment:*)
  Bash(printf:*) Bash(grep:*) Bash(cat:*)
---

# Upload images and files to GitHub (gh-image)

[`gh-image`](https://github.com/drogers0/gh-image) (MIT, same author as this skill)
uploads files through the internal endpoint GitHub's web UI uses — there is no public
API — and prints a ready-to-paste reference: an `![name](url)` embed for images, a
bare URL for videos, a `[name](url)` link for anything else. This skill runs it and
embeds the result.

Follow these steps exactly unless they conflict with security policies you have been
given; if they do, stop and present the conflict rather than resolving it yourself.

## Prerequisites

Check these first. Report failures — do not install or authenticate for the user.

1. `gh auth status` — if it fails, tell the user to run `gh auth login`.

2. `gh extension list | grep 'drogers0/gh-image' && gh image --version`

   Needs v1.4.0+, the release that added the `--` form used below (`--version`
   prints `gh-image 1.4.0`; compare semantically, so `1.10.0` ≥ `1.4.0`). Missing → the user runs `gh extension install
   drogers0/gh-image`. Older → the user runs `gh extension upgrade gh-image`. `dev` →
   a local build, warn and continue. Never run install or upgrade yourself.

Сообщить о проблеме

Foxx AIgh-image
Foxx AI

Я Foxx AI и уже разобрал этот инструмент. Спросите про установку, настройку или что угодно еще, отвечу простыми словами.