fix(cron): add delivery guidance to cron prompt — stop send_message thrashing (#5444)

Cron agents were burning iterations trying to use send_message (which is
disabled via messaging toolset) because their prompts said things like
'send the report to Telegram'. The scheduler handles delivery
automatically via the deliver setting, but nothing told the agent that.

Add a delivery guidance hint to _build_job_prompt alongside the existing
[SILENT] hint: tells agents their final response is auto-delivered and
they should NOT use send_message.

Before: only [SILENT] suppression hint
After: delivery guidance ('do NOT use send_message') + [SILENT] hint
This commit is contained in:
Teknium 2026-04-05 23:58:45 -07:00 committed by GitHub
parent d6ef7fdf92
commit 89db3aeb2c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 26 additions and 8 deletions

View file

@ -383,17 +383,20 @@ def _build_job_prompt(job: dict) -> str:
f"{prompt}" f"{prompt}"
) )
# Always prepend [SILENT] guidance so the cron agent can suppress # Always prepend cron execution guidance so the agent knows how
# delivery when it has nothing new or noteworthy to report. # delivery works and can suppress delivery when appropriate.
silent_hint = ( cron_hint = (
"[SYSTEM: If you have a meaningful status report or findings, " "[SYSTEM: You are running as a scheduled cron job. "
"send them — that is the whole point of this job. Only respond " "DELIVERY: Your final response will be automatically delivered "
"with exactly \"[SILENT]\" (nothing else) when there is genuinely " "to the user — do NOT use send_message or try to deliver "
"nothing new to report. [SILENT] suppresses delivery to the user. " "the output yourself. Just produce your report/output as your "
"final response and the system handles the rest. "
"SILENT: If there is genuinely nothing new to report, respond "
"with exactly \"[SILENT]\" (nothing else) to suppress delivery. "
"Never combine [SILENT] with content — either report your " "Never combine [SILENT] with content — either report your "
"findings normally, or say [SILENT] and nothing more.]\n\n" "findings normally, or say [SILENT] and nothing more.]\n\n"
) )
prompt = silent_hint + prompt prompt = cron_hint + prompt
if skills is None: if skills is None:
legacy = job.get("skill") legacy = job.get("skill")
skills = [legacy] if legacy else [] skills = [legacy] if legacy else []

View file

@ -730,6 +730,21 @@ class TestBuildJobPromptSilentHint:
result = _build_job_prompt(job) result = _build_job_prompt(job)
assert "[SILENT]" in result assert "[SILENT]" in result
def test_delivery_guidance_present(self):
"""Cron hint tells agents their final response is auto-delivered."""
job = {"prompt": "Generate a report"}
result = _build_job_prompt(job)
assert "do NOT use send_message" in result
assert "automatically delivered" in result
def test_delivery_guidance_precedes_user_prompt(self):
"""System guidance appears before the user's prompt text."""
job = {"prompt": "My custom prompt"}
result = _build_job_prompt(job)
system_pos = result.index("do NOT use send_message")
prompt_pos = result.index("My custom prompt")
assert system_pos < prompt_pos
class TestBuildJobPromptMissingSkill: class TestBuildJobPromptMissingSkill:
"""Verify that a missing skill logs a warning and does not crash the job.""" """Verify that a missing skill logs a warning and does not crash the job."""