VOXA HUD
SOLO OPERATOR WORKBOOK · 2026-08-02

VOXA — Ship Room

2/5VOXA PHASE
10PENDING /APPROVE
43SEEDED
0/15ENGAGEMENTS
07-17LAST EXTERNAL

Where you left off

From the 2026-08-02 morning brief and the 08-01 close-out.
Today's ship: Cohort 1's first real cold send — /approve the 10 queued drafts + buy the CAN-SPAM mailbox. A stranger receives an Orvoma email.
Close-out unverified (day 24) — queue unchanged at 10 pending since 07-28; only the seed cron moved (0 new pm_target)
FULL SPEED deadline passed · halt trigger fired — strategy review now 2 days overdue: fire or re-scope

Do next — in order

Click an item to check it off (saved in this browser).
Strategy review: fire or re-scope

Overdue since 07-31 — decide before building more

YOU
Buy the CAN-SPAM mailbox

Virtual address, ~$10–30/mo — the legal floor for cold email

GATE
Written GO on Cohort 1

One word; nothing sends without it

1 WORD
/approve the 10 queued drafts

APG · Alan Joel · Barrington · Bradley · LiNC · Trinity · NAI Nashville · Asset Alliance · HND Realty · Teal Door

5 MIN
Review CRM mock v4

VAULT/VOXA/Registry/CRM-Mock.html — waiting on your verdict

QUEUED
Fix the seed workers

9 of 11 erroring or stubbed — green runs, empty output

BUILD

Blocked / not working

Everything currently standing between the queue and a real inbox.
CAN-SPAM mailbox

Hard gate — zero sends until bought and wired into the signature

YOU · ACCOUNT
Your written GO

Explicit, in writing — the per-email /approve verdict never relaxes after it

YOU · 1 WORD
Warm-up ramp

Arms in Phase 3 — week 1 at 10/day, never a blast

SYSTEM · P3
Seed sweep silent-failing

0 pm_target for 9 straight nights · A2/B1 error, 7 more are stubs — the pipeline looks green but produces nothing

BUILD ITEM
Runbook mismatch

smartlead_setup.md connects founder@orvoma.com — conflicts with the anchor invariant; reconcile before the next connection pass

FLAGGED

Shipped so far

Dated and verifiable.
Segment locked — mid-market property management07-17
7-layer spec approved — build order locked07-14
Phase 1 verified end-to-end — SOURCER 11/11 · DRAFTER 7/707-22
Dossier card pair built — company + personal07-24
CRM + workflow simulator mocks07-25
Queue filled — 10 cold drafts pending07-28
CRM mock v4 — built, awaiting your review08-01

Still to build

The remaining phases, in order. Full spec lives in the Blueprint section.
Phase 2 — /approve wiring + SCOUT split — the active buildNOW
Phase 3 — send live — ramp 10/day toward 200/wkGATED
Phase 4 — replies + follow-up + scale — REPLYWATCH · SEQUENCERLATER
L7 SCRIBE completion — tickers live, log partialPARTIAL

Working files: VOXA/Pipeline/Queue.md · VAULT/VOXA/VOXA.md · VAULT/VOXA/Registry/CRM-Mock.html

WorkbenchSPATIAL EXPLORER · VOXA FILE SYSTEM
DRAG ORBIT · SCROLL FOCUS · CLICK OPENS FOLDER · 1–8 JUMP · ENTER OPEN · SPACE RESET · ESC CLOSE

The loop — 7 layers

Green = works · Blue = active build · Red = gated · Grey = later.
1 SOURCE11/11 ✓ 2 DRAFT7/7 ✓ 3 APPROVEBUILDING ● 4 SEND3 LOCKS 5 REPLIESPHASE 4 6 FOLLOWPHASE 4 7 LOGPARTIAL Between 3 and 4 stands AEGIS — your explicit yes, per email, forever.

Click any layer box or chip for its complete blueprint — agents, contracts, gates, failure model.

Phase plan — with steps

Each phase has a testable done-condition.
FoundationDONE

n8n service · headless claude · CRM scaffold · voice rules

Source → Draft → QueueDONE 07-22

Chain runs overnight, stops at the queue by design

Approve wiring + SCOUT splitACTIVE
/approve webhook auto-fires the next chain run
SCOUT becomes 6 real nodes (hunter → warden)
Approve→send path built, landing on the AEGIS block
Nightly schedule armed (00:30 / 02:00) + lock files
Send live3 GATES

