Skip to content
For site reliability engineers

You instrument everything except the room you decide in.

Every service you run has an SLO, an error budget and a dashboard. The operator has no baseline, no history and no alert — and the published research says the operator is the component that degrades first. OptiBreath is an air quality instrument with a /metrics endpoint.

The gap

One dependency in your critical path has no telemetry.

You would not run a service this way. You would not accept a dependency with no health check, no baseline and no history — and then trust its output at three in the morning.

  • Your servicesSLOs, error budgets, burn-rate alerts, a dashboard per tier
  • Your infrastructureNode exporter on every host, 15-second scrape, a year of retention
  • Your dependenciesSynthetic probes, third-party status pages piped into the same board
  • Your CIBuild duration, flake rate, queue depth — all trended
  • The operatorNothing. No signal, no baseline, no alert, no history.

The 03:00 problem

Your worst air arrives at the hour of your worst decisions.

A closed bedroom is the least ventilated room a knowledge worker occupies, and it is at its worst in the small hours. That is also when the pager goes off, when you are least rested, and when the blast radius of a wrong call is largest.

Carbon dioxide, 22:00 to 08:00

Sealed bedroom, one occupant. Hover for any point.

1,845
ppm at 03:14 · Impaired
BaselineOptimalElevatedDegradedImpairedCritical5001,0001,5002,0002,50022:0000:0002:0004:0006:0008:0003:14 · SEV-2 page
Modelled with the same mass-balance physics as the public calculator: a 12 m² bedroom, one sleeping occupant, 0.2 air changes per hour, window opened at 07:00. Steady state for that room is 2,508 ppm. Your room will differ — which is the entire argument for measuring it rather than assuming.
View as a table
TimeCO₂ (ppm)Band
22:00620Optimal
22:10682Optimal
22:20742Optimal
22:30800Elevated
22:40856Elevated
22:50910Elevated
23:00962Elevated
23:101,013Degraded
23:201,062Degraded
23:301,109Degraded
23:401,155Degraded
23:501,200Degraded
00:001,243Degraded
00:101,284Degraded
00:201,324Degraded
00:301,363Degraded
00:401,401Impaired
00:501,437Impaired
01:001,472Impaired
01:101,506Impaired
01:201,539Impaired
01:301,571Impaired
01:401,601Impaired
01:501,631Impaired
02:001,660Impaired
02:101,688Impaired
02:201,715Impaired
02:301,741Impaired
02:401,766Impaired
02:501,790Impaired
03:001,814Impaired
03:101,836Impaired
03:201,858Impaired
03:301,880Impaired
03:401,900Impaired
03:501,920Impaired
04:001,940Impaired
04:101,958Impaired
04:201,976Impaired
04:301,994Impaired
04:402,011Impaired
04:502,027Impaired
05:002,043Impaired
05:102,058Impaired
05:202,073Impaired
05:302,087Impaired
05:402,101Impaired
05:502,114Impaired
06:002,127Impaired
06:102,140Impaired
06:202,152Impaired
06:302,163Impaired
06:402,175Impaired
06:502,186Impaired
07:002,196Impaired
07:101,385Degraded
07:20969Elevated
07:30755Optimal
07:40645Optimal
07:50589Baseline
08:00560Baseline

At 1,845 ppm you are in the band where Satish et al. measured decrements across most of their decision-making measures — with initiative and basic strategy hit hardest. Those are not abstract categories. They are the two things incident command is made of.

Every postmortem you have ever written asks about the state of the system. None of them ask about the state of the operator, because nobody has the data. This is the instrument that would have had it.

Integration

It speaks the protocol you already run.

No app-only walled garden, no polling a vendor cloud to read a sensor sitting two metres away. The device exposes its own endpoint on your LAN, and it is the same shape as everything else in your scrape config.

