Thank you for contributing to QuantMind! This guide covers environment
setup and the contribution process. The canonical development workflow
(commit format, PR format, component development) lives in the
quantmind-dev skill — .claude/skills/quantmind-dev/SKILL.md /
.agents/skills/quantmind-dev/SKILL.md — and the repository-wide rules
live in AGENTS.md / CLAUDE.md. If you develop with a coding agent, it
will pick these up automatically.
-
Fork and clone the repository
-
Set up environment:
uv venv && source .venv/bin/activate uv pip install -e ".[dev]"
-
Install pre-commit hooks:
./scripts/pre-commit-setup.sh
scripts/verify.sh is the deterministic required verification for every PR:
bash scripts/verify.shIt runs five fast-fail steps: ruff format --check, ruff check,
basedpyright, lint-imports, pytest --cov (with a branch-coverage
floor configured in pyproject.toml). It stays network-free, and the required
.github/workflows/ci.yml workflow runs the same harness after file-hygiene
hooks.
Public-network integrations have separate bounded live component smoke tests.
.github/workflows/e2e.yml owns their scheduled, manual, and path-filtered
jobs. Run every applicable test when changing that component and before
publishing; the current commands are listed in
docs/README.md. For example, PR Newswire uses:
python scripts/verify_news_e2e.pyThis command uses the real public network. External PR Newswire availability must not block unrelated changes, so the E2E workflow only runs for relevant pull-request paths and is not a required merge check.
Hooks: the pre-commit stage runs formatting/lint and file hygiene
checks; the pre-push stage runs the full scripts/verify.sh. If a hook
fails, fix the issue — don't bypass with --no-verify.
# Run all pre-commit hooks manually
pre-commit run --all-files
# Run targeted tests while iterating
pytest tests/<module>/- Architecture: QuantMind is a domain library on top of the OpenAI
Agents SDK — functions over classes,
Protocolover ABC, no CLI, no agent-runtime rebuilding. SeeAGENTS.md/CLAUDE.mdfor the stable constraints and the module map. - Style: Google-style docstrings, English comments, 80-char lines (enforced by ruff).
- Types: Pydantic for inputs, configs, and knowledge schemas; frozen
dataclasses for deterministic runtime evidence; comprehensive type hints
(
basedpyrightruns in standard mode). - Dependency boundaries: enforced by
import-linter(pyproject.toml); don't work around a failing contract. - Tests: required under
tests/<module>/(mirror the module structure),unittest.TestCase, mock external services, cover success and failure paths. - Examples: one focused example under
examples/<module>/for each new feature. - Public operations and sources: update the component catalog in
docs/README.md; public-network sources also require a bounded live check.
- Create a feature branch from
master. - Follow Conventional Commits:
type(scope): description, in English. - Verify before submitting: deterministic verification and every applicable live-network component smoke test must be green.
- Submit the PR using the template — English body, reference the related issue, and state the verification you performed.
- Keep PRs small and focused (Google eng practices).
For significant changes (new modules, new dependencies, API redesigns), open an issue to discuss first.
- Check existing issues
- Review architecture patterns in existing code
- See
AGENTS.md/CLAUDE.mdfor repository-wide rules
Thank you for contributing! 🚀