"A second pair of eyes that can only raise the alarm, never lower it"
This release wires an optional, purpose-trained safety guard into the classification pipeline and fixes a routing gap where religious questions could lose their restraint handling.
New
- Optional LlamaGuard safety layer: set
OLLAMA_SAFETY_MODEL(recommended:llama-guard3:1b) and every message is additionally screened by a purpose-trained harm classifier. It can only escalate toward safety (dangerous requests to a hard stop, self-harm signals to crisis resources) - it never downgrades, and health/money questions keep their normal restraint handling instead of being refused. Off by default; if the model is unavailable the guard fails open and the existing classifier remains authoritative. - Startup health check warns when a safety guard is configured but the model is not pulled - previously that misconfiguration was silent.
Fixed
- Religious questions phrased through relationships or life decisions ("is it haram to leave my marriage", "my rabbi says keep faith") were routed to the relationships domain, losing the spirituality safeguards (no confirming religious rulings, no playing spiritual authority). Spirituality signals now win these ties.
- The word "difficult" (and "culture", "cultivate") could route an ordinary message to the spirituality domain via a bare
cultkeyword match.
Changed
- SQLite schema v3: an unused legacy column capable of storing raw message text (
session_intents.user_input) is now dropped entirely. Existing databases migrate automatically on startup; no action needed.
git pull
pip install -e ".[dev]"Optional - to enable the safety guard:
ollama pull llama-guard3:1b
echo 'OLLAMA_SAFETY_MODEL=llama-guard3:1b' >> .env