К основному содержанию
скилл CX Codex

real-estate-expert — скилл для Claude Code: что делает и установка

Скилл настраивает агента на разработку PropTech-решений: от интеграции с MLS до моделей оценки жилья и учёта договоров аренды.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add personamanagmentlayer/pcl --skill real-estate-expert -a claude-code
Открыть на GitHub

Что делает real-estate-expert

Скилл добавляет в контекст ассистента правила работы с базами MLS, системами управления недвижимостью (PMS) и брокерскими CRM. Внутри заложены архитектурные шаблоны для учёта договоров аренды (Lease), заявок на ремонт (MaintenanceRequest), а также отраслевые стандарты вроде RESO, RESPA и Fair Housing Act.

Для аналитики и оценки объектов скилл предлагает готовые алгоритмы. Оценка стоимости рассчитывается через GradientBoostingRegressor из библиотеки scikit-learn по десяти признакам объекта, включая площадь, этажность и наличие бассейна. Без предустановленных библиотек numpy и scikit-learn запустить расчётный модуль не выйдет.

Какие задачи решает

  • рассчитать рыночную стоимость недвижимости через GradientBoostingRegressor
  • проверить соблюдение стандартов RESO и требований закона RESPA
  • спроектировать структуры данных для учёта договоров аренды и заявок на ремонт
  • вычислить скорость поглощения рынка и месяцы товарного запаса объектов

Примеры запросов агенту

  • Построй модель оценки стоимости квартиры на базе GradientBoostingRegressor по моим данным
  • Спроектируй схему данных для отслеживания договоров аренды и заявок жильцов на ремонт
  • Проверь интеграцию с базой недвижимости на соответствие стандарту RESO

Как установить real-estate-expert

1Через Skills CLI (Vercel)

npx skills add personamanagmentlayer/pcl --skill real-estate-expert -a claude-code

2Вручную: положить файлы

~/.claude/skills/real-estate-expert/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/real-estate-expert/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о real-estate-expert

Как установить real-estate-expert в Claude Code?

Выполните в терминале команду npx skills add personamanagmentlayer/pcl --skill real-estate-expert -a claude-code.

Что делает real-estate-expert?

Скилл передаёт агенту отраслевые шаблоны PropTech: расчёт рыночных трендов, структуры данных PMS и правила соответствия стандартам вроде Fair Housing Act.

Какие библиотеки нужны для работы модуля оценки жилья?

Для выполнения кода автоматической оценки потребуются установленные пакеты numpy и scikit-learn.

Исходный текст

SKILL.md · Apache-2.0
---
name: real-estate-expert
version: 1.1.0
description: >-
  Expert-level real estate systems, property management, MLS integration, CRM, virtual
  tours, and market analysis. Use when the user mentions property, MLS, CRM, proptech, or
  listings, or when the task involves Real Estate Systems, PropTech Solutions, Standards
  and Regulations, or Listing Management.
category: domains
tags: [real-estate, property, mls, crm, proptech, listings]
allowed-tools:
  - Read
  - Write
  - Edit
---

# Real Estate Expert

Expert guidance for real estate systems, property management, Multiple Listing Service (MLS) integration, customer relationship management, virtual tours, and market analysis.

## Core Concepts

### Real Estate Systems

- Multiple Listing Service (MLS) integration
- Property Management Systems (PMS)
- Customer Relationship Management (CRM)
- Transaction management
- Document management
- Lease management
- Maintenance tracking

### PropTech Solutions

- Virtual tours and 3D walkthroughs
- AI-powered property valuation
- Digital signatures and e-closing
- Smart home integration
- IoT sensors for properties
- Blockchain for title management
- Augmented reality for staging

### Standards and Regulations

- RESO (Real Estate Standards Organization)
- Fair Housing Act compliance
- RESPA (Real Estate Settlement Procedures Act)
- Data privacy (GDPR, CCPA)
- ADA compliance for websites
- NAR Code of Ethics

## Property Valuation and Analytics

