NEXO 7.11.8 — Silent Guardian reminders now stay silent
Published 2026-04-28. Patch release over v7.11.7 — the remaining leak was not Desktop UI logic anymore, but a Brain-side reminder contract that still allowed visible assistant prose after silent tool calls.
What was still leaking
In long-running Desktop conversations, Brain can inject silent reminders for lifecycle close/app-exit and for post-tool inbox heartbeat delivery. The reminders already said things like Do not produce visible text, but the contract was not explicit enough about the rest of the turn. In practice, a model could execute the silent tool call correctly and still append visible prose such as En pausa esperando tu siguiente paso... when there was no fresh user input.
The fix is shared at the contract level
v7.11.8 tightens the silence rule in every surface that matters:
templates/core-prompts/server-mcp-instructions.mdnow says the silence applies to the entire reminder turn.templates/CLAUDE.md.templatemirrors that same full-turn rule in the agent bootstrap.templates/core-prompts/post-tool-inbox-reminder.mdnow requests heartbeat-only output with no prose before or after it.templates/core-prompts/lifecycle-diary-stop.mdnow requires the same full-turn silence for close/app-exit diary + stop flows, including empty visible output when there is no fresh operator message.
Canonical lifecycle plans now publish the stricter contract
src/lifecycle_prompts.py bumps PLAN_VERSION from 5 to 6. That means Desktop receives the stricter close/app-exit diary-stop wording under a new deterministic canonical plan version, instead of silently reusing the older prompt contract.
Result
Consecutive silent reminders stop leaking visible prose into Desktop conversations, and canonical close/app-exit flows keep the same intent but with a stricter no-visible-output contract. The UI-side cleanup in Desktop handles stray historical content better, but Brain now stops generating the problematic visible turn in the first place.
Validation
pytest -q tests/test_enforcement_silent_contract.py tests/test_core_prompts.py tests/test_lifecycle_events.py
48 passed
Full changelog entry → · server-mcp-instructions.md · src/lifecycle_prompts.py