# MEMORY.md - Harvey's Long-Term Memory

Last updated: 2026-04-22

## Key Infrastructure

### OpenClaw Setup
- Host: Mike's MacBook Air (M-series, macOS Darwin 25.3.0 arm64)
- Gateway: loopback mode, SSH tunnel via Tailscale (100.68.175.57:18789)
- LaunchAgent: com.harvey.tunnel.plist on MacBook
- OpenClaw version: v2026.3.24
- Security: groupPolicy=allowlist on Telegram and Slack, exec approvals in allowlist mode
- Health monitoring: LaunchAgent watchdog every 5 min, auto-restart + Telegram alert on failure

### Google APIs (via Service Account)
- Service account: harvey@sapient-magnet-421318.iam.gserviceaccount.com
- Scopes in use: Calendar, GBP, GA4, Search Console, Drive
- GBP Account: accounts/108141457471848822888
- GBP Locations: 8 total, Toronto Main, Downtown, Durham/Oshawa, Pickering, Markham, Mississauga, Brampton, Bowmanville
- Drive key folders: Root `0B3Rg9CVvNeIJQVhFWEFZM1VFWWs`, Finances `0B3Rg9CVvNeIJSlJqLVNURC00Wms`, Taxes `1AQGHg1v4hvbD4Q9wYwqdIOZrOgyW8yrY`, HST2025 `1lYGOW5mk94syQQ0AY0FcG1MRUTalAb-I`, Abigael Shared Drive `0AL1RivXkmzjWUk9PVA`
- Drive rules: never share, delete, or move anything without Mike's approval

### Channels
- Telegram: primary channel, Mike's chat ID 8792051045
- Telegram Group: No More Chores, chat ID -1003812779960
- Slack: NMC AI workspace, Mike's ID U5XDTHEPQ
- Discord ZHQ: server ID 1478419889243820042
- Discord Leah channel: 1488863499529617521

### Email & Calendar
- Gmail drafts for sensitive work: mikeziarko@gmail.com
- Customer ops drafts: services@nomorechores.com
- Google Calendar uses service account tooling
- Personal calendar re-auth for mikeziarko@gmail.com is still pending

### Cron Jobs
- morning-briefing: 7am daily
- gmail triage: 6:45am daily
- pay-contractors: Mondays 2pm
- call-transcriber: Aircall recordings to GHL + Slack
- sms-summary: every 15 min
- garbage-reminder: Thu 7pm
- memory-curation: Wed + Sun 5am
- YNAB business categorize/approve: 11:15am daily
- channel-memory-sweep: active multiple times daily
- daily-summary: active nightly

### Current Automation State
- Gmail triage is live and actively processing inbox mail each morning
- Channel memory sweep is active and maintaining 55+ channel files as of Apr 21
- Daily summaries are being generated and sent each evening
- Morning briefing is posting to Discord #daily and creating daily threads

### Secrets (in ~/.openclaw/secrets/)
- Core keys present for Anthropic, GHL, Google, Gmail, Launch27, Slack, Twilio, Vapi, and related tooling
- Never ask Mike to paste secrets into chat, write them directly to secrets files when needed

### Config Protection
- tools/config-guard.sh handles backup, restore, list, and diff for openclaw.json
- Always run `config-guard.sh backup` before touching openclaw.json

### Preview Server
- URL pattern: https://macbookair.taila88920.ts.net/filename
- Always use this for previews to Mike, never localhost or raw Tailscale IP

### Coding Tasks
- Default for coding: `openai-codex/gpt-5.4` (codex)
- Use Codex for all coding work unless unavailable

## Business: No More Chores

### Key Numbers
- Peak revenue: about $1.03M in 2022 Launch27, about $935K in 2022 QuickBooks
- Current run rate: about $630K annualized from Q1 2026
- 2025 revenue: about $777K
- Active recurring customers: 129
- Average recurring customer LTV: $10,598
- Average visit value: $250 recurring, $402 one-time
- Monthly churn: about 5 to 6 percent, around 7 customers per month
- Revenue split: 75% recurring, 25% one-time
- Total customer database: 7,082
- Repeat one-time customers: 1,429
- Q1 2026 P&L: Revenue $48.9K, Expenses $52.7K, Net Loss -$3.75K
- Google reviews: 634 across 8 locations, 4.7 average
- Monthly leads in 2026: about 47 per month
- Mike's income: about $5,023 per month wages from NMC
- Personal cash was about $6,689 on Apr 5, business cash about $20,761

### CRITICAL: Customer Status Lookup
- Do not trust Airtable's active flag
- To verify whether a customer is active, check for upcoming confirmed or pending bookings
- For churned recurring campaigns, use the Recurring Lost CSV from Launch27 as the source of truth