Mailbox · warm-up ramp (10/day → 200/wk) · your written GO

Full loop + scaleAUG

Replies negotiated in-thread · follow-ups · 1,000 leads/wk

Pipeline funnel

Live counts from the CRM.
Found
33
Send-ready
11
Drafted
7
Sent
0
Sent stays 0 until the three gates clear — that's the design, not a failure.

The 12-agent roster

One prompt file each, fired headless.
SOURCER — files prospectsWORKS
DRAFTER — writes 1:1 emailsWORKS
GATEKEEPER — /approve queueBUILDING
SCOUT ×6 — hunter→wardenSPLITTING
SENDER — dispatch scriptGATED
REPLYWATCH · SEQUENCERPHASE 4
SCRIBE — run tickers livePARTIAL

The 12-agent roster

One prompt file each in VOXA/agents/, fired as headless claude runs. No daemon: read vault state, act, exit.
AgentLayerRunsModelJob
HUNTER100:30 chainHaikuRaw discovery across free source tiers, parallel, field-level voting
PROFILER100:30 chainSonnetStitches field claims into one profile; provenance per field
VERIFIER100:30 chainSonnetCredibility gate — email validity, person-still-there, domain health
SIGNALS100:30 chainSonnetInefficiency triggers — the personalization ammo
SCORER100:30 chainSonnetICP fit score, tier A/B/C, promotes toward the send window
WARDEN100:30 closeSonnetDedupe, suppression ledger, CAN-SPAM, budget sentinel
DRAFTER202:00 nightlySonnetWrites 1:1 cold drafts as Andrew with cited facts; self-scores
GATEKEEPER3/approveFable livePresents the queue for per-item verdicts; last QA before you
SENDER4inside /approve onlyscriptExecutes approved sends via Gmail — the only agent that can
REPLYWATCH5every 3h, 08–20SonnetSweeps inbox, classifies replies, queues reply drafts top-priority
SEQUENCER623:30 nightlySonnetPer-thread follow-up state machine; queues follow-up drafts
SCRIBE7closes every runinheritsAppends CRM events, updates metrics, commits state

Roster-wide prohibitions

Structural, not instructions an agent could forget.
Only SENDER can reach Gmail send — every other agent is physically incapableHARD
No agent deletes from the suppression ledger — WARDEN appends onlyHARD
No agent hand-edits a board view — boards derive from frontmatterHARD
Fable never does bulk reads — scripts compute, agents interpretHARD

Master schedule

The daily clock once Phase 2 arms it.
TimeRunWhat firesPhase
00:30SCOUT chainHUNTER → PROFILER → VERIFIER → SIGNALS → SCORER → WARDEN2
02:00DRAFTERCold drafts for send-ready prospects → queue1
08–20 / 3hREPLYWATCHInbox sweep, classify, queue reply drafts4
23:30SEQUENCERFollow-up state machine sweep → queue4
morning/approveGATEKEEPER presents · you verdict · SENDER executes2–3
every runSCRIBEClosing step everywhere — never scheduled separately1+

The Queue — one approval surface

VOXA/Pipeline/Queue.md · priority: reply > follow-up > cold, FIFO within class — a 2-day-old reply kills the deal; a 2-day-old cold draft costs nothing.
FieldContents
idDeterministic per class — never serial, so re-runs collide instead of duplicating
prospectLink to the CRM note in Pipeline/Prospects/
classcold / reply / follow-up
tierA / B / C from SCORER
draftSubject + full body, plain text, written as Andrew
facts2–3 cited personalization facts, each with provenance
self-scoreDrafting agent's confidence; low scores get scrutiny, never auto-kill

Status lifecycle

Terminal statuses are never deleted — SCRIBE archives them to the log.
pending/approve verdict approvedkilledskipped sendingsentedited-sentapproved-unsent

edited-sent — you edited before sending; edits feed DRAFTER's calibration · approved-unsent — a pre-send gate failed at fire time, retried next session · skipped — resurfaces next /approve at same priority · killed — logged with reason; prospect returns to pool or suppression ledger.

CRM note — one prospect, one file

