Thanks for your interest. crowdcheck is the contestation and calibration layer on
top of last30days. Contributions to
the judgment layer (stance classifiers, calibration, evidence providers) are
especially welcome.
git clone https://github.com/avnath13/crowdcheck
cd crowdcheck
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev,mcp]"
python -m pytest -qThe core has no third-party dependencies, so pip install -e . and
python -m pytest -q work with nothing else installed.
src/crowdcheck/schema.py- theContestationMapcontractsrc/crowdcheck/calibrate.py- the consensus and confidence mathsrc/crowdcheck/stance.py- stance classifiers (heuristic and LLM)src/crowdcheck/native.py- the keyless fallback providersrc/crowdcheck/evidence.py- the provider registry and last30days adaptersrc/crowdcheck/cli.py,mcp_server.py- the CLI and MCP surfaces
Implement fetch(claim, recency_days=30) -> (list[Evidence], MarketSignal | None)
and register it in make_provider. Providers must fail softly: skip a dead or
rate-limited source and print a one-line notice, never crash the run.
Implement classify(claim, text) -> (Stance, confidence). See
PromptedLLMClassifier for a reference implementation.
- Keep the core dependency-free (standard library only). Optional integrations go
behind extras in
pyproject.toml. - Type-annotate public functions; the package ships a
py.typedmarker. - No em dashes anywhere. Use
-(a hyphen with spaces). This is a hard convention across the whole repo, code and docs alike. - Run
python -m pytest -qbefore opening a PR, and add tests for new behavior.
Keep PRs focused and describe what changed and why. Link any related issue. By contributing, you agree that your work is licensed under the MIT License.