### Phone System (Leah)
- Main number: 647-490-2523
- Leah staging: 647-799-2731
- CS Transfer Bridge: 647-370-1793
- Harvey direct: 647-360-9178
- SMS is live through Twilio Serverless
- Voice v3.0 is on staging, not yet on production
- Voice uses ElevenLabs Charlotte
- Transfer loop fix is deployed
- Twilio service: ZS46e8a58afad9a49742ddbbe2e3d60bbe

### Leah Architecture Decisions
- Leah should be fully autonomous for booking, the customer should hang up with a confirmed date
- Escalate only for damage, safety, theft, legal, explicit human demand, or truly unresolvable issues
- After hours: keep same behavior but no transfers, create a GHL follow-up task instead
- Two-agent architecture, Sales Leah + CS Leah, is a later step after more call data exists
- Training data includes about 25,375 services@ emails and about 2,377 Aircall recordings

### Leah Tools Needed
1. lookup_customer
2. check_availability
3. create_booking
4. send_sms
5. create_followup

### GHL (GoHighLevel)
- Location ID: BvrCS522k5EuY6TbZQsw
- v2 API base: https://services.leadconnectorhq.com
- AI Agent Sales Pipeline ID: 43wROY9icVX1mP86G8eZ
- Mike sees GHL mainly as a communications hub, not the long-term source of truth

### Launch27
- API is fine for static or reference data, not reliable enough for live booking operations
- For live lookups and edits, use Airtable, Playwright on the Launch27 UI, or direct admin verification
- Existing tooling includes `scripts/reschedule-booking.py` and related debug scripts
- Important reminder: booking IDs can point to stale historical records, always verify the live booking, date, and address before editing

### Team
- Abigael, not Abigail: scheduler/VA
- Do not post in #emilys-team
- #cancellations is the active ops thread for cancellation workflow issues and corrections

## NMC Strategic Plan (Active - 2026)

### Strategy
- v1.2 is the active strategy version
- Framing: Think 10x, Execute 2x, Build 10x
- Vision: Ziarko Holdings, NMC as anchor, spin-offs, EIR model, franchise after $1M
- Target: $1M by March 2027 for NMC, $5M to $10M portfolio over 5 to 7 years

### Key Strategic Decisions
1. Use a 10x lens, NMC recovery is phase 1 of the broader portfolio play
2. Premium repositioning at $140 to $170 for new customers only
3. Priority order: Acquisition, then Conversion, then Churn
4. Website overhaul is the top execution priority
5. EIR model is the path to getting Mike out of daily operations
6. Franchise development comes after NMC crosses $1M+
7. CleanOS and AI consulting are shelved for now
8. Personal brand stays an always-on background build

### Recovery Plan (90-Day Priority Order)
1. Website overhaul
2. GA4 conversion tracking
3. Leah 24/7 voice fully autonomous
4. Quote-to-booking nurture
5. SEO programmatic content
6. One-time to recurring conversion
7. Reactivation campaign
8. Quality control system
9. Review and referral automation

### Still Owed
- Operating Dashboard
- Competitive deep-dive
- Franchise pilot research for Regina, SK

## Active Campaigns

### Reactivation Campaign (April 2026)
- Source list: Recurring Lost CSV from Launch27, 294 cancellations
- Initial Airtable-based churn list was misleading because many supposedly churned customers still had live bookings
- Current send logic is based on Recurring Lost CSV plus exclusions and verification
- Email 1 was approved and used the "Been a while" plain-text Mike voice
- By Apr 21, the campaign had progressed far enough that Email 3 was scheduled as the final follow-up for tag `reactivation-a`
- Operational instruction captured: send Email 3 in GHL around 10 to 11am EST, plain text, from mike@nomorechores.com, then do not email that list again unless they respond
- Calendar reminder created for Apr 22, 2026 at 10:00am to send Reactivation Email 3

### Spring Fresh
- Done, confirmed by Mike on Apr 7

## Operations Notes

### Expense Audit and Tooling Decisions
- Mike reported on Apr 21 that the expense audit is done
- Mike decided to leave ClickUp as-is
- Mike decided to leave Dropbox as-is

### Trello State
- Trello sync is active
- The card `🎯 Goal setting session (1-year target + Q2 rocks)` has been stale in Today since Mar 18 and keeps resurfacing as a nudge item

### Voice AI Platform Research
- Aircall-first framing is the current lens for evaluating Leah alternatives or upgrades
- Best starting point: Aircall Voice AI
- Best advanced Aircall-first bet: Leaping AI
- Best switch-worthy contender: Avoca
- Most interesting new addition from recent research: Craft
- Comparison artifact lives at `www/voice-ai-provider-comparison.html`

## People & Contacts
- Nicola: nicolasmith05@gmail.com, nicolasmith@gmail.com
- Anna: kbrock2662@rogers.com
- Klaus
- Magdalena (Mag): older sister, lives in Oxford, England. Kids: Annabelle and Antoine
- Isabelle: younger sister
- Ben: son, baseball
- Ellie: daughter
- Mike's personal phone: +14162726683
- Wojciech Ziarko and Bohdan: visiting May 17 to May 20, 2026, Air Canada ref BRKKZD, YQR-YYZ
- Maurizio (CPA): maurizio@mdivitocpa.com

