From 3a49dadb69fd45c08ec4fd90bb1c0a7d96ebac17 Mon Sep 17 00:00:00 2001 From: daniel Date: Sat, 9 May 2026 14:56:25 -0500 Subject: [PATCH] Inject live datetime into system prompt per invocation with relative-time instruction --- .../app/agent_claw_main/prompt_builder.py | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/agentclaw/app/agent_claw_main/prompt_builder.py b/agentclaw/app/agent_claw_main/prompt_builder.py index 07bb0f9..782b6b2 100644 --- a/agentclaw/app/agent_claw_main/prompt_builder.py +++ b/agentclaw/app/agent_claw_main/prompt_builder.py @@ -1,5 +1,7 @@ import os import boto3 +from datetime import datetime +from zoneinfo import ZoneInfo from botocore.exceptions import ClientError # Cache keyed by actor_id ('' = global/no user) @@ -9,9 +11,24 @@ _prompt_cache: dict[str, str] = {} def build_system_prompt(user_context: str = '', actor_id: str = '') -> str: """Build system prompt from S3 workspace files + optional per-user context.""" base = _get_base_prompt(actor_id) + + # Dynamic block — injected fresh every call, never cached + chicago = ZoneInfo('America/Chicago') + now = datetime.now(chicago) + dt_str = now.strftime('%A %Y-%m-%d %H:%M:%S %Z') + time_block = ( + f'## Current Time\n' + f'The current date and time is: {dt_str}\n\n' + f'When examining any other date or time value, calculate its distance from now ' + f'(in seconds, minutes, hours, or days as appropriate) before drawing conclusions ' + f'like "upcoming", "overdue", "recent", "just happened", or "a long time ago". ' + f'Do this arithmetic explicitly — do not estimate or assume.' + ) + + parts = [base, time_block] if user_context: - return base + f'\n\n---\n\n## User\n{user_context}' - return base + parts.append(f'## User\n{user_context}') + return '\n\n---\n\n'.join(parts) def _get_base_prompt(actor_id: str = '') -> str: @@ -58,7 +75,7 @@ def _get_base_prompt(actor_id: str = '') -> str: except Exception as e: print(f'[prompt_builder] Failed to load {fname}: {e}') - parts.append('## Runtime\nRuntime: agent-claw | host=AgentCore | model=bedrock-claude-sonnet | channel=telegram\nCurrent date/time is provided by the system. Timezone: America/Chicago.') + parts.append('## Runtime\nRuntime: agent-claw | host=AgentCore | model=bedrock-claude-sonnet | channel=telegram | timezone=America/Chicago') result = '\n\n---\n\n'.join(parts) _prompt_cache[actor_id] = result