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 validationsuggested_prompts requires objects with title/message fields (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 the ANTHROPIC_MODEL environment 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
Share this project:

Updates