### Livia Bevilacqua (Contractor Compliance)
- KOA Cleaning sole proprietor
- Temporary resident, so the Reg 105 issue likely resolves on that basis
- Compliance file uploaded to Drive under NMC > Finances > Taxes > 2025 HST Filing > Livia Bevilacqua Compliance File
- Maurizio is involved
- Do not CC Jerby on Livia or Maurizio correspondence

## Business Ideas (Parked / Being Explored)
- AI Consulting for Home Services, available as a fast-income option if needed
- AI Newsletter for Home Services
- mikeziarko.com personal brand site, Ghost recommended
- Pet Voice AI, parked
- YouTube Kids Channel, high COPPA risk
- Commercial Cleaning Spinoff, good idea but wrong time, needs a co-founder
- Cleaning Company Mastermind/Course, parked

## Lessons Learned
- Launch27 API is not reliable for live booking or schedule data
- Never ask for API keys in chat
- `openclaw configure` can wipe config, always back up first
- Mike has ADHD, keeping him organized is a core job
- Mike hates em dashes, never use them for him
- No markdown tables in Telegram
- Abigael, not Abigail
- Mike prefers conversational info dumps over rigid forms
- Use the preview server for sharing files
- Do not promise delivery then go silent
- Check existing systems before asking Mike things that may already exist in data
- Large writing sub-agents need generous timeout or direct in-session writing
- Airtable active flag is unreliable for customer status
- Recurring Lost CSV is the authoritative churned-recurring dataset
- For recurring customers, always verify the exact future occurrence before reporting or changing anything
- Booking or customer IDs can point to stale records
- Cancellation workflow: always ask the reason and whether it is one booking or all future bookings
- YNAB is the best real-time finance view, QuickBooks is the lagging month-end record
- Price increase already happened, premium pricing is for new customers only
- Drive rules: never share, move, or delete without approval
- Linear security alerts should be checked promptly, verify if it was Mike or rotate password and review sessions
- For safety or comfort complaints, make sure the cleaner assignment changes before the next visit
- VPS is good for reliable public automation, Mike's Mac should stay the home base for local browser and machine-tied workflows

## Memory System
- Daily notes: memory/YYYY-MM-DD.md for raw logs
- MEMORY.md: curated long-term brain
- projects.md: compact project registry
- Vector DB: PostgreSQL 17 + pgvector, 159 memories indexed, Gemini API for embeddings

## Security & Safety
- Exec approvals file: ~/.openclaw/exec-approvals.json
- 3-tier guardrail system lives in AGENTS.md
- Approval forwarding goes to Mike's Telegram 8792051045

## Reliability
- Gateway outages happened Mar 2 to 4, watchdog now checks every 5 min and auto-restarts
- VPS migration remains recommended for always-on reliability
- Useful shorthand: DigitalOcean box = reliable public brainstem, Mike's Mac = hands, tools, browser
- Full plan: memory/reliability-plan.md

## Key Resources
- Net Worth Google Sheet: 190gcG6GtyPRBFRPNZoy9sysjTnnfKrdeqjPDZSS5rZQ
- Access is via service account with Sheets API readonly scope

## Pending TODOs
- [ ] Move cost-heavy crons from Sonnet to Haiku, pending Mike approval
- [ ] Send Reactivation Email 3 in GHL on Apr 22, then stop emailing that list unless people respond
- [ ] Leah: push v3.0 to production
- [ ] Leah: build lookup_customer tool
- [ ] Leah: build check_availability and create_booking via Playwright on Launch27
- [ ] Personal calendar OAuth fix for mikeziarko@gmail.com
- [ ] Wire Vapi as IVR missed-call fallback
- [ ] Conversation history persistence for Twilio, currently resets on cold starts
- [ ] Quote-to-Booking system build
- [ ] Goal-setting session with Mike, still repeatedly deferred
- [ ] mikeziarko.com site, Mike to review Ghost recommendation
- [ ] Jobber evaluation, research plus trial account
- [ ] NMC pricing page on nomorechores.com
- [ ] VPS migration for Harvey reliability
- [ ] Review all insurance policies, home, auto, life, Square One
- [ ] Contractor Agreement v2026.2, add missing clauses and review
- [ ] Maurizio email re Livia compliance, confirm whether sent or still waiting on approval
- [ ] Operating Dashboard for NMC
- [ ] Wordfence alert on nomorechores.com, verify reviewed and resolved
- [ ] Linear login alert from Apr 12, verify it was Mike or rotate password and review sessions
- [x] Spring Fresh campaign
- [x] Expense audit
- [x] ClickUp decision: leave as-is
- [x] Dropbox decision: leave as-is
- [x] Evernote export