Frontmatter drives every board; nothing is hand-edited.
KeyValues
stagestaging → enriched → verified → scored → send-ready → contacted → replied → booked / suppressed
tier / scoreA/B/C · 0–100 — ICP weights recalibrate monthly from outcomes
verifiedDate, 30-day TTL — stale send-ready drops back to scored
catchallUnverifiable domain; sends throttled against the bounce kill-switch
signalsSIGNALS output — the personalization inventory

Body carries two mandatory blocks: a provenance table per critical field (a claim without provenance does not count) and an append-only event log — one timestamped line per touch, never rewritten.

The two-sided ICP

Same Pricing Leak Audit, two frames, one MSA read from both ends. Cohort 1 stays inside commercial real estate.
SIDE A — OWNERS

Buyer of management services · 5–50 properties, $50M–$2B AUM. Frame: "Your manager's flat fee absorbs $X/yr of labor you pre-pay whether delivered or not." Headline: $778K/yr unbudgeted labor on a $1.8M PM contract.

SIDE B — MANAGERS

Seller under MSA · 50–500 doors. Frame: "Your contract structurally gives away $X/yr of margin — restructure at renewal." Headline: 43% of management-fee margin absorbed.

ICP scoring — 100 points to a tier

Scored by icp_scorer.py; email-pattern confidence <90% drops to Tier B rather than risk a bounce.
SIZE 25
VERTICAL 20
GEO 15
DM ACCESS 25
PAIN 15
doors in-band
office · industrial · mixed
A=15 B=10 C=0
named DM + email
warm signals
TIER A ≥70outbound days 1–3
TIER B 50–69outbound days 4–7
TIER C <50backlog

Warm-signal override: ≥10 on the pain sub-rubric alone (recent acquisition, fund close, hiring asset managers, RFP, public margin-pressure statement) = Tier A regardless of everything else.

Geography + decision-makers

Ranked by close-speed.
TIER A METROS

Atlanta · Charlotte · Nashville · DFW · Phoenix · Tampa · Indianapolis · Columbus · KC · MSP · SLC

TIER C — EXCLUDED

NYC · SF · LA · Boston · DC · Seattle · Chicago — outbound CAC explodes

1 · Dir/VP Asset Mgmt (owner) — no committeeFASTEST
2 · CFO, mid-market PM firm
3 · COO, owner-operator
4 · Dir Finance, family office
5 · Founder, 5–15 propertiesHARD TO REACH

Hard disqualifiers — skip without scoring

Public REIT >$5B · pure brokerage (no owned assets — CBRE, JLL, Cushman, etc.) · CRE-tech vendor · portfolio wind-down <12mo · bankruptcy/receivership · HQ outside US/Canada · multifamily/retail/hospitality/self-storage primary (cohort 2+).

Doctrine — for an audience that does not tolerate spam

Plain text only — no tracking pixels, no images, no links in cold touchesLAW
Real threading — Re: same subject, human cadenceLAW
Reply rate is the only engagement metric — no open/link tracking, by designLAW
Written and signed as Andrew, 1:1 — never bulk-templatedLAW

Sender architecture

Anchor protected; satellites absorb the risk.
MailboxRole
andrew@orvoma.comAnchor — never in Smartlead; real replies + manual send only; protects brand reputation
orvomahq.com · getorvoma.com · tryorvoma.comSatellites, warmup ON — absorb cold volume and reputation risk
Smartlead$59/mo, warmup lane only — campaigns tool, explicitly NOT the ship

Authentication + warmup

SPF

One TXT record, ends ~all/-all, no duplicates

DKIM

Selector CNAME, signing domain aligned to sender

DMARC

p=none to monitor · rua → dmarc@orvoma.com

Verify

Gmail "Show original" — all three PASS + aligned

Warmup settingValue
Daily ramp-up+5 emails/day
Max daily volume40/day
Reply-rate target35%
ScheduleMon–Fri, business hours
Bounce kill-switch2% — outranks everything

Open flag

Runbook mismatch

smartlead_setup.md connects founder@orvoma.com into Smartlead — conflicts with the anchor invariant. Reconcile before the next connection pass.

FLAGGED

AEGIS enforcement — structural, not procedural

Send isolation — only SENDER holds Gmail send; everyone else physically incapableARCH
Approval-only sends — dispatch reads a manifest only /approve can populateARCH
Suppression ledger — permanent, append-only; checked at promotion AND at send timeARCH
Audit trail — git auto-commit after every run; the whole loop replays from historyARCH

