# TOOLS.md - Local Notes

Skills define _how_ tools work. This file is for _your_ specifics — the stuff that's unique to your setup.

## Coding Tasks — Default Model

**Always use `openai-codex/gpt-5.4` (alias: `codex`) for ALL coding tasks.**
- Mike's ChatGPT Plus subscription — no API billing
- Auth profile: `openai-codex:mike@nomorechores.com`
- Use this for: building features, writing scripts, refactoring, PR review
- In sessions_spawn: set `model: "openai-codex/gpt-5.4"`
- In exec (Codex CLI): `codex exec --full-auto 'task'` with `pty:true`
- Only fall back to Claude Code if Codex is unavailable

## What Goes Here

Things like:

- Camera names and locations
- SSH hosts and aliases
- Preferred voices for TTS
- Speaker/room names
- Device nicknames
- Anything environment-specific

### Slack Channels

- #emilys-team → C02NFPKNZ1U (Abigael + Mike, ops channel) ⛔ NEVER POST HERE
- #calls → CDP3Y6YB0 (call notifications)
- #customer-feedback → C0AJQTVST1B

### Slack Response Guardrail

- Harvey may respond in Slack only to Mike and Abigael
- In shared Slack channels, do not reply to anyone else
- If a message in Slack is from anyone other than Mike or Abigael, stay silent unless Mike explicitly instructs otherwise
- This restriction applies even in contractor-related channels
- Known contractor team channels: #elbas-team, #emilys-team, #helens-team, #isas-team, #jessicas-team, #livias-team, #samiras-team, #team-vadim

### Email Routing Rules

Two separate decisions: WHERE to draft, and WHO it's FROM.

#### FROM address (sender)
- **mike@nomorechores.com** — all work-related emails (contractors, accountants, lawyers, CRA, suppliers, partners, business correspondence)
- **mikeziarko@gmail.com** — personal emails only (family, friends, personal finance, non-NMC matters)
- **services@nomorechores.com** — customer-facing emails only (Abigael handles this inbox)

#### WHERE to draft (which inbox)
- **mikeziarko@gmail.com Drafts** — sensitive/confidential work emails (legal, compliance, tax, CPA, CRA, contractor disputes, terminations, financial institutions). These should NOT be visible to Abigael or the ops team. App password: ~/.openclaw/secrets/gmail-app-password.txt
- **services@nomorechores.com Drafts** — customer ops emails (inquiries, complaints, rebooking, refunds, sales leads, contractor onboarding). App password: ~/.openclaw/secrets/gmail-services-app-password.txt
- **NEVER draft legal/financial/compliance emails in services@**
- Always check services@ for customer inquiries, NOT Mike's personal Gmail

#### Quick reference
| Type | Draft in | From |
|------|----------|------|
| CPA / CRA / legal | mikeziarko@gmail.com | mike@nomorechores.com |
| Contractor dispute/termination | mikeziarko@gmail.com | mike@nomorechores.com |
| Customer inquiry/ops | services@nomorechores.com | services@nomorechores.com |
| Personal (family, friends) | mikeziarko@gmail.com | mikeziarko@gmail.com |

### Airtable
- API key: ~/.openclaw/secrets/airtable-api-key.txt
- **NMC-DB** (primary): `applisWTLgZJOnYtj` — Customers, Bookings, Leads, Contractors, Contractor Payments, Goals
- **NMC DB2**: `appGYlKDsR0yBSRXE` — Activity Tracker, Payments, Contractors, Rankings, Updated Jobs, Completed Jobs
- For CS: search `Customers` table in NMC-DB by `{Full name}` — has booking history, total spent, tags, notes, recurring status
- Customer search formula: `SEARCH("name", LOWER({Full name}))`

### Morning Briefing Scripts (PERMANENT - DO NOT USE NODE FOR THESE)
- **Email:** `python3 scripts/check-email.py [hours] [limit]` - uses built-in imaplib, zero dependencies
- **Calendar:** `python3 scripts/check-calendar.py [hours]` - uses service account JWT + urllib, zero dependencies
- Both calendars work: mike@nomorechores.com (work) + mikeziarko@gmail.com (personal)
- Calendar uses service account directly (NOT domain-wide delegation) - the SA has shared access to both calendars
- **NEVER** use Node.js/googleapis/imap npm packages for these - they require npm installs that break across sessions

### Oura Ring
- Tool: `python3 tools/oura.py [sleep|readiness|activity|hrv|summary] [days]`
- Token: ~/.openclaw/secrets/oura-api-key.txt
- Use this to answer any health questions Mike asks (sleep quality, readiness, HRV, steps, etc.)
- Examples:
  - `python3 tools/oura.py summary` — today's full picture
  - `python3 tools/oura.py sleep 7` — last 7 nights
  - `python3 tools/oura.py hrv` — HRV trend (default 7 days)
  - `python3 tools/oura.py readiness` — today's readiness

### QuickBooks
- Tool: `python3 tools/quickbooks.py [pl|revenue|expenses|invoices|cashflow|summary] [months]`
- Secrets: ~/.openclaw/secrets/quickbooks-{client-id,client-secret,access-token,refresh-token,realm-id}.txt
- Auto-refreshes access token on every call
- Realm ID: 123146117368359 (No More Chores)
- Examples:
  - `python3 tools/quickbooks.py summary` — full snapshot (revenue, expenses, invoices)
  - `python3 tools/quickbooks.py pl 3` — P&L last 3 months
  - `python3 tools/quickbooks.py invoices` — outstanding invoices
  - `python3 tools/quickbooks.py expenses` — top expenses this month

### Discord ZHQ Server
- Server ID: 1478419889243820042
- Health channel: 1481326526472654971
- Daily health report: scripts/oura-health-report.py (cron 8am)

## Why Separate?

Skills are shared. Your setup is yours. Keeping them apart means you can update skills without losing your notes, and share skills without leaking your infrastructure.

---

Add whatever helps you do your job. This is your cheat sheet.
