A Linux TUI tool for browsing GitHub issue parent/sub tree and opening issue pages.
I use GitHub Issues as my personal note system. On the GitHub web UI, issues are mostly presented in a flat list, which makes parent/sub issue relationships hard to read. This tool exists to present issue hierarchy in a clear tree view, so note structure is visible at a glance.
- Optional Personal Access Token login (
Enterto skip for public repositories) - Support
GH_TOKENenvironment variable - Lazy loading by page (first page only on startup)
- Load issue tree from a single repository
- TUI list view with tree indentation
- Open selected issue in system browser
- Install via APT:
curl -fsSL https://Peter33333.github.io/github-note/gpg.key | \
sudo gpg --dearmor -o /usr/share/keyrings/ghnote-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/ghnote-keyring.gpg] https://Peter33333.github.io/github-note stable main" | \
sudo tee /etc/apt/sources.list.d/ghnote.list
sudo apt update
sudo apt install ghnoteOr install by downloading the binary directly:
VERSION="$(curl -fsSL https://api.github.com/repos/Peter33333/github-note/releases/latest | grep -o '"tag_name": "[^"]*' | cut -d'"' -f4 | sed 's/^v//')"
ARCH="amd64" # change to arm64 if needed
curl -fsSL -o ghnote.tar.gz \
"https://github.com/Peter33333/github-note/releases/download/v${VERSION}/ghnote_${VERSION}_linux_${ARCH}.tar.gz"
tar -xzf ghnote.tar.gz
sudo install -m 0755 ghnote /usr/local/bin/ghnote- First run (interactive setup):
ghnoteIf ~/.config/ghnote/config.yaml does not exist, ghnote will start an interactive wizard and ask for:
repository(required), accepts:https://github.com/ruanyf/weekly/issueshttps://github.com/ruanyf/weeklyruanyf/weekly
Note: the wizard requires an interactive terminal (TTY).
You can also explicitly run the wizard:
ghnote --init-config- Run:
ghnoteIf your config is inside project folder:
ghnote --config ./configs/config.yaml- First login: paste a GitHub Personal Access Token when prompted, or press
Enterfor public-only mode. - Navigation: use
j/k(or arrow keys) to move the cursor. - Page navigation: use
[/](orp/n) for previous/next issue page. - Fast list navigation: use
g/Gfor first/last item, andpgup/pgdownfor list scroll. - Tree control: use
h/leftto collapse,l/rightto expand,spaceto toggle. - Open issue: press
enterto open the selected issue in your browser. - Help: press
?to toggle extended help. - Fast retry: when auth or repo config changes, rerun
ghnotedirectly.
j/down: move cursor downk/up: move cursor upg/home: jump to first itemG/end: jump to last item[,p: load previous issue page],n: load next issue pagepgup: scroll one screen uppgdown: scroll one screen downh/left: collapse current nodel/right: expand current nodespace: toggle collapse/expandenter: open selected issue URL?: toggle extended helpq: quit
cmd/ghnote/ # CLI entry
internal/app/ # startup and orchestration
internal/config/ # config and token storage
internal/domain/ # issue tree domain model
internal/github/ # github auth + issue API
internal/open/ # browser opener
internal/tui/ # bubbletea TUI
configs/ # example config
- The app currently targets Linux (
xdg-openfor URL launch). - PAT is optional: without PAT, only public repositories are accessible.
- For private repositories, use a GitHub Personal Access Token with
reposcope. - Token is stored at
~/.config/ghnote/token.yaml.
Add GitHub Pages as an APT source:
curl -fsSL https://Peter33333.github.io/github-note/gpg.key | \
sudo gpg --dearmor -o /usr/share/keyrings/ghnote-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/ghnote-keyring.gpg] https://Peter33333.github.io/github-note stable main" | \
sudo tee /etc/apt/sources.list.d/ghnote.list
sudo apt update
sudo apt install ghnote- CI:
.github/workflows/ci.ymlrunsgo test ./...on push/PR. - Release:
.github/workflows/release.ymlruns on tags likev1.0.0. - Packaging:
.goreleaser.yamlbuilds Linux binaries and.debpackages. - APT repo publishing:
morph027/apt-repo-action@v3creates a signed apt repository and deploys via GitHub Pages.
Required GitHub Secrets:
APT_SIGNING_KEY: ASCII armored private GPG keyAPT_SIGNING_KEY_PASSPHRASE: passphrase for the private key
To release a new version:
git tag v1.0.0
git push origin v1.0.0