Thanks for wanting to contribute to Bantz! 🎉
This document explains how you can contribute to the project step by step.
git clone git@github.com:miclaldogan/bantz.git
cd bantzpython3 -m venv .venv
source .venv/bin/activate
pip install -r requirements/all.txt
pip install -e .pytest tests/ -v --tb=shortIf all tests pass, you’re ready to start coding! ✅
| Branch | Purpose |
|---|---|
main |
Stable release — do not push directly |
dev |
Active development — all PRs target this branch |
fix/XXX-short-description |
Bug fix branches |
feat/XXX-short-description |
Feature branches |
chore/XXX-short-description |
Refactors, cleanup, CI/CD |
git checkout dev
git pull origin dev
git checkout -b fix/123-short-description dev
⚠️ Always branch offdev. Never create branches frommain.
We use the Conventional Commits format:
type(scope): short description (#issue-no)
| Type | Use |
|---|---|
fix |
Bug fix |
feat |
New feature |
refactor |
Code improvement without behavior change |
test |
Add/fix tests |
docs |
Documentation |
chore |
CI/CD, dependencies, configuration |
fix(voice): guard barge-in state with threading.Lock (#759)
feat(calendar): add all-day event detection (#750)
test(scheduler): add ReminderManager unit tests (#758)
refactor(privacy): tighten IP regex to reject version strings (#748)
- Create your branch and make your changes
- Run the tests — don’t open a PR with failing tests
- Push and open a PR against the
devbranch - Fill out the PR template completely
- Wait for review — at least 1 approval is required
- After merge, the branch is automatically deleted
- Tests pass (
pytest tests/ -v) - Tests were added for new code
- Commit messages follow the conventional format
- Related issue is linked (
Closes #XXX)
- Write tests for every new feature/fix
- Test files:
tests/test_<module_name>.py - We use
pytest, notunittest - Use the
tmp_pathfixture — don’t hardcode paths - Empty assertions like
assert Trueare forbidden — verify real values
# Run a single test file
pytest tests/test_scheduler.py -v
# Run a specific test
pytest tests/test_ipc.py::TestEncoding::test_roundtrip_state -vsrc/bantz/
├── brain/ # LLM orchestration, tiered quality
├── core/ # Event bus, config, plugin system
├── google/ # Calendar, Gmail integration
├── ipc/ # Browser overlay IPC protocol
├── privacy/ # PII redaction, data masking
├── router/ # Intent routing, policy engine
├── scheduler/ # Reminders, check-ins
├── security/ # Action classifier, audit, permissions
├── tools/ # Tool registry, result formatting
└── voice/ # TTS, STT, wake word, barge-in, FSM
- Python 3.10+ — use type hints
- Docstrings: Google style
- Line length: 100 characters (soft limit)
- Import order: stdlib → third-party → local
- Language: Code and variable names in English; user-facing strings in Turkish
def _parse_time(self, time_str: str) -> Optional[datetime]:
"""Parse Turkish time string like '5 dakika sonra' or 'yarın 09:00'."""
...If you find a security vulnerability, do not open an issue — instead follow the instructions in SECURITY.md.
- Use GitHub Discussions for questions
- For bug reports, open an issue
Welcome aboard, and happy coding! 🚀