Failure model — every run disposable

Idempotent by construction

Read state → compute delta → write → exit. Crashed runs re-run, not repaired.

Per-run lock files

Overlapping cron fires exit clean; stale locks broken with a logged warning

Never double-send

sending marker before the Gmail call, message-id confirm after; crashes reconcile against Gmail Sent

Never silently drop

Malformed entries quarantine and surface in /approve; API errors exit non-zero and retry next fire

Visible always

START/FINISH to the swarm board; SCRIBE closes every run with a committed snapshot

Cost model

$0 marginal AI — headless claude on Max OAuth, no API keyFIXED
Model tiering — Haiku sweeps · Sonnet drafts · Fable only live with youRULE
Paid-spend cap — $15/mo, WARDEN is the budget sentinelCAP

SOURCING PLAN — field-by-field root sources + the exact run

DOCTRINE
Every field traced to its most authoritative FREE root source first; paid only as gap-fill. CoStar is excluded (their security/ToS rules) — county assessor + deed records + LoopNet public listings replace it entirely.

Workflow mind map

The whole run at a glance — 10 phases branch from the root; every step branches from its phase. Scroll sideways on small screens.

Person fields → root sources

FieldRoot source (free, most accurate)Fallback chain
Full name + titleFirm site /team /about /leadership (current-role truth)SoS officer filings → conference speaker bios → LinkedIn public
Principal / ownerState SoS annual report (officers/members) + statutory agentSEC EDGAR (if filer) → county deed signatory names
EmailEmails published on the firm site (pattern truth)MX + domain-pattern derivation → paid verifier only if inconclusive
Phone (work)Firm site /contact pageGoogle Business Profile listing → SoS agent phone
LinkedInManual capture in /dossier phase 3 (ToS-safe — never scraped)
Bio / experience / educationFirm-site bio (self-published, current)Speaker bios → podcast show notes → LinkedIn public
Wealth & influenceFEC individual-contribution records + IRS 990s (ProPublica/TEOS mirrors)County assessor (personal residence) → board seats via 990 officer lists
News / recentGoogle News RSS per firm + principal nameBizJournals metro feeds → county recorder new filings

Company fields → root sources

FieldRoot source (free, most accurate)Fallback chain
Legal name vs DBAState corporation registry (AZ Corp Commission wave 1) — THE identity rootCounty DBA/trade-name registry
HQ addressSoS principal-office address of recordFirm site footer → Google Business Profile
FoundedSoS incorporation dateWayback Machine earliest site capture (proxy)
Ownership typeSoS entity type + EDGAR 10-K (public/REIT)Form D filings (PE-backed signal)
Portfolio / AUM / doorsCounty assessor parcel search by owner-LLC variants → sum parcels · units · sq ftDeed registry cross-check → EDGAR XBRL (public) → firm-site claims (lowest trust)
HeadcountDOL Form 5500 filings (EFAST, participant counts)Careers-page open roles → LinkedIn company page (proxy)
Org chart / rosterFirm site /team page extractionSoS officers → EDGAR exec lists → 990 officer tables
TransactionsCounty deed recorder (grantor/grantee search)BizJournals deal coverage → press releases
Funds raisedSEC EDGAR Form DPress releases
TenantsTenant-improvement building permitsLoopNet public listings → firm-site property pages
Pain signalsCounty tax-appeal dockets + code-enforcement recordsGoogle/BBB tenant reviews · Glassdoor (verbatim quotes)
Tech stackJob postings naming the PMS (Yardi · AppFolio · MRI · Buildium)MX/DNS records → site headers

Phase 0 deep-dive — the weekly seed, chunk by chunk

Runs Sunday, before anything else exists. End state: a deduped, provenance-tagged candidate list where the best firms already carry proof of ownership — Phase 1 starts with zero guesswork.
A · ASSESSOR-FIRST OWNER SWEEPROOT

0.1 Maricopa + Pima parcel data, class = office / industrial / mixed-use
0.2 Statewide: Pinal · Yavapai · Coconino · Mohave · Yuma, then rural fill (8 counties) · ADOR centrally-valued rolls
0.3 Situs-city sweep inside each county — PHX metro (13 cities), Tucson metro + Pinal (10), north/west/south towns (14) · city business-license + permit portals verify situs
0.4 Group parcels by owner → count + total sq ft; out-of-state mailing address = remote-owner flag
0.5 Keep owners with 5–50 parcels · snapshot raw exports to .raw/seed/

