---
reliability: 2.7 # 8 stages: 3× image-gen (−.9) + i2v walkthrough (−.6) + music (−.2), 3 stages beyond 5 (−.6); ffmpeg/copy deterministic; no E2E showcase yet
---

# Real-estate listing — agent playbook

> Paste this whole file (with the BRIEF filled in) into Claude cowork, chat, or Code. The agent walks through it with you and stops for your approval at every step that matters.

## What you'll get

A full listing package for one property, ready to push to the MLS and your social feeds:

- **8 staged interior photos** — empty rooms get virtually staged with on-budget furniture and props. Identical lighting and lens across every room.
- **1 exterior hero shot** — golden-hour curb appeal, the listing thumbnail.
- **MLS-ready description** — 220-word listing copy with the right keywords, no clichés.
- **30-second walkthrough video** — slow cinematic motion across the hero rooms with a soft music bed.
- **1-page open-house flyer** — printable PDF with photo grid + property card + your name and contact.
- **Social tease pack** — 3 IG square posts, 1 TikTok story carousel, captions included.

**Time**: ~25 minutes wall clock. **Your attention**: about 6 minutes across 6 quick approvals. **Cost**: $1.80 – $3.80 end to end.

## Tell the agent about the property

```yaml
property_address:   # e.g. 1847 Buena Vista Ave, Oakland CA 94606
property_type:      # single-family / condo / townhouse / loft
bedrooms:           # e.g. 3
bathrooms:          # e.g. 2.5
square_feet:        # e.g. 1840
list_price:         # e.g. $1,295,000
neighborhood:       # e.g. Adams Point — walkable, leafy, near Lake Merritt
hero_room:          # the room that sells the house — e.g. open-plan kitchen with bay window
agent_name:         # your name + contact — e.g. Jane Cho, Compass, jane@compass.com
```

## Quality controls (new — auto-applied)

This playbook leverages the closed quality loop. The agent applies these by default; you don't have to ask:

- **Cost upfront.** Before any multi-step batch fires, the agent calls `submit_plan` with `confirm:false` and shows you the proposed steps + total cost. Nothing runs until you approve.
- **Auto-retry on weak shots.** The server default is `quality_threshold: 0.7`. For the exterior hero and the hero room interior the playbook step tells the agent to pass `quality_threshold: 0.85` so a low-confidence first try gets one auto-retry before you see it.
- **Critic verdict on the result.** When the 8-photo interior batch finishes, the agent reads the `critique` field on the response (verdict: ship / iterate, plus issues / missing items) and surfaces it for your review.
- **One-click recovery.** If a step fails, `get_plan` returns a `recovery` hint pointing at `replan({plan_id})` — the agent classifies the failure and proposes a recovery plan you can approve.
- **End-of-project scorecard.** The final wrap-up calls `get_scorecard({project_id})` with succeeded count, mean quality score, critic verdict, total cost, and wall time.

You can override any of these per step.

## How this works

Six gates. At each one the agent shows you the photos or copy and asks one question. You answer in one word or one short phrase. The agent only spends money on steps you've already approved.

## How the agent should run this (interaction contract)

1. **CONFIRM (one message, ≤1 question):** restate the brief in 1 line ("8 staged interiors + exterior hero + 30s walkthrough for {address}, ~$2–4, ~25 min") + 2–3 real choices: staging style (mid-century / coastal / minimal), walkthrough video yes/no, social pack yes/no. If the BRIEF is filled, state assumptions and start — don't re-ask what's written.
2. **PREVIEW CHECKPOINT:** the 2 brand-kit reference shots (Step 1, ~$0.05) ARE the preview — show them and invite a redirect before the $0.80 interior batch or any video money. The user's first sight of the look must not be the batch.
3. **NARRATE:** every `create_media` returns a job_id — poll `get_create_media` every 8–15s and post one line per step ("interiors 3/8 done, ~2 min left"). Video steps run 2–5 min; say so when they fire. Never silent >2 min.
4. **FAIL GRACEFULLY:** interiors: flux-dev fail → 1 retry → seedream-5-lite. Walkthrough: seedance-i2v hang/422 → ltx-q-i2v (`resolution:"auto"`, `num_frames:169, frames_per_second:24` ≈7s) → Ken-Burns stills last. Music fail → ship the video silent + note. One line per failure (WHAT / WHY — fal latency or content filter / fallback used); ≤2 retries per asset; a 7-photo package beats no package.
5. **DELIVER:** the URL block + one honest quality note ("furniture is AI-staged — disclose 'virtually staged' per your MLS rules") + ONE next step ("upload the 9 photos to the MLS, exterior first").

