Thank you for your interest in contributing to ReconGPT! This document provides guidelines and rules for contributing.
By participating in this project, you agree to abide by our Code of Conduct.
ReconGPT follows a modular pipeline architecture. Each component should be:
- Isolated: One stage should not directly depend on another's internals
- Testable: All functions must be unit-testable
- Documented: Clear docstrings and type hints required
- Write clear, descriptive commit messages
- Add tests for new features
- Update documentation alongside code changes
- Follow the existing code structure
- Use type hints in all Python code
- Keep functions small and focused (< 50 lines preferred)
- Vibe coding is ALLOWED - rapid prototyping is encouraged!
- Modify more than 3-5 files in a single PR (unless it's a refactor)
- Push directly to
main- always use PRs - Add dependencies without discussion in an issue first
- Remove existing functionality without deprecation notice
- Ignore linting/formatting errors
- Commit sensitive data (API keys, credentials, scan results)
- Open an issue to discuss major changes
- Fork the repository
- Create a feature branch:
git checkout -b feature/your-feature-name
- Keep PRs focused on a single feature/fix
- Limit to 5 files or less per PR (exceptions require justification)
- Write meaningful commit messages:
feat(pipeline): add JavaScript mining stage fix(httpx): handle timeout errors gracefully docs(api): update scan endpoint examples
- Code passes all tests:
pytest - Code is formatted:
black backend/ && isort backend/ - Type checking passes:
mypy backend/ - Documentation updated if needed
- No secrets or credentials in code
-
.env.exampleupdated if new env vars added
- All PRs require 1 maintainer approval
- Maintainers will review:
- Code quality and adherence to architecture
- Test coverage
- Documentation completeness
- Security implications
- Address review comments promptly
- Squash commits before merge (if requested)
We encourage rapid development ("vibe coding"), BUT:
- Your code WILL be reviewed before merge
- Be ready to refactor if architecture is violated
- Tests are still required
- Document your "vibe" decisions in PR description
- Create stage file in
backend/app/pipeline/stages/ - Inherit from
BasePipelineStage - Implement
execute()method - Add stage to pipeline configuration
- Write integration test
- Add wrapper in
backend/app/integrations/ - Use
subprocess_runner.pyutility - Handle all error cases
- Return structured data (dict/dataclass)
- Add logging
- Create route in
backend/app/api/routes/ - Define Pydantic schemas in
backend/app/schemas/ - Add authentication if needed
- Document with OpenAPI annotations
- Write API tests
# Run all tests
pytest
# Run with coverage
pytest --cov=backend/app --cov-report=html
# Run specific test file
pytest tests/test_pipeline.py
# Run integration tests (requires Docker)
pytest tests/integration/We use:
- Black for formatting (line length: 100)
- isort for import sorting
- mypy for static type checking
- flake8 for linting
# Auto-format code
black backend/
isort backend/
# Check types
mypy backend/
# Lint
flake8 backend/- Never commit real scan results
- Never commit API keys or tokens
- Use environment variables for secrets
- Sanitize user inputs
- Follow OWASP guidelines for web security
- Report security issues privately to maintainers
- Update
docs/for architecture changes - Add docstrings to all public functions/classes
- Include examples in docstrings
- Update API docs for endpoint changes
- Open an issue with the
questionlabel - Join our [Discord/Slack] (if applicable)
- Check existing issues and docs first
Remember: Quality over quantity. Small, focused PRs are better than large, sprawling ones.
Happy hacking! 🚀