What's wrong: All 4 scheduled tasks (3 email checks at 12pm/4pm/8pm, plus a daily summary at 8pm) are failing to deliver their results. George runs the email checks but can't send the findings to your Telegram group. Two jobs have 5–6 consecutive errors; the other two run but silently discard results.
The error: "Telegram recipient @heartbeat could not be resolved to a numeric chat ID"
Impact: Since March 28, you haven't been receiving automated email check notifications about lender responses in Telegram. George checks your email on schedule, but the results go nowhere.
Root Cause Analysis
When: All 4 jobs were created on March 28, 2026 at 8:11 AM MT.
What happened: When a cron job runs, it starts a fresh "isolated" session — think of it as George waking up with no memory of which chat he was last talking in. The jobs were configured with
delivery.channel: "last", which means "send the result to whatever chat I was just in." But in an isolated session there is no "last" chat, so it defaults to
@heartbeat — a made-up address that doesn't exist.
Why it happened again: We actually diagnosed and fixed this exact problem during a session on March 27. We added clear rules to George's instruction manual (TOOLS.md) explaining the correct format. However, on March 28 at 8:08 AM, George cleaned up the old jobs and recreated new ones — but didn't follow the new rules. The AI model re-used the same broken pattern.
Fix: Delete all 4 broken jobs and recreate them with explicit Telegram delivery:
--channel telegram --to "-1003813078571" (your George HQ group's numeric ID). This tells George exactly where to send results, regardless of session context.
What was wrong: The lossless-claw plugin — George's knowledge base system — was installed back on March 27, but it was never connected to the engine that actually uses it. Think of it like installing an app on your phone but never opening it. The plugin sat there with an empty database (zero conversations, zero searchable history) the entire time.
What lossless-claw does: It gives George a perfect memory. Instead of forgetting older conversations (the default behavior), it saves every message, creates searchable summaries, and gives George tools to look things up: lcm_grep (search history), lcm_describe (summarize a past conversation), and lcm_expand (drill into details). It's powered by the Ollama AI running on your Mac.
Fix: Added the missing configuration line ("contextEngine": "lossless-claw") and restarted. Plugin is now loading and active. Going forward, every conversation George has will be persisted and searchable.
Root Cause Analysis
When: The plugin was installed on March 27 during a maintenance session. The configuration slot was never set.
What happened: The
openclaw plugins install command added
lossless-claw to the plugin list and marked it as enabled. But the critical
contextEngine slot — which tells OpenClaw "use this plugin for context management" — was left empty. Without it, the plugin loads but the gateway never routes conversations through it. The database stayed at exactly zero rows for 6 days.
Why it wasn't caught: The plugin appeared as "enabled" in the config, so it looked fine on inspection. The only clue was the empty database, which wasn't checked until this audit.
What was wrong: The Personal CRM database was never set up on this Mac. A CRM existed on the old Ubuntu laptop but was never recreated here after the March 11 device switch.
Fix: Deployed fresh CRM schema (20 tables, 25 indexes) with WAL mode. Seeded your 5 key lender contacts: Matt Boytz (Bend Mortgage), Josie Kleekamp (Ent CU), KC Dirksen (Griffin Funding), TJ Donovan (Beeline), and Tidal Loans. George can now track contacts, interactions, follow-ups, and meetings in a structured database.
Note: Auto-discovery from Gmail/Calendar requires Google Workspace (gog) to be configured, which isn't set up yet. For now, contacts can be added manually or by George during conversations.
What's wrong: The installed OpenClaw version is 2026.3.8, but your configuration was last written by version 2026.3.24. The LaunchAgent was set up with the newer version's features, but the actual running code is 16 days behind.
Impact: You're missing bug fixes, Telegram stability improvements, and potentially security patches from 2+ weeks of updates. The version mismatch could also cause subtle behavior differences between what the config expects and what the code actually does.
Root Cause Analysis
What happened: During the March 27 maintenance session, we updated the gateway's configuration and LaunchAgent plist (which references v2026.3.24), but we didn't run
npm update -g openclaw to actually update the installed software. The config got the new version's settings, but the binary stayed at 2026.3.8.
Fix: Run
npm update -g openclaw to install the latest version, then restart the gateway LaunchAgent.
What's wrong: The error log shows repeated instances of George trying to read files but forgetting to specify which file. The error "read tool called without path" appeared multiple times on March 28, 29, and 30.
Impact: Some of George's tasks fail silently when he tries to read a file but sends a malformed request. He may retry successfully, or the task might complete with incomplete information.
Root Cause Analysis
What happened: George uses the MiniMax M2.5 AI model, which is cost-effective but occasionally generates improperly formatted tool calls. When the model sends a "read file" command without specifying the file path, the system correctly rejects it. This is a known limitation of smaller, more affordable AI models — they sometimes skip required parameters.
Impact level: Annoying but not catastrophic. George usually retries or works around it. Upgrading to a higher-tier model (like Claude) would eliminate this, but at higher cost.
What's wrong: Your Gmail IMAP app password is stored as visible text in the HEARTBEAT.md file in George's workspace. This file is readable by any process running on your Mac and could be accidentally shared.
What's at risk: This is a Google "App Password" (not your main Google password), so the blast radius is limited to email read access. But it's still a credential that shouldn't sit in plaintext.
Root Cause Analysis
What happened: The HEARTBEAT.md file was written on March 26 as a quick reference for George's email checking script. The app password was embedded directly in the IMAP connection example code so George could copy-paste it. This is a common "just get it working" shortcut that should have been followed up by moving the credential to an environment variable.
Fix: Move the app password to the LaunchAgent's environment variables (alongside the existing API keys), then update the HEARTBEAT.md script to reference
$GMAIL_APP_PASSWORD instead of the literal value.
What happened: On March 31 at 4:11 AM, George's Telegram connection stalled for about 2 minutes due to a DNS timeout when reaching the Telegram API. The system detected the stall, forced a restart, and recovered automatically.
Impact: George was unreachable via Telegram for roughly 2 minutes in the middle of the night. The built-in watchdog handled it correctly — this is the system working as designed. No action needed unless stalls become frequent.