📄 run_briefing.py 1,295 bytes Apr 27, 2026 📋 Raw

!/usr/bin/env python3

"""Market briefing runner — standalone script for cron.

Called by Wadsworth's cron job. Not imported by anything.
"""

import asyncio
import os
import sys

Add services to path

sys.path.insert(0, '/home/hoffmann_admin/.openclaw/workspace/services')

Load env

from dotenv import load_dotenv
load_dotenv('/home/hoffmann_admin/.openclaw/.env')

import httpx
from icarus.core.market.sentiment import generate_briefing, format_briefing
from icarus.core.config.staging import TELEGRAM_BOT_TOKEN, TELEGRAM_CHAT_ID_MATT

async def send_briefing(is_am: bool = False) -> None:
"""Generate and send market briefing."""

# Generate briefing
briefing = await generate_briefing(premarket=is_am)
text = format_briefing(briefing)

# Send via Telegram
url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/sendMessage"
payload = {
    "chat_id": TELEGRAM_CHAT_ID_MATT,
    "text": text,
    "parse_mode": "Markdown",
}

async with httpx.AsyncClient() as client:
    resp = await client.post(url, json=payload, timeout=30.0)
    resp.raise_for_status()
    print(f"Briefing sent. Status: {resp.status_code}")

if name == "main":
is_am = "--am" in sys.argv
asyncio.run(send_briefing(is_am))