**De-engineered happy path:** Steps 0–4 are the core listing package. Step 5 (video) and Step 6 (flyer + social) are **OPTIONAL** — confirm appetite at CONFIRM, not after rendering.

## The steps

### Step 0 — Confirm the brief

The agent reads back the BRIEF — address, beds/baths/sqft, price, neighborhood — so you spot typos before any photo gets staged.

**STOP**: "Brief looks right? (approve / edit [field] [new value])"

### Step 1 — Lock the listing look (~30s, ~$0.05)

The agent builds a brand kit from a real-estate-photography palette: warm neutrals, soft daylight, photoreal interior lens. It infers voice keywords ("light-filled", "move-in ready", "thoughtfully renovated") from your hero_room description and renders 2 reference shots in this look.

This locks the lighting and lens character so every room afterward looks like it was shot in the same hour by the same photographer.

**STOP**: "Approve the listing look, or refine? (approve / refine [direction])"

### Step 2 — Exterior hero (~1 min, ~$0.20)

Golden-hour curb-appeal shot of the property type — front elevation, soft warm sky, mature landscaping, no people, no cars in the driveway. Square format for thumbnail use.

> **For the agent**: pass `quality_threshold: 0.85` on this shot — this is the MLS thumbnail and the most-clicked image in the listing. Auto-retry will fire once on any try Gemini Vision grades below 0.85.

**STOP**: "Approve the exterior, or refine? (approve / refine [direction])"

### Step 3 — Eight staged interior photos (~5 min, ~$0.80)

The agent stages 8 interior rooms in the listing look. For empty-room shots, it uses the place-the-furniture move — same lens, same lighting, drops in tasteful mid-century-modern staging that reads "lived in, not cluttered". Rooms covered: hero room (2 angles), living room, primary bedroom, primary bath, kitchen, dining area, secondary bedroom.

> **For the agent**: for the hero room, pass `quality_threshold: 0.85` — it's the second-most-clicked image after the exterior. The other 6 can run on default 0.7.

> **Critic verdict** — the 8-photo batch returns a `critique` field. If verdict=iterate, surface the per-room issues before the user approves so they can target a re-stage at the weakest room only.

**STOP**: "Which rooms to keep? (keep all / redo [room] [direction])"

If you say redo, only that room runs again with your refinement.

### Step 4 — Listing copy (~30s, ~$0.02)

The agent writes 220-word MLS-ready listing copy. No "must see!" or "won't last!" — modern listings read like a confident product description. Pulls in the right keywords for the neighborhood, mentions sqft + beds/baths + the hero room feature, ends with an open-house line.

**STOP**: "Copy approved, or refine? (approve / refine [tone / detail])"

### Step 5 — 30-second walkthrough video (one approval gate)

Before step 5, the agent calls `submit_plan` with steps {animate × 4 hero rooms (`seedance-i2v`, `resolution:"auto"`), `ffmpeg-concat`, `music` (`lyrics_prompt:"[Instrumental]"`), `ffmpeg-mux` (`audio_fill:"loop"`), `ffmpeg-export` × 2 (landscape + vertical)} and shows the total cost (~$0.60 typical). You approve once for the whole video pipeline.

