Open an issue with:
- What you expected to happen
- What actually happened
- Steps to reproduce
- Your environment (OS, Python version,
uv --version)
Open an issue describing your use case and proposed solution. For larger changes, open a discussion first.
Prerequisites: Python 3.10+, uv, Apple Silicon Mac (for training tests only — decide/data/eval tests run anywhere).
git clone https://github.com/rchaz/tunelab.git
cd tunelabNo pip install needed — every script uses uv with inline dependency declarations.
bash tests/run_all.shFirst run downloads ~500MB of models into ~/.cache/huggingface and caches uv dependencies; later runs are fast.
Individual tests:
python3 tests/test_centroid_classify.py
python3 tests/test_split_data.py
# etc.skills/ # The five Claude Code skills (SKILL.md + scripts/)
tune-decide/ # Front door — interviews, experiments, recommends
tune-data/ # Dataset building, cleaning, splitting
tune-train/ # Local LoRA/QLoRA/CPT training (MLX)
tune-eval/ # Evaluation, cascade composition, LLM-as-judge
tune-loop/ # Continuous improvement loop
concepts/ # Plain-English explainers for every idea tunelab uses
recipes/ # Worked end-to-end examples with real numbers
dogfood/ # Internal test runs and benchmark results
tests/ # Script-level tests (subprocess, real data)
- Keep PRs focused — one change per PR
bash tests/run_all.shmust pass- Follow existing code patterns
- No new dependencies in scripts unless absolutely necessary (and declared inline via uv)
- If you add a new script, add a test for it
Use clear, descriptive commit messages in imperative style.
AI-assisted PRs are welcome. If you used AI tools, mention it in the PR description for transparency.
If you discover a security vulnerability, please report it privately. See SECURITY.md.
By contributing, you agree that your contributions will be licensed under the MIT License.