Inspiration
Real estate is one of the most data-rich industries on earth and one of the most memory-poor. A typical CBRE property manager juggles sensor feeds, tenant emails, maintenance logs, lease spreadsheets, and market reports across dozens of buildings simultaneously. Each system remembers its own slice. None of them talk to each other. None of them remember across time. The breaking point that inspired us: a property manager can get a HVAC alert, a tenant complaint, and a lease renewal notice all in the same week on the same floor and never connect them. The insight that could have saved a tenant relationship and prevented a $200K chiller failure was sitting in three separate inboxes. We kept coming back to one question: what if a building could remember everything, the way a brilliant colleague would? Not just store data but compress it, connect it, and surface what matters before it becomes a crisis. That question became CBRE Asset Brain.
What it does
CBRE Asset Brain gives every building in your portfolio a persistent, three-tier AI memory system, powered by five specialized agents working in concert. The five agents:
Ops Agent : ingests sensor readings, BACnet/IP packets, MQTT streams, and Modbus signals. Detects anomalies and flags floor-level patterns. Tenant Agent : scores complaint severity, tracks tenant history, and flags lease risk when dissatisfaction crosses a threshold. Maintenance Agent: logs work orders, detects recurring issues, and automatically writes operational rules when patterns repeat. Market Agent: monitors lease expiry windows, competitor signals, and market rate shifts. Orchestrator Agent: cross-references all four agents to answer natural language questions with specific, cited, actionable answers.
The salience decay function means memory behaves like human memory — critical events stay vivid; routine noise fades: s(t)=s0⋅e−λt,λ=0.05 day−1s(t) = s_0 \cdot e^{-\lambda t}, \quad \lambda = 0.05 \text{ day}^{-1}s(t)=s0⋅e−λt,λ=0.05 day−1 A property manager can ask the Building Brain in plain English: "Why is Tenant 12B unhappy?" and receive a cited answer that connects a three-week-old chiller fault, two heat complaints, and a 90-day lease renewal window information that lived in three separate agent memories. For buildings without sensors, a manual log form lets any staff member type an observation in plain English. It ingests, scores, and compresses automatically.
How we built it
Backend: FastAPI + Python, SQLite for persistent memory storage AI: Anthropic Claude (claude-sonnet-4-20250514) via the Messages API powers compression, orchestration, and salience scoring Protocol simulation: Custom BACnet/IP, MQTT, and Modbus TCP parsers to simulate real building IoT signals Frontend: Single-page HTML/CSS/JS CBRE brand palette (#003F2D, #F5F5DC, #17E88F), zero frameworks, zero dependencies
Challenges we ran into
1. Memory that actually decays, not just truncates. Most RAG systems just cut off context. We wanted memory that fades realistically. Getting the salience decay tuned so that critical signals survive long enough to be compressed into semantic patterns without flooding the context window required several iterations of the decay constant λ\lambda
- Cross-domain pattern extraction. Prompting Claude to reliably extract structured patterns (with confidence scores, topics, and summaries) from a mix of sensor readings, tenant text, and market signals and return valid JSON every time was harder than expected. We ended up using strict XML-tagged output format with a fallback parser.
- Building-aware multi-tenancy. Early on, every endpoint hardcoded BUILDING_ID from config.py. Switching buildings in the UI updated the display but not the AI responses the orchestrator kept answering about Dallas even when viewing Houston. Fixing this required threading building_id through every API call, agent instantiation, and compression job.
- Sensor-agnostic design. We wanted the system to work for buildings with no IoT infrastructure at all. The manual log form was added mid-hackathon, which meant redesigning the ingest pipeline to handle unstructured natural language input alongside structured protocol packets.
- Port conflicts on demo day. ChromaDB was already running on port 8000 on the demo machine. We caught this at midnight, added .env-based port configuration, and moved to 8001 without touching the main codebase. ## Accomplishments that we're proud of Three-tier memory that provably learns. Works without sensors. Explainable memory. Real protocol simulation. Full portfolio view. ## What we learned Memory architecture is an underrated design challenge. Everyone talks about RAG. Almost nobody talks about what gets remembered, at what salience, for how long, and why. Designing a memory system that decays, compresses, and learns forced us to think about these questions explicitly and the answers mattered enormously to the quality of the outputs. Multi-agent coordination needs a clear contract. Each agent writes to the same episodic store with the same schema. This shared contract is what makes orchestration possible. Without it, agents would just be isolated classifiers. Plain English as the interface is harder than it looks. Getting the orchestrator to answer a vague question like "What should I prioritize this week?" in a way that's specific, actionable, and cited not generic required careful prompt engineering around the three memory tiers. The building_id bug taught us: test the switching path, not just the happy path. We had full test coverage for Dallas. Austin and Houston were untested. The bug only surfaced when a teammate clicked a different portfolio card. ## What's next for DevForge Short term:
Connect to real BACnet/IP endpoints via a building gateway adapter Add email/Slack integration so the orchestrator proactively surfaces critical patterns without being asked Tenant portal a simplified view where tenants log complaints directly into the memory system
Medium term:
Memory versioning UI show how a building's semantic memory evolved over 30/60/90 days Cross-portfolio pattern detection "This chiller failure pattern also occurred in 3 other CBRE buildings last winter" Lease risk scoring dashboard with P(churn)=f(complaint frequency, response time, market alternatives)P(\text{churn}) = f(\text{complaint frequency, response time, market alternatives}) P(churn)=f(complaint frequency, response time, market alternatives)
Long term:
Predictive maintenance rules learned from portfolio-wide episodic memory not just per-building Integration with CBRE's existing property management platforms (MRI, Yardi) as a memory layer on top Memory-augmented negotiation assistant for lease renewals armed with full tenant history, market data, and operational context
The core insight is simple: buildings generate millions of signals, but intelligence requires memory. CBRE Asset Brain is the memory layer that turns signal into insight, insight into action, and action into outcomes.
Built With
- cbre-brand-system-dev-tools-vs-code
- conda-(python-3.11-environment)-platform-runs-locally-?-windows-10/11
- css-frameworks-&-libraries-fastapi
- css3-(no-frameworks)-?-single-page-dashboard
- git
- html
- javascript
- languages-python
- modbus-tcp-?-real-commercial-building-iot-protocols-frontend-vanilla-js
- mqtt
- natural-language-q&a-database-sqlite-?-persistent-three-tier-memory-store-(episodic
- orchestration
- powershell
- procedural)-protocols-simulated-bacnet/ip
- pydantic
- salience-scoring
- semantic
- sqlite3-ai-/-apis-anthropic-claude-api-(claude-sonnet-4-20250514)-?-memory-compression
- uvicorn
Log in or sign up for Devpost to join the conversation.