HomeZero · build plan · 2026-06-22

Nail the beginning.

One person signs up in Paonia. One advisor is born for them — no team, no specialists. It quietly goes and zeroes homes, and the buyer watches them appear on their board over the next ten or twenty minutes. They install the extension, zero a home themselves, and the advisor writes them a personalized punch list on it. The advisor tends the board from there. That whole loop, closed and proven once, live — that's the beginning.

scope · advisor-only market — agent · home — agent · LATER test market · Paonia 81428
01 / THE LOOP

The whole thing is one loop

Seven steps, one real buyer. The point of this plan is to close every seam and walk a stranger through it end-to-end. Each step is tagged for where it actually stands today.

1
Onboarding → a user + their answersThe wizard runs anonymously; account at Finish. Budget, what they care about, their yearnings — captured.
solid
2
Birth one advisor, seeded by those answersThe advisor wakes already knowing this buyer — single-level, low-maintenance, water rights, whatever they said.
the gate
3
The advisor zeroes homes in the backgroundIt goes out and finds 5–6 Paonia homes — the same "zero" action the human will use. Takes ~10–20 min.
half-built
4
Homes appear live on the buyer's boardThey're sitting on their kanban watching cards pop in — each marked zeroed by your advisor. This is the magic.
half-built
5
Buyer gets the extension, zeroes a homeOn a Zillow listing, they hit the ring. It lands on their board instantly, marked zeroed by you.
capture works
6
Each zero = a personalized punch listThe advisor reads the listing through this buyer's answers and writes 3–5 flags. One flag teases back onto the Zillow page.
to build
7
The advisor tends — reacts, re-sorts, asksOn a heartbeat it digests taps and moves, re-sorts the board, and asks the next good question.
no clock yet
solid — works today half-built — parts exist, unproven live gap — to build or fix
02 / GROUND TRUTH

Where we actually are — from the live data

Not from memory. From the live deployment (nautical-rabbit-780), the fleet, and the bridge logs, today.

The funnel has fired and birthed nobody — twice

Two real wizard completions on Jun 20 (Paonia, real answers). Both rang the doorbell, the bridge accepted both and submitted a birth job — and no advisor was born. The intakes still read status: new, advisorCell: empty.

intake hook …318n: waking zero-mother to birth the team intake …318n: team-birth job 01KVKT6… submitted to zero-mother intake hook …318n: team-birth job submitted (poll buyers.advisorCell) └─ …and nothing. The bridge fire-and-forgets; the failure is invisible.

The same path did birth "Josh" on Jun 17 (identical log lines, born 8 min later). So the live birth isn't unbuilt — it's flaky, and the failures are silent. That silence is the real enemy: an intake can rot forever and no one notices.

What this means for the four things you asked about:

03 / WHAT IT LOOKS LIKE

The three surfaces

In the real HomeZero design language. These are the things this plan builds toward.

the board, filling itself — step 3–4 · provenance on every card
Brought to youby your advisor
229 Colorado Ave
$419k
✦ zeroed by your advisor
512 Grand Mesa Dr
$365k
✦ zeroed by your advisor
14 Lamborn Mesa Rd
$498k
✦ zeroed by your advisor
Worth seeing
301 Onarga Ave
$329k
✦ zeroed by your advisor
your advisor is finding homes…
You zeroed
77 Pan American Ave
$452k
○ zeroed by you
a board card, opened — the personalized punch list · step 6
✦ zeroed by your advisor
$419k · 3 bd · 1,540 sqft
229 Colorado Ave
  • ✓Single-level — your no-stairs ask
  • ✓2 irrigation shares conveyyou flagged water rights
  • ⚠Septic, not sewer — inspect
  • ⚠Roof looks ~20 yrs — budget ityou wanted low-maintenance
  • ?No garage — dealbreaker for you?
open the full mini-brief →
the read-only window, back on Zillow — step 5–6 · one flag teases
$419,000
229 Colorado Ave, Paonia, CO 81428 · 3 bd · 2 ba · 1,540 sqft
◎ ZeroedShareSave
✦ your advisor's take
All on one level — your no-stairs ask. But septic, not sewer — worth an inspection.
4 more notes on your board →
04 / THE PUNCH LIST

Three phases. Each ends in a live proof.

The spine is fix the birth → make a zero land + the advisor react → put a window on Zillow. Phase 1 is the gate; nothing downstream matters until a stranger's signup reliably births an advisor.

PHASE 1 · THE GATE

The live funnel births one advisor — reliably and visibly

Two delivered doorbells, zero advisors. Fix the silence first.

1a ✓Diagnosed — root cause found & fixed (Jun 22)

Not the birth logic — a dead credential. The proxy's Anthropic Max token expired (~Jun 19) and its refresh token went invalid (400 invalid_grant). zero-mother runs on the claude-code/Max harness, so every birth since hung on the first model turn (0-byte out.jsonl, idle, watchdog SIGKILL). codex-based cells were unaffected — why nothing else looked broken.

