gh-image CLI
Расширение GitHub CLI и скилл для агентов: загружает скриншоты, PDF, архивы и логи в задачи и запросы на слияние из терминала и возвращает готовую ссылку
- 279 ★ репозитория
- Последний коммит
- MIT
Широкий доступ
Почему такой уровень
- Читает зашифрованное хранилище куки браузера и берет `user_session`, который дает полный доступ к аккаунту GitHub
- Публикует выбранные файлы на GitHub под вашим именем, удалить загрузку нельзя
- Посылает запросы к недокументированным адресам GitHub, а `gh image -- ...` еще и пишет в issues и PR
Установка
- Работает в
Ручная установка
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`. Ссылки на локальные файлы вида `` заменяются на загруженные, а файлы, которые в тексте нигде не упомянуты, дописываются в конец. Подкоманда `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` аттестации не проверяет.
Обсуждение
Вопросов и отзывов пока нет.
Похожие
CLI-инструментыРасширение GitHub CLI gh stack и скилл для агента: цепочка зависимых веток и PR, перебазирование, отправка и слияние всего стека целиком
Скиллы GitHub CLI
GitHub CLI skills (gh, gh-skill)
Официальные скиллы GitHub CLI: как агенту правильно вызывать gh и как управлять скиллами командой gh skill
CLI открывает локальный git diff в браузере как просмотр правок в пулл-реквесте GitHub; комментарии копируются промптом для агента
Терминальный просмотрщик диффов: все файлы одним потоком, а агент через скилл hunk-review ведет по изменениям и оставляет комментарии к строкам
CLI для git worktree с нечетким поиском: отдельная папка на каждую ветку, чтобы несколько агентов работали параллельно без конфликтов
MCP для GitFlic поверх gitflic-cli
gitflic-cli MCP-сервер
MCP-сервер с 76 типизированными инструментами поверх CLI для GitFlic: слияния, задачи, релизы, реестр пакетов, с фильтрами групп и read-only режимом
Сравнение с похожими
Записи с тем же главным запросом: чем они отличаются.
| Запись | Официальный | Звезды репозитория | Главное отличие |
|---|---|---|---|
| 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 `` 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.