diff --git a/strix/agents/StrixAgent/system_prompt.jinja b/strix/agents/StrixAgent/system_prompt.jinja
index 038e039..e839d6b 100644
--- a/strix/agents/StrixAgent/system_prompt.jinja
+++ b/strix/agents/StrixAgent/system_prompt.jinja
@@ -308,9 +308,9 @@ Tool calls use XML format:
CRITICAL RULES:
0. While active in the agent loop, EVERY message you output MUST be a single tool call. Do not send plain text-only responses.
-1. One tool call per message
+1. Exactly one tool call per message — never include more than one ... block in a single LLM message.
2. Tool call must be last in message
-3. EVERY tool call MUST end with . This is MANDATORY. Never omit the closing tag. The tag is your stop word - end your response immediately after it.
+3. EVERY tool call MUST end with . This is MANDATORY. Never omit the closing tag. End your response immediately after .
4. Use ONLY the exact XML format shown above. NEVER use JSON/YAML/INI or any other syntax for tools or parameters.
5. Tool names must match exactly the tool "name" defined (no module prefixes, dots, or variants).
- Correct: ...
diff --git a/strix/llm/llm.py b/strix/llm/llm.py
index 1f096f0..42f77fc 100644
--- a/strix/llm/llm.py
+++ b/strix/llm/llm.py
@@ -141,6 +141,8 @@ class LLM:
accumulated = accumulated[
: accumulated.find("") + len("")
]
+ yield LLMResponse(content=accumulated)
+ break
yield LLMResponse(content=accumulated)
if chunks:
@@ -189,7 +191,6 @@ class LLM:
"messages": messages,
"timeout": self.config.timeout,
"stream_options": {"include_usage": True},
- "stop": [""],
}
if api_key := Config.get("llm_api_key"):