Cells-team framework bug, shipped (PR #35, deployed): the proxy's refresh manager only treated HTTP 401 as "revoked"; Anthropic returns 400 invalid_grant, which fell through to a silent retry — no flag, needs_login:false. Fixed: detect by error code regardless of status; /_proxy/health now reports needs_login:true + degraded:true on a failed refresh; the flag auto-clears on the next healthy refresh.

recovery: cells pi → /login (re-auths the Max token; proxy picks it up within its 5-min tick) → re-fire intakes jx711zkrx6… · jx7dtzwehe9…
this validates 1c — a silent credential death blacked out births for 2.5 days with zero signal. The app-side reconcile/surface loop is still ours to build.
1bMake the live birth advisor-only

The live path still births a "team." Strip zero-mother's cell-resident zero-birth skill to advisor-only, remove specialist reasoning, and commit it to git (today it's lost on any cell refresh). The bridge stops saying "team." Fewer steps = far less to fail.

zero-mother: ~/.claude/skills/zero-birth/SKILL.md (un-git'd!) · bridge/src/http.ts, index.ts (rename + advisor-only)
proof one cells birth test → advisor only, no roster rows
1cClose the feedback loop — kill silent failure

A watcher detects "doorbell delivered + job submitted, but advisorCell still empty after N minutes" → retry once, then surface it. The intake shows birthing / failed on /home instead of rotting at new. This is the real bug.

convex/intakes.ts (status: birthing|born|failed) · convex/doorbell.ts · a scheduled reconcile fn · /home surfaces the state
proof kill a birth mid-flight → it retries, then shows failed; no silent rot
1dSeed the advisor with the onboarding answers

Verify the birth actually passes the intake answers into the advisor's seed (BUYER.md / advisor.db / memory) and that its first zeroes reflect them. The advisor must wake already knowing this buyer.

cells/advisor/self-config.md · skills/scout/SKILL.md (read yearnings → bias the scout)
proof a "water rights" buyer's first board leans water; a "single-level" buyer's leans single-level
1eProve it

Three real wizard runs → three advisors born, untouched, each with a first board that reflects that buyer's answers.

milestone a stranger can sign up and get a living advisor with zero hand-holding
PHASE 2 · THE LOOP

A zero lands on the board, and the advisor reacts

Provenance, the punch list, and a clock for the advisor.

2aProvenance + punch-list data model

Add zeroedBy: "advisor" | "buyer" and punchList: [{ tag: good|watch|question, text, tiedTo? }] to the board card. tiedTo links a flag back to an onboarding answer (that's the "for you" line).

convex/schema.ts · convex/validators.ts · convex/board.ts (authorHomeCard extends)
2bInstant inbox card on a human zero

/api/star creates the board card immediately (provenance buyer, state "your advisor is looking…") so the home shows on the kanban the instant it's zeroed. The punch list fills in after the advisor's pass. Instant fill, advisor reconciles over it.

app/api/star · convex/board.ts (createInboxCard)
2cThe mini-brief skill

The advisor authors the personalized punch list — 3–5 flags read off the Zillow listing through this buyer's yearnings — for both its own zeroes (scout) and human zeroes. Writes via the extended authorHomeCard.

cells/advisor/skills/scout/SKILL.md + skills/tend/SKILL.md (emit punchList + zeroedBy)
proof a zeroed home shows 3–5 flags, at least one tied to an onboarding answer
2dGive the advisor a clock

Merge feature/advisor-tend-loop and wire the advisor's HEARTBEAT.md to the live zero-pulse. The 30-min backstop pass: place inbox homes, digest taps/moves, re-sort, ask the next question.

cells/advisor/HEARTBEAT.md ↔ zero-pulse · convex/board.ts (tendDigest, markTended — confirm deployed)
proof leave it 30 min → the board visibly re-sorts and a new question appears
2eProvenance + filling UX on the web board

"✦ zeroed by your advisor" vs "○ zeroed by you" on every card; the empty→filling state ("your advisor is finding homes…") while it spins up.

app/(app)/board/page.tsx · the card component + column empties
2fProve the round trip

Zero a home on Zillow → instant card → the advisor's punch list lands → move it / answer its question → the advisor digests on the next pass.

milestone the loop is closed — capture, react, respond, re-sort
2gFast-follow: reactive doorbell

A zero or an answer wakes the advisor now instead of waiting up to 30 min. The backstop already catches it; this just makes it feel instant.

convex → bridge event → cells run the advisor's tend pass
PHASE 3 · THE WINDOW

The read-only window on the Zillow listing

Your pick: a window onto the board card, under each listing. One-way; actions stay on the web board.

3aBoard-card read endpoint by zpid

Return this buyer's card for a zpid: provenance, the top punch-list flag, stage, and a deep link. Covered-Paonia homes can return the market take instantly even before the advisor's personalized pass.

app/api/listing-card (or extend /api/listing-summary) · convex/board.ts (cardForZpid)
3bThe shadow-DOM window

Inject the card under the listing in the content script: the top flag, provenance, "open your board →". Market take shows instantly; the advisor's personalized flag swaps in after its pass. Silent + graceful if signed out or uncovered.

extension/entrypoints/zillow.content.ts (new window surface) · background worker (board fetch)
3cProve it

On a zeroed Paonia listing, the window mirrors the web board's top flag for that home.

milestone the advisor's voice reaches back onto Zillow — the growth-loop seed
05 / LOCKED

Decisions locked this round

advisor-onlypunch-list mini-briefprovenance first-class instant fillbackstop → reactiveread-only Zillow window
06 / WATCH

Risks & the one thing still open