diff --git a/README.md b/README.md index b050c14..b6e29c5 100644 --- a/README.md +++ b/README.md @@ -20,9 +20,10 @@ This repository contains practical OpenClaw skills and companion integrations. I | `gitea-api` | Interact with Gitea via REST API (repos, issues, PRs, releases, branches, user info). | `skills/gitea-api` | | `nordvpn-client` | Install, log in to, connect, disconnect, and verify NordVPN sessions across Linux CLI and macOS NordLynx/WireGuard backends. | `skills/nordvpn-client` | | `portainer` | Manage Portainer stacks via API (list, start/stop/restart, update, prune images). | `skills/portainer` | +| `property-assessor` | Assess a residential property from an address or listing URL with comps, carry costs, risks, and required photo review using Zillow first and HAR fallback. | `skills/property-assessor` | | `searxng` | Search through a local or self-hosted SearXNG instance for web, news, images, and more. | `skills/searxng` | | `us-cpa` | Federal individual 1040 workflow for tax questions, case intake, preparation, review, and draft e-file-ready export. | `skills/us-cpa` | -| `web-automation` | One-shot extraction plus broader browsing/scraping with Playwright-compatible CloakBrowser (auth flows, extraction, bot-protected sites). | `skills/web-automation` | +| `web-automation` | One-shot extraction plus broader browsing/scraping with Playwright-compatible CloakBrowser, including dedicated Zillow and HAR photo extractors. | `skills/web-automation` | ## Integrations diff --git a/docs/README.md b/docs/README.md index 68757c5..9a61f63 100644 --- a/docs/README.md +++ b/docs/README.md @@ -8,9 +8,10 @@ This folder contains detailed docs for each skill in this repository. - [`gitea-api`](gitea-api.md) — REST-based Gitea automation (no `tea` CLI required) - [`nordvpn-client`](nordvpn-client.md) — Cross-platform NordVPN install, login, connect, disconnect, and verification with Linux CLI and macOS NordLynx/WireGuard support - [`portainer`](portainer.md) — Portainer stack management (list, lifecycle, updates, image pruning) +- [`property-assessor`](property-assessor.md) — Residential property assessment with underwriting, risks, and required Zillow/HAR photo review workflow - [`searxng`](searxng.md) — Privacy-respecting metasearch via a local or self-hosted SearXNG instance - [`us-cpa`](us-cpa.md) — Federal individual 1040 workflow for tax questions, case intake, preparation, review, and draft e-file-ready export -- [`web-automation`](web-automation.md) — One-shot extraction plus Playwright-compatible CloakBrowser browser automation and scraping +- [`web-automation`](web-automation.md) — One-shot extraction plus Playwright-compatible CloakBrowser browser automation, scraping, and dedicated Zillow/HAR photo extraction ## Integrations diff --git a/docs/property-assessor.md b/docs/property-assessor.md new file mode 100644 index 0000000..133dd6d --- /dev/null +++ b/docs/property-assessor.md @@ -0,0 +1,84 @@ +# property-assessor + +Decision-grade residential property assessment with required photo review, comp checks, carry-cost underwriting, and explicit buy/pass guidance. + +## What this skill is for + +- Assessing a property from an address, Zillow URL, HAR URL, or other listing source +- Reconciling baseline facts across multiple listing/public sources +- Reviewing listing photos before making condition claims +- Producing a practical verdict such as `buy`, `pass`, or `only below X` + +## Core workflow + +1. Normalize the address and property type. +2. Build a baseline fact set from the best available listing or record source. +3. Cross-check facts on other sources. +4. Review photos before making condition claims. +5. Pull comps. +6. Underwrite carry costs and risk factors. +7. End with a clear verdict and fair-value guidance. + +## Required photo-review workflow + +Photo review is mandatory when a listing source exposes photos. + +Preferred source order: +1. Zillow +2. HAR +3. Realtor.com +4. Brokerage mirror or other accessible listing mirror + +Rules: +- Do not claim condition from structured text alone when listing photos are available. +- Prefer accessible all-photos views, photo grids, or scrollable photo pages over fragile next-arrow traversal. +- If the primary source fails but a fallback source exposes the photos, continue with the fallback. +- If photo review is incomplete, say so explicitly and lower confidence. + +## Zillow and HAR integration + +This skill now expects the dedicated `web-automation` extractors first. + +### Zillow + +```bash +cd ~/.openclaw/workspace/skills/web-automation/scripts +node zillow-photos.js "" +``` + +Success means: +- the Zillow all-photos page opened, or +- Zillow's rendered listing shell already exposed the full direct image set and the extracted count matches the announced count + +The returned `imageUrls` are the photo-review set. Review those images before making condition claims. + +### HAR fallback + +```bash +cd ~/.openclaw/workspace/skills/web-automation/scripts +node har-photos.js "" +``` + +Use HAR when Zillow does not expose a reliable photo set. The returned `imageUrls` are the review set for the fallback path. + +## Approval-safe command shape + +For chat-driven runs, prefer file-based commands under `~/.openclaw/workspace/skills/web-automation/scripts`. + +Good: +- `node check-install.js` +- `node zillow-photos.js ""` +- `node har-photos.js ""` + +Avoid when possible: +- `node -e "..."` +- `node --input-type=module -e "..."` + +## Output requirements + +The final assessment should explicitly include: +- `Photo source attempts: ...` +- `Photo review: completed via ` or `Photo review: not completed` + +If photo review was completed, briefly summarize the condition read from the photos. +If not, mark condition confidence as limited and explain why. diff --git a/docs/web-automation.md b/docs/web-automation.md index 5112cf1..e2c36cc 100644 --- a/docs/web-automation.md +++ b/docs/web-automation.md @@ -15,6 +15,7 @@ Automated web browsing and scraping using Playwright-compatible CloakBrowser, wi - Use `node skills/web-automation/scripts/extract.js ""` for one-shot extraction from a single URL - Use `npx tsx scrape.ts ...` for markdown scraping modes - Use `npx tsx browse.ts ...`, `auth.ts`, or `flow.ts` for interactive or authenticated flows +- Use `node skills/web-automation/scripts/zillow-photos.js ""` or `har-photos.js` for real-estate photo extraction before attempting generic gallery automation ## Requirements @@ -59,6 +60,17 @@ pnpm rebuild better-sqlite3 esbuild Without this, helper scripts may fail before launch because the native bindings are missing. +## Prerequisite check + +Before running automation, verify the local install and CloakBrowser wiring: + +```bash +cd ~/.openclaw/workspace/skills/web-automation/scripts +node check-install.js +``` + +If this fails, stop and fix setup before troubleshooting site automation. + ## Exec approvals allowlist If OpenClaw keeps prompting for approval when running this skill, add a local allowlist for the main agent: @@ -80,13 +92,24 @@ Notes: - If `node` lives somewhere else, replace `/opt/homebrew/bin/node` with the output of `which node`. - If matching is inconsistent, replace `~/.openclaw/...` with the full absolute path for the machine. - Keep the allowlist scoped to the main agent unless there is a clear reason to widen it. +- Prefer file-based commands like `node check-install.js`, `node zillow-photos.js ...`, and `node har-photos.js ...` over inline `node -e ...`. Inline interpreter eval is more likely to trigger approval friction. ## Common commands ```bash +# Install / wiring check +cd ~/.openclaw/workspace/skills/web-automation/scripts +node check-install.js + # One-shot JSON extraction node skills/web-automation/scripts/extract.js "https://example.com" +# Zillow photo extraction +node skills/web-automation/scripts/zillow-photos.js "https://www.zillow.com/homedetails/..." + +# HAR photo extraction +node skills/web-automation/scripts/har-photos.js "https://www.har.com/homedetail/..." + # Browse a page with persistent profile npx tsx browse.ts --url "https://example.com" @@ -100,6 +123,58 @@ npx tsx auth.ts --url "https://example.com/login" npx tsx flow.ts --instruction 'go to https://search.fiorinis.com then type "pippo" then press enter then wait 2s' ``` +## Real-estate photo extraction + +Use the dedicated Zillow and HAR extractors before trying a free-form gallery flow. + +### Zillow + +```bash +cd ~/.openclaw/workspace/skills/web-automation/scripts +node zillow-photos.js "https://www.zillow.com/homedetails/4141-Whiteley-Dr-Corpus-Christi-TX-78418/2103723704_zpid/" +``` + +What it does: +- opens the listing page with CloakBrowser +- tries the `See all photos` / `See all X photos` entry point +- if Zillow keeps the click path flaky, falls back to the listing's embedded `__NEXT_DATA__` payload +- returns direct `photos.zillowstatic.com` image URLs as JSON + +Expected success shape: +- `complete: true` +- `expectedPhotoCount` matches `photoCount` +- `imageUrls` contains the listing photo set + +### HAR + +```bash +cd ~/.openclaw/workspace/skills/web-automation/scripts +node har-photos.js "https://www.har.com/homedetail/4141-whiteley-dr-corpus-christi-tx-78418/14069438" +``` + +What it does: +- opens the HAR listing page +- clicks `Show all photos` / `View all photos` +- extracts the direct `pics.harstatic.com` image URLs from the all-photos page + +Expected success shape: +- `complete: true` +- `expectedPhotoCount` matches `photoCount` +- `imageUrls` contains the listing photo set + +### Test commands + +From `skills/web-automation/scripts`: + +```bash +node check-install.js +npm run test:photos +node zillow-photos.js "" +node har-photos.js "" +``` + +Use the live Zillow and HAR URLs above for a known-good regression check. + ## One-shot extraction (`extract.js`) Use `extract.js` when the task is just: open one URL, render it, and return structured content.