```python
import numpy as np
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.preprocessing import StandardScaler

class PropertyValuationSystem:
    """AI-powered property valuation"""

    def __init__(self):
        self.model = GradientBoostingRegressor(n_estimators=100)
        self.scaler = StandardScaler()
        self.trained = False

    def train_model(self, training_data: List[dict]):
        """Train valuation model on historical data"""
        features = []
        prices = []

        for property_data in training_data:
            feature_vector = self._extract_features(property_data)
            features.append(feature_vector)
            prices.append(property_data['sold_price'])

        X = np.array(features)
        y = np.array(prices)

        # Scale features
        X_scaled = self.scaler.fit_transform(X)

        # Train model
        self.model.fit(X_scaled, y)
        self.trained = True

    def estimate_value(self, property_data: dict) -> dict:
        """Estimate property value"""
        if not self.trained:
            return {'error': 'Model not trained'}

        features = self._extract_features(property_data)
        features_scaled = self.scaler.transform([features])

        estimated_value = self.model.predict(features_scaled)[0]

        # Calculate confidence interval (simplified)
        confidence_range = estimated_value * 0.1  # ±10%

        return {
            'estimated_value': estimated_value,
            'confidence_interval': {
                'lower': estimated_value - confidence_range,
                'upper': estimated_value + confidence_range
            },
            'price_per_sqft': estimated_value / property_data['square_feet']
        }

    def _extract_features(self, property_data: dict) -> List[float]:
        """Extract features for valuation model"""
        return [
            property_data['square_feet'],
            property_data['bedrooms'],
            property_data['bathrooms'],
            property_data['lot_size'],
            property_data['year_built'],
            property_data.get('garage_spaces', 0),
            property_data.get('stories', 1),
            1 if property_data.get('has_pool', False) else 0,
            1 if property_data.get('has_fireplace', False) else 0,
            property_data.get('neighborhood_score', 50)  # 0-100 scale
        ]

class MarketAnalytics:
    """Real estate market analytics"""

    def calculate_market_trends(self, sales_data: List[dict]) -> dict:
        """Calculate market trends and statistics"""
        if not sales_data:
            return {'error': 'No sales data available'}

        # Calculate metrics
        prices = [s['price'] for s in sales_data]
        days_on_market = [s['days_on_market'] for s in sales_data]

        median_price = np.median(prices)
        avg_price = np.mean(prices)
        avg_days_on_market = np.mean(days_on_market)

        # Calculate price trends (compare recent vs older data)
        recent_data = sales_data[-30:]  # Last 30 sales
        older_data = sales_data[-60:-30]  # Previous 30 sales

        if len(recent_data) > 0 and len(older_data) > 0:
            recent_avg = np.mean([s['price'] for s in recent_data])
            older_avg = np.mean([s['price'] for s in older_data])
            price_change = ((recent_avg - older_avg) / older_avg) * 100
        else:
            price_change = 0

        # Market health indicator
        if avg_days_on_market < 30:
            market_health = "Hot"
        elif avg_days_on_market < 60:
            market_health = "Balanced"
        else:
            market_health = "Slow"

        return {
            'median_price': median_price,
            'average_price': avg_price,
            'average_days_on_market': avg_days_on_market,
            'price_trend_percentage': price_change,
            'market_health': market_health,
            'total_sales': len(sales_data)
        }

    def calculate_inventory_metrics(self, active_listings: List[Property]) -> dict:
        """Calculate inventory and absorption metrics"""
        total_listings = len(active_listings)

        # Calculate average price
        avg_price = np.mean([float(p.listing_price) for p in active_listings])

        # Calculate months of inventory (simplified)
        # Would need sales velocity for accurate calculation
        months_of_inventory = 6.0  # Placeholder

        return {
            'total_active_listings': total_listings,
            'average_listing_price': avg_price,
            'months_of_inventory': months_of_inventory,
            'market_condition': 'Balanced' if 4 <= months_of_inventory <= 6 else
                              'Seller' if months_of_inventory < 4 else 'Buyer'
        }
```

## Lease Management