B · REGISTRY + LICENSE PULLROOT

0.6 AZCC eCorp keyword search + foreign-entity registrations (operates here, HQ elsewhere)
0.7 AZ SoS trade-name registry — the legal-name↔DBA link
0.8 ADRE licensee database — every PM firm's employing broker, statewide by law (Side-B root)
0.9 ADOR TPT commercial-lease licenses — every landlord collecting AZ rent; bot-walls → CloakBrowser

C · ASSOCIATION ROSTERSSIGNAL

0.10 NAIOP-AZ · AZCREW · SIOR · ULI · CCIM Central + Southern · IREM PHX + Southern AZ · BOMA PHX + Tucson · MPA · chambers (TUS · FLG · Prescott · Yuma)
0.11 Extract firm + site + listed member person
0.12 Tag association-member; AMA = multifamily, name-source only

D · SECONDARY FILL

0.13 GBP category search per metro: PHX · TUS · FLG · Prescott · Yuma · Havasu · Sierra Vista · Casa Grande
0.14 PBJ + Inside Tucson Business Books of Lists · AZ Big Media rankings
0.15 LoopNet/Crexi "managed by" lines · permit applicants · AZ property-manager job postings
0.15b AZBEX/DATABEX + ACA Prospector — construction pipeline, future contracts (S23-S24)

E · NORMALIZE + MERGE

0.15 Lowercase · strip LLC/Inc/LP · collapse punctuation
0.16 Merge chunks on normalized name — every source hit kept as a provenance line; assessor + registry + roster = instantly credible
0.17 Alias table for multi-entity families ("X Holdings" + "X Management" → one firm)

F · CLASSIFY + SEGMENT

0.18 Nothing discarded — tag every firm with a takeover-map segment: pm_target · brokerage · asset_mgmt · facilities_ops · development · valuation · debt_capital · adjacent_ring (sub-tags: vendors · tax-appeal · title · insurance · environmental · A&E · construction)
0.19 Parked bycatch pre-seeds future verticals for zero tokens · only true kill = suppression ledger (gov/tribal owners still dropped)

G · UPSERT + VIEWS

0.20 Upsert to companies.db — NEW insert · KNOWN append provenance · SUPPRESSED skip; candidates.md + CSV exported as read-only views (pm_target · new)
0.21 SCRIBE line: counts per chunk, drops per rule · git commit

The run — every step, in order

Weekly seed + nightly per-firm chain, batched 5 firms in parallel. Per-firm DAG: identity first → [sizing ∥ people ∥ signals] parallel → deterministic stitch. Every step writes provenance; every stage transition is a commit point.
Seed the firm list

Pull AZ Corp Commission actives filtered on PM/realty keywords · union with AMA + NAIOP + AZCREW rosters · dedupe on normalized legal name → candidate file

HUNTER · registry pull

Per new firm: fetch SoS record — legal name, status, incorporation date, statutory agent, officers. Snapshot raw HTML to .raw/

HUNTER · sizing sweep

Assessor API query on owner-LLC name variants → parcel list → sum sq ft / units / parcel count. Deed registry cross-check on the top parcels

HUNTER · site sweep

Fetch /about /team /contact /careers · extract names, titles, emails, phones, PMS mentions · every claim recorded with URL + date

PROFILER · vote + stitch

Deterministic aggregator merges field claims across sources · quorum ≥0.65 or the field stays open · one CRM note written with the full provenance table → enriched

VERIFIER · free checks

MX + SPF lookup on the domain · email pattern derived from published addresses · DM address constructed + format-checked → verified; inconclusive → paid gap-fill queue (under the $15 cap)

SIGNALS · pain sweep

Tax-appeal dockets · permits · code enforcement · evictions/foreclosures · Treasurer delinquents · ROC complaints · PACER · Google News RSS · job postings · review mining → signals[] each with provenance

SCORER · tier

icp_scorer: size 25 · vertical 20 · geo 15 · DM 25 · pain 15 — sizing now fed by assessor totals (kills the Tier-C cap) · warm-signal override ≥10 → Tier A

WARDEN · gate

Suppression check · dedupe vs registry · one-active-contact rule · budget check → send-ready

