Thanks for your interest in contributing to CatchMe! This guide will help you get started.
# 1. Fork & clone
git clone https://github.com/<your-username>/catchme.git
cd catchme
# 2. Create a Python 3.11+ environment
conda create -n catchme python=3.11 -y && conda activate catchme
# 3. Install in editable mode with dev dependencies
pip install -e ".[dev]"-
Create a branch from
main:git checkout -b feat/your-feature
-
Write code — keep the existing style. The project uses ruff for linting and formatting:
ruff check catchme/ # lint ruff format catchme/ # auto-format
-
Add tests for new functionality. Tests live in
catchme/tests/and use pytest:pytest # run all tests pytest catchme/tests/test_store.py -v # run a specific file
-
Make sure CI passes locally before pushing:
ruff check catchme/ && ruff format --check catchme/ && pytest
catchme/
├── __init__.py # CatchMe public API
├── run.py # CLI entry point
├── config.py # Config dataclass
├── engine.py # Recording engine
├── store.py # SQLite event store
├── organizer.py # Real-time event organizer
├── web.py # Flask dashboard
├── recorders/ # Input recorders (window, keyboard, mouse, ...)
├── pipelines/ # filter → tree → summarize → retrieve
├── extractors/ # File & URL content extraction
├── services/ # LLM client & providers
├── static/ # Web frontend assets
└── tests/ # pytest test suite
- Push your branch and open a PR against
main. - Fill in a clear description of what changed and why.
- CI will automatically run lint + tests across Python 3.11–3.13 on Linux, macOS, and Windows.
- Address any review feedback — we aim to respond within a few days.
- Python 3.11+ — use modern syntax (
match,X | Ytype unions, etc.) - Line length — 100 characters (enforced by ruff formatter)
- Imports — sorted by ruff/isort;
catchmerecognized as first-party - Tests — use
tmp_path/tmp_rootfixtures; mock external calls (LLM, filesystem); no network access in tests - No secrets — never commit API keys or
data/config.json
Here are some areas where contributions are especially welcome:
- New recorders — e.g., browser history, calendar events, Bluetooth proximity
- Platform support — improve Windows/Linux parity with macOS
- Pipeline improvements — better filtering heuristics, summarization prompts, retrieval strategies
- Web dashboard — new visualizations, UX improvements
- Documentation — tutorials, architecture docs, translations
- Bug fixes — check the Issues page
- Search existing issues first to avoid duplicates.
- Include your OS, Python version, and steps to reproduce.
- For privacy, never paste raw activity data or API keys in issues.
By contributing, you agree that your contributions will be licensed under the Apache License 2.0.