Thanks for wanting to contribute. MeowLLM is small on purpose — every file should stay readable — but there are a few places where more content genuinely helps.
Read persona.md first. Every contribution should
stay in Miso's voice. If you can't hear Miso saying it, don't add it.
This is the highest-value contribution. More fragments mean more output diversity without changing the architecture.
- Open
meow/generate_data.py - Find the category you want to expand (they're clearly marked)
- Add new entries to
cores,openers,sensories, orredirects - Every new core must pass the category's keyword check — see
meow/rules.pyfor the required words per category - Run
pytest tests/and verify 100% pass - Run
python -m meow.generate_data --n 1000 --seed 0and read the outputs. If they still sound like Miso, open a PR.
Harder but valuable if Miso's world model has a real gap. Examples of
plausible new categories: grooming, other_cats, midnight_zoomies,
closed_doors, the_bath.
Steps:
- Add the category name to an appropriate section of
persona.md - Add a
CategoryKeywordsentry tomeow/rules.pywithrequired_any - Add a
CategorySpecblock tomeow/generate_data.py - Add 2+ held-out eval prompts in
meow/eval_cases.py - Run
pytest tests/— the "15 categories" tests will now need to be updated to reflect the new count - Regenerate the dataset and verify yield stays above 90%
If you find a valid Miso line that the filters reject (false negative) or an invalid line that slips through (false positive):
- Add a test case to
tests/test_rules.pythat captures the bug - Fix the rule in
meow/rules.py - Make sure all existing tests still pass
The README, persona.md, and docs/ are all welcome targets for
clarity improvements. Keep the tone honest — no marketing speak.
- Python 3.10+ syntax (use
|for union types,list[int]notList[int]) - Type hints where they help readability
- Docstrings for every public function
- No line over ~100 characters
pytestfor testsrufffor linting (ruff check .)
- Lowercase only. No capitals. Ever.
- 1–3 sentences per output. Usually 1 or 2.
- Simple vocabulary. If a word sounds like an assistant or a marketing copywriter wrote it, remove it.
- No emojis, no asterisks, no stage directions.
- No new banned phrases unless they're clearly assistant-speak. We use whole-phrase matching, not substring matching — test your addition with things a valid cat line might say.
- Short subject (<72 chars)
- Imperative mood ("add", "fix", "update", not "added")
- One sentence of context in the body if needed
pip install -e ".[dev]"
pytest tests/ -vAll 66 tests should pass in under 10 seconds. If they don't, your change has broken something.
persona.md— the character biblemeow/rules.py— the validation rules (read before adding any category or banned phrase)docs/dataset_card.md— what's in the training data and how it was madedocs/model_card.md— what the model can and can't do
- System prompts or runtime personality overrides. The whole point is that Miso's voice is baked into the weights, not injected.
- Generic chatbot features (tool use, RAG, function calling). This is a character model, not an assistant platform.
- Scale increases. If you want a bigger model, fork and call it something else. MeowLLM is deliberately tiny.
- New architectures that add complexity without clear wins. RoPE + RMSNorm + SwiGLU + SDPA is the sweet spot for this scale.
Open an issue on GitHub. Keep them focused.