diff --git a/docs/web-automation.md b/docs/web-automation.md index d56dac0..5112cf1 100644 --- a/docs/web-automation.md +++ b/docs/web-automation.md @@ -59,6 +59,28 @@ pnpm rebuild better-sqlite3 esbuild Without this, helper scripts may fail before launch because the native bindings are missing. +## Exec approvals allowlist + +If OpenClaw keeps prompting for approval when running this skill, add a local allowlist for the main agent: + +```bash +openclaw approvals allowlist add --agent main "/opt/homebrew/bin/node" +openclaw approvals allowlist add --agent main "/usr/bin/env" +openclaw approvals allowlist add --agent main "~/.openclaw/workspace/skills/web-automation/scripts/*.js" +openclaw approvals allowlist add --agent main "~/.openclaw/workspace/skills/web-automation/scripts/node_modules/.bin/*" +``` + +Verify with: + +```bash +openclaw approvals get +``` + +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. + ## Common commands ```bash diff --git a/skills/property-assessor/SKILL.md b/skills/property-assessor/SKILL.md new file mode 100644 index 0000000..000ffaf --- /dev/null +++ b/skills/property-assessor/SKILL.md @@ -0,0 +1,91 @@ +--- +name: property-assessor +description: Assess a real property from an address or listing URL and produce a decision-grade summary. Use when a user wants fair value, comps, rental or STR viability, carry-cost review, HOA or insurance risk analysis, or offer guidance for a condo, house, townhouse, or similar residential property. Prefer when the task should discover and reconcile multiple listing sources from a street address first, then give a buy/pass/only-below-X verdict. +--- + +# Property Assessor + +Start from the property address when possible. Treat listing URLs as supporting evidence, not the only source of truth. + +## Inputs + +Accept any of: +- a street address +- one or more listing URLs +- an address plus user constraints such as investment only, owner-occupant, long-term rental, STR, or distance to a target location + +## Core workflow + +1. Normalize the address and property type. +2. Discover accessible listing or public-record sources for the same property. +3. Establish a baseline fact set from the best available source. +4. Cross-check the same property on other sites. +5. Pull same-building comps for condos or nearby comps for houses/townhomes. +6. Underwrite carrying cost with taxes, HOA, insurance, and realistic friction. +7. Flag risk drivers before giving a verdict. +8. End with a specific recommendation: `buy`, `pass`, or `only below X`. + +## Source order + +Prefer this order unless the user says otherwise: +1. Zillow +2. Redfin +3. Realtor.com +4. HAR / Homes.com / brokerage mirror pages +5. county or appraisal pages + +Use the `web-automation` skill for rendered pages and anti-bot-heavy sites. +Use `web_search` sparingly to discover alternate URLs, then return to `web-automation` for extraction. + +## Minimum data to capture + +For the target property, capture when available: +- address +- ask price or last known list price +- property type +- beds / baths +- sqft +- lot size if relevant +- year built +- HOA fee and included services +- taxes +- days on market +- price history +- parking +- waterfront / flood clues +- subdivision / building name when applicable +- same-building or nearby active inventory + +## Underwriting rules + +Always show a simple carrying-cost view with at least: +- principal and interest if available from the listing +- taxes per month +- HOA per month if applicable +- insurance estimate or note uncertainty +- realistic effective carry range after maintenance, vacancy, and property-specific risk + +Treat these as strong caution flags: +- high HOA relative to price or expected rent +- older waterfront or coastal exposure +- unknown reserve / assessment history for condos +- many active units in the same building or micro-area +- stale days on market with weak price action +- no clear rent support + +## Output format + +Keep the answer concise but decision-grade: + +1. Snapshot +2. What I like +3. What I do not like +4. Comp view +5. Underwriting / carry view +6. Risks and diligence items +7. Verdict with fair value range and offer guidance + +## Reuse notes + +When condos are involved, same-building comps and HOA economics usually matter more than neighborhood averages. +For detailed heuristics and the reusable memo template, read `references/underwriting-rules.md`. diff --git a/skills/property-assessor/references/underwriting-rules.md b/skills/property-assessor/references/underwriting-rules.md new file mode 100644 index 0000000..b9ef113 --- /dev/null +++ b/skills/property-assessor/references/underwriting-rules.md @@ -0,0 +1,88 @@ +# Property Assessor Underwriting Rules + +## Goal + +Turn messy property data into a fast investor or buyer decision without pretending precision where the data is weak. + +## Practical heuristics + +### 1. Use the most comparable comp set first +- For condos: same-building active and sold comps first. +- For houses or townhomes: same subdivision or immediate micro-area first. +- Expand outward only when the close comp set is thin. + +### 2. Fixed carrying costs can kill a deal +High HOA, insurance, taxes, or unusual maintenance burden can make a property unattractive even when price-per-sqft looks cheap. + +### 3. Waterfront, coastal, older, or unusual properties deserve extra skepticism +Assume elevated insurance, maintenance, and assessment risk until proven otherwise. + +### 4. DOM and price cuts are negotiation signals, not automatic value +Long market time helps the buyer, but a stale listing can still be a mediocre deal if the economics are weak. + +### 5. Unknowns must stay visible +If reserve studies, bylaws, STR rules, assessment history, lease restrictions, or condition details are missing, list them explicitly as unresolved diligence items. + +## Minimum comp stack + +For each property, aim to collect: +- target listing facts +- same-building or same-micro-area active listings +- sold listings if available +- nearby similar properties +- rent or lease signals when investment analysis matters + +## Carry framework + +At minimum, estimate: +- P&I +- taxes monthly +- HOA monthly if applicable +- insurance assumption or uncertainty note +- effective carry range after maintenance / vacancy / property friction + +If the listing already provides an estimated payment, use it as the starting point, then explain what it leaves out. + +## STR / rental notes + +Never assume STR viability from location alone. Confirm or explicitly mark as unknown: +- HOA restrictions +- minimum stay rules +- city or building constraints +- whether the micro-location is truly tourist-driven or just adjacent to something attractive + +## Verdict language + +Use one of these: +- `Buy` — pricing and risk support action now +- `Pass` — weak economics or too much unresolved risk +- `Only below X` — decent candidate only if bought at a materially lower basis + +## Suggested memo template + +### Snapshot +- Address +- Source links checked +- Price / type / beds / baths / sqft / HOA / taxes / DOM + +### Market read +- Same-building or same-area active inventory +- Nearby active comps +- Any sold signals + +### Economics +- Base carry +- Effective carry range +- Rent / STR comments when relevant + +### Risk flags +- HOA or fixed-cost burden +- insurance / waterfront / age +- reserves / assessments / restrictions if relevant +- liquidity / DOM + +### Recommendation +- Fair value range +- Opening offer +- Ceiling offer +- Final verdict diff --git a/skills/web-automation/SKILL.md b/skills/web-automation/SKILL.md index 38e0c02..2df5e84 100644 --- a/skills/web-automation/SKILL.md +++ b/skills/web-automation/SKILL.md @@ -72,6 +72,28 @@ pnpm rebuild better-sqlite3 esbuild - Authenticate: `npx tsx auth.ts --url "https://example.com/login"` - Natural-language flow: `npx tsx flow.ts --instruction 'go to https://example.com then click on "Login" then type "user@example.com" in #email then press enter'` +## OpenClaw Exec Approvals / Allowlist + +If OpenClaw prompts for exec approval every time this skill runs, add a local approvals allowlist for the main agent before retrying. This is especially helpful for repeated `extract.js`, `browse.ts`, and other CloakBrowser-backed scrapes. + +```bash +openclaw approvals allowlist add --agent main "/opt/homebrew/bin/node" +openclaw approvals allowlist add --agent main "/usr/bin/env" +openclaw approvals allowlist add --agent main "~/.openclaw/workspace/skills/web-automation/scripts/*.js" +openclaw approvals allowlist add --agent main "~/.openclaw/workspace/skills/web-automation/scripts/node_modules/.bin/*" +``` + +Then verify: + +```bash +openclaw approvals get +``` + +Notes: +- If `node` lives somewhere else on the host, replace `/opt/homebrew/bin/node` with the output of `which node`. +- If matching problems persist, replace `~/.openclaw/...` with the full absolute path such as `/Users//.openclaw/...`. +- Keep the allowlist scoped to the main agent unless there is a real reason to broaden it. + ## One-shot extraction Use `extract.js` when you need a single page fetch with JavaScript rendering and lightweight anti-bot shaping, but not a full automation session.