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.2.9.tar.gz (21.1 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.2.9-py3-none-any.whl (19.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: gh_claude-0.2.9.tar.gz
  • Upload date:
  • Size: 21.1 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.2.9.tar.gz
Algorithm Hash digest
SHA256 85be4fa69cdce515c65f8e65f06abf0bed498a48f57b3f8bc2a04a4e63e53541
MD5 74cd0df8b883f693c05ccc986d418b98
BLAKE2b-256 8984bdca65f1b25fa3cd7e39b5ae3d95c07ff03345cb9b7968211c64568b784e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: gh_claude-0.2.9-py3-none-any.whl
  • Upload date:
  • Size: 19.5 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.2.9-py3-none-any.whl
Algorithm Hash digest
SHA256 9ef5dab00e08f0f246fad76cec991acaf1a5fcadd95c544d1c67f0db4b2ebad6
MD5 46c803204a71c21c909d1072776ba953
BLAKE2b-256 e5233afade9906dd7877caf2ae23efb81fcd3dc3b57fd6b1e60e2d8fe39c4ac2

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