Three daily briefings: morning (7:30am), afternoon (3pm), evening (10pm). Each uses a direct isolated cron session — no sub-agents, no sessions_yield, no spawn.
DO NOT use sessions_spawn + sessions_yield. The yield causes the parent session file to change during the wait, triggering EmbeddedAttemptSessionTakeoverError. Instead:
sessionTarget: "isolated" with kind: "agentTurn"delivery.mode: "announce"sessions_spawn, no sessions_yield, no send_messagefetch which returns HTML blocks on some RSS endpoints.Every news cron prompt MUST include:
"Use exec tool with curl. Do NOT use fetch tool." — MiniMax M3 prefers its built-in fetch tool which gets blocked by many RSS endpoints. curl -sL works. Without this line, the model will use fetch and fail.
"Final response = the briefing. Nothing else. No meta, no talk about what you did." — Without this, MiniMax often outputs a description of its process ("Gus fetched the feeds and curated 5 stories...") instead of the actual briefing.
Do NOT use "send_message" — The final reply auto-delivers. Using message tool causes duplicate delivery or errors.
"Real URLs from feeds only. No fake links." — The model may fabricate headlines.
List each curl command on its own line. The model will run them sequentially via exec tool.
TypeSourceURLAIAI Newshttps://artificialintelligence-news.com/feed/AITechCrunch AIhttps://techcrunch.com/category/artificial-intelligence/feed/AIWiredhttps://www.wired.com/feed/rssAIArs Technicahttps://arstechnica.com/feed/AIMIT Tech Reviewhttps://www.technologyreview.com/topic/artificial-intelligence/feed/FinanceBenzinga Marketshttps://www.benzinga.com/markets/feedFinanceBloomberg Marketshttps://feeds.bloomberg.com/markets/news.rssFinanceFinancial Timeshttps://www.ft.com/markets?format=rssFinanceMarketWatch/Dow Joneshttps://feeds.content.dowjones.io/public/rss/mw_topstoriesFinanceInvesting.comhttps://www.investing.com/rss/news.rssFinanceSeeking Alphahttps://seekingalpha.com/market_currents.xml
DO NOT use The Verge RSS ( https://www.theverge.com/rss/ai-artificial-intelligence/index.xml) — returns HTML captcha, always blocked.
DO NOT use Google News RSS — 400 error.
DO NOT use Nasdaq RSS — returns empty/000.
Reuters, CNBC, Yahoo Finance RSS feeds also unreliable (block flakily). Stick to the verified list above.
Skip: crypto, forex, personal finance ("I have $X saved what do I do"), NFT, price predictions, spam, earnings transcript full text, obituaries, press releases.
Prefer: major AI lab/product/policy news, big market swings, Fed/rates signals, tech positioning, AI capex reality checks, Nasdaq-moving events. Hobo likes knowing when to buy the dip.
Target 5-7 stories per briefing, split roughly half AI and half markets. 1500-3000 chars total.
Each cron's prompt has its own formatted template. General structure:
text
{{emoji}} *Patch {{time}} briefing* [time SGT]
*AI & TECH*
1. [Headline](full url) — one punchy sentence
*MARKETS & MONEY*
1. [Headline](full url) — what moved, signal for tech
*NOTES*
Feeds that failed, if any.
~ Patch
Emojis: morning 🌅, afternoon 🌤️, evening 🌙.
CRITICAL: With maxConcurrentRuns: 2, any two crons firing at the same minute will collide and trigger EmbeddedAttemptSessionTakeoverError. Every cron's minute must be unique.
TimeCronNotes07:30Morning news✅ unique09:00Transport check-in✅09:03, 09:37Pi Dashboardodd minutes avoid :0009:34Expense Sync to Sheetwas 09:30, moved to avoid collision10:00Expense Check-in 10am✅~:05Token Usage Tracker0 * * * * + staggerMs 300000:07Regenerate Memory Dashboard7 * * * * fixed minute13:30Expense Check-in 1:30pm✅15:00Afternoon news✅ unique21:50Expense Check-in 10pm✅22:00Evening news✅ unique23:50Daily Memory Log✅ unique00:00Backup workspace✅ unique (every 2 days)Sat 10:00Investment Check-inshares minute with Expense Check-in 10am — watch for collisionSat 11:00Investment Sync✅ uniqueSun 05:00Weekly Security Audit✅ unique
Rule: Never put two crons on the same minute. If unavoidable, shift one by 3-5 minutes.
ParameterValueModelminimax/MiniMax-M3Fallbacksdeepseek/deepseek-v4-flash, openrouter/autoTimeout300s (ample — typical run ~70s)ThinkingNot explicitly set (cron session inherits default)
MiniMax M3 is the primary. DeepSeek V4 Flash falls back cleanly if MiniMax times out. The EmbeddedAttemptSessionTakeoverError only happens when two crons share a minute, not from model issues.
sessionTarget: "isolated" — fresh session per run, no memory of previous chatssessionKey — unique per cron (e.g. session:cron:patch-news-morning-briefing)delivery.mode: "announce" — agent's final response auto-sent to Telegramdelivery.to: "37134287" — Hobo's chat IDsessions_spawn + sessions_yield triggers session file fence check failuresessionKey. Main session key collisions cause lock contentionfetch tool — MiniMax's built-in fetch blocks on many RSS endpoints. Force exec + curlmaxConcurrentRuns: 2 still causes session file races when both fire simultaneously. Offset by at least 3 minutesfetch-news.py — old script for parallel RSS fetching (no longer used)news-pending/ — directory for old 2-step flow (no longer used)send-news.sh, deliver-news.sh — legacy shell wrappers (deprecated)