Skip to main content

GitHub First Impression

CI

GitHub First Impression is a deterministic, rule-based command-line audit for public GitHub repositories.

It reviews repository presentation, README structure, installation and usage guidance, trust signals, releases, and maintenance indicators through GitHub's official REST API.

It can also act as a deterministic external quality gate after a coding agent pushes its work. Stable JSON output and process exit codes let automation distinguish a passing audit, a score below a configured threshold, and a tool error.

Important: The score is a documentation and repository-presentation heuristic. It is not a code-quality, security, popularity, or maintainability guarantee.

What it does

  • Audits one user-supplied public repository at a time
  • Checks repository metadata and README structure using deterministic rules
  • Detects common installation, usage, community, packaging, release, and maintenance signals
  • Produces a transparent score from 0 to 100
  • Explains every awarded and missing score item
  • Prints a concise terminal summary and writes a local Markdown report

What it does not do

  • It does not understand source code or README prose like a human reviewer.
  • It does not determine overall project quality, security, or suitability for use.
  • It does not replace manual code review, security review, or maintenance due diligence.
  • It does not access private repositories, discover targets, or scan repositories in bulk.
  • It does not use AI, access GitHub HTML pages, or evade API limits and access controls.

Requirements

  • Python 3.12 or newer
  • Network access to GitHub's official REST API at api.github.com

Installation

Trusted Publishing has been verified on TestPyPI. The first production PyPI release is being prepared. Until then, install from the GitHub source or a GitHub Release checkout. See Trusted Publishing setup for the release process.

Clone the project and install it in a virtual environment:

python3.12 -m venv .venv
source .venv/bin/activate
python -m pip install .

Usage

After installation, audit a single public repository URL:

github-first-impression https://github.com/owner/repository

The module entry point is equivalent:

python -m github_first_impression https://github.com/owner/repository

In the default text mode, the command prints a summary and creates first-impression-report.md. Select another report path with --output PATH, or use --output - to print only the terminal summary without writing Markdown.

Using as an Agent Quality Gate

Request machine-readable output with:

github-first-impression \
  https://github.com/owner/repository \
  --format json

Set a deterministic minimum score from 0 to 100 with --fail-under:

github-first-impression \
  https://github.com/owner/repository \
  --format json \
  --fail-under 75

The command exits with 0 when the analysis passes, 1 when analysis succeeds but the score is below the configured threshold, and 2 for invalid input, API failures, network failures, or other tool errors. JSON mode writes exactly one JSON document to stdout; diagnostics are written to stderr.

JSON mode has no Markdown side effect by default, so it is safe in read-only CI workspaces and parallel Agent jobs. artifacts.markdown_report is null. Add --output report.md only when a Markdown artifact is wanted. --output - explicitly disables Markdown in either output format.

A shell workflow can preserve the structured result and handle each outcome separately:

set +e
github-first-impression "$REPOSITORY_URL" \
  --format json \
  --fail-under 75 \
  > audit.json
exit_code=$?
set -e

case "$exit_code" in
  0) echo "Quality gate passed" ;;
  1) echo "Quality gate failed; inspect audit.json" ;;
  2) echo "Audit tool error; inspect audit.json and stderr" ;;
esac

The set +e section preserves exit code 1 in scripts that otherwise use set -e.

Agents should not act on the total score alone. Read the stable rule IDs in categories[].checks, address blocking_issues, review warnings, push the fixes, and run the audit again. Blocking issues are only the highest-priority score deficits, not proof of an absolute defect and not a promise that fixing them alone will pass the threshold. Warning source distinguishes repository observations from analysis limitations. This is an external presentation and documentation heuristic—not a guarantee of code correctness, security, maintainability, or legal compliance.

The JSON contract is documented in docs/json-output.md.

Optional GitHub token

Using GITHUB_TOKEN is optional. A token increases the normal API rate limit but is not used to bypass GitHub's restrictions. Prefer the environment variable because a command-line argument may be visible in shell history or process listings:

export GITHUB_TOKEN="your_token"
github-first-impression https://github.com/owner/repository

The less-private command-line alternative is also available:

github-first-impression https://github.com/owner/repository --token "your_token"

Use a token with no permissions beyond reading public repository information. The tool sends it only in the HTTPS Authorization header. It does not print, save, cache, rotate, place it in a URL, or include it in a report.

Verbose score breakdown

Use --verbose to display every score item in the terminal. Markdown reports always include the complete breakdown.

github-first-impression https://github.com/owner/repository --verbose

Example output format

