Inspiration
I'm a Lead Controls Operator at a hospital. I spend my days managing building automation systems — HVAC, energy, critical infrastructure. Commercial buildings account for 40% of US energy consumption, and the average building wastes 20-30% of its energy. The frustrating part? Most of that waste comes from things like override schedules that never got cleared, exhaust fans running 24/7 in empty warehouses, and server rooms cooled 8°F below ASHRAE recommendations.
The data to catch these problems already exists in every Building Management System. The problem is that facilities teams are busy — they're fixing chillers and responding to comfort calls, not sitting at analytics dashboards. I wanted to bring the intelligence to where they already work: Slack.
What it does
GreenOps is a building sustainability intelligence agent that lives in Slack. It connects to Building Management System (BMS) data and gives facilities teams:
- Real-time energy monitoring across zones with schedule-aware patterns (office, cafeteria, server room, labs)
- HVAC equipment diagnostics using the correct efficiency metric per equipment type — EER for rooftop units, kW/ton for chillers, thermal efficiency for boilers, fan kW for air handling units
- Anomaly detection that surfaces energy waste, prioritized by severity and estimated dollar/CO₂ impact
- Sustainability scorecards with ENERGY STAR benchmarks and actionable savings opportunities ranked by difficulty
- Occupancy-aware recommendations that know you never set back cooling in a server room and that cafeteria loads spike during cooking prep, not just headcount
The App Home tab shows a live dashboard. The DM interface handles natural-language questions and cross-references data across tools — if someone asks about energy in the cafeteria, GreenOps will flag that RTU-1 is running at 70% efficiency on phased-out R-22 refrigerant and recommend a heat pump replacement.
How we built it
- Slack Bolt JS with Socket Mode for the app framework
- Claude Agent SDK (Anthropic) powering the conversational AI with tool use
- Slack MCP Server integration for workspace search and context (one of the three required Slack AI technologies)
- 5 custom BMS tools with realistic simulated building data:
- Energy usage with zone schedules (24/7-critical, cafeteria meal service, extended lab hours) and weekday/weekend differentiation
- HVAC efficiency with type-appropriate metrics (a chiller rated in kW/ton degrades upward; a boiler's thermal efficiency degrades downward — getting this wrong is a dead giveaway that the builder doesn't know HVAC)
- Occupancy with zone-specific patterns and heat load context
- Sustainability scoring tied to actual energy intensity (so the ENERGY STAR score never contradicts the rating)
- Anomaly detection with time-aware severity, intermittent issues, and root-cause analysis
- App Home dashboard pulling live BMS data on every visit — bar charts, equipment fleet status, savings opportunities, all rendered in Block Kit
The domain knowledge baked into the tools is what makes GreenOps different from a generic energy chatbot. Every anomaly description, every recommended action, every equipment diagnostic reflects how a real controls operator thinks about these systems.
Challenges we ran into
- Slack manifest validation —
suggested_promptsrequires objects withtitle/messagefields (not plain strings) and a max of 4 items. Underdocumented; discovered through trial and error. - Model ID mismatch — The Claude Agent SDK defaults to dated model IDs (
claude-sonnet-4-20250514) that not all API workspaces have access to. Fixed with theANTHROPIC_MODELenvironment variable override. - HVAC metric realism — The first version used EER for everything, which is wrong. AHUs served by chilled water don't have their own compressor — they report fan power. Chillers use kW/ton (where lower is better, so degradation makes the number go up, not down). Boilers use thermal efficiency %. Getting this right required rewriting the entire efficiency calculation to branch by equipment subtype.
- Slack emoji support —
:orange_circle:and:blue_circle:don't exist as standard Slack emoji. The dashboard rendered them as raw text until we swapped to:warning:and:large_blue_diamond:.
Accomplishments that we're proud of
- The agent gives actionable, dollar-quantified recommendations — not just "your building uses too much energy" but "trim AHU-2's schedule to 18:30 and save $5,400/year."
- Every HVAC equipment type reports in its industry-correct metric. A judge who knows building automation will recognize this instantly.
- The anomaly for RTU-1 tells a realistic story: COP was above design because the building had shell space (partial build-out = lower load = better efficiency), then dropped below design as zones filled out and the equipment degraded. That's a real-world pattern most energy analytics tools miss.
- The server room never gets a setback recommendation. That's a one-line check in the code, but it's the kind of thing that would get a facilities manager fired if an AI suggested it.
What we learned
- Building the domain model matters more than building the AI wrapper. Claude is smart enough to synthesize good data into great responses — but it can't fix bad data. The time spent getting HVAC metrics right paid off tenfold in response quality.
- Slack's Block Kit is powerful but has sharp edges (emoji support, field limits, manifest schema strictness). Budget time for these.
- Simulated data that follows real-world patterns (weekday/weekend, meal service schedules, 24/7 critical zones) makes the demo dramatically more convincing than random numbers.
What's next for GreenOps
- Real BMS integration — connect to BACnet/IP, Modbus, and Niagara frameworks via an MCP server so GreenOps reads live sensor data instead of simulations
- Automated scheduling — let GreenOps adjust HVAC schedules directly through the BAS when it detects waste patterns, with human approval via Slack
- Multi-building portfolio — roll up sustainability metrics across a campus or portfolio for executive reporting
- Proactive alerts — scheduled Slack messages when anomalies are detected, not just on-demand queries
- Historical trending — "How has our energy intensity changed since we fixed AHU-2?" with actual trend data
Built With
- anthropic-claude
- bas
- block-kit
- claude-agent-sdk
- javascript
- model-context-protocol-(mcp)
- node.js
- slack-api
- slack-bolt
- slack-mcp-server
- socket-mode
- zod

Log in or sign up for Devpost to join the conversation.