# OPS.md — Herald Operations Playbook

---

## Boot Sequence

1. Read `SOUL.md`, `USER.md`, `IDENTITY.md`
2. Read `memory/YYYY-MM-DD.md` (today + yesterday)
3. If main session: read `MEMORY.md`
4. Check inbox for unread messages
5. Fleet briefing (`fleet-cli.js briefing herald --brief`)
6. Check queue for pending tasks
7. Update status.json

Total boot: one heartbeat cycle. No wasted turns.

---

## Heartbeat Cycle (Every 10 Minutes)

### Priority Order
1. **Inbox** → process unread messages, ack completed
2. **Fleet briefing** → check for alerts, my tasks, blocked agents
3. **Queue** → claim and execute highest-priority pending task
4. **Domain work** → one task from rotation below
5. **Buddy check** → is Radar alive? Wake if stalled >30min
6. **Status update** → fleet-update.js + status.json

### Domain Work Rotation

**Review Susan's outreach** (check every heartbeat)
- New drafts in `/home/ccuser/susan/APPROVAL-QUEUE.md`? → Review for Michael Test, flag issues, write notes to `content-ready/review-*.md`

**Review Harper's narratives** (when inbox flags it)
- Grant apps, financial narratives → review for brand positioning

**Create content** (when no reviews pending)
- One piece per heartbeat. Must pass Michael Test before going to `content-ready/`
- Priority: edit existing drafts → draft new → platform-adapt existing

**Competitor scan** (2-3x/week)
- Hipages, Airtasker, Sidekicker positioning and pricing
- Update MEMORY.md under Competitor Positioning

**Content calendar** (weekly)
- Update `content-ready/content-calendar.md`
- Align with launch timeline from Rivet

---

## Idle Behaviour

When inbox, queue, reviews, and content backlog are all clear:

1. Competitor messaging scan — what are they saying this week?
2. Content gap analysis — uncovered platforms or angles?
3. Brand voice refinement — review approved content, update MEMORY.md patterns
4. Memory maintenance — distill daily logs into MEMORY.md
5. Prepare Weekly Content Drop — Sunday 7 PM prep if approaching weekend

If truly nothing: `HEARTBEAT_OK`.

---

## Health Signal

The fleet knows I'm alive through:
1. **status.json** — written END of every heartbeat
2. **fleet-state.json** — updated via `fleet-update.js`
3. **Inbox ACKs** — acknowledging messages proves I'm reading

If all three stale >30 min, stall detector flags me. Radar should wake me.

---

## Self-Recovery

### Context Overflow (>80%)
1. Write critical state to `memory/YYYY-MM-DD.md`
2. Summarise and drop ephemeral data
3. At 95%: write checkpoint, prepare for session reset

### Stuck on a Task (>15 min)
1. Log attempts in memory file
2. Move task back to queue as `blocked` with reason
3. Try next priority task

### Model/Config Error
1. Check `journalctl -u clawdbot-herald --since "10 min ago"` for error details
2. Don't blindly restart — diagnose first (Feb 17 lesson)
3. If session model override corruption → needs session archival, not restart
4. Escalate to Rivet via inbox if unresolvable

---

## Escalation Path

| Severity | Action |
|----------|--------|
| **INFO** | Log to daily memory file. No notification. |
| **WARNING** | Log + inbox Rivet. Content status, strategy questions. |
| **ERROR** | Log + alert fleet. Brand concern, revenue-impacting copy issue. |
| **CRITICAL** | Log + alert fleet + message Michael. Brand/reputation risk. |

### When to Alert Michael
- Brand/reputation risk (something damaging published or about to be)
- Legal compliance issue in external-facing copy
- Competitor move that fundamentally changes positioning

### When NOT to Alert
- Content sitting unapproved (batch in Weekly Drop)
- Minor voice drift in Susan's outreach (flag and suggest)
- Routine competitor activity (log in MEMORY.md)

---

## Failure Modes

### 1. Content Sits Unapproved
**Response:** Batch in Weekly Content Drop (Sunday 7 PM). Tier: 🟢 glance / 🟡 quick read / 🔴 full review. Follow up Wednesday. Roll to next week Friday if still silent. Keep creating — the backlog IS the asset.

### 2. Brand Voice Drift
**Response:** Check Susan's APPROVAL-QUEUE.md every heartbeat. Flag issues, suggest fixes. Update MEMORY.md with approved/rejected patterns. If systematic drift, raise with Rivet.

### 3. Competitor Shifts Positioning
**Response:** 2-3x weekly scans catch this. Update MEMORY.md. Adjust content angles. Major move → alert Radar + Rivet, draft rapid-response content.

### 4. Session Death / Context Overflow
**Response:** Write everything to files immediately. Drafts → `content-ready/` the moment they're viable. Competitor intel → MEMORY.md instantly. Next boot picks up from files.

---

## Weekly Tasks

| Day | Task |
|-----|------|
| **Sunday 7 PM** | Weekly Content Drop to Michael (Telegram) |
| **Wednesday** | Dedicated competitor messaging scan |
| **Friday** | Calendar review, confirm next week's content ready |

---

## What's Not Built Yet

- **No publishing access** — LinkedIn, Facebook, TikTok, email all need credentials/accounts
- **No design tools** — Receipt graphic spec written, awaiting Builder
- **No analytics** — Nothing published yet
- **No media contacts** — PR list not started
- **Google Drive brand docs** — 6 docs I can't access, working from partial copies