The repository name and numbers below are illustrative placeholders, not the current result for a real repository:

GITHUB FIRST IMPRESSION
=======================
Repository: example/example-repository
Overall Score: 78/100
Grade: Good

Category scores:
- Project description & positioning: 18/20
- README readability: 20/25
- Installation & usage: 16/20
- Project trust: 14/20
- Release & maintenance: 10/15

Run with --verbose to see the full score breakdown.

Markdown report written to first-impression-report.md

Scoring

The 100 available points are divided into five categories:

Category Points
Project description and positioning 20
README readability 25
Installation and usage 20
Trust signals 20
Release and maintenance 15

The score is produced entirely by deterministic rules in src/github_first_impression/scoring.py; it contains no random component. The same repository state and README will usually produce the same result. A score can change when repository metadata, files, documentation, releases, tags, or maintenance activity change.

Grades are Excellent (90–100), Good (75–89), Fair (60–74), Weak (40–59), and Poor (0–39). These labels summarize checklist coverage, not intrinsic project quality.

The score is most useful as a checklist for repository maintainers. It should not be used as an absolute ranking between unrelated projects. In particular:

  • Non-English READMEs and unconventional heading names may be underestimated.
  • Information found only in external documentation may not earn README points.
  • A mature project with a deliberately minimal root README may receive a relatively low score.
  • A high score does not establish code quality, security, active maintenance, popularity, or fitness for a particular purpose.

Known limitations

  • README checks use headings, keywords, and regular expressions rather than semantic understanding.
  • File presence does not prove that a policy, test suite, or configuration is complete or effective.
  • GitHub can truncate recursive trees for extremely large repositories, causing files to be missed.
  • “Recently updated” means a code push within two years and is only a broad activity signal.
  • GitHub's open issue count can include open pull requests.
  • Anonymous API access has a lower rate limit. The client stops on a rate-limit response and does not retry, change identity, or fall back to HTML access.
  • Private repositories are intentionally unsupported.
  • JSON schema 1.0 describes repository presentation signals only; it does not make source-code assertions.

Responsible Use

Each audit is initiated by the user for one specific public repository and is performed only through GitHub's official REST API. Reports are generated locally. The tool does not access GitHub web pages, bypass access controls, evade rate limits, enumerate repositories, or collect contributor profiles.

Repository content remains subject to its original license and copyright terms. Users are responsible for following GitHub's Terms of Service and applicable laws. Read RESPONSIBLE_USE.md for the complete boundaries and token-safety guidance.

Development

Create a development environment and install the optional tooling:

python3.12 -m venv .venv
source .venv/bin/activate
python -m pip install -e ".[development]"

Running tests

python -m pytest

Build release artifacts with:

python -m build

Changelog

Release notes are recorded in CHANGELOG.md.

License

GitHub First Impression is available under the MIT License.

Download files

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

Source Distribution

github_first_impression-0.2.1.tar.gz (35.5 kB view details)

Uploaded Source

Built Distribution

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

github_first_impression-0.2.1-py3-none-any.whl (23.8 kB view details)

Uploaded Python 3

File details

Details for the file github_first_impression-0.2.1.tar.gz.

File metadata

  • Download URL: github_first_impression-0.2.1.tar.gz
  • Upload date:
  • Size: 35.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for github_first_impression-0.2.1.tar.gz
Algorithm Hash digest
SHA256 e549220d315d75f3b40f3fd8da957efd2990494a0c995a08b5051c8a8af6e8eb
MD5 2930688097575f8d3267acc6c1ef8ca3
BLAKE2b-256 8f4d8edcc50d315197952a8812492cd7cdec8b3b6c7723bbdeb9ec55f08a2ada

See more details on using hashes here.

Provenance

The following attestation bundles were made for github_first_impression-0.2.1.tar.gz:

Publisher: publish-pypi.yml on PiggyDoggo/GitHub-First-Impression

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

File details

Details for the file github_first_impression-0.2.1-py3-none-any.whl.

File metadata

File hashes

Hashes for github_first_impression-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 904635c3c7e48dff811b689fbdaf4c7bb666c08202b5f72620a8d6a53bed6f06
MD5 66c6b52dd84430510c225852a633e3d7
BLAKE2b-256 aee87ef70ff5da9d6d6a321465455f5b729170ff397b6a7edb739730c860e30b

See more details on using hashes here.

Provenance

The following attestation bundles were made for github_first_impression-0.2.1-py3-none-any.whl:

Publisher: publish-pypi.yml on PiggyDoggo/GitHub-First-Impression

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