```python
@dataclass
class Lease:
    """Rental lease agreement"""
    lease_id: str
    property_id: str
    tenant_name: str
    tenant_contact: dict
    start_date: datetime
    end_date: datetime
    monthly_rent: Decimal
    security_deposit: Decimal
    status: str  # 'active', 'expired', 'terminated'
    auto_renew: bool

@dataclass
class MaintenanceRequest:
    """Maintenance request for property"""
    request_id: str
    property_id: str
    tenant_name: str
    category: str  # 'plumbing', 'electrical', 'hvac', etc.
    priority: str  # 'low', 'medium', 'high', 'emergency'
    description: str
    submitted_date: datetime
    status: str  # 'open', 'in_progress', 'completed'
    assigned_to: Optional[str]

class PropertyManagementSystem:
    """Property management for landlords and property managers"""

    def __init__(self):
        self.leases = {}
        self.maintenance_requests = []
        self.rent_payments = []

    def create_lease(self, lease_data: dict) -> Lease:
        """Create new lease agreement"""
        lease_id = self._generate_lease_id()

        lease = Lease(
            lease_id=lease_id,
            property_id=lease_data['property_id'],
            tenant_name=lease_data['tenant_name'],
            tenant_contact=lease_data['tenant_contact'],
            start_date=lease_data['start_date'],
            end_date=lease_data['end_date'],
            monthly_rent=Decimal(str(lease_data['monthly_rent'])),
            security_deposit=Decimal(str(lease_data['security_deposit'])),
            status='active',
            auto_renew=lease_data.get('auto_renew', False)
        )

        self.leases[lease_id] = lease

        # Schedule rent payment reminders
        self._schedule_rent_reminders(lease)

        return lease

    def record_rent_payment(self,
                           lease_id: str,
                           amount: Decimal,
                           payment_date: datetime,
                           payment_method: str) -> dict:
        """Record rent payment"""
        lease = self.leases.get(lease_id)
        if not lease:
            return {'error': 'Lease not found'}

        payment = {
            'payment_id': self._generate_payment_id(),
            'lease_id': lease_id,
            'amount': amount,
            'payment_date': payment_date,
            'payment_method': payment_method,
            'for_month': payment_date.strftime('%Y-%m')
        }

        self.rent_payments.append(payment)

        # Check if payment is late
        expected_date = datetime(payment_date.year, payment_date.month, 1)
        days_late = (payment_date - expected_date).days

        return {
            'success': True,
            'payment_id': payment['payment_id'],
            'days_late': max(0, days_late),
            'late_fee': self._calculate_late_fee(lease, days_late)
        }

    def submit_maintenance_request(self, request_data: dict) -> MaintenanceRequest:
        """Submit maintenance request"""
        request = MaintenanceRequest(
            request_id=self._generate_request_id(),
            property_id=request_data['property_id'],
            tenant_name=request_data['tenant_name'],
            category=request_data['category'],
            priority=request_data.get('priority', 'medium'),
            description=request_data['description'],
            submitted_date=datetime.now(),
            status='open',
            assigned_to=None
        )

        self.maintenance_requests.append(request)

        # Auto-assign emergency requests
        if request.priority == 'emergency':
            self._assign_emergency_maintenance(request)

        return request

    def check_lease_expiration(self) -> List[dict]:
        """Check for expiring leases"""
        expiring_soon = []
        current_date = datetime.now()

        for lease in self.leases.values():
            if lease.status != 'active':
                continue

            days_until_expiration = (lease.end_date - current_date).days

            if 0 < days_until_expiration <= 60:
                expiring_soon.append({
                    'lease_id': lease.lease_id,
                    'property_id': lease.property_id,
                    'tenant_name': lease.tenant_name,
                    'end_date': lease.end_date.isoformat(),
                    'days_remaining': days_until_expiration,
                    'auto_renew': lease.auto_renew
                })

        return expiring_soon

    def _calculate_late_fee(self, lease: Lease, days_late: int) -> Decimal:
        """Calculate late fee for rent payment"""
        if days_late <= 5:  # Grace period
            return Decimal('0')

        # $50 flat fee + $5 per day after grace period
        late_fee = Decimal('50') + (Decimal('5') * (days_late - 5))
        return late_fee

    def _schedule_rent_reminders(self, lease: Lease):
        """Schedule monthly rent payment reminders"""
        # Implementation would schedule reminder emails/notifications
        pass

    def _assign_emergency_maintenance(self, request: MaintenanceRequest):
        """Auto-assign emergency maintenance requests"""
        # Implementation would assign to on-call maintenance staff
        pass

    def _generate_lease_id(self) -> str:
        import uuid
        return f"LEASE-{uuid.uuid4().hex[:8].upper()}"

    def _generate_payment_id(self) -> str:
        import uuid
        return f"PAY-{uuid.uuid4().hex[:8].upper()}"

    def _generate_request_id(self) -> str:
        import uuid
        return f"MAINT-{uuid.uuid4().hex[:8].upper()}"
```

## Best Practices

### Listing Management

- Use high-quality professional photos
- Write compelling property descriptions
- Include virtual tours and 3D walkthroughs
- Update listings immediately when status changes
- Respond to inquiries within 1 hour
- Maintain accurate MLS data
- Use targeted marketing campaigns

### Property Valuation

- Use multiple valuation methods (CMA, AVM, appraisal)
- Consider local market conditions
- Account for property condition and upgrades
- Review comparable sales regularly
- Factor in seasonal trends
- Include neighborhood analysis
- Document valuation methodology