SCRIBE · close

Stage events + spend counters appended · swarm-board line · git commit. Crash anywhere? Re-run resumes at the last stage transition

L1 · SOURCE — "SCOUT"

PHASE 2
Six agents hunt, verify, and score prospects for free — money is spent only at the send window.
1,000/wksend-ready target
<$0.02cost per lead
$15/mopaid budget cap
2%bounce kill-switch
Agents
1

HUNTERHAIKU · → STAGING

Raw discovery across the free source tiers, fired in parallel with field-level voting across sources

2

PROFILERSONNET · → ENRICHED

Stitches field claims into one profile — provenance per field: source + date + confidence

3

VERIFIERSONNET · → VERIFIED

Credibility gate — email valid, person still there, domain healthy. Paid checks just-in-time only

4

SIGNALSSONNET · + AMMO

Inefficiency triggers — hiring, tax appeals, permits, bad reviews. The personalization ammo

5

SCORERSONNET · → SCORED

ICP fit 0–100 → tier A/B/C. Weights recalibrate monthly from real reply outcomes

6

WARDENSONNET · → SEND-READY

Dedupe · suppression check · CAN-SPAM · budget sentinel — halts paid calls at 80% of cap

Tiers
Government
CRE Records
Self-Published
Associations
Social / Web
Tech Stack
State Registries
Sizing — Assessor / XBRL
Org Extraction
Intent Signals
Wealth — FEC / 990
Email Verify
Pro Databases

Rollout

Ordered by PM fragmentation. A wave opens only when the current Tier-A pool is fully worked; reply data reorders the map monthly.
WAVE 01 · ARIZONAPhoenix + Tucson — home turf, best data access, meetable prospects
WAVE 02 · SUNBELTDFW · Houston · Austin · Las Vegas · Denver — heaviest mid-market PM density
WAVE 03 · SOUTHEASTFlorida · Atlanta · Carolinas · Nashville — fragmented, open-records states
WAVE 04 · MIDWESTChicago · Columbus · Indy · KC · MSP — legacy systems, audit-rich
WAVE 05 · NATIONALEverything else, signal-driven — only after waves 1–4 are worked

Credibility rules

SUPPRESSION

Permanent append-only ledger, checked before any promotion

30-DAY TTL

Stale send-ready drops back to scored and re-verifies

PROVENANCE

No source + date + confidence = doesn't count in the vote

ONE ACTIVE CONTACT

Two mapped per firm; fallback fires only after thread 1 closes

CATCH-ALL ~15%

Unverifiable domains flagged + throttled vs the kill-switch

FEEDBACK LOOP

Reply outcomes retrain SCORER weights monthly

L2 · DRAFT — "DRAFTER"

BUILT · VERIFIED 07-22
Writes 1:1 cold emails as you, on your best day. Zero Gmail scopes — physically can't send.
<120words, hard cap
02:00nightly run
1redraft pass max
0gmail scopes

The nightly run

READ CAPtomorrow's ramp
BATCHcap × 1.25 − pending
PICKoldest send-ready
GATE4 checks
DRAFT+ self-score
QUEUEatomic append

Queue already full? DRAFTER writes ZERO and exits — a correct run. Fresh beats deep.

Pre-draft gate

Re-checked per prospect, seconds before composing.
SUPPRESSED?KILL

On the ledger → no draft, log, done

STALE >30D?DEMOTE

Back to scored — no draft from stale data

NO PROVENANCE?REJECT

Uncited fact never reaches a stranger's inbox

CATCH-ALL?FLAG

Draft normally, mark throttled for L4 pacing

The 7 quality laws

1 · UNDER 120 WORDS

Counted. Needs more? The point is wrong

2 · ONE OBSERVATION

About THEIR firm, cited to a provenance line

3 · ONE EASY ASK

A short call, an opinion, a yes/no

4 · COLLEAGUE SUBJECT

2–5 words, lowercase-natural, never a headline

5 · PLAIN TEXT

No links, attachments, or images. Ever

6 · ZERO SPAM TELLS

No "hope this finds you well," urgency, or flattery

7 · SOUNDS LIKE YOU

Voice.md is the arbiter — editing it retrains the voice

Self-score — 3 axes, 1–5

PERSONALIZATION

Is the observation about THEM, verifiably?

VOICE MATCH

Against Voice.md samples

ASK CLARITY

One ask, answerable in one line

Any axis ≤3 → one redraft. Still ≤3 → flagged "weak — needs Andrew", never rides through on a skim. Weekly Fable audit → Voice.md proposals you ratify.

L3 · APPROVE — "GATEKEEPER"

BUILDING NOW
One human, one queue, five minutes. Outside /approve no agent can send — physics, not policy.
0sends outside session
~5 minmorning target
~15 sper verdict
48 hstaleness SLA

The morning ritual

/approveyou type it
PRE-FLIGHTmailbox · SLA · crash
REPLIESfirst, always
FOLLOW-UPSsecond
COLDlast
SCRIBEclose + commit

Each card shows

WHO + WHY NOW

Name, firm, and the trigger signal — pulled live, never cached

CITED FACTS

Verify no hallucinated personalization in ten seconds

TIER + SELF-SCORE

Low scores get scrutiny — never auto-kill

AGE + CLASS

Past-SLA items carry a staleness warning up top

Your four verdicts

SEND

→ manifest slot → script fires 09:00–16:00, all 5 gates re-run, message-id logged

EDIT

Fix inline → send. Diff logged verbatim → weekly Voice.md proposals you ratify

KILL

One-line reason required → suppress or recycle. Rising kills = fix that agent's prompt

SKIP

Stays pending, ages toward the SLA. Free — not a quiet kill

No blind bulk approve, ever. "Send the rest of tier A" expands every item on screen first, then fires one-by-one. Mini-/approve: an interested reply opens an anytime one-item session.

Session health — watch these

APPROVAL RATE

Falling → upstream drafting problem

EDIT RATE

Falling over weeks = the voice is learning

KILLS PER AGENT

The per-agent quality signal

REPLY QUEUE TIME

Must stay under 24h

L4 · SEND — "SENDER"

GATED
The only component with Gmail send capability. Fires only inside your live /approve session. No cron exists.
40/dayper-mailbox ceiling
2%bounce kill-switch
3–8 minrandom spacing
0sends outside /approve

Five gates — per message, at fire time

1 · CAN-SPAM ADDRESSFAILING

Real mailing address in the footer — zero sends until bought

2 · HUMAN OPT-OUT

"If you'd rather I not write again, just say so" — no link machinery

3 · SUPPRESSION RE-CHECK

A "no" from an hour ago stops a send approved yesterday

4 · SPF / DKIM / DMARC

Daily script check — a failing domain sends nothing that day

5 · BOUNCE <2%

Above it: all sends halt, budget lifts to re-verify

ON FAILURE

That send only → approved-unsent, failing gate named

Warm-up ramp

Mailboxes earn volume. Never raised past week 4.
WK 1
10/day
WK 2
20/day
WK 3
30/day
WK 4+
40/day

Verdicts in /approve → immutable manifest → judgment-free script drains it 09:00–16:00 recipient-local, random 3–8 min spacing, all 5 gates re-run per fire. Nothing enters the manifest outside /approve.

Never double-send

DETERMINISTIC MSG-ID

Derived from the queue id — recovery is a Gmail search, never a guess

TWO-PHASE STATUS

sending before the call · sent after — the only ambiguous window

CRASH RECOVERY

Search first: found = backfill sent · missing = retry. Ambiguity resolves to "already sent"

HARD BOUNCE

Suppressed forever + kill-switch counter + CRM back to scored

SOFT BOUNCE

One retry next session — second soft = hard

PROOF OF SEND

Message-id + thread-id + timestamp → CRM log. No thread-id = bug

L5 · REPLIES — "REPLYWATCH"

PHASE 4
Reads only active VOXA threads, read-only scope. Worst crash = a duplicate flag, never a duplicate email.
5×/daypolls, 08–20 PHX
<15 mininbound → draft
<4 hinbound → approved send
0.7confidence floor

Every reply lands in one of 7 buckets

INTERESTEDHOT

Booking negotiation starts → mini-/approve flag, stage negotiating

QUESTION

Grounded answer from audit framing — needs judgment? Flag, no draft

NOT NOW

Optional one-line ack → nurture pool, re-touch in 60–90 days

NO

Suppressed immediately + gracious one-liner — never a rebuttal

OUT-OF-OFFICE

No action — SEQUENCER clock shifts past the return date

