All plugins

my-github

Desktop and dashboard plugin: statusbar chip, palette command, and dashboard tab listing your GitHub repos (public + private) via the gh CLI.

tomekdot1Desktopv1.2.5Updated 25 days ago

My GitHub — Hermes Dashboard Plugin

A dashboard plugin for Hermes Agent that lists and opens your GitHub repositories (public + private) via the gh CLI.

Features

  • Full repo list — paginates up to 500 repos owned by your account
  • Summary stats — total repos, stars, open issues, forks
  • Search & filter — fuzzy search by name/description/language; filter by visibility (all/public/private)
  • Sort — by last pushed (default), stars, forks, creation date, or name
  • Theme-aware — uses CSS variables, reskins with your active dashboard theme
  • 60-second cache — avoids hammering the gh API on every render

Prerequisites

Installation

Install the complete package from the repository (catalog submission is pending):

hermes plugins install tomekdot/hermes-my-github-plugin --enable

For a reproducible install, append --ref <full-40-character-commit-SHA>.
Restart the dashboard/gateway if it is already running. Enable the desktop half in
Settings → Plugins to show the statusbar chip and the GitHub: View repositories
palette command. The dashboard also provides a My GitHub tab.

Package layout:

plugin.yaml
desktop/
└── plugin.js
dashboard/
├── dist/
│   ├── index.js
│   └── style.css
├── manifest.json
└── plugin_api.py
tests/
└── test_utf8_decoding.py

Keep both desktop/ and dashboard/: the desktop UI uses the dashboard backend.
No self-updater is included. Catalog updates require a reviewed SHA-bump PR.

Validate a checkout with hermes plugins validate ..

How it works

The backend shells out to gh api (reusing your existing OAuth token) — no personal access token to manage. Two endpoints:

  • /api/plugins/my-github/repos — list of all repos
  • /api/plugins/my-github/summary — aggregated stats

The frontend renders a searchable, filterable table using React primitives from the Hermes plugin SDK.

Encoding

Hermes Desktop launches the backend with python -I, which ignores
PYTHONUTF8 and PYTHONIOENCODING. Inside that process
locale.getpreferredencoding() is the Windows ANSI code page — cp1250 on a
Polish install, cp1252 on a Western one. Every subprocess.run that reads a
UTF-8 stream therefore passes encoding="utf-8" (plus errors="replace")
explicitly. Without it, gh's UTF-8 JSON is decoded through the code page and
repo descriptions come out as mojibake: Koło → KoĹ‚o, — → â€.

Run the regression test the way the backend runs:

python -I tests/test_utf8_decoding.py

Section 1 is offline. Section 2 exercises the live HTTP response and is skipped
when gh is not authenticated or fastapi is unavailable.

License

MIT

README from the reviewed commit 639f0cf; it updates when the author re-pins.