Each hero room becomes a 7-second slow cinematic drift via `seedance-i2v` (`resolution:"auto"`) — gentle parallax across the room, soft light bloom, no people. The four together are 28 seconds. Then the agent stitches them (`ffmpeg-concat`), lays a soft instrumental bed under the **full** 28s via `ffmpeg-mux` with `audio_fill:"loop"` (so the music never cuts out before the last room), and exports two cuts:

- **Landscape MP4** — 16:9 for Zillow / Realtor.com / YouTube
- **Vertical MP4** — 9:16 for IG Reels and TikTok

**STOP** (only one, before the batch fires): "Approve the video pipeline at ~$0.60? (approve / skip video)"

### Step 6 — Open-house flyer + social pack (OPTIONAL, ~2 min, ~$0.10)

A 1-page printable PDF flyer: exterior thumbnail at top, 4 interior thumbnails in a grid, property card (beds, baths, sqft, price), neighborhood blurb, your name and contact info. Brand-colored from the listing look.

Plus a social pack:
- **3 IG square posts** — exterior + 2 interior favorites with captions
- **1 TikTok story carousel** — 5 frames cut from the walkthrough video, vertical

Saved to `public/launches/{property-slug}-flyer.pdf` and `public/launches/{property-slug}-social.html`.

**STOP**: "Approve the flyer + social pack? (approve / refine [which one] [direction])"

### Final step — scorecard wrap-up

After all deliverables ship, call:

```
get_scorecard({ project_id: "{the project id from earlier steps}" })
```

The response is a one-page report card:

```
Scorecard for cjob_xxx
{N}/{N} scenes shipped — critic: SHIP (or ITERATE)
Title: <property address>
Steps: N/N succeeded (100%)
Quality: mean X.XX · M/N passed · K retries
Critic: SHIP/ITERATE
Cost: $X.XX actual (est $Y.YY) · Ts wall time
Viewer: <project URL>
```

Paste the scorecard into your transaction channel so your TC and broker see the actual quality numbers, not vibes.

## When you're done

The agent prints:

```
✅ Open-house flyer (PDF): public/launches/{property-slug}-flyer.pdf
✅ Social pack page: public/launches/{property-slug}-social.html
✅ Walkthrough landscape (16:9): <URL>
✅ Walkthrough vertical (9:16): <URL>
✅ Exterior hero: <URL>
✅ Interior photos (8): <viewer URL>
✅ Listing copy: <copy block>

Total spent: $X.XX
Total wall-clock: MM:SS
```

## What can disappoint (cap ceilings)

- **Virtual staging is generative, not compliant-by-default.** AI furniture can hallucinate fixtures or alter finishes; most MLS regions require a "virtually staged" disclosure and some prohibit altering structural features. The agent can't verify your local rules — you must.
- **The exterior hero renders the property *type*, not your actual house.** Without a real photo passed as `source_url` for an edit, it will not match the listing. Use a real exterior photo if accuracy matters (it does).
- **Text in images can't be trusted** — house numbers, yard signs, street names garble. All flyer text lives in the HTML/PDF layer, never baked into renders.
- **i2v drift:** the walkthrough's slow camera drift can warp straight lines (door frames, counters) — architecture is the hardest i2v subject. Expect ~1 in 4 clips to need a re-roll.
- **The music bed is a generic instrumental** — don't expect licensed-track feel.

## What to do next

1. **Upload the 9 photos to the MLS** — exterior first, hero-room interior second. Sort order matters for click-through.
2. **Push the walkthrough landscape cut to Zillow / Realtor.com** as the listing video.
3. **Schedule the social pack** — IG posts to your IG, TikTok story to your office account. Storyboard's Publora integration can schedule them for you if you ask.
4. **Print the flyer** — flat-tab kinkos run, 50 copies in color is ~$15. Stack at the open house.
5. **Save the brief** — when you list the next house in the same neighborhood, re-use the listing look. Just change the address + hero_room.