### Lease Management

- Use standardized lease templates
- Conduct thorough tenant screening
- Document property condition (move-in/move-out)
- Maintain security deposit in separate account
- Schedule regular property inspections
- Respond to maintenance requests promptly
- Maintain clear communication with tenants

### Compliance

- Follow Fair Housing Act requirements
- Maintain proper licensing
- Use compliant lease agreements
- Protect tenant privacy
- Follow eviction procedures properly
- Maintain insurance coverage
- Keep accurate financial records

## Anti-Patterns

❌ Poor quality listing photos
❌ Inaccurate property information
❌ Slow response to inquiries
❌ No virtual tour options
❌ Ignoring online reviews
❌ Manual document management
❌ No tenant screening process
❌ Poor maintenance tracking
❌ Inadequate insurance coverage

## Reference Documentation

Detailed material lives alongside this skill and is read on demand:

- [Property Listing System](references/PROPERTY_LISTING_SYSTEM.md)

## Resources

- NAR (National Association of Realtors): https://www.nar.realtor/
- RESO Standards: https://www.reso.org/
- Zillow API: https://www.zillow.com/howto/api/
- Realtor.com API: https://www.realtor.com/
- CoreLogic: https://www.corelogic.com/
- Redfin Data: https://www.redfin.com/
- Fair Housing Act: https://www.hud.gov/fairhousing

© personamanagmentlayer · Apache-2.0 · personamanagmentlayer/pcl

Похожие скиллы

Все скиллы по теме «Финансы и бизнес» →
real-estate-analyzer travisjneuman Скилл рассчитывает доходность недвижимости, чистый операционный доход (NOI) и окупаемость аренды. Пригодится при оценке сделок, сравнении объектов и расчёте ипотечных платежей. CX Codex +1 399установок finding-real-estate-professionals-on-twitter apidojo Ищет агентов, брокеров и инвесторов в Twitter/X через Apify. Подходит для сбора списка специалистов по ключевым словам в профилях. CX Codex +1 739установок real-assets JoelLewis Скилл помогает анализировать прямые инвестиции в недвижимость, фонды REIT и инфраструктурные объекты. Рассчитывает доходность и долговую нагрузку по формулам. CX Codex +1 679установок propstack-mcp ashev87 Подключает AI-агента к Propstack CRM для работы с контактами, объектами и сделками. Нужен для запросов к CRM через чат. CX Codex +1 ★ 9звёзд репо estate-gifting JoelLewis Скилл для ИИ-агента, который разбирает передачу состояния: пожизненная льгота, годовой вычет на дарение, step-up базиса, трасты и бенефициары. CX Codex +1 303установок rental-property openaccountant Считает NOI, cap rate, cash-on-cash и ROI по каждому объекту аренды. Пригодится, когда нужно свести доход и расходы перед подачей Schedule E. CX Codex +1 493установок

Из того же набора25

finance-expert Скилл для задач, где в коде появляется сумма денег: баланс, возврат, выплата, сверка, отчётность. Держит модель денег и двойную запись. CX Codex +1 6 400установок telecommunications-expert Скилл для агента, который разбирается в телеком-инфраструктуре: OSS/BSS, 5G, SDN/NFV, протоколы и тарификация. Пригодится, когда нужно спроектировать систему или посчитать биллинг. CX Codex +1 1 900установок trading-expert Скилл обучает агента алгоритмической торговле, стратегиям на Python и бэктестингу. Помогает проектировать обработку рыночных данных и рассчитывать метрики риска. CX Codex +1 963установок banking-expert Даёт агенту справочник по core banking, KYC/AML, платежам и банковским регламентам. Пригодится, когда в задаче всплывают счета, переводы или проверка клиента. CX Codex +1 800установок insurance-expert Даёт агенту экспертизу по страховым системам: андеррайтинг, обработка заявлений, актуарный анализ, оценка рисков и выявление мошенничества. CX Codex +1 714установок construction-expert Скилл настраивает агента на задачи строительного инжиниринга: управление проектами, контроль безопасности по нормам OSHA и работу со стандартами BIM. CX Codex +1 653установок accountant-expert Добавляет правила бухучёта по стандартам GAAP и IFRS, логику двойной записи и расчёт финансовых отчётов. Пригодится при разработке финтех-модулей и налоговых калькуляторов. CX Codex +1 634установок manufacturing-expert Скилл помогает разбирать производственные системы, Industry 4.0 и контроль качества. Пригодится для задач с MES, PLC и статистикой процессов. CX Codex +1 613установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой