Test whether a codebase's getting-started documentation is accurate and easy to follow
Project description
Good Start
Test whether a project's getting-started documentation is accurate and easy to follow, using an AI agent.
Good Start reads your project's setup instructions, attempts to follow them step by step, and reports back with a pass/fail result and actionable feedback.
Installation
Requires Python 3.12+.
pip install good-start
Or with uv:
uv add good-start
Prerequisites
Good Start uses the Anthropic API under the hood. Set your API key before running:
export ANTHROPIC_API_KEY=your-key-here
CLI Usage
Check a project's documentation by running good-start check from the project root:
# Let the agent find the getting-started docs automatically
good-start check .
# Point it at a specific file
good-start check README.md
good-start check docs/GETTING_STARTED.md
The output is a color-coded pass/fail panel with the agent's findings. The exit code is 0 on success and 1 on failure, so it works in CI scripts.
Save the output to a file:
good-start check . > report.txt
Pytest Plugin
Good Start ships as a pytest plugin that is automatically available once installed. No configuration or conftest imports needed.
Basic usage
def test_getting_started(good_start):
result = good_start()
assert result.passed, result.details
The good_start fixture is a callable that runs the agent and returns a Result object with:
result.passed-- boolean indicating whether the agent completed the instructions successfullyresult.details-- summary of findings, with constructive feedback on failure
Checking a specific file
def test_quickstart(good_start):
result = good_start("docs/QUICKSTART.md")
assert result.passed, result.details
Configuration
Configuration resolves in this order (highest priority first):
- Direct call arguments:
good_start("SETUP.md") - Marker keyword arguments:
@pytest.mark.good_start(target="SETUP.md") - CLI options:
pytest --good-start-target=SETUP.md - ini options in
pyproject.toml - Default:
"."
Marker-based configuration
import pytest
@pytest.mark.good_start(target="INSTALL.md")
def test_install_docs(good_start):
result = good_start()
assert result.passed, result.details
Project-wide defaults in pyproject.toml
[tool.pytest.ini_options]
good_start_target = "docs/GETTING_STARTED.md"
good_start_prompt = "tests/prompts/custom.md"
Custom prompt templates
Supply your own prompt file to tailor the agent's behavior:
def test_with_custom_prompt(good_start):
result = good_start(prompt_path="tests/prompts/strict.md")
assert result.passed, result.details
Skipping agent tests
Tests using the good_start fixture are automatically marked with @pytest.mark.good_start. Skip them during fast iteration:
pytest -m "not good_start"
Or run only the documentation tests:
pytest -m good_start -v
Failure output
When a test fails, the agent's detailed findings are appended to the pytest failure report, so you get actionable feedback directly in your CI output.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file good_start-0.1.1.tar.gz.
File metadata
- Download URL: good_start-0.1.1.tar.gz
- Upload date:
- Size: 77.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9057188dd84afb23a19700c7e025dc0743e9fbbc0d789404f5782fef2f8752e7
|
|
| MD5 |
bc27a882c84d840bb655dc8ac4dec20c
|
|
| BLAKE2b-256 |
118590a92b367dec9bd2dc341677e6b5ec0d88b8a3b560ce0857e100beed1094
|
Provenance
The following attestation bundles were made for good_start-0.1.1.tar.gz:
Publisher:
publish.yml on cldixon/good-start
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
good_start-0.1.1.tar.gz -
Subject digest:
9057188dd84afb23a19700c7e025dc0743e9fbbc0d789404f5782fef2f8752e7 - Sigstore transparency entry: 953592186
- Sigstore integration time:
-
Permalink:
cldixon/good-start@596821dd4c1ac46e8cd278bb66bcf31192819711 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/cldixon
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@596821dd4c1ac46e8cd278bb66bcf31192819711 -
Trigger Event:
release
-
Statement type:
File details
Details for the file good_start-0.1.1-py3-none-any.whl.
File metadata
- Download URL: good_start-0.1.1-py3-none-any.whl
- Upload date:
- Size: 15.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
899b2034d81865a8555c29eaf18f2908fcc4a726c491c4d1ca54534eaef3d088
|
|
| MD5 |
fdc44fbeb98d1ea49f119ab0619dae06
|
|
| BLAKE2b-256 |
2098c4edb001ec414bd68755ec69c12c6a71474cf9d48476f89bd19c5bc43199
|
Provenance
The following attestation bundles were made for good_start-0.1.1-py3-none-any.whl:
Publisher:
publish.yml on cldixon/good-start
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
good_start-0.1.1-py3-none-any.whl -
Subject digest:
899b2034d81865a8555c29eaf18f2908fcc4a726c491c4d1ca54534eaef3d088 - Sigstore transparency entry: 953592187
- Sigstore integration time:
-
Permalink:
cldixon/good-start@596821dd4c1ac46e8cd278bb66bcf31192819711 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/cldixon
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@596821dd4c1ac46e8cd278bb66bcf31192819711 -
Trigger Event:
release
-
Statement type: