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.
|
||||
|
||||
## 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
|
||||
|
||||
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"`
|
||||
- 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
|
||||
|
||||
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