Our operational footprint is already fairly lean, but when we discovered Climate-Aware Task Scheduling (CATS), we decided to integrate it into our infrastructure to reduce our carbon footprint and support our “Digital decarbonisation” CSR pillar.
Daily housekeeping processes add up. Client data indexing and pruning, log analysis and rotation, compressing backups, batch AI model tasks and much more churns away in the background, unnoticed until it breaks. Virtually none of them need to run at a specific time. We don’t have a good reason to schedule a 45-minute backup run at 5pm on a Tuesday when the UK national power grid is relying heavily on fossil fuels to meet demand.
How Climate-Aware Task Scheduling (CATS) works
The carbon intensity of the UK electricity grid shifts continuously depending on the time of day and weather conditions. When wind and solar thrive, carbon intensity drops significantly as polluting energy generation is paused. As demand peaks or the weather changes, gas and coal sources fills the generation gap.
Open-source tools (such as CATS: Climate-Aware Task Scheduler, but others exist) make it simple to align internal automation with clean energy availability:
- Grid data integration: CATS pulls real-time grid carbon intensity and forecast data directly from the National Grid ESO API.
- Dynamic deferral: For non-urgent tasks such as indexing, compressed backups, or batch AI model tasks, we pass the estimated runtime, our location (postcode), and scheduling constraints (“in the next N hours”) to CATS.
- Optimal execution window: CATS calculates the lowest carbon footprint window within the defined timeframe and runs the task when the grid is cleanest.
- Quick implementation: Because CATS is a lightweight Python tool designed to interface with standard task schedulers (like the Linux at command), it works with existing automation without complex change.
Output
CATS provides text outputs - readable (below), JSON, and a forecast plot:
$ ./cats --duration 45 --location "SO17" --plot
The.____ ..... __ .... ________ . ______...
.. / __)...../ \....(__ __).) ____)....
..| /......./ \......| |...( (___........
..| |limate./ () \ware.| |ask.\___ \cheduler
..| \__...| __ |....| |....____) )....
...\ )..| (..) |....| |...( (..
Best job start time = 2026-07-28 14:00:02
Carbon intensity if job started now = 106.34 gCO2eq/kWh
Carbon intensity at optimal time = 51.42 gCO2eq/kWh

Results
Even with our small team and reasonably light workloads, climate-aware scheduling has reduced the operational carbon footprint of our background tasks by approximately 30-40% (caveat below). Small operational nudges like this make meaningful differences when scaled up, so by letting grid data influence our tasks it’s business as usual for us and realising environmental benefit.
What next?
There’s a couple of areas we’d like to improve on:
- Accuracy: CATS uses a manual approximation to determine carbon footprint for various workloads - differing workloads impact CPU, GPU and NPU power consumption hugely, and reporting accuracy is poor. There’s a positive impact, but we don’t yet fully stand by the reported 30-40% carbon footprint reduction.
- Seasonal adaption: In the UK, seasonal weather changes lead to drastic scheduling changes. Peak solar generation in summer requires scheduling tasks in the daytime; Excess wind generation often occurs at night in winter. We’d like to experiment with how we can adapt for this automatically.