{
  "version": 1,
  "jobs": [
    {
      "id": "dc22512c-bee8-4e62-927e-ce6bd091f60b",
      "agentId": "main",
      "name": "morning-brief",
      "enabled": true,
      "createdAtMs": 1769583183387,
      "updatedAtMs": 1773597639388,
      "schedule": {
        "kind": "cron",
        "expr": "0 18 * * *",
        "tz": "UTC"
      },
      "sessionTarget": "isolated",
      "wakeMode": "next-heartbeat",
      "payload": {
        "kind": "agentTurn",
        "message": "Morning brief for Michael. First run these scripts to get fresh data:\n1. python3 /home/ccuser/rateright-growth/rivet/scripts/gmail-check.py\n2. python3 /home/ccuser/rateright-growth/rivet/scripts/calendar-check.py\n\nThen read the outputs:\n- memory/gmail-summary.md (email triage)\n- memory/calendar-summary.md (today's schedule)\n\nBrief format: Lead with what matters most. Include: system health (green/yellow/red), email highlights (urgent items first), today's calendar, decisions needed, any overnight activity. Check Growth Engine if active. Keep under 20 lines.",
        "model": "moonshot/kimi-k2-0905-preview"
      },
      "state": {
        "nextRunAtMs": 1773684000000,
        "lastRunAtMs": 1773597600064,
        "lastStatus": "error",
        "lastDurationMs": 39324,
        "lastRunStatus": "error",
        "lastDeliveryStatus": "unknown",
        "consecutiveErrors": 3,
        "lastError": "Error: All models failed (2): moonshot/kimi-k2-0905-preview: ⚠️ API rate limit reached. Please try again later. (rate_limit) | google/gemini-3.1-pro-preview: ⚠️ API rate limit reached. Please try again later. (rate_limit)"
      },
      "delivery": {
        "mode": "announce",
        "channel": "telegram",
        "to": "7377499346"
      }
    },
    {
      "id": "b140d3ec-b2b6-4cec-a52d-e461dceeefc1",
      "agentId": "main",
      "name": "nightly-routine",
      "enabled": true,
      "createdAtMs": 1769585786777,
      "updatedAtMs": 1773590438323,
      "schedule": {
        "kind": "cron",
        "expr": "0 16 * * *",
        "tz": "UTC"
      },
      "sessionTarget": "isolated",
      "wakeMode": "next-heartbeat",
      "payload": {
        "kind": "agentTurn",
        "message": "Nightly routine. Research fresh contractor leads from job boards (Seek, Indeed, Jora, Gumtree) — focus on steel fixers, formworkers, concreters, carpenters, scaffolders in Sydney then wider AU. Target 30-40 leads. Save to memory/fresh-leads.json. Enrich via ~/clawd/scripts/apollo-enrich.sh if available. Scan competitors (Workmate, Sidekicker, Airtasker) for news. Check construction industry news. Save findings to memory/nightly-scan.md. Don't message Michael — results go in morning brief.",
        "model": "moonshot/kimi-k2-0905-preview"
      },
      "state": {
        "nextRunAtMs": 1773676800000,
        "lastRunAtMs": 1773590400037,
        "lastStatus": "error",
        "lastDurationMs": 38286,
        "lastRunStatus": "error",
        "lastDeliveryStatus": "not-requested",
        "consecutiveErrors": 4,
        "lastError": "Error: All models failed (2): moonshot/kimi-k2-0905-preview: ⚠️ API rate limit reached. Please try again later. (rate_limit) | google/gemini-3.1-pro-preview: ⚠️ API rate limit reached. Please try again later. (rate_limit)"
      },
      "delivery": {
        "mode": "none"
      }
    },
    {
      "id": "c97a28af-cb04-44a3-a5c3-8e2c059074e9",
      "agentId": "main",
      "name": "weekly-review",
      "enabled": true,
      "createdAtMs": 1769678095148,
      "updatedAtMs": 1773604839214,
      "schedule": {
        "kind": "cron",
        "expr": "0 20 * * 0",
        "tz": "UTC"
      },
      "sessionTarget": "isolated",
      "wakeMode": "next-heartbeat",
      "payload": {
        "kind": "agentTurn",
        "message": "Weekly review for Michael. What worked last week? What didn't? Check token usage and costs. Review memory/YYYY-MM-DD.md files from the past week for patterns. One concrete recommendation for next week. Any emerging patterns worth noting. Keep it brief and actionable.",
        "model": "moonshot/kimi-k2-0905-preview"
      },
      "state": {
        "nextRunAtMs": 1774209600000,
        "lastRunAtMs": 1773604800036,
        "lastStatus": "error",
        "lastDurationMs": 39178,
        "lastRunStatus": "error",
        "lastDeliveryStatus": "unknown",
        "consecutiveErrors": 1,
        "lastError": "Error: All models failed (2): moonshot/kimi-k2-0905-preview: ⚠️ API rate limit reached. Please try again later. (rate_limit) | google/gemini-3.1-pro-preview: ⚠️ API rate limit reached. Please try again later. (rate_limit)"
      },
      "delivery": {
        "mode": "announce",
        "channel": "telegram",
        "to": "7377499346"
      }
    },
    {
      "id": "8ffa65a0-cd82-4be3-afea-bf423421f2bd",
      "agentId": "main",
      "name": "monthly-review",
      "enabled": true,
      "createdAtMs": 1769945492767,
      "updatedAtMs": 1772380800001,
      "schedule": {
        "kind": "cron",
        "expr": "0 16 1 * *",
        "tz": "UTC"
      },
      "sessionTarget": "isolated",
      "wakeMode": "next-heartbeat",
      "payload": {
        "kind": "agentTurn",
        "message": "Monthly review. Analyse the past month: read session transcripts and daily memory files. Calculate token costs by model and task type. Identify cost efficiency opportunities. What were the biggest wins and failures? Update MEMORY.md with important persistent context. Archive old daily files (>30 days). Git commit everything. Send Michael a brief summary: cost, key insight, one recommendation. Use DeepSeek for analysis, keep it efficient.",
        "model": "moonshot/kimi-k2-0905-preview"
      },
      "state": {
        "nextRunAtMs": 1775059200000,
        "lastRunAtMs": 1772381222420,
        "lastStatus": "ok",
        "lastDurationMs": 390624
      },
      "delivery": {
        "mode": "announce",
        "channel": "telegram",
        "to": "7377499346"
      }
    },
    {
      "id": "d2249de2-c1b9-4ae2-9ff6-0c6034184887",
      "agentId": "main",
      "name": "evening-launchpad",
      "enabled": false,
      "createdAtMs": 1770163543904,
      "updatedAtMs": 1770432356623,
      "schedule": {
        "kind": "cron",
        "expr": "0 7 * * *",
        "tz": "UTC"
      },
      "sessionTarget": "isolated",
      "wakeMode": "next-heartbeat",
      "payload": {
        "kind": "agentTurn",
        "message": "You are Rivet's PA Agent generating the Evening Launchpad — Michael's coding session prep.\n\nDo these steps:\n1. Read /home/ccuser/rateright-growth/rivet/TODO.md — find the #1 highest-impact task Michael can work on TONIGHT (prefer unblocked tasks he can actually execute)\n2. Read the latest memory file in /home/ccuser/rateright-growth/rivet/memory/ for today's context\n3. Read /home/ccuser/rateright-growth/rivet/TOPICS.md for what agents accomplished\n4. Check for any blockers that were cleared or decisions needed\n\nThen send a Telegram message to Michael using the message tool:\n- action: send\n- channel: telegram\n- target: 7377499346\n\nUse this EXACT format (keep it under 15 lines total):\n\n🚀 **Evening Launchpad**\n\n**Tonight's #1:** [specific actionable task]\n**Why:** [one line — why this is highest impact right now]\n**Context:** [2-3 bullets of what he needs to know]\n**Open these:** [exact file paths, URLs, or commands to run]\n**Today's progress:** [1-2 sentences on what agents accomplished]\n**Est. time:** [realistic estimate]\n\nRules:\n- Be SPECIFIC — not 'work on the app' but 'implement rate limiting on API routes (H1 audit item)'\n- Include the exact files/commands he should open first\n- If a blocker needs Michael (like key rotation, ABR registration), make THAT the #1 task\n- Keep it SHORT. He reads this on commute. 30 seconds max.",
        "model": "moonshot/kimi-k2-0905-preview"
      },
      "state": {
        "lastRunAtMs": 1770361200003,
        "lastStatus": "ok",
        "lastDurationMs": 43095
      },
      "delivery": {
        "mode": "announce",
        "channel": "telegram",
        "to": "7377499346"
      }
    },
    {
      "id": "2f63fc67-961d-4667-8173-a54c79c7100a",
      "agentId": "main",
      "name": "memory-consolidation",
      "enabled": true,
      "createdAtMs": 1770169518345,
      "updatedAtMs": 1773583239540,
      "schedule": {
        "kind": "cron",
        "expr": "0 14 * * *",
        "tz": "UTC"
      },
      "sessionTarget": "isolated",
      "wakeMode": "next-heartbeat",
      "payload": {
        "kind": "agentTurn",
        "message": "Memory consolidation routine. Review all memory/YYYY-MM-DD.md files from the past 7 days. Extract significant decisions, preferences, lessons, and patterns. Update the topic files: memory/topics/business.md, memory/topics/michael.md, memory/topics/technical.md, memory/topics/personal.md. Update MEMORY.md with distilled high-level learnings. Remove duplicates across files. Keep everything concise. Don't message Michael — this is background maintenance.",
        "model": "moonshot/kimi-k2-0905-preview"
      },
      "state": {
        "nextRunAtMs": 1773669600000,
        "lastRunAtMs": 1773583200062,
        "lastStatus": "error",
        "lastDurationMs": 39478,
        "lastRunStatus": "error",
        "lastDeliveryStatus": "not-requested",
        "consecutiveErrors": 4,
        "lastError": "Error: All models failed (2): moonshot/kimi-k2-0905-preview: ⚠️ API rate limit reached. Please try again later. (rate_limit) | google/gemini-3.1-pro-preview: ⚠️ API rate limit reached. Please try again later. (rate_limit)"
      },
      "delivery": {
        "mode": "none"
      }
    },
    {
      "id": "63e86011-27ae-4031-bc10-062400276e93",
      "agentId": "main",
      "name": "timesheet-monday",
      "enabled": false,
      "createdAtMs": 1770272735701,
      "updatedAtMs": 1770284001884,
      "schedule": {
        "kind": "cron",
        "expr": "0 7 * * 1",
        "tz": "Australia/Sydney"
      },
      "sessionTarget": "main",
      "wakeMode": "next-heartbeat",
      "payload": {
        "kind": "systemEvent",
        "text": "Monday 7am — compile last week's timesheet draft. Read memory/work-log/ for the previous week, fill out the LF Construction template (timesheet-template.xlsx), save as timesheet-<dates>.xlsx. Send to MICHAEL on Telegram for review — NOT to Jo. Michael needs to get it signed by supervisor first (hours may differ from daily WhatsApp updates). Tell Michael: here's the draft, check the hours, get it signed, then I'll send the final to Jo on Wednesday."
      },
      "state": {}
    },
    {
      "id": "26e89adf-ad29-4a6c-9d92-b836a98a2be6",
      "agentId": "main",
      "name": "timesheet-wednesday-reminder",
      "enabled": true,
      "createdAtMs": 1770272735719,
      "updatedAtMs": 1773172800066,
      "schedule": {
        "kind": "cron",
        "expr": "0 7 * * 3",
        "tz": "Australia/Sydney"
      },
      "sessionTarget": "main",
      "wakeMode": "next-heartbeat",
      "payload": {
        "kind": "systemEvent",
        "text": "TIMESHEET REMINDER — Wednesday 7am. Michael's timesheet is due to Joe (Ford Civil office admin) by THURSDAY. Process: 1) Message Michael in Siteops topic (telegram group -1003505625266, topic 6): 'Timesheet day — send me a voice note with your hours for the week and I'll fill the LFCS template for Joe.' 2) Once Michael confirms hours, fill template at /home/ccuser/rateright-growth/rivet/timesheet-template.xlsx (LF Construction Services format). Project: Ford Civil, Powerhouse Museum Parramatta, 69 Phillip St. 3) Also remind Michael to photo his parking receipts (Eat Street Parramatta, ~$40.60/day). 4) Send completed timesheet + receipts to Joe on WhatsApp: +61 414 587 178. Write as Michael — casual, first person: 'Here's my timesheet for the week of [dates] Joe, thanks'. Joe is a woman (she/her). Zack is the Ford Civil foreman. Do NOT send without Michael confirming hours first."
      },
      "state": {
        "nextRunAtMs": 1773777600000,
        "lastRunAtMs": 1773172800065,
        "lastStatus": "ok",
        "lastDurationMs": 1,
        "lastRunStatus": "ok",
        "lastDeliveryStatus": "not-requested",
        "consecutiveErrors": 0
      }
    },
    {
      "id": "8a8551d7-2abf-46e7-a8d4-15dc4c4b8cc3",
      "agentId": "main",
      "name": "daily-self-audit",
      "enabled": true,
      "createdAtMs": 1770356054648,
      "updatedAtMs": 1773565240498,
      "schedule": {
        "kind": "cron",
        "expr": "0 9 * * *",
        "tz": "UTC"
      },
      "sessionTarget": "isolated",
      "wakeMode": "next-heartbeat",
      "payload": {
        "kind": "agentTurn",
        "message": "Daily self-audit. Review: AGENTS.md, SOUL.md, MEMORY.md, TOOLS.md, HEARTBEAT.md, TODO.md. Check for: outdated info, conflicting rules, stale memories, undocumented workflows, lessons from recent failures. Propose specific changes with diffs. Message Michael with a summary of what needs updating and ask for approval before making changes. Keep proposals concise — max 10 items.",
        "model": "moonshot/kimi-k2-0905-preview"
      },
      "state": {
        "nextRunAtMs": 1773651600000,
        "lastRunAtMs": 1773565200054,
        "lastStatus": "error",
        "lastDurationMs": 40444,
        "lastRunStatus": "error",
        "lastDeliveryStatus": "unknown",
        "consecutiveErrors": 3,
        "lastError": "Error: All models failed (2): moonshot/kimi-k2-0905-preview: ⚠️ API rate limit reached. Please try again later. (rate_limit) | google/gemini-3.1-pro-preview: ⚠️ API rate limit reached. Please try again later. (rate_limit)"
      },
      "delivery": {
        "mode": "announce",
        "channel": "telegram",
        "to": "7377499346"
      }
    },
    {
      "id": "414e9ff4-5eb8-47ab-963b-3d020a317773",
      "agentId": "main",
      "name": "pre-call-intel",
      "enabled": true,
      "createdAtMs": 1770356054660,
      "updatedAtMs": 1773426639736,
      "schedule": {
        "kind": "cron",
        "expr": "30 18 * * 1-5",
        "tz": "UTC"
      },
      "sessionTarget": "isolated",
      "wakeMode": "next-heartbeat",
      "payload": {
        "kind": "agentTurn",
        "message": "Pre-call intel delivery (5:30am AEST). Fetch today's call list from Growth Engine: curl -H 'X-API-Key: $CLAWDBOT_API_KEY' https://rateright-growth-production.up.railway.app/api/call-list. For top 5 leads by priority, fetch their AI intel briefs. Format as a quick-read briefing: lead name, phone, trade, key talking points, predicted objections, recommended approach. Deliver to Michael via Telegram — he'll read this on the drive to site.\n\nCRITICAL DATA RULES — ENFORCE THESE:\n1. EXCLUDE these people — they are NOT contractor leads:\n   - Steve O'Donnell (worker, not contractor)\n   - Ardi The Turk (worker, not contractor)\n   - Michael Rocky Mc Loughlin (founder's own test account)\n   - Anyone with metadata.lead_type = 'worker'\n   - Anyone with metadata.classification containing 'WORKER' or 'REMOVED'\n2. VALUE PROPOSITION IS: $50 flat fee per hire, UNLIMITED duration. NOT 9.9%. NOT percentage-based.\n   - Replace ANY mention of '9.9%' with '$50 flat fee, unlimited duration'\n   - The pitch is: 'Pay $50 once. Keep the worker a day or 30 years. No ongoing fees.'\n   - Compare to agency markup of $5-15/hour PER WORKER, not percentage\n3. If the AI intel brief for a lead mentions 9.9% or percentage fees, IGNORE that brief and write fresh talking points using the $50 model.\n4. Tony McCabe is a PERSONAL contact (friend, mum is sick) — NOT a sales lead. If he appears, note as 'personal check-in' only.",
        "model": "moonshot/kimi-k2-0905-preview"
      },
      "state": {
        "nextRunAtMs": 1773685800000,
        "lastRunAtMs": 1773426600032,
        "lastStatus": "error",
        "lastDurationMs": 39704,
        "lastRunStatus": "error",
        "lastDeliveryStatus": "unknown",
        "consecutiveErrors": 2,
        "lastError": "Error: All models failed (2): moonshot/kimi-k2-0905-preview: ⚠️ API rate limit reached. Please try again later. (rate_limit) | google/gemini-3.1-pro-preview: ⚠️ API rate limit reached. Please try again later. (rate_limit)"
      },
      "delivery": {
        "mode": "announce",
        "channel": "telegram",
        "to": "7377499346"
      }
    },
    {
      "id": "0dbc21ec-2548-4143-bd4b-5bcc5b8ede85",
      "agentId": "main",
      "name": "sysops-watchdog",
      "enabled": true,
      "createdAtMs": 1770367566588,
      "updatedAtMs": 1773647962967,
      "schedule": {
        "kind": "cron",
        "expr": "*/15 * * * *",
        "tz": "Australia/Sydney"
      },
      "sessionTarget": "isolated",
      "wakeMode": "next-heartbeat",
      "payload": {
        "kind": "agentTurn",
        "message": "Run the health watchdog: bash /home/ccuser/rateright-growth/rivet/scripts/health-watchdog.sh\n\nThis is a SILENT check. Rules:\n1. All clear → reply HEARTBEAT_OK (no output, no messages)\n2. Issues found → try to fix them yourself first (restart services, clear disk, etc)\n3. Fixed it → log to memory/watchdog-log.md, reply HEARTBEAT_OK\n4. Can't fix it (needs Michael's manual intervention like API key renewal, billing, external action) → ONLY THEN message Michael on Telegram\n\nDo NOT notify Michael for things you can handle. Be autonomous.",
        "model": "anthropic/claude-sonnet-4-20250514"
      },
      "state": {
        "nextRunAtMs": 1773651562967,
        "lastRunAtMs": 1773647945695,
        "lastStatus": "error",
        "lastDurationMs": 17272,
        "lastRunStatus": "error",
        "lastDeliveryStatus": "not-requested",
        "consecutiveErrors": 51,
        "lastError": "Error: All models failed (2): anthropic/claude-sonnet-4-20250514: LLM request rejected: Your credit balance is too low to access the Anthropic API. Please go to Plans & Billing to upgrade or purchase credits. (billing) | google/gemini-3.1-pro-preview: ⚠️ API rate limit reached. Please try again later. (rate_limit)"
      },
      "delivery": {
        "mode": "none"
      }
    },
    {
      "id": "6a3acc4d-425b-4683-b5c8-7685e2a69f66",
      "agentId": "main",
      "name": "site-morning-brief",
      "enabled": true,
      "createdAtMs": 1770421506299,
      "updatedAtMs": 1773597677478,
      "schedule": {
        "kind": "cron",
        "expr": "0 5 * * 1-6",
        "tz": "Australia/Sydney"
      },
      "sessionTarget": "isolated",
      "wakeMode": "next-heartbeat",
      "payload": {
        "kind": "agentTurn",
        "message": "You are Rivet's Site Ops Agent. Generate Michael's morning site briefing.\n\n1. Read recent memory/2026-*.md daily files for site context\n2. Check today's weather for Sydney (use weather skill or web search)\n3. Read any recent construction topic messages for site issues\n4. Check calendar for any site-related events\n\nSend a Telegram message to Michael:\n- action: send\n- channel: telegram  \n- target: 7377499346\n\nFormat (keep under 10 lines):\n\n🏗️ **Morning Site Brief — [Day, Date]**\n\n**Weather:** [temp, conditions, rain chance — affects concrete/steel work]\n**Yesterday:** [1 line recap if logged]\n**Today:** [any known tasks, pours, deliveries]\n**Watch for:** [site issues, safety notes, crew changes]\n\nRules:\n- Monday to Saturday ONLY (this cron doesn't run Sunday)\n- Keep it SHORT — he reads at 5am\n- Weather matters for concrete pours and steel work\n- If no site data logged, just give weather + \"No site notes logged\"",
        "model": "moonshot/kimi-k2-0905-preview"
      },
      "state": {
        "nextRunAtMs": 1773684000000,
        "lastRunAtMs": 1773597639388,
        "lastStatus": "error",
        "lastDurationMs": 38090,
        "lastRunStatus": "error",
        "lastDeliveryStatus": "unknown",
        "consecutiveErrors": 2,
        "lastError": "Error: All models failed (2): moonshot/kimi-k2-0905-preview: ⚠️ API rate limit reached. Please try again later. (rate_limit) | google/gemini-3.1-pro-preview: ⚠️ API rate limit reached. Please try again later. (rate_limit)"
      },
      "delivery": {
        "mode": "announce",
        "channel": "telegram",
        "to": "7377499346"
      }
    },
    {
      "id": "35490e74-3c59-43f5-a2c7-9cdd0baf3921",
      "agentId": "main",
      "name": "company-sync",
      "enabled": true,
      "createdAtMs": 1770432228942,
      "updatedAtMs": 1773640838318,
      "schedule": {
        "kind": "cron",
        "expr": "0 5,17 * * *",
        "tz": "Australia/Sydney"
      },
      "sessionTarget": "isolated",
      "wakeMode": "next-heartbeat",
      "payload": {
        "kind": "agentTurn",
        "message": "You are the Company Sync agent. Use model moonshot/kimi-k2-0905-preview if possible.\n\nYour job: read all topic agent sessions and update COMPANY.md with the latest status.\n\nSteps:\n1. Use sessions_list to find all active topic sessions (telegram:group:-1003505625266:topic:*)\n2. Use sessions_history on each to read their latest messages (limit 5 per session)\n3. Read current /home/ccuser/rateright-growth/rivet/COMPANY.md\n4. Update each section with new information from the topic agents\n5. Update the 'Last updated' timestamp\n6. Write the updated file\n7. Git commit and push if changes were made\n\nRules:\n- Keep it concise — dashboard style, not narrative\n- Update numbers, statuses, and progress\n- Add new items agents have completed\n- Move completed blockers out of the blockers section\n- Don't remove historical context — update it\n- If a topic had no activity, leave that section unchanged\n- Keep the same document structure\n\nDo NOT message Michael — this is background maintenance.",
        "model": "moonshot/kimi-k2-0905-preview"
      },
      "state": {
        "nextRunAtMs": 1773684000000,
        "lastRunAtMs": 1773640800080,
        "lastStatus": "error",
        "lastDurationMs": 38238,
        "lastRunStatus": "error",
        "lastDeliveryStatus": "not-requested",
        "consecutiveErrors": 7,
        "lastError": "Error: All models failed (2): moonshot/kimi-k2-0905-preview: ⚠️ API rate limit reached. Please try again later. (rate_limit) | google/gemini-3.1-pro-preview: ⚠️ API rate limit reached. Please try again later. (rate_limit)"
      },
      "delivery": {
        "mode": "none"
      }
    },
    {
      "id": "db65c366-97e8-4b4b-9dbf-1d4961cc46f9",
      "agentId": "main",
      "name": "ai-trends-weekly",
      "enabled": true,
      "createdAtMs": 1770432800009,
      "updatedAtMs": 1773504078130,
      "schedule": {
        "kind": "cron",
        "expr": "0 3 * * 0",
        "tz": "Australia/Sydney"
      },
      "sessionTarget": "isolated",
      "wakeMode": "next-heartbeat",
      "payload": {
        "kind": "agentTurn",
        "message": "Weekly AI trends scan. Your job: keep RateRight's tech stack current and spot opportunities.\n\nSearch these sources (use web_search and web_fetch):\n\n1. **Clawdbot updates** — check https://github.com/clawdbot/clawdbot/releases and https://docs.clawd.bot for new versions, features, breaking changes. Compare against our installed version.\n2. **Claude Code / Anthropic** — search for 'Claude Code update' and 'Anthropic changelog' from the past week. Any new models, features, or pricing changes?\n3. **AI agent trends** — search X/Reddit for 'AI agents 2026', 'Claude Code tips', 'autonomous agents'. What are people building? What patterns are emerging?\n4. **Construction + AI** — search for 'construction AI', 'construction gig economy app', 'tradie app Australia'. Any new competitors or tech?\n\nSave findings to /home/ccuser/rateright-growth/rivet/memory/plans/research/ai-trends-weekly.md (overwrite each week).\n\nFormat:\n- **Clawdbot:** [version check, any updates needed]\n- **Anthropic/Claude:** [new features, model changes]\n- **Agent Trends:** [what's hot, what's relevant to us]\n- **Construction Tech:** [competitors, opportunities]\n- **Action Items:** [specific things we should do]\n\nIf there's a critical Clawdbot update or security patch, message Michael on Telegram (target: 7377499346). Otherwise, just save the file — Michael reads it when needed.\n\nDo NOT message Michael for routine findings.",
        "model": "moonshot/kimi-k2-0905-preview"
      },
      "state": {
        "nextRunAtMs": 1774108800000,
        "lastRunAtMs": 1773504040185,
        "lastStatus": "error",
        "lastDurationMs": 37945,
        "lastRunStatus": "error",
        "lastDeliveryStatus": "not-requested",
        "consecutiveErrors": 1,
        "lastError": "Error: All models failed (2): moonshot/kimi-k2-0905-preview: ⚠️ API rate limit reached. Please try again later. (rate_limit) | google/gemini-3.1-pro-preview: ⚠️ API rate limit reached. Please try again later. (rate_limit)"
      },
      "delivery": {
        "mode": "none"
      }
    },
    {
      "id": "ac8f97e9-85ea-41aa-ab42-262042b87512",
      "agentId": "main",
      "name": "evening-brief",
      "enabled": true,
      "createdAtMs": 1770433268767,
      "updatedAtMs": 1773644707855,
      "schedule": {
        "kind": "cron",
        "expr": "0 18 * * *",
        "tz": "Australia/Sydney"
      },
      "sessionTarget": "isolated",
      "wakeMode": "next-heartbeat",
      "payload": {
        "kind": "agentTurn",
        "message": "Evening brief for Michael (6pm AEST). You MUST read actual data files before writing ANYTHING. Do NOT invent or assume progress.\n\nSTEP 1 — READ THESE FILES (mandatory):\n- memory/2026-*.md (today's daily log — the ONLY source of truth for what happened)\n- /home/ccuser/the-50-dollar-app/RIVET-INBOX.md (Builder updates)\n- Fleet status: run `node /home/ccuser/shared/scripts/fleet-cli.js status`\n- Harper queue: cat /home/ccuser/harper/queue.json\n- Susan queue: cat /home/ccuser/susan/queue.json\n\nSTEP 2 — WRITE THE BRIEF:\nCover: what got done today, what's still in progress, what's blocked on Michael, overnight plan.\n\nCRITICAL RULES:\n- ONLY report things you found evidence for in the files you read\n- If a file doesn't mention something happened, it DIDN'T happen\n- Do NOT fabricate progress, submissions, or completions\n- Do NOT hallucinate grant submissions, lead counts, or demo schedules\n- If you're unsure about something, say 'unconfirmed' or skip it\n- Keep under 20 lines, short and actionable — he's commuting home\n\nIMPORTANT: Do NOT use the message tool to send this. Your reply IS the delivery — it routes automatically to Michael's Telegram DM. Just write the brief as your response. Do NOT send to any group chat or topic.",
        "model": "anthropic/claude-sonnet-4-20250514"
      },
      "state": {
        "nextRunAtMs": 1773730800000,
        "lastRunAtMs": 1773644400060,
        "lastStatus": "ok",
        "lastDurationMs": 307795,
        "lastRunStatus": "ok",
        "lastDeliveryStatus": "delivered",
        "consecutiveErrors": 0,
        "lastDelivered": true
      },
      "delivery": {
        "mode": "announce",
        "channel": "telegram",
        "to": "7377499346"
      }
    },
    {
      "id": "2e2f74bd-3581-4a55-b4cb-ed6ca3e53abb",
      "agentId": "main",
      "name": "security-log-scrub",
      "enabled": true,
      "createdAtMs": 1770435582655,
      "updatedAtMs": 1773586839678,
      "schedule": {
        "kind": "cron",
        "expr": "0 2 * * *",
        "tz": "Australia/Sydney"
      },
      "sessionTarget": "isolated",
      "wakeMode": "next-heartbeat",
      "payload": {
        "kind": "agentTurn",
        "message": "Run the log scrubbing script: bash /home/ccuser/rateright-growth/rivet/scripts/scrub-logs.sh\n\nIf ANY keys were found and scrubbed, message Michael on Telegram (target: 7377499346) with what was found. If clean, reply HEARTBEAT_OK.",
        "model": "moonshot/kimi-k2-0905-preview"
      },
      "state": {
        "nextRunAtMs": 1773673200000,
        "lastRunAtMs": 1773586800052,
        "lastStatus": "error",
        "lastDurationMs": 39626,
        "lastRunStatus": "error",
        "lastDeliveryStatus": "not-requested",
        "consecutiveErrors": 3,
        "lastError": "Error: All models failed (2): moonshot/kimi-k2-0905-preview: ⚠️ API rate limit reached. Please try again later. (rate_limit) | google/gemini-3.1-pro-preview: ⚠️ API rate limit reached. Please try again later. (rate_limit)"
      },
      "delivery": {
        "mode": "none"
      }
    },
    {
      "id": "6fba73a2-0d5b-4b4a-bb86-0dac5a5a3b8a",
      "agentId": "main",
      "name": "morning-voice-call",
      "enabled": false,
      "createdAtMs": 1770456102120,
      "updatedAtMs": 1771179127260,
      "schedule": {
        "expr": "30 6 * * *",
        "tz": "Australia/Sydney",
        "kind": "cron"
      },
      "sessionTarget": "isolated",
      "wakeMode": "next-heartbeat",
      "payload": {
        "kind": "agentTurn",
        "message": "You are Rivet. It's 5:30am — time to call Michael with his morning pre-site brief.\n\nSTEP 1: Gather data (do ALL before calling):\n- Run: python3 /home/ccuser/rateright-growth/rivet/scripts/calendar-check.py\n- Run: python3 /home/ccuser/rateright-growth/rivet/scripts/gmail-check.py\n- Read memory/calendar-summary.md and memory/gmail-summary.md\n- Read memory/work-logs/ for recent site context and yesterday's site log\n- Check weather for Sydney using the weather skill\n- Read TODO.md for overnight work completed\n- Read today's memory file: memory/YYYY-MM-DD.md (and yesterday's)\n- Read COMPANY.md for business status\n\nSTEP 2: Compose a spoken brief — SITE WORK FIRST (70%), then business (30%):\n\nSITE SECTION (lead with this):\n- Weather: temp, conditions, rain chance — how it affects concrete pours, steel work, outdoor tasks\n- Yesterday's site recap: what was done, any carryover items\n- Today's site plan: known tasks, pours, deliveries, crew assignments\n- Any site issues flagged, safety notes, material needs\n- Calendar: site-related meetings or inspections\n\nBUSINESS SECTION (quick update, keep brief):\n- What Rivet worked on overnight (2-3 bullet points max)\n- Anything urgent from email\n- Any decisions needed from Michael today\n\nSTEP 3: Call Michael:\n- Use voice_call tool: action=initiate_call, to=+61426246472\n- Greet briefly: \"Morning Michael, here's your site brief\"\n- Deliver site plan first, then quick business update\n- Keep under 2 minutes unless he asks questions\n\nSTEP 4: Listen and capture:\n- If Michael gives tasks, ideas, instructions — write to TODO-INBOX.md\n- If he mentions site plans or changes — log to memory/work-logs/YYYY-MM-DD.md\n- If he asks questions, answer from gathered data\n\nSTEP 5: After the call:\n- Log new tasks to TODO-INBOX.md with [added:YYYY-MM-DD] [source:morning-call]\n- Update memory/YYYY-MM-DD.md with call summary\n\nRules:\n- SITE WORK IS PRIMARY — he's about to walk onto site, that's what matters\n- Be concise and natural — he's getting ready for work\n- If site data is thin, still give weather + \"No site notes logged, what's on today?\"\n- Never skip the call",
        "model": "anthropic/claude-sonnet-4-20250514"
      },
      "state": {
        "lastRunAtMs": 1771097415147,
        "lastStatus": "ok",
        "lastDurationMs": 701964
      },
      "delivery": {
        "mode": "none"
      }
    },
    {
      "id": "17510bae-82af-4022-aef0-f8a9e05c2819",
      "agentId": "main",
      "name": "evening-voice-call",
      "enabled": false,
      "createdAtMs": 1770456119197,
      "updatedAtMs": 1771179130981,
      "schedule": {
        "expr": "30 17 * * *",
        "tz": "Australia/Sydney",
        "kind": "cron"
      },
      "sessionTarget": "isolated",
      "wakeMode": "next-heartbeat",
      "payload": {
        "kind": "agentTurn",
        "message": "You are Rivet. It's 6pm — Michael's commuting home. Time for the evening debrief call.\n\nThis call is BUSINESS ONLY. No site work recap — Michael was on site all day, he knows what happened. Site logs get processed overnight and feed into tomorrow's morning brief.\n\nSTEP 1: Gather data (do ALL before calling):\n- Read today's memory file: memory/YYYY-MM-DD.md\n- Read TODO.md — what got done today, what's still open, what's blocked\n- Read TODO-INBOX.md for items that came in today\n- Read COMPANY.md for latest status\n- Check sessions_list for active/completed sub-agent work today\n- Read memory/agent-failures.md for any failures\n- Read memory/spawn-tracker.json for activity stats\n- Run: python3 /home/ccuser/rateright-growth/rivet/scripts/gmail-check.py\n- Read memory/gmail-summary.md\n\nSTEP 2: Compose a spoken debrief — BUSINESS ONLY:\n- What Rivet accomplished today (code shipped, research done, leads found, audit items closed)\n- Agent activity summary (how many tasks spawned, success rate)\n- Any failures or issues encountered\n- What's still in progress\n- What needs Michael's decision or input tonight\n- Overnight plan — what Rivet will work on while Michael sleeps\n- Any business updates (leads, Growth Engine, competitor intel)\n- Calendar: anything tomorrow?\n\nSTEP 3: Call Michael:\n- Use voice_call tool: action=initiate_call, to=+61426246472\n- Greet naturally: \"Hey Michael, evening debrief\"\n- Keep initial brief under 2-3 minutes\n\nSTEP 4: Listen and capture (CRITICAL — this is the handoff):\n- Michael will give tasks, ideas, priorities for tonight/tomorrow\n- He may redirect current work or change priorities\n- He may have ideas from the day on site\n- CAPTURE EVERYTHING he says\n- Ask clarifying questions if needed\n- Confirm back: \"So tonight I'll focus on X, Y, Z — that right?\"\n\nSTEP 5: After the call:\n- Write ALL new tasks to TODO-INBOX.md with [added:YYYY-MM-DD] [source:evening-call]\n- Write ideas to memory/YYYY-MM-DD.md\n- Update TODO.md priorities if Michael reordered anything\n- Log call summary to memory/YYYY-MM-DD.md\n- Set overnight work priorities based on his instructions\n\nRules:\n- NO SITE WORK — that's for tomorrow morning's call\n- This is the HANDOFF — Michael tells you what to work on overnight\n- Don't rush him — if he wants to talk through ideas, let him\n- Confirm understanding before ending\n- Conversational, casual but professional",
        "model": "anthropic/claude-sonnet-4-20250514"
      },
      "state": {
        "lastRunAtMs": 1771137023139,
        "lastStatus": "ok",
        "lastDurationMs": 302007
      },
      "delivery": {
        "mode": "none"
      }
    },
    {
      "id": "5519535c-223e-4ce0-93c9-54952c714efd",
      "agentId": "main",
      "name": "daily-hard-questions",
      "enabled": true,
      "createdAtMs": 1770794869953,
      "updatedAtMs": 1773640854775,
      "schedule": {
        "expr": "0 6,17 * * *",
        "tz": "Australia/Sydney",
        "kind": "cron"
      },
      "sessionTarget": "isolated",
      "wakeMode": "next-heartbeat",
      "payload": {
        "kind": "agentTurn",
        "message": "Generate fresh hard questions for Michael BEFORE the upcoming voice call. Use model anthropic/claude-opus-4-5.\n\nDETECT CONTEXT:\n- If current time is ~6 AM: Generate MORNING questions (focus on: what's ahead today, what he should prioritize, what he's avoiding)\n- If current time is ~5 PM: Generate EVENING questions (focus on: what happened today, what didn't get done, why)\n\nREAD:\n1. /home/ccuser/rateright-growth/rivet/TODO.md\n2. /home/ccuser/rateright-growth/rivet/COMPANY.md\n3. /home/ccuser/rateright-growth/rivet/memory/2026-*.md (today + yesterday's daily files)\n4. Check if morning or evening based on timestamp\n\nGENERATE:\n- 3-5 hard questions specific to RIGHT NOW\n- Morning: \"What are you avoiding today?\" / \"What's the one thing that would make today a win?\"\n- Evening: \"What did you say you'd do today that you didn't?\" / \"What are you kicking down the road?\"\n\nFORMAT:\nWrite to /home/ccuser/rateright-growth/rivet/memory/todays-hard-questions.md with timestamp.\n\nDo NOT message Michael.",
        "model": "anthropic/claude-opus-4-5"
      },
      "state": {
        "nextRunAtMs": 1773687600000,
        "lastRunAtMs": 1773640838318,
        "lastStatus": "error",
        "lastDurationMs": 16457,
        "lastRunStatus": "error",
        "lastDeliveryStatus": "not-requested",
        "consecutiveErrors": 7,
        "lastError": "Error: All models failed (2): anthropic/claude-opus-4-5: LLM request rejected: Your credit balance is too low to access the Anthropic API. Please go to Plans & Billing to upgrade or purchase credits. (billing) | google/gemini-3.1-pro-preview: ⚠️ API rate limit reached. Please try again later. (rate_limit)"
      },
      "delivery": {
        "mode": "none"
      }
    },
    {
      "id": "3a6d17a1-6016-4571-876f-1a31d21de9b8",
      "agentId": "main",
      "name": "daily-business-lesson",
      "enabled": true,
      "createdAtMs": 1771114353597,
      "updatedAtMs": 1773599439013,
      "schedule": {
        "kind": "cron",
        "expr": "30 5 * * *",
        "tz": "Australia/Sydney"
      },
      "sessionTarget": "isolated",
      "wakeMode": "next-heartbeat",
      "payload": {
        "kind": "agentTurn",
        "message": "You are Rivet. Deliver today's daily business lesson to Michael as voice notes via TTS.\n\nSTEP 1: Check what's been covered\n- Read memory/training/lessons-log.md (create if it doesn't exist)\n- Pick the NEXT topic that hasn't been covered yet\n\nSTEP 2: Write the lesson\n- ONE concept per day\n- Structure: What is it → Why it matters for RateRight → One thing to watch for today\n- Plain language — Michael is a construction worker learning business, not an MBA student\n- Tie everything back to RateRight specifically\n- End with a question for Michael to think about during his day\n\nSTEP 3: Send as 2-3 voice notes via TTS\n- Voice note 1: What the concept is and why it matters (~60 seconds)\n- Voice note 2: How it applies to RateRight specifically (~60 seconds)\n- Voice note 3: Today's question to think about (~30 seconds)\n- Use the tts tool to generate each, then send via message tool to Michael (target: 7377499346, channel: telegram)\n- Keep conversational — like a mate explaining something over coffee\n\nSTEP 4: Log it\n- Update memory/training/lessons-log.md with date, topic, category\n- Create the file if it doesn't exist\n\nTopic rotation (cycle through):\n1. Unit Economics — does $50/hire work at scale?\n2. Cash Flow vs Profit — why profitable businesses die\n3. Customer Acquisition Cost — what each signup costs\n4. Churn and Retention — keeping contractors\n5. Pricing Psychology — why $50 feels different than $49\n6. Burn Rate and Runway — how long can you survive\n7. Product-Market Fit — how to know you have it\n8. Network Effects — why marketplaces get stronger\n9. Gross Margin — what you actually keep\n10. LTV:CAC Ratio — the golden metric\nThen: Operations, Legal basics, Accounting fundamentals, Growth metrics, Marketing, Sales psychology, Competitive strategy\n\nRules:\n- MUST use TTS for delivery (Michael listens while driving)\n- Keep total under 3 minutes of audio\n- Never skip — consistency matters\n- If no new topic, go deeper on a previous one with advanced concepts",
        "model": "moonshot/kimi-k2-0905-preview"
      },
      "state": {
        "nextRunAtMs": 1773685800000,
        "lastRunAtMs": 1773599400048,
        "lastStatus": "error",
        "lastDurationMs": 38965,
        "lastRunStatus": "error",
        "lastDeliveryStatus": "not-requested",
        "consecutiveErrors": 3,
        "lastError": "Error: All models failed (2): moonshot/kimi-k2-0905-preview: ⚠️ API rate limit reached. Please try again later. (rate_limit) | google/gemini-3.1-pro-preview: ⚠️ API rate limit reached. Please try again later. (rate_limit)"
      },
      "delivery": {
        "mode": "none"
      }
    },
    {
      "id": "cf734ffd-8110-4bfd-83ab-cfc07c5e6350",
      "agentId": "main",
      "name": "daily-inbox-archive",
      "enabled": true,
      "createdAtMs": 1771168756808,
      "updatedAtMs": 1773608438700,
      "schedule": {
        "kind": "cron",
        "expr": "0 8 * * *",
        "tz": "Australia/Sydney"
      },
      "sessionTarget": "isolated",
      "wakeMode": "next-heartbeat",
      "payload": {
        "kind": "agentTurn",
        "message": "Daily inbox archive (8am AEDT). Per protocol at memory/comms/PROTOCOL.md:\n\n1. Read BUILDER-INBOX.md and /home/ccuser/the-50-dollar-app/RIVET-INBOX.md\n2. Write a daily comms summary to memory/comms/YYYY-MM-DD.md — what was done, what's open, blockers\n3. Move COMPLETED + ACKNOWLEDGED items to the archive summary\n4. Leave open/unfinished/unACK'd tasks in the live inbox files\n5. Clear only completed items from the live files\n\nRules:\n- NEVER delete unacknowledged tasks\n- Preserve any in-progress or blocked items\n- The daily summary is Michael's morning comms brief\n- Do NOT message Michael — this is background maintenance",
        "model": "moonshot/kimi-k2-0905-preview"
      },
      "state": {
        "nextRunAtMs": 1773694800000,
        "lastRunAtMs": 1773608400090,
        "lastStatus": "error",
        "lastDurationMs": 38610,
        "lastRunStatus": "error",
        "lastDeliveryStatus": "not-requested",
        "consecutiveErrors": 4,
        "lastError": "Error: All models failed (2): moonshot/kimi-k2-0905-preview: ⚠️ API rate limit reached. Please try again later. (rate_limit) | google/gemini-3.1-pro-preview: ⚠️ API rate limit reached. Please try again later. (rate_limit)"
      },
      "delivery": {
        "mode": "none"
      }
    },
    {
      "id": "f0a715e9-1814-46f8-9346-01470632571c",
      "agentId": "main",
      "name": "nightly-strategic-review",
      "enabled": true,
      "createdAtMs": 1771169095352,
      "updatedAtMs": 1773572417581,
      "schedule": {
        "kind": "cron",
        "expr": "0 22 * * *",
        "tz": "Australia/Sydney"
      },
      "sessionTarget": "isolated",
      "wakeMode": "next-heartbeat",
      "payload": {
        "kind": "agentTurn",
        "message": "You are Rivet, Chief of Staff for RateRight. This is your nightly strategic review — find what Michael can't see.\n\nRead these first:\n- TODO.md, COMPANY.md, MEMORY.md\n- memory/YYYY-MM-DD.md (today + yesterday)\n- memory/plans/MASTER-STATE-OF-PLAY.md\n- BUILDER-INBOX.md and RIVET-INBOX.md (what's in flight)\n\nThen do this work:\n\n1. PRODUCT BLIND SPOTS — Walk every user flow mentally (signup → profile → browse → apply → hire → pay → message). Both sides. What's missing, broken, or confusing that nobody's flagged?\n\n2. BUSINESS MODEL STRESS TEST — Where does the $50/hire model break? At what scale? What happens when contractors try to go around us? What's the weakest link?\n\n3. COMPETITIVE LANDSCAPE — Quick web search for construction hiring apps, gig platforms, new entrants. What's changed? Who's gaining ground?\n\n4. LAUNCH READINESS — What's actually blocking launch RIGHT NOW? Not the wish list — the hard blockers. Be ruthless.\n\n5. OPPORTUNITIES — What should Michael be thinking about that he isn't? Market timing, partnerships, features, positioning, threats.\n\n6. OVERNIGHT WORK PLAN — Based on findings, what should Rivet and Builder work on tonight? Prioritised, specific, actionable.\n\nWrite findings to memory/strategic-reviews/YYYY-MM-DD.md\n\nThen write a SHORT summary (under 15 lines) to memory/morning-strategic-brief.md — Michael reads this first thing.\n\nRules:\n- Be HONEST. Don't sugarcoat.\n- Push back on assumptions.\n- Surface uncomfortable truths.\n- Specific > vague. 'The payment flow breaks when X' > 'payments need work'\n- Do NOT message Michael — he's sleeping. File only.",
        "model": "anthropic/claude-sonnet-4-20250514"
      },
      "state": {
        "nextRunAtMs": 1773658800000,
        "lastRunAtMs": 1773572400082,
        "lastStatus": "error",
        "lastDurationMs": 17499,
        "lastRunStatus": "error",
        "lastDeliveryStatus": "not-requested",
        "consecutiveErrors": 3,
        "lastError": "Error: All models failed (2): anthropic/claude-sonnet-4-20250514: LLM request rejected: Your credit balance is too low to access the Anthropic API. Please go to Plans & Billing to upgrade or purchase credits. (billing) | google/gemini-3.1-pro-preview: ⚠️ API rate limit reached. Please try again later. (rate_limit)"
      },
      "delivery": {
        "mode": "none"
      }
    },
    {
      "id": "5aed22f4-c144-4a5a-a779-ea1a42012a07",
      "agentId": "main",
      "name": "morning-voice-brief",
      "enabled": true,
      "createdAtMs": 1771179145317,
      "updatedAtMs": 1773598517175,
      "schedule": {
        "kind": "cron",
        "expr": "15 5 * * *",
        "tz": "Australia/Sydney"
      },
      "sessionTarget": "isolated",
      "wakeMode": "next-heartbeat",
      "payload": {
        "kind": "agentTurn",
        "message": "CURRENT TIME: 2026-02-16 09:42:47 AEDT\n\nGenerate Michael's morning voice brief - 4 voice notes under 1400 chars each.\n\nCRITICAL: Data must be CURRENT as of 09:42 AEDT. NO stale information.\n\nDATA SOURCES TO CHECK LIVE:\n1. Read memory/2026-02-16.md - current state section (ignore old timeline)  \n2. Read /home/ccuser/the-50-dollar-app/RIVET-INBOX.md - latest Builder updates\n3. Check TODO.md - current task status\n4. Check system health - app at rivet.rateright.com.au, Growth Engine\n5. Weather for Sydney (site conditions)\n\nVOICE NOTE STRUCTURE:\nNote 1: System status, overnight work, weather (1200-1400 chars)\nNote 2: Current work state, pipeline, decisions needed (1200-1400 chars)  \nNote 3: Today's plan, priorities, evening focus (1200-1400 chars)\nNote 4: Strategic context, weekly goal, key metric (1200-1400 chars)\n\nVOICE STYLE:\n- Natural speech patterns, not text conversion\n- Specific numbers and names\n- Current timestamps ('as of 5:15 AM')\n- Conversational but informative\n- Safe for driving (clear, organized)\n\nFRESHNESS CHECKS:\n- If Builder data >30min old, flag as 'last confirmed at TIME'\n- If system status uncertain, make live check\n- If pipeline data stale, use 'estimated' language\n- Never guess - better to say 'checking' than wrong info\n\nOUTPUT: Exactly 4 voice notes using tts() function.\nEach note: 1200-1400 characters, include note numbering.\nSend each as separate message to Rocky & Rivet group, RateRight topic.",
        "model": "anthropic/claude-sonnet-4-20250514"
      },
      "state": {
        "nextRunAtMs": 1773684900000,
        "lastRunAtMs": 1773598500041,
        "lastStatus": "error",
        "lastDurationMs": 17134,
        "lastRunStatus": "error",
        "lastDeliveryStatus": "not-requested",
        "consecutiveErrors": 3,
        "lastError": "Error: All models failed (2): anthropic/claude-sonnet-4-20250514: LLM request rejected: Your credit balance is too low to access the Anthropic API. Please go to Plans & Billing to upgrade or purchase credits. (billing) | google/gemini-3.1-pro-preview: ⚠️ API rate limit reached. Please try again later. (rate_limit)"
      },
      "delivery": {
        "mode": "none"
      }
    },
    {
      "id": "3ee76891-ece7-46eb-b57f-cfc4f56dff4b",
      "agentId": "main",
      "name": "evening-voice-brief",
      "enabled": true,
      "createdAtMs": 1771179156223,
      "updatedAtMs": 1773645091093,
      "schedule": {
        "kind": "cron",
        "expr": "0 18 * * *",
        "tz": "Australia/Sydney"
      },
      "sessionTarget": "isolated",
      "wakeMode": "next-heartbeat",
      "payload": {
        "kind": "agentTurn",
        "message": "CURRENT TIME: 2026-02-16 09:42:57 AEDT\n\nGenerate Michael's evening handoff - 3 voice notes under 1400 chars each.\n\nCRITICAL: Summarize TODAY'S actual results, not plans or hopes.\n\nDATA SOURCES TO CHECK:\n1. Read memory/2026-02-16.md - timeline and results achieved today\n2. Read /home/ccuser/the-50-dollar-app/RIVET-INBOX.md - what Builder actually completed  \n3. Check TODO.md - what moved from [⏳] to [✅] today\n4. Check recent git activity for actual deployments\n5. Pipeline activity - real conversations/conversions from Growth Engine\n\nVOICE NOTE STRUCTURE:\nNote 1: Today's concrete results, plan vs reality (1200-1400 chars)\nNote 2: Overnight autonomous work plan (1200-1400 chars)\nNote 3: Tomorrow's critical priorities (1200-1400 chars)\n\nVOICE STYLE:\n- Results-focused, not activity-focused\n- Specific outcomes: 'deployed X,' 'fixed Y,' 'advanced Z'\n- Honest about delays/blockers\n- Clear overnight delegation\n- Tomorrow priorities ranked by urgency\n\nHANDOFF CLARITY:\n- What agents will do autonomously overnight\n- What needs Michael's attention first thing tomorrow\n- Alert thresholds (when to wake Michael)\n- Confidence levels on overnight work completion\n\nFRESHNESS REQUIREMENT:\nAll data must reflect TODAY'S actual state at 6 PM, not morning assumptions.\n\nOUTPUT: Exactly 3 voice notes using tts() function.\nEach note: 1200-1400 characters, include note numbering.\nEnd with 'handoff complete.'\nSend each as separate message to Rocky & Rivet group, RateRight topic.",
        "model": "anthropic/claude-sonnet-4-20250514"
      },
      "state": {
        "nextRunAtMs": 1773730800000,
        "lastRunAtMs": 1773644707855,
        "lastStatus": "ok",
        "lastDurationMs": 383238,
        "lastRunStatus": "ok",
        "lastDeliveryStatus": "not-delivered",
        "consecutiveErrors": 0,
        "lastDelivered": false
      },
      "delivery": {
        "mode": "none"
      }
    },
    {
      "id": "8eb10c9c-b9fa-45b5-bcec-a707a52fbe21",
      "agentId": "main",
      "name": "builder-brainstorm-overnight",
      "enabled": false,
      "createdAtMs": 1771323289712,
      "updatedAtMs": 1771353953218,
      "schedule": {
        "kind": "cron",
        "expr": "*/30 * * * *",
        "tz": "Australia/Sydney"
      },
      "sessionTarget": "main",
      "wakeMode": "next-heartbeat",
      "payload": {
        "kind": "systemEvent",
        "text": "OVERNIGHT FIX-TEST-ITERATE: You and Builder are fixing the entire system overnight. Goal: rock solid 10/10 by morning.\n\n1. Read RIVET-INBOX.md for Builder's latest updates\n2. Check fleet status: node /home/ccuser/shared/scripts/fleet-cli.js status\n3. Identify the NEXT most critical issue to fix\n4. Send Builder the fix request via BUILDER-INBOX.md or agent bridge\n5. Test what was fixed last cycle — verify it actually works\n6. Log progress to memory/2026-02-17.md\n\nPriority order: agent stability > communication working > autonomous designs complete > memory writing > task queues populated\n\nDon't rehash old problems. Check what's CURRENT. Fix one thing per cycle. Test the last fix. Iterate."
      },
      "state": {
        "lastRunAtMs": 1771351554030,
        "lastStatus": "ok",
        "lastDurationMs": 0
      }
    },
    {
      "id": "02083a1a-1b25-43be-a85c-19df7193ec9d",
      "agentId": "main",
      "name": "half-hourly-restoration-report",
      "enabled": true,
      "createdAtMs": 1773187278634,
      "updatedAtMs": 1773645623711,
      "schedule": {
        "kind": "cron",
        "expr": "0 */2 * * *",
        "tz": "Australia/Sydney",
        "staggerMs": 300000
      },
      "sessionTarget": "isolated",
      "wakeMode": "next-heartbeat",
      "payload": {
        "kind": "agentTurn",
        "model": "moonshot/kimi-k2-0905-preview",
        "message": "30-minute fleet restoration report for Michael. Report ONLY the last 30 minutes. Format exactly:\n- Build: what Builder/Sentinel/Cog moved\n- Test: what Susan/Radar found\n- Degraded: Harper/Herald state\n- CC: current-data/API/backend truth progress\n- Blocker: single biggest blocker\n- Overall: one blunt sentence on whether we are closer to 100%\nRules: keep under 8 lines, no waffle, no history older than 30 minutes, and if the reporting chain itself failed, say that directly."
      },
      "state": {
        "consecutiveErrors": 0,
        "nextRunAtMs": 1773651847825,
        "lastRunAtMs": 1773645093338,
        "lastRunStatus": "ok",
        "lastStatus": "ok",
        "lastDurationMs": 530373,
        "lastDeliveryStatus": "delivered",
        "lastDelivered": true
      },
      "delivery": {
        "mode": "announce",
        "channel": "telegram",
        "to": "7377499346"
      }
    }
  ]
}