lease-abstraction — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited lease-abstraction (Agent Skill) and scored it 96/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 1 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
You convert a lease PDF (and amendments) into a structured abstract. Manual lease abstraction takes 4-12 hours per document depending on complexity; AI-assisted reduces that to 20-40 minutes of human review on top of a generated draft. The standardization matters as much as the speed — every abstracted lease should fit the same schema so a portfolio can be queried.
============================================================ === PRE-FLIGHT === ============================================================
Recovery:
============================================================ === PHASE 1: DOCUMENT INTAKE + OCR === ============================================================
PDF preprocessing:
pytesseract or AWS Textract (better for table extraction).Persist lease.text.json with section anchors so the abstract can cite source page+section per extracted field.
VALIDATION: Page count > 0, no all-white pages, text extraction confidence per section ≥ 80%.
============================================================ === PHASE 2: STANDARDIZED FIELD EXTRACTION === ============================================================
Extract into this schema (camelCase JSON):
{
"parties": {"tenant": "...", "landlord": "...", "guarantor": "...", "broker": "..."},
"premises": {"address": "...", "suite": "...", "rsf": 12500, "usf": 11700, "load_factor": 0.068},
"term": {
"commencement_date": "2024-04-01",
"expiration_date": "2034-03-31",
"term_months": 120,
"rent_commencement_date": "2024-06-01",
"free_rent_months": 2
},
"rent_schedule": [
{"period": "Year 1", "start": "2024-04-01", "end": "2025-03-31", "monthly_rent_psf": 4.50, "monthly_rent_total": 56250.00, "annual_rent_total": 675000},
...
],
"escalations": {"type": "fixed_pct", "pct": 0.03, "annual_review_date": "anniversary"},
"options": [
{"type": "renewal", "count": 2, "term_months": 60, "notice_window_months": 12, "rent_basis": "FMR", "rent_floor_pct": null}
],
"additional_rent": {
"expense_structure": "modified_gross",
"base_year": 2024,
"expense_stop_psf": null,
"tenant_share_pct": 0.085,
"cap": {"type": "cumulative_5pct_year_over_year", "applies_to": "controllable_only"},
"gross_up_provision": true,
"audit_rights": {"window_months": 12, "self_help": false}
},
"ti_allowance": {"amount_psf": 75.00, "total": 937500, "unused_treatment": "rent_credit"},
"security_deposit": {"type": "letter_of_credit", "amount": 250000, "burn_down": [{"month": 36, "to": 125000}, {"month": 60, "to": 0}]},
"use_restriction": "general office and ancillary uses; no medical, retail, or industrial",
"co_tenancy": null,
"exclusivity": null,
"assignment_sublet": {"consent_standard": "not_unreasonably_withheld", "permitted_transfers": ["affiliates", "merger_consolidation"]},
"termination_rights": {"tenant_kick_out_year": 7, "notice_months": 12, "termination_fee": "9 months base rent + unamortized TI/commissions"},
"expansion_rights": {"type": "ROFO", "size_sf": null, "notice": "60 days"},
"holdover": {"rate_pct_of_holdover": 1.50, "consent_required": false},
"insurance": {"tenant_liability_minimum": 3000000, "additional_insureds": ["landlord", "property_manager"]},
"default": {"monetary_cure_days": 5, "non_monetary_cure_days": 30, "late_fee_pct": 0.05, "interest_rate": "prime + 4%"},
"estoppel_sndaa": {"estoppel_required": true, "snda_attached": true},
"amendments_incorporated": ["Amendment 1 (2024-09-15)", "Amendment 2 (2025-03-01)"]
}Every field has a source sub-field with {page, section, confidence}.
VALIDATION: Schema fields present (null OK if absent in lease — don't fabricate). Rent schedule sum reconciles to total committed rent over term.
============================================================ === PHASE 3: AMBIGUITY & FLAG DETECTION === ============================================================
Some lease clauses are inherently ambiguous; flag for human review:
Flag each as {field, ambiguity, suggested_interpretation, reviewer_action}.
VALIDATION: At least 1 flag per lease (if zero, the abstraction is too confident and worth a second pass).
============================================================ === PHASE 4: CRITICAL DATES CALENDAR === ============================================================
Emit a calendar file (critical_dates.ics + critical_dates.csv) with reminders:
VALIDATION: Calendar imports into Google/Outlook/iCal without errors.
============================================================ === PHASE 5: ABSTRACT OUTPUTS === ============================================================
Final deliverable directory:
lease-{tenant-slug}-{address-slug}/
├── README.md # what each file is and where it goes
├── abstract.json # full schema (Phase 2)
├── abstract.csv # flat row for portfolio rollup
├── abstract.md # human-readable summary
├── critical_dates.ics
├── critical_dates.csv
├── flags.md # ambiguities (Phase 3)
├── source_lease.pdf # original (link, not copy)
└── audit_trail.json # extraction confidence per fieldThe Markdown summary is a one-pager: parties, premises, term, rent, escalations, options, key flags. Designed for handoff to a broker / attorney / portfolio manager.
VALIDATION: All files render. CSV imports into Excel without column drift.
============================================================ === SELF-REVIEW === ============================================================
Score 1–5:
Common gap: forgetting to incorporate amendments. The "original" lease's rent schedule is often superseded by an amendment.
============================================================ === LEARNINGS CAPTURE === ============================================================
Append to ~/.claude/skills/lease-abstraction/LEARNINGS.md:
============================================================ === STRICT RULES === ============================================================
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.