BOUNCE

Suppression + kill-switch counter, thread closed

UNSUBSCRIBE

Suppressed + confirmation draft + CAN-SPAM audit line

BELOW 0.7?

NOT auto-handled — quoted verbatim under a needs-Andrew flag. Guessing costs more than asking

Booking — the no-link doctrine

FREE/BUSYreal calendar
2–3 SLOTStheir timezone
INVITEdrafted in-thread
MINI-/APPROVEnever waits for morning

A Calendly link is delegation of effort; a negotiated invite is service. No scheduling links at any step.

Mechanics

HIGH-WATER MARK

Advances only after full processing — crashes re-scan clean

DOUBLE-DRAFT GUARD

One queue entry per inbound message-id, ever

ORPHAN INBOUND

No thread match → needs-Andrew, never dropped

NEEDS-ANDREW RATE

Target <20%, falling as the taxonomy matures

L6 · FOLLOW-UP — "SEQUENCER"

PHASE 4
Most replies arrive on touches 2–4. Drafts only when there's something NEW to say — no new value, no touch.
4max touches, ever
23:30nightly scan
<120words per touch
60–90dnurture recycle

The touch clock

Due days jittered per thread — deterministic for re-runs, never robotically exact. All touches in-thread (Re: same subject).
TOUCH 1the cold send
TOUCH 2day 3–4 · different signal
TOUCH 3day 8–10 · insight worth reading
TOUCH 4day 15–18 · courteous close
CLOSED→ nurture pool

Banned forever

just bumping thisjust following up did you see my last emailcircling back manufactured urgency

No unused signal left → the thread closes, even with touches in budget. Logged filler-blocked — non-zero is healthy; it proves the bar has teeth.

Stop conditions — checked before every draft

REPLY ARRIVED

REPLYWATCH owns the thread — SEQUENCER never touches it again

NO / UNSUB / BOUNCE

Closed + suppressed permanently

BOOKED

Closed as won-to-pipeline

YOU MOVED THE CRM

Sequence halts — human intent outranks the clock

OUT-OF-OFFICE

Clock pauses, resumes at hold expiry

DRAFT ALREADY LIVE

A thread never holds two pending drafts

Nurture + safety

RECYCLE

Exhausted + not-nows return in 60–90d, drop to scored, must re-verify before any new sequence

SIGNALS STAY BURNED

used-in marks are forever — recycled prospects get genuinely new ammo or wait

CRASH-PROOF

Queue id = (thread, touch#) — a crash cannot produce duplicate touches

L7 · LOG — "SCRIBE"

PARTIAL — TICKERS LIVE
Not a scheduled run — the closing step of every run. The axiom: an event that isn't logged didn't happen.
100%event completeness
0hand-edited boards
1/moICP recalibration
5+runs closed daily

Closes every run

SCOUT 00:30stage events · spend
DRAFTER 02:00drafted · queued
/APPROVEverdicts · ship evidence
REPLYWATCHreplied · booked
SEQUENCERtouch positions

One event = one line, forever

- 09:41 · evt:0941-a3f2 · sent · queue:t-88f1-t2 · msg:<CAJx…> · by:/approve
- 14:02 · evt:1402-b8c1 · replied:interested · thread:<t-88f1> · by:REPLYWATCH

draftedqueuedapprovededitedkilled sentbouncedreplied:*booked

Never edited or deleted — corrections are new events. Lock-guarded writes + git auto-commit = the CAN-SPAM compliance record.

The scoreboard

REPLY RATENORTH STAR

Replies ÷ sends — the ONLY engagement metric, no open tracking by design

INTERESTED → BOOKED

The conversion that feeds the 15-streak

VERDICTS PER AGENT

Approval / edit / kill share — the quality signal

BOUNCE 7-DAY

Tracked against the 2% kill-switch

DERIVED, NEVER PRIMARY

voxa-metrics.py rebuilds it all from events — corruption costs nothing

Feedback loops — where the log pays rent

MONTHLY · ICP

Reply traits → SCORER weight proposals → /approve

WEEKLY · VOICE

Your edit diffs → Voice.md proposals — never self-applied

WEEKLY · TIMING

Reply-by-touch analysis → cadence tuning

The one unacceptable state: an unlogged send. The sent event writes BEFORE the next queue item is offered; 3 failed retries = sending halts for the session.