Add property assessor assess command

This commit is contained in:
2026-03-27 22:35:57 -05:00
parent e6d987d725
commit c58a2a43c8
6 changed files with 438 additions and 11 deletions

View File

@@ -16,8 +16,9 @@ The skill is intended to:
## Standalone helper usage
This skill now ships with a small TypeScript helper package for two tasks:
This skill now ships with a small TypeScript helper package for three tasks:
- assembling an address-first preliminary assessment payload
- locating official public-record jurisdiction from an address
- rendering a fixed-template PDF report
@@ -33,6 +34,10 @@ The wrapper script uses the skill-local Node dependencies under `node_modules/`.
## Commands
```bash
scripts/property-assessor assess --address "4141 Whiteley Dr, Corpus Christi, TX 78418"
scripts/property-assessor assess --address "4141 Whiteley Dr, Corpus Christi, TX 78418" --recipient-email "buyer@example.com"
scripts/property-assessor assess --address "4141 Whiteley Dr, Corpus Christi, TX 78418" --recipient-email "buyer@example.com" --output /tmp/property-assessment.pdf
scripts/property-assessor locate-public-records --address "4141 Whiteley Dr, Corpus Christi, TX 78418"
scripts/property-assessor locate-public-records --address "4141 Whiteley Dr, Corpus Christi, TX 78418" --parcel-id "14069438"
scripts/property-assessor locate-public-records --address "4141 Whiteley Dr, Corpus Christi, TX 78418" --listing-geo-id "233290"
@@ -45,12 +50,34 @@ scripts/property-assessor render-report --input examples/report-payload.example.
Default operating sequence:
1. Normalize the address and property type.
2. Discover accessible listing and public-record sources for the same property.
3. Build a baseline fact set.
4. Review listing photos before making condition claims.
5. Pull same-building or nearby comps.
6. Underwrite carry costs and risk factors.
7. Render the final report as a fixed-template PDF.
2. Resolve public-record jurisdiction from the address.
3. Discover accessible listing sources for the same property.
4. Build a baseline fact set.
5. Review listing photos before making condition claims.
6. Pull same-building or nearby comps.
7. Underwrite carry costs and risk factors.
8. Render the final report as a fixed-template PDF.
### `assess`
```bash
scripts/property-assessor assess --address "<street-address>"
scripts/property-assessor assess --address "<street-address>" --recipient-email "<target@example.com>"
```
Current behavior:
- starts from the address
- automatically runs public-record / appraisal-district lookup
- returns a structured preliminary report payload
- asks for recipient email(s) before PDF generation
- renders the fixed-template PDF when recipient email(s) are present
Important limitation:
- this first implementation wires the address-first assessment spine
- it does not yet auto-run listing extraction, photo review, comps, or carry underwriting inside the helper itself
- those richer assessment steps are still governed by the skill workflow and the `web-automation` extractors
## Source priority
@@ -178,6 +205,7 @@ For chat-driven runs, prefer file-based commands.
Good:
- `scripts/property-assessor assess --address "..."`
- `node check-install.js`
- `node zillow-photos.js "<url>"`
- `node har-photos.js "<url>"`
@@ -200,6 +228,7 @@ Template reference:
Current renderer:
```bash
scripts/property-assessor assess --address "<street-address>" --recipient-email "<target@example.com>"
scripts/property-assessor render-report --input "<report-payload-json>" --output "<output-pdf>"
```
@@ -271,7 +300,21 @@ npm install
npm test
```
### 2. Run public-record lookup
### 2. Run address-first assess without recipient email
```bash
cd ~/.openclaw/workspace/skills/property-assessor
scripts/property-assessor assess --address "4141 Whiteley Dr, Corpus Christi, TX 78418"
```
Expected shape:
- `needsRecipientEmails: true`
- public-record / CAD jurisdiction included in the returned payload
- no PDF generated yet
- explicit message telling the operator to ask for target recipient email(s)
### 3. Run public-record lookup directly
```bash
cd ~/.openclaw/workspace/skills/property-assessor
@@ -285,7 +328,20 @@ Expected shape:
- for Texas: Comptroller county directory link present
- for Texas: appraisal district and tax assessor/collector contacts present
### 3. Run PDF render with the sample payload
### 4. Run assess with recipient email and render the PDF
```bash
cd ~/.openclaw/workspace/skills/property-assessor
scripts/property-assessor assess --address "4141 Whiteley Dr, Corpus Christi, TX 78418" --recipient-email "buyer@example.com" --output /tmp/property-assessment.pdf
```
Expected result:
- `needsRecipientEmails: false`
- JSON success payload with `outputPath`
- a non-empty PDF written to `/tmp/property-assessment.pdf`
### 5. Run PDF render with the sample payload
```bash
cd ~/.openclaw/workspace/skills/property-assessor
@@ -297,7 +353,7 @@ Expected result:
- JSON success payload with `outputPath`
- a non-empty PDF written to `/tmp/property-assessment.pdf`
### 4. Verify the email gate
### 6. Verify the email gate
Run the renderer with a payload that omits `recipientEmails`.
@@ -306,7 +362,7 @@ Expected result:
- non-zero exit
- explicit message telling the operator to stop and ask for target recipient email(s)
### 5. Verify the end-to-end skill behavior
### 7. Verify the end-to-end skill behavior
When testing `property-assessor` itself, confirm the assessment: