Skip to main content

A modern multi-repository GitHub TUI with Claude Code integration

Project description

gh-claude

A modern, keyboard-first TUI for managing GitHub issues and pull requests across multiple repositories. It uses Textual for the interface, GitHub CLI for data, and Claude Code for issue drafting and analysis.

License: MIT

PyPI: gh-claude
Repository: masaaaaa725/ghc

Requirements

Install

pip install gh-claude
# or
uv tool install gh-claude

Update an existing uv tool install:

uv tool upgrade gh-claude

Publishing

Every push to main runs .github/workflows/publish.yml, which bumps the patch version in pyproject.toml, publishes that version to PyPI, and commits the bump back to main (with [skip ci] to avoid a loop).

One-time setup on PyPI (Trusted Publishing):

  1. Open PyPI publishing settings for gh-claude
  2. Add a GitHub publisher:
    • Owner: masaaaaa725
    • Repository: ghc
    • Workflow: publish.yml
    • Environment: pypi
  3. In GitHub, create an Environment named pypi (Settings → Environments)

After that, merges to main publish automatically. Users can then run uv tool upgrade gh-claude.

Run

gh-claude
# alias
ghc

From a local checkout:

uv sync
uv run gh-claude

The app detects the GitHub repository in the current directory. Press r or Ctrl+P to switch to any repository returned by gh repo list.

Keyboard shortcuts

  • / : move the selection in the Issues or Pull Requests list
  • / : switch between the Issues and Pull Requests tabs
  • f: cycle the status filter (OPENCLOSEDALL for Issues; includes MERGED / DRAFT for PRs)
  • r / Ctrl+P: searchable repository picker (/ to move, Enter to select, Esc to cancel)
  • c: turn rough notes into a reviewed GitHub issue with Claude
  • s: summarize the selected issue or pull request with Claude
  • o: check out the selected pull request as a local branch
  • v: review the selected pull request diff with Claude
  • a: draft, preview, and post an AI-polished comment
  • Ctrl+E: create an Issue branch and let Claude implement the selected Issue
  • i / p: switch to Issues / Pull Requests
  • Ctrl+R / F5: refresh Issues and Pull Requests for the current repository
  • Ctrl+C: quit

Project layout

.
├── pyproject.toml
├── uv.lock
├── src/                # Import package `ghc` (PyPI name: `gh-claude`)
│   ├── __init__.py
│   ├── __main__.py
│   ├── app.py          # Main Textual app and interactions
│   ├── app.tcss        # Dark UI theme
│   ├── clients.py      # Async gh / claude / git wrappers
│   ├── models.py       # Domain models
│   └── screens.py      # Repository and issue workflow modals
└── tests/
    ├── test_app.py
    ├── test_clients.py
    ├── test_models.py
    └── test_screens.py

All external commands are executed without a shell via asyncio.create_subprocess_exec. GitHub read operations request JSON explicitly; commands such as gh pr diff, gh pr checkout, gh issue create, and gh issue comment are exceptions because those GitHub CLI commands do not support --json.

Ctrl+E is intentionally limited to the repository currently checked out on disk. After confirmation, it creates issue-<number>-<slug> with git checkout -b, then runs Claude Code in print mode. Claude is instructed not to commit, push, or modify unrelated files; always review the working tree after it finishes.

Test

uv run pytest

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gh_claude-0.3.3.tar.gz (23.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

gh_claude-0.3.3-py3-none-any.whl (21.2 kB view details)

Uploaded Python 3

File details

Details for the file gh_claude-0.3.3.tar.gz.

File metadata

  • Download URL: gh_claude-0.3.3.tar.gz
  • Upload date:
  • Size: 23.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for gh_claude-0.3.3.tar.gz
Algorithm Hash digest
SHA256 e10c0e686ae14dc555a928eda4671e665f077404aef99a2e871d7a9498f6da76
MD5 c70234d3aa6cff396735e08aa77207a6
BLAKE2b-256 07cb7f2ded89d755ffd5af62f4de29614bd7f199b4d456572ba8d232baf37d3a

See more details on using hashes here.

File details

Details for the file gh_claude-0.3.3-py3-none-any.whl.

File metadata

  • Download URL: gh_claude-0.3.3-py3-none-any.whl
  • Upload date:
  • Size: 21.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for gh_claude-0.3.3-py3-none-any.whl
Algorithm Hash digest
SHA256 0538b4d79ba4088f355cc1b0f96dbecfcc67b3bb3a833a013f42403f86dcb2d0
MD5 69937c4c32817f782fb7c2973c585a75
BLAKE2b-256 4f1beeaaf70d787dd54e8fdd08fa4d8c9cb50afb728a90505b726143ba15c630

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page