Build Log

Changelog

This isn't a changelog for a SaaS product. It's a build log.

RiskCast exists because we're building the thing we're talking about. OpenClaw is a self-hosted, multi-agent AI system that runs real business operations — email triage, event inquiry responses, SEO content, meeting digests — across two Mac Minis at Tabbris Innovation Center in Charlotte, NC.

This page documents what actually shipped. Not roadmaps, not intentions — what got built, what broke, and what we fixed. Every entry traces back to a real session, a real commit, or a real failure.

  • Upgraded the Monitor agent’s local model from Qwen 3 8B to Qwen 3.5 9B
  • Upgraded Ollama from 0.17 to 0.20
  • Gateway down for eight days — silent failure. The host OS revoked trust in the node binary, so every launch was killed at startup with no log output. Rehabilitated the binary. Gateway back up
  • Billing cooldowns from an earlier credit exhaustion lingered after top-up. Cleared
  • Email classifier regression — a reclassify rule added a few days earlier was sending one platform’s mail to the wrong channel under a tag the Slack surface didn’t know how to display. Removed the rule, taught the surface about the additional tags
  • “Draft unavailable” false negative in Slack surfacing. When Drafting deliberately chose to skip an item, the Slack post made it look like the pipeline had failed. Now shows the agent’s reasoning instead
  • Small corruption in one of the handoff files from an earlier in-place edit. Repaired
  • WhatsApp Desktop quitting every afternoon — auto-update install was on. Disabled
  • Subject-pattern filter in the email pre-filter so platform read-receipts auto-archive before they reach the pipeline
  • Drafting context drift — the pricing reference in Drafting’s context had drifted from the authoritative event inquiry playbook, producing a quote without a line-item breakdown. Rewrote the reference to match the playbook. Re-sent the corrected draft
  • Event inquiry playbook added to Drafting’s context
  • Session size monitor — hourly check with a Slack alert when any agent session crosses a soft or hard threshold. Alerts auto-clear on reset
  • Moved compaction to proactive mode so long-running sessions stay trim automatically
  • Unnecessary spend — the Drafting agent was looping on heartbeats without real work. Reset the agent’s session
  • Heartbeat restructure — recalibrated cadences across the three agents. Monitor slowed to give its local model headroom. Drafting switched to cron-only — runs only when there’s a pending draft. Alfred kept hourly
  • Operational workflows — Alfred can now handle recurring monthly vendor revenue reports end-to-end. Reads the email (including image attachments), calculates ownership splits, updates the financial model, and posts a confirmation to Slack. Includes a month-end checklist so nothing slips through
  • Image reading — Alfred can now open and read image-based reports that vendors send as attachments
  • System under version control — moved the entire OpenClaw workspace into a private code repository. All three agent workspaces, pipeline scripts, skills, workflows, and a sanitized config template. Anything can now be edited from a phone
  • Full system inventory — audited the Mac Mini end-to-end before the move: files, scheduled jobs, local models, running agents and sessions. Everything unversioned got mapped into the new repository
  • Email triage now connects to operational workflows — classifying an email also tells Alfred what to do with it, not just how to tag it
  • Caught a hardcoded secret in a setup doc before it made it into the repository
  • Silent email pipeline failure — the Gmail query was occasionally returning nothing when real messages were waiting. The error was being swallowed and the log said “no new mail” while the inbox piled up. Replaced the query with a reliable one and added proper error handling everywhere
  • Misrouted event inquiries — emails mentioning “payment” in the body (for example, a customer asking “do you accept card payments?”) were being tagged as payment receipts instead of event inquiries. Reordered the rules so event signals win, and restricted payment keywords to the subject line
  • One platform’s emails were classified into a category with no matching Slack channel — they’d tag correctly and then vanish. Switched to auto-archive, and added a safety-net channel for the orphan category
  • Resolved an email header parsing inconsistency flagged in March 16 known issues
  • Early-warning canary on the email poller. If roughly half a day passes with no new mail, the system flags the pipeline as potentially stuck instead of silently waiting — the monitoring we never had before
  • Auto-retry on flaky upstream calls. A single transient failure no longer breaks the pipeline
  • Boot-time self-test — on restart, the pipeline checks every moving piece before running: credentials, file permissions, Slack connection, scheduled scripts, keyring. Fails fast and loudly if anything is misconfigured
  • Every step of the email poller now logs what failed and why. The pipeline can no longer fail silently
  • Purged dead items from the draft queue that would never be reprocessed
  • RiskCast production workflow, second pass — rewrote the podcast production routine with a standardized four-stage flow: raw audio in, transcription, edit template, editor package out. Set naming conventions and folder structure
  • Documented the known blockers for transcription setup, and added Slack templates for production status updates
  • Upgraded OpenClaw to the current release — five patch releases of accumulated fixes, including better session management and more reliable model failover
  • Primary model restored to Anthropic Claude for Alfred and the Drafting agent. Gemini became the first fallback, the local model the second. Three providers in the chain — no single vendor outage takes the system down
  • Sandboxed the Monitor and Drafting agents at the OS level, on top of existing tool restrictions. Alfred stays open so it can do real operational work
  • Removed per-agent overrides that were quietly defeating the main sandbox policy
  • Deterministic workflow engine enabled. Lets us write pipelines with explicit approval gates and resume points instead of chaining shell scripts together
  • Workflows can now embed AI steps (classification, drafting) inside an otherwise deterministic flow — the AI does its job without deciding what comes next
  • First workflow written using it: the email triage pipeline. Five steps end-to-end, with approval gates on both Slack notifications. Runs on demand, on a schedule, or via event — not just on a cron
  • RiskCast podcast production pipeline — built into Alfred. Four stages: raw audio in, transcription runs nightly, Alfred generates an edit template from the transcript, and a package is assembled for the editor with audio, transcript, edit notes, show notes draft, and brief. Alfred is now part of the production loop — on brand for a podcast about AI agents
  • Full system health and security audit after the upgrade. Nothing critical
  • Security audit flags the Slack allowlist as a multi-user heuristic — expected and acceptable for a personal-assistant setup
  • Drafting agent silently starved — an emergency workaround added a week earlier was quietly stealing work from the Drafting agent. It was grabbing emails before Drafting could write replies and posting raw notifications to Slack instead. The workaround was added to the schedule but never removed or documented
  • Reordered the schedule so the Drafting agent runs first, and rewrote the workaround as a fallback only. Drafting produces replies again; the fallback kicks in only if Drafting misses its window
  • Spam no longer surfaces as leads. Added a sender blocklist and allowlist to the email classifier, driven by config
  • Reclassified a backlog of junk mail (platform notifications, subscription mail) that had been polluting Slack channels
  • Urgency cap — junk mail can never be flagged high-priority
  • Email header parsing inconsistency in the poller — resolved 2026-03-24
  • Classifier accuracy is still a work in progress — sender-based rules help but the AI classification still needs tuning
  • Presented OpenClaw at Community Night at Tabbris — first public demo of the system
  • Built an interactive slide deck covering the architecture, security model, pipeline flow, and lessons learned
  • Deck reflects the live system at the time: Gemini as the primary model, local model as fallback, four agents running across two machines
  • Weekly review system — first working review doc pulling signal from meeting notes, Slack, and email into a single place
  • New private Slack channel as a universal capture surface for session summaries and Alfred digests
  • Session capture pattern — every meaningful work session ends with a tagged post so context gets written down somewhere durable
  • Scheduled weekly review time before recurring one-on-ones
  • Google Drive folder structure for weekly reviews, meeting sync, tracker, and projects
  • Switched Alfred’s primary model from Claude to Gemini temporarily, while Anthropic access was being sorted out between business and personal accounts
  • Architecture decision — Claude Projects are workspaces, not systems of record. Aggregation happens in shared surfaces like Slack and Drive
  • Meeting notes integration. Two modes: Alfred reads short meeting summaries from a dedicated Slack channel for daily digests; deeper meeting prep happens in a browser session with the full transcript
  • Expanded Alfred’s Slack channel access to the new meeting-notes and dashboard channels
  • OpenClaw upgrade. Native support for local-model memory embeddings, a config validation command, faster Slack auth failure, tighter Slack thread context handling, WhatsApp self-message detection, prompt injection hardening, live heartbeat reload, permissions hardening, and a scheduled-job cleanup fix
  • Friday’s content engine seeded. Briefs, templates, content calendar, and blog categories created. Four categories published to the CMS, five briefs queued, one full draft in review. SEO audit completed for the Tabbris site. All page titles and meta descriptions pushed through the CMS. Eight legacy posts archived
  • Friday’s three-stage pipeline (Scout → Writer → Publisher) designed and partially wired
  • Documented a few quirks in the Webflow automation tooling
  • Replaced placeholder testimonials on the Tabbris site with real Google reviews (seven unique reviewers)
  • System audit identified three competing schedulers — root cause of most silent failures
  • Drafting agent had been idle for three weeks because its upstream handoff was broken
  • A shadow inbox had quietly accumulated hundreds of un-surfaced items with no way out
  • A bypass script that skips the Drafting agent, so at least the emails reach Slack while the main pipeline is being rebuilt
  • Watchdog alert spam eliminated — alerts now fire only on status changes, not on every check
  • Consolidated all system alerts onto Slack. Retired the WhatsApp health pings
  • Morning digest always posts, even on healthy days, so silence can’t be confused with something being wrong
  • Evening check-in (weekday 6 PM)
  • Interactive visualizations mapping all seven system pipelines
  • Audited and rebuilt the second Mac Mini’s scheduled jobs, auto-start config, and Slack bindings
  • Passive monitoring deployed. Five scheduled scripts covering watchdog (every five minutes), memory guardian (every two), daily digest (weekday mornings), security audit (Sundays), and a canary test (Mondays)
  • Secure remote access configured end-to-end
  • Analyzed an unexpected API cost spike from an extended development session — too much context being re-cached on every call
  • Designed a leaner memory architecture — small always-on memory plus on-demand skill files, instead of loading everything every turn
  • Alfred connected to Slack — joined three core Tabbris channels for events, membership and general ops, and Friday’s marketing
  • Event inquiry playbook wired into Alfred’s routines
  • Cross-provider fallback designed — the local model kicks in when cloud APIs rate-limit
  • Upgraded the local model powering the Monitor agent
  • Identified a round of unexpected API charges. The Drafting agent was firing every ten minutes with a huge context, failing on a sandbox issue, and repeating. Nearly three-quarters of the cost was wasted cache writes
  • Remote access working — check system status from anywhere on a phone
  • Completed the hardware migration from the 16GB Mac Mini to a 32GB Mac Mini
  • Old Mac Mini repurposed — AV and lighting for the event space, plus the dedicated Friday marketing agent
  • SEO automation feasibility research for the Tabbris site — CMS API mapped, realistic monthly cost scoped, eight-week plan
  • OpenClaw System Definition — a formal architecture spec covering the three-agent roles, infrastructure, channels, known issues, and technical debt
  • Custom project instructions
  • Updated the Tabbris privacy policy with SMS and text messaging terms
  • Decided on the next upgrade path for the Monitor’s local model, tuned for fast classification
  • Designed a hub-and-spoke architecture — dedicated agents per business area with Alfred orchestrating
  • Gmail integration architecture for the business inbox — OAuth, sanitization, data flow, security model
  • Email pipeline designed: Monitor reads Gmail, classifies, hands off to Drafting, which composes a reply, Alfred reviews, then sends
  • Tiered Google Drive sync — the most-referenced material (pricing, venue info, FAQs) refreshed daily, the rest on-demand, financials excluded
  • Alfred’s first autonomous content production over WhatsApp — TikTok scripts, LinkedIn templates, a content calendar, a daily guide, and visual asset batches
  • Master content calendar with weekly initiatives and platform rotation
  • Refined the image generation prompts — mandatory realism checklist, no third-party brand references
  • Switched memory embeddings from a cloud provider to a local model — removed an external dependency and the associated quota risk
  • Comprehensive personal context document for Alfred’s workspace
  • Restored the heartbeat routine structure
  • Alfred’s memory was silently broken. The cloud embedding provider was over quota and memory search was failing with no error. Switching to local fixed it
  • Identified a four-day gap in daily memory files caused by a previous overwrite
  • Auto-start configuration for the gateway — launches on boot, stays up, restarts on crash
  • Health check script monitoring the gateway, the WhatsApp bridge, and log freshness
  • Disabled Mac Mini sleep, enabled Wake on LAN, enabled auto-login for unattended operation
  • OpenClaw survives reboots end-to-end — boot, auto-login, network, local model, gateway, WhatsApp, Alfred alive
  • Decoupled Alfred from the terminal session — the gateway handles routing independently
  • Docker connectivity on startup, with safe failure defaults
  • Filesystem cleanup after the Migration Assistant run
  • Three-agent architecture fully configured. Alfred as the main agent with full privileges. Monitor powered by a local model, sandboxed and read-only. Drafting sandboxed with no send permission
  • WhatsApp routing — Stefan’s messages go to Alfred, Stefan’s wife’s messages go to the Monitor
  • Self-chat over WhatsApp as the primary command interface
  • File-based handoff pipeline between agents
  • Handoff data format defined
  • Drafting runs on a schedule, Alfred on a heartbeat
  • Event inquiry playbook — classification tiers, qualifying questions, upsell triggers, objection handling
  • Security hardening — web fetch and browser access denied to the Monitor
  • Alfred not responding over WhatsApp — workspace files referenced a sandbox config that was self-restricting
  • Token burn from a premium-tier fallback — default model was wrong, switched to the correct tier
  • Wife’s WhatsApp was routing to the wrong agent
  • Separate Anthropic API key for OpenClaw, decoupled from the personal subscription
  • Rate-limit errors traced to oversized system prompts. The gateway had been hanging for 10+ minutes on retry
  • OpenClaw gateway running for the first time on the 16GB Mac Mini
  • Local model installed for on-device inference
  • WhatsApp channel paired
  • Secure remote access configured
  • Three-agent concept defined — Monitor observes, Drafting composes, Alfred reviews and sends
  • Channel latency tiers — WhatsApp self-chat in real time, the business inbox every 5 to 10 minutes, wife’s WhatsApp every 30 minutes, personal Gmail every 1 to 2 hours