Auto-Response System
Overview
The Auto-Response System enables interfaces to deliver their output back to users through the LLM, maintaining context and allowing the AI to format and comment on results appropriately.
Since the prompt rewrite, auto-response delivery no longer depends only on a
raw system_message block. The delivery path now also attaches a typed
PromptRequest(mode='delivery') built by
core.prompt_engine.build_delivery_request() so migrated engines can render
delivery prompts natively.
Problem Solved
Previously, interface actions (like terminal commands) would:
Execute the action
Send output directly to the user via Telegram
Skip the LLM entirely
This caused issues:
No AI formatting or commentary
Lost conversational context
No coordinate preservation for multi-step interactions
Solution: LLM-Mediated Responses
The new system ensures all responses flow through the LLM:
User Request
│
▼
┌─────────────┐
│ LLM │ ──→ Generates action (e.g., bash: "df -h")
└─────────────┘
│
▼
┌─────────────┐
│ Interface │ ──→ Executes command, gets output
│ (Terminal) │
└─────────────┘
│
▼
┌─────────────┐
│ Auto- │ ──→ Preserves context and builds
│ Response │ system_message + PromptRequest(delivery)
└─────────────┘
│
▼
┌─────────────┐
│ LLM │ ──→ Formats output, generates message_telegram_bot
└─────────────┘
│
▼
┌─────────────┐
│ User │ ←── Receives formatted response
└─────────────┘
Key Components
1. AutoResponseSystem Class
Located in core/auto_response.py:
class AutoResponseSystem:
async def request_llm_response(
self,
output: str | None,
original_context: Dict[str, Any],
action_type: str,
command: str = None,
action_outputs: list[dict[str, Any]] | None = None,
):
# Creates a synthetic message carrying delivery context
# Builds a compatibility system_message payload
# Attaches PromptRequest(mode="delivery") on __prompt_request
# Enqueues the request for normal message-chain processing
2. Interface Integration
Interfaces use the helper function:
from core.auto_response import request_llm_delivery
# After executing action
await request_llm_delivery(
output=command_output,
original_context={
'chat_id': original_message.chat_id,
'message_id': original_message.message_id,
'interface_name': 'telegram_bot',
'original_command': command
},
action_type="bash",
command=command
)
Context Preservation
The system preserves essential context:
- Original Request Context:
chat_id- Where to send the responsemessage_id- For reply threadinginterface_name- Which interface to use for responseoriginal_command- What was executed
- LLM Context:
System instruction about what happened
Command that was executed
Output from the command
Delivery instructions
Suggested response format
System Message Types
Auto-response delivers results back to the LLM using structured
system_message payloads. The type field indicates the origin:
"output"– command results from plugins or terminals"event"– scheduled notifications"error"– corrector warnings such as ambiguous chat names
Error system messages include an error_retry_policy instructing the
LLM how to resubmit corrected JSON. The policy describes the steps to
repeat the previous request while adjusting only the invalid portion.
All system messages also contain a full_json_instructions block that
reminds the LLM of the JSON format and available actions.
For migrated engines, the same payload also carries __prompt_request with a
typed delivery request. This keeps the legacy correction/delivery semantics
while allowing renderer-backed engines to use native message/tool formats.
These system messages are ignored during JSON extraction, preventing unintended actions.
Usage Examples
Terminal Command
User: "synth fammi df -h"
LLM: Generates bash action: {"type": "bash", "payload": {"command": "df -h"}}
Terminal: Executes "df -h", gets output
Auto-Response: Sends output + context to LLM
LLM: "Here's your disk usage:\n\n```\n/dev/sda1 50G 25G 23G 53% /\n```\n\nYou have 23GB free space available."
Benefits
- ✅ Consistent Experience
All responses flow through the LLM maintaining conversation context
- ✅ AI Enhancement
LLM can format, explain, and comment on technical output
- ✅ Context Preservation
Original chat coordinates are maintained for proper delivery
- ✅ Extensible
Any interface can use this system for callback responses
- ✅ Error Handling
Errors are also delivered through LLM for consistent formatting
Supported Autonomous Interfaces
The auto-response system currently supports the following autonomous interfaces:
- Terminal Plugin (
plugins/terminal.py) Command output delivery through LLM for better formatting and context-aware responses.
- Reddit Interface (
interface/reddit_interface.py) Autonomous responses to incoming Reddit messages and comments via
_listen_inbox().- X Interface (
interface/x_interface.py) Prepared for autonomous X/Twitter interactions and responses to mentions or timeline events.
- Event Plugin (
plugins/event_plugin.py) Scheduled event notifications and autonomous event-triggered actions delivered through LLM.
- Telethon Userbot (
interface/telethon_userbot.py) Autonomous Telegram userbot interactions routed through LLM for intelligent responses.
Implementation for New Interfaces
To add auto-response to a new interface:
Import the helper:
from core.auto_response import request_llm_delivery
After action execution:
# Prepare context response_context = { 'chat_id': original_message.chat_id, 'message_id': original_message.message_id, 'interface_name': context.get('interface', 'telegram_bot'), 'action_specific_data': action_data } # Request LLM delivery await request_llm_delivery( output=action_result, original_context=response_context, action_type=action_type, command=original_command )
Remove direct messaging:
Replace direct
bot.send_message()calls with auto-response requests
Testing
The system includes test coverage:
test_auto_response.py- Tests the auto-response systemIntegration tests verify the complete flow
Interfaces Using Auto-Response
Currently implemented in:
plugins/terminal.py- Terminal/bash commandsReady for extension to other interfaces (event, reddit, x, etc.)
Note
This system ensures all interface responses maintain conversational context and benefit from LLM formatting and commentary.
Warning
Interfaces should not send direct responses to users when using auto-response. All output should flow through the LLM for consistency.