Skip to main content

Deterministic PR readiness detection for AI coding agents

Project description

Good To Go

Deterministic PR readiness detection for AI coding agents

Good To Go helps AI agents (like Claude Code) know exactly when a PR is ready to merge. No guessing, no polling indefinitely, no missing comments.

The Problem

AI agents creating PRs face a common challenge: How do I know when I'm actually done?

  • CI is still running... is it done yet?
  • CodeRabbit left 12 comments... which ones need action?
  • A reviewer requested changes... did I address them all?
  • There are 3 unresolved threads... are they blocking?

Without deterministic answers, agents either wait too long, miss comments, or keep asking "is it ready yet?"

The Solution

Good To Go provides deterministic PR state analysis via a simple CLI:

gtg check owner/repo 123

Returns:

  • Exit code 0: Ready to merge - good to go!
  • Exit code 1: Action required (actionable comments need fixes)
  • Exit code 2: Unresolved threads exist
  • Exit code 3: CI failing
  • Exit code 4: Error fetching data

Installation

pip install gtg

That's it. No other dependencies required.

Usage

Basic Check

# Check if PR #123 in myorg/myrepo is ready to merge
gtg check myorg/myrepo 123

# With JSON output for programmatic use
gtg check myorg/myrepo 123 --json

Authentication

Set your GitHub token:

export GITHUB_TOKEN=ghp_your_token_here

Or pass it directly:

gtg check myorg/myrepo 123 --token ghp_your_token_here

Exit Codes

Code Status Meaning
0 READY All clear - good to go!
1 ACTION_REQUIRED Actionable comments need fixes
2 UNRESOLVED Unresolved review threads
3 CI_FAILING CI/CD checks failing
4 ERROR Error fetching PR data

JSON Output

gtg check myorg/myrepo 123 --json

Returns structured data including:

  • CI status (passed/failed/pending checks)
  • Thread summary (resolved/unresolved counts)
  • Classified comments (actionable vs non-actionable)
  • Action items list

Supported Automated Reviewers

Good To Go recognizes and classifies comments from:

  • CodeRabbit - Critical/Major/Minor/Trivial severity
  • Greptile - Actionable comment detection
  • Claude Code - Must/should/error/bug patterns
  • Cursor/Bugbot - Severity-based classification
  • Generic - Fallback for unknown reviewers

For AI Agents

If you're an AI agent, use Good To Go in your PR workflow:

import subprocess
import json

result = subprocess.run(
    ["gtg", "check", "owner/repo", "123", "--json"],
    capture_output=True,
    text=True
)

if result.returncode == 0:
    print("Good to go! Ready to merge.")
elif result.returncode == 1:
    data = json.loads(result.stdout)
    print(f"Action required: {data['action_items']}")

Or use the Python API directly:

from goodtogo import PRAnalyzer, Container

container = Container.create_default(github_token="ghp_...")
analyzer = PRAnalyzer(container)

result = analyzer.analyze("owner", "repo", 123)
if result.status == "READY":
    print("Good to go!")
else:
    for item in result.action_items:
        print(f"- {item}")

Documentation

License

MIT License - see LICENSE for details.

Credits

Created by David Sifry with Claude Code.


Made with Claude Code

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

gtg-0.2.0.tar.gz (37.7 kB view details)

Uploaded Source

Built Distribution

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

gtg-0.2.0-py3-none-any.whl (45.6 kB view details)

Uploaded Python 3

File details

Details for the file gtg-0.2.0.tar.gz.

File metadata

  • Download URL: gtg-0.2.0.tar.gz
  • Upload date:
  • Size: 37.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for gtg-0.2.0.tar.gz
Algorithm Hash digest
SHA256 81ab8f7edd3feca5f698f790b7222586e889037bc2684132589426b09f6c03d1
MD5 ebc964de220851c58e5bce79ae0b2dc4
BLAKE2b-256 4aecaecee1cf4c5a1d66b57bb5f9707941a99b04eeeb0ac236602705b3bd244d

See more details on using hashes here.

Provenance

The following attestation bundles were made for gtg-0.2.0.tar.gz:

Publisher: publish.yml on dsifry/goodtogo

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gtg-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: gtg-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 45.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for gtg-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 cb32ed1aba6d7e951d630417efd8ae6b40ab1a533e827024ff9742d8e5fb13b7
MD5 f0319b34a9d14e00fd4d50b77e2f1bd5
BLAKE2b-256 e39cf262f666b8315e03c6cbfdbc6b428914ee76b0c2bb7baf5162ebf5beefe8

See more details on using hashes here.

Provenance

The following attestation bundles were made for gtg-0.2.0-py3-none-any.whl:

Publisher: publish.yml on dsifry/goodtogo

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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