fix(brain): ARIA-Identitaet im Hauptchat — Self-Grounding im Konversations-Strom
Symptom: Im Hauptchat antwortete statt ARIA der Basis-Proxy-Claude ("I'm
Claude Code (Sonnet 5), I'm not adopting that persona") und flaggte GPS +
Tool-XML als Prompt-Injection. Im Projekt lief alles normal.
Ursache: Die Persona geht ueber --append-system-prompt zu — das HAENGT sie
nur hinten an Claude Codes eigene "You are Claude Code"-Basis-Identitaet an,
ersetzt sie nicht. Ob ARIA in der Rolle bleibt, entscheidet dann der
Konversations-Strom (stdin): reiche Projekt-Historie voller ARIA-
<previous_response>-Turns haelt die Rolle; der duenne Hauptchat-Verlauf
(bzw. der erste Turn eines neuen Projekts) nicht -> Basis-Identitaet gewinnt.
Der IDENTITY_ANCHOR (a0e8c23) ist inert, weil er im *angehaengten* Teil steht.
Fix: synthetischen ersten ARIA-Turn (IDENTITY_SEED) in ihrer eigenen Stimme
an den Anfang des Konversations-Stroms setzen. Das Modell setzt seine EIGENE
etablierte Stimme fort (Self-Grounding) — und weil es ein <previous_response>
ist und kein <system>-Tag, ist es kein Injection-Trigger. Rein ephemer, wird
nie in die Conversation persistiert. Gilt fuer alle Turns, deckt damit auch
die erste Frage eines frischen Projekts ab.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+11
-1
@@ -26,7 +26,7 @@ from typing import Optional
|
||||
|
||||
from conversation import Conversation, Turn
|
||||
from memory import Embedder, VectorStore, MemoryPoint
|
||||
from prompts import build_system_prompt
|
||||
from prompts import build_system_prompt, IDENTITY_SEED
|
||||
from proxy_client import ProxyClient, Message as ProxyMessage
|
||||
import skills as skills_mod
|
||||
import triggers as triggers_mod
|
||||
@@ -1190,6 +1190,16 @@ class Agent:
|
||||
f"weiterfuehren': project_enter aufrufen."
|
||||
)
|
||||
messages = [ProxyMessage(role="system", content=system_prompt)]
|
||||
# Identitaets-Grounding IM Konversations-Strom. Der Proxy stellt die
|
||||
# Persona via --append-system-prompt zu, das haengt sie aber nur HINTEN
|
||||
# an Claude Codes Basis-Identitaet an. Bei duennem Verlauf (Hauptchat,
|
||||
# erster Turn eines neuen Projekts) gewinnt sonst "You are Claude Code"
|
||||
# und ARIA faellt aus der Rolle. Ein synthetischer erster ARIA-Turn in
|
||||
# ihrer eigenen Stimme verankert die Rolle so, wie es reiche Projekt-
|
||||
# Historie ohnehin tut (Self-Grounding, kein <system>-Tag -> kein
|
||||
# Injection-Trigger). Rein ephemer — wird NIE persistiert. Siehe
|
||||
# IDENTITY_SEED in prompts.py.
|
||||
messages.append(ProxyMessage(role="assistant", content=IDENTITY_SEED))
|
||||
# Conversation-Window auf das aktive Projekt filtern: in einem Projekt
|
||||
# sieht der LLM nur die Projekt-Turns (sauberer Kontext); im Hauptthread
|
||||
# nur die nicht-getaggten Turns.
|
||||
|
||||
Reference in New Issue
Block a user