feat: add property assessor skill and web automation approvals docs
This commit is contained in:
@@ -59,6 +59,28 @@ pnpm rebuild better-sqlite3 esbuild
|
|||||||
|
|
||||||
Without this, helper scripts may fail before launch because the native bindings are missing.
|
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
|
## Common commands
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
91
skills/property-assessor/SKILL.md
Normal file
91
skills/property-assessor/SKILL.md
Normal file
@@ -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`.
|
||||||
88
skills/property-assessor/references/underwriting-rules.md
Normal file
88
skills/property-assessor/references/underwriting-rules.md
Normal file
@@ -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
|
||||||
@@ -72,6 +72,28 @@ pnpm rebuild better-sqlite3 esbuild
|
|||||||
- Authenticate: `npx tsx auth.ts --url "https://example.com/login"`
|
- 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'`
|
- 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/<user>/.openclaw/...`.
|
||||||
|
- Keep the allowlist scoped to the main agent unless there is a real reason to broaden it.
|
||||||
|
|
||||||
## One-shot extraction
|
## 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.
|
Use `extract.js` when you need a single page fetch with JavaScript rendering and lightweight anti-bot shaping, but not a full automation session.
|
||||||
|
|||||||
Reference in New Issue
Block a user