# Upgrade Guide — v0.17.14

<!-- bump: patch -->

## What Changed

### Sentinel: Robust Category Extraction from LLM Responses

The MessageSentinel's LLM classification now uses multi-layer parsing instead of requiring an exact single-word response:

1. **Exact match** (ideal): Response is just the category word — works as before.
2. **Extraction** (new): For short responses (<100 chars) that contain a valid category word, the category is extracted. Example: "The classification is: normal" → extracts `normal`. Confidence is reduced (0.6 vs 0.8) to reflect the extraction.
3. **Rejection**: Responses over 100 characters are treated as context-contaminated conversational responses and rejected (pass-through). This catches the case where the LLM gets CLAUDE.md injected and writes paragraphs instead of classifying.

Priority order when multiple categories appear in an extracted response: emergency-stop > pause > redirect > normal. This ensures safety-first ordering.

## What to Tell Your User

- **Smarter message classification**: Your agent's safety system is now better at understanding its own internal responses, which means fewer false pauses and interruptions during normal conversation.

## Summary of New Capabilities

| Capability | How to Use |
|-----------|-----------|
| Multi-layer LLM response parsing | Automatic — extracts valid classifications from verbose responses |
| Length-based rejection for contaminated responses | Automatic — responses >100 chars are treated as unreliable |