optibreath.local:9102/metricsprometheus
$ curl -s http://optibreath.local/metrics | grep -v '^#' optibreath_co2_ppm{room="home-office",unit="ob-0142"} 1847optibreath_pm25_ugm3{room="home-office",unit="ob-0142"} 6.4optibreath_voc_index{room="home-office",unit="ob-0142"} 154optibreath_temperature_celsius{room="home-office",unit="ob-0142"} 23.2optibreath_humidity_ratio{room="home-office",unit="ob-0142"} 0.48optibreath_pressure_hpa{room="home-office",unit="ob-0142"} 1013.4 # Cumulative time in each band. Trend it, and you have a# ventilation SLO for the room you work in.optibreath_band_seconds_total{room="home-office",band="optimal"} 18420optibreath_band_seconds_total{room="home-office",band="degraded"} 7260optibreath_band_seconds_total{room="home-office",band="impaired"} 1980 optibreath_calibration_age_seconds{sensor="co2"} 5443200optibreath_build_info{version="1.4.2",hw="core"} 1optibreath_up 1
rules/cognitive-environment.ymlyaml
# On the device's own LAN address. No cloud round trip,# no account, no vendor between you and your data.groups:  - name: cognitive-environment    rules:      - alert: VentilationDegraded        expr: optibreath_co2_ppm > 1000        for: 15m        annotations:          summary: "{{ $labels.room }} above 1,000 ppm for 15m"          runbook_url: "https://optibreath.space/science#bands"       # The one that matters at 03:00.      - alert: OnCallRoomImpaired        expr: optibreath_co2_ppm{room="bedroom"} > 1400        for: 5m        labels:          severity: critical
  • Prometheus

    A /metrics endpoint on the device's LAN address, mDNS-discoverable, base units, sane label cardinality. Scrape it with the same job config as anything else you run.

  • MQTT

    Every reading published to a topic per channel, so it drops into an existing broker or Home Assistant without a bridge.

  • Webhooks

    Band transitions POST outbound. Wire them to Alertmanager, a Slack channel, or whatever already wakes you up.

  • Raw export

    Two years of one-minute samples as CSV or Parquet, straight off the device. Your data, in a format whatever you already use will open. Not an export button that emails you a link in an hour.

Local API, MQTT and the Prometheus exporter are on every tier, Core included. Core measures and displays everything; Pro is the one you can scrape.

Hong Kong

Few places make this argument better.

Dense curtain-wall towers, centralised air handling nobody on the floor controls, small flats, and a climate that punishes you for opening a window. If you work here, the gap between the air you assume you have and the air you actually have is unusually wide.

  • The buildings are sealed by design

    Curtain-wall towers with centralised air handling get optimised for thermal load in a subtropical climate rather than for outdoor air per occupant. The supply rate to your particular floor is a number you have almost certainly never seen, and could not change if you had.

  • The flats are small and the doors stay shut

    A home office that doubles as a bedroom, somewhere between 20 and 40 square metres, aircon on and windows shut against the humidity, is about the fastest-accumulating room in this whole argument. Small volume, one occupant producing all of it, and no route out.

  • Opening a window is not a free action

    For a good part of the year, outdoor air arrives with humidity and regional particulate attached. Which is the argument for reading CO₂ and PM2.5 side by side rather than either alone, before deciding whether opening the window helps or makes things worse.

The objections

Answered in the order you will raise them.

  • This is a contested literature and I will check.

    Please do. The papers that failed to replicate the effect are on our own science page, including a 2019 review co-authored by the lead author of the study we lean on, which is openly sceptical below about 5,000 ppm. The uncontested part is narrower: CO₂ tracks ventilation rate per occupant, poor ventilation independently correlates with worse symptoms and performance, and none of it is perceptible unaided.

  • I am not buying hardware that bricks when the vendor dies.

    It never depended on us. Every sensor, the display, local history, alerting and the local API work with the radio off and no account. If we wind down we have committed to publishing the API specification, the service manual and the firmware signing tooling.

  • I do not want another SaaS subscription.

    The instrument is complete without one. The optional analytics layer is included for the first year and removing it takes away analysis features and nothing else. No sensor is disabled in firmware waiting for an upgrade fee.

  • Cheap CO₂ monitors exist.

    They do, and most use a single-channel NDIR cell that drifts and leans on auto-baselining to hide it. If you are going to alert on a number, you need to trust it at the threshold — which means a dual-channel cell with a sealed reference, pressure compensation, and on Pro a traceable calibration certificate you can point at.

Add the missing exporter.

The first 500 units carry an engraved serial, their own calibration record and the analytics layer for life. Founding units ship Q1 2027.

  • No payment and no card details. An email address, and nothing else
  • One email, when there is finally something to buy
  • Founding Edition serial and Signal for life, at the standard price
  • Leave the list in one click, from any email we send

Or start with the evidence, which is where we would start.