From 128d8a7c1e49dd6a0ce4f019886e1505120befbd Mon Sep 17 00:00:00 2001 From: Scott Idem Date: Sat, 9 May 2026 14:35:09 -0400 Subject: [PATCH] feat: inject session mode into persona system prompt MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit context_loader.load_context() now accepts a mode param ("chat"|"otr"). In OTR mode, the --- System --- block gains a second line: Current mode: Off The Record — this conversation is private and will not be logged or included in memory distillation routers/chat.py passes mode="otr" when req.off_record is True. Normal chat and all orchestrator calls stay at mode="chat" (no change to the System block). The System block consolidates date/time and mode in one place, matching the existing timestamp pattern. Co-Authored-By: Claude Sonnet 4.6 --- cortex/context_loader.py | 13 +++++++++++-- cortex/routers/chat.py | 1 + 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/cortex/context_loader.py b/cortex/context_loader.py index f1a1a7f..bf7974e 100644 --- a/cortex/context_loader.py +++ b/cortex/context_loader.py @@ -21,6 +21,7 @@ def load_context( include_short: bool = True, role_append: str = "", inject_datetime: bool = True, + mode: str = "chat", ) -> str: """ Build the system-prompt context block for a given tier and memory toggles. @@ -39,10 +40,18 @@ def load_context( inara_dir = persona_path() parts = [] - # ── 0. Current date and time (per-role toggle — injected first so it's prominent) ── + # ── 0. System block — date/time and session mode (injected first so it's prominent) ── + system_lines = [] if inject_datetime: now = datetime.now().astimezone() - parts.append(f"--- System ---\nCurrent date and time: {now.strftime('%A, %Y-%m-%d at %I:%M %p %Z')}") + system_lines.append(f"Current date and time: {now.strftime('%A, %Y-%m-%d at %I:%M %p %Z')}") + if mode == "otr": + system_lines.append( + "Current mode: Off The Record — " + "this conversation is private and will not be logged or included in memory distillation" + ) + if system_lines: + parts.append("--- System ---\n" + "\n".join(system_lines)) # ── 1. Core identity (always) ────────────────────────────────── for filename in _CORE: diff --git a/cortex/routers/chat.py b/cortex/routers/chat.py index bec1b48..39ef95e 100644 --- a/cortex/routers/chat.py +++ b/cortex/routers/chat.py @@ -95,6 +95,7 @@ async def _stream_chat(req: ChatRequest): include_long=req.include_long, include_mid=req.include_mid, include_short=req.include_short, + mode="otr" if req.off_record else "chat", ) history = load_session(session_id) history.append({"role": "user", "content": req.message})