Thanks for your interest. Contributions are welcome — bugs, improvements, new features, and documentation fixes.
- Scope discipline — Only touch what you're changing. Don't refactor adjacent code as a side effect.
- No secrets — Never commit credentials, tokens, or real tenant data. Use env vars only.
- Safe by default — Any script that can make changes must respect
E8CR_ENABLE_CHANGES. Read-only/audit actions never need this flag. - Test with demo mode first — All scripts should work with
--demoor synthetic data before touching a real tenant.
- Fork the repo
- Create a branch:
git checkout -b fix/my-thing - Make changes, test locally with demo data
- Run the test suite:
pytest tests/ -v - Open a PR with a clear description of what changed and why
# Install dev dependencies
pip install -r requirements-dev.txt
# Run all bots with synthetic data
python3 run_all.py --demo --output ./test-output
# Run the test suite
pytest tests/ -v
# Or individual bots:
python3 e8cr-vmpm/scripts/demo_generate.py --output demo/vmpm --full-pipeline
python3 e8cr-identity/scripts/demo_generate.py --output demo/identity --full-pipeline
python3 e8cr-appcontrol/scripts/demo_generate.py --output demo/appcontrol --full-pipeline
python3 e8cr-backup/scripts/demo_generate.py --output demo/backup --full-pipeline- Additional backup provider adapters (currently: Veeam + Azure Backup)
- MDVM to Greenbone result normalisation improvements
- Better inactive admin detection (signInActivity requires beta Graph API)
- Maturity scorer refinement (more granular ML2 criteria mapping)
- Phishing-resistant MFA deployment tracking
Open an issue. Happy to discuss.