Telemetry · Heat and pressure

My laptop is a thermometer for my office

There is no sensor in this machine measuring the room. There is a sensor measuring the processor, which is a different thing — it mostly tells you how hard the computer is working.

But a processor doing nothing still has a temperature, and that temperature is the room's, plus a constant. Throw away every reading where the machine was actually busy and what's left is a thermometer nobody installed.

The day is clearly visible

Below is processor temperature by hour of day, using only readings where the machine was genuinely idle: nothing much running, screen not in use, no external monitor plugged in, and at home rather than travelling. The line is the typical value; the shaded band covers the middle 80% of readings.

It runs from 38.3°C around 08:00 up to 42.6°C around 17:00. That is a 4.3°C daily swing, and it is the house: coolest before dawn, warmest in the early evening, exactly as a building with thermal mass behaves.

Two things could fake this, and both are excluded rather than argued away. An external monitor adds several degrees on its own and gets plugged in during the day, so any reading with one attached is dropped. And a processor stays warm for a while after finishing work, so busy readings are dropped too, not merely averaged down.

What survives all that is 1,912 of 27,301 readings — 7.0%. That ratio is the whole reason this needs months of history: the useful moments are the rare ones. 4 hours of the day have too few idle readings to plot and are left as gaps — mid-morning, the machine is almost never sitting still.

31.0 40.0 49.0 00:00: 40.3°C (n=76) 01:00: 40.7°C (n=99) 02:00: 39.25°C (n=158) 03:00: 38.6°C (n=191) 04:00: 39.3°C (n=177) 05:00: 38.9°C (n=198) 06:00: 38.4°C (n=186) 07:00: 38.5°C (n=176) 08:00: 38.3°C (n=104) 09:00: 39.4°C (n=49) 13:00: 40.9°C (n=47) 14:00: 41°C (n=29) 16:00: 40.45°C (n=28) 17:00: 42.6°C (n=23) 18:00: 41.35°C (n=50) 19:00: 42.4°C (n=73) 20:00: 41.1°C (n=69) 21:00: 41.05°C (n=54) 22:00: 40.1°C (n=32) 23:00: 40.1°C (n=32) 00:0004:0008:0012:0016:0020:00

The season, incidentally, is invisible. March and July look the same. Air conditioning erased the part of the signal you'd most expect to find, and left the daily cycle standing.

For contrast, the obvious version

Same sensor, plotted against how hard the machine is working rather than the time of day. This is the chart you'd expect: work goes up, temperature goes up, from about 40.2°C at rest to 87.2°C under sustained load.

Both configurations are drawn on one chart below. Plugging in an external monitor shifts the whole curve upward by a few degrees — the two lines are the same response at two heights.

Laptop alone With external monitor
35 60 85 0816

Horizontal axis is load average — roughly, how many things are queued up waiting for the processor at once.

What a room full of AI agents costs

I run a lot of coding agents. Enough that at least one is running in 95% of all readings ever taken, and it is not unusual to have half a dozen going at once. The chart below counts concurrent claude processes — one per session — taking the busiest moment of each day. The record is 22 at once, on 2026-05-17.

Peak concurrent Claude sessions, by day
0 11 22 2026-03-19: up to 0 at once (avg 0.0) 2026-03-20: up to 17 at once (avg 2.6) 2026-03-21: up to 15 at once (avg 4.8) 2026-03-22: up to 8 at once (avg 1.5) 2026-03-23: up to 14 at once (avg 2.3) 2026-03-24: up to 17 at once (avg 2.8) 2026-03-25: up to 16 at once (avg 3.0) 2026-03-26: up to 14 at once (avg 2.5) 2026-03-27: up to 15 at once (avg 2.1) 2026-03-28: up to 21 at once (avg 4.6) 2026-03-29: up to 11 at once (avg 3.0) 2026-03-30: up to 13 at once (avg 3.1) 2026-03-31: up to 13 at once (avg 3.3) 2026-04-01: up to 19 at once (avg 5.7) 2026-04-02: up to 13 at once (avg 5.9) 2026-04-03: up to 18 at once (avg 6.3) 2026-04-04: up to 15 at once (avg 6.1) 2026-04-05: up to 15 at once (avg 7.2) 2026-04-06: up to 15 at once (avg 4.7) 2026-04-07: up to 18 at once (avg 4.5) 2026-04-08: up to 18 at once (avg 3.7) 2026-04-09: up to 16 at once (avg 3.1) 2026-04-10: up to 18 at once (avg 3.8) 2026-04-11: up to 16 at once (avg 4.5) 2026-04-12: up to 11 at once (avg 4.3) 2026-04-13: up to 14 at once (avg 2.9) 2026-04-14: up to 13 at once (avg 3.0) 2026-04-15: up to 18 at once (avg 3.2) 2026-04-16: up to 15 at once (avg 2.9) 2026-04-17: up to 4 at once (avg 1.4) 2026-04-18: up to 4 at once (avg 1.5) 2026-04-19: up to 8 at once (avg 2.2) 2026-04-20: up to 14 at once (avg 2.6) 2026-04-21: up to 9 at once (avg 3.4) 2026-04-22: up to 10 at once (avg 3.1) 2026-04-23: up to 16 at once (avg 3.2) 2026-04-24: up to 12 at once (avg 4.5) 2026-04-25: up to 14 at once (avg 6.2) 2026-04-26: up to 19 at once (avg 6.9) 2026-04-27: up to 17 at once (avg 4.5) 2026-04-28: up to 14 at once (avg 6.1) 2026-04-29: up to 18 at once (avg 6.4) 2026-04-30: up to 21 at once (avg 6.3) 2026-05-01: up to 19 at once (avg 7.3) 2026-05-02: up to 19 at once (avg 7.7) 2026-05-03: up to 9 at once (avg 5.5) 2026-05-04: up to 13 at once (avg 3.6) 2026-05-05: up to 11 at once (avg 4.2) 2026-05-06: up to 10 at once (avg 4.3) 2026-05-07: up to 9 at once (avg 3.4) 2026-05-08: up to 10 at once (avg 3.8) 2026-05-09: up to 11 at once (avg 5.8) 2026-05-10: up to 9 at once (avg 4.8) 2026-05-11: up to 14 at once (avg 4.6) 2026-05-12: up to 16 at once (avg 4.3) 2026-05-13: up to 14 at once (avg 5.0) 2026-05-14: up to 19 at once (avg 5.7) 2026-05-15: up to 17 at once (avg 6.1) 2026-05-16: up to 20 at once (avg 5.3) 2026-05-17: up to 22 at once (avg 5.3) 2026-05-18: up to 17 at once (avg 5.4) 2026-05-19: up to 17 at once (avg 5.4) 2026-05-20: up to 22 at once (avg 4.1) 2026-05-21: up to 12 at once (avg 3.6) 2026-05-22: up to 13 at once (avg 4.4) 2026-05-23: up to 15 at once (avg 4.2) 2026-05-24: up to 18 at once (avg 4.3) 2026-05-25: up to 18 at once (avg 3.8) 2026-05-26: up to 16 at once (avg 4.1) 2026-05-27: up to 15 at once (avg 3.8) 2026-05-28: up to 18 at once (avg 3.5) 2026-05-29: up to 13 at once (avg 3.3) 2026-05-30: up to 13 at once (avg 3.7) 2026-05-31: up to 11 at once (avg 3.1) 2026-06-01: up to 15 at once (avg 3.1) 2026-06-02: up to 21 at once (avg 3.9) 2026-06-03: up to 13 at once (avg 4.2) 2026-06-04: up to 17 at once (avg 3.6) 2026-06-05: up to 10 at once (avg 1.8) 2026-06-06: up to 8 at once (avg 3.1) 2026-06-07: up to 8 at once (avg 3.2) 2026-06-08: up to 5 at once (avg 1.4) 2026-06-09: up to 6 at once (avg 1.4) 2026-06-10: up to 5 at once (avg 1.1) 2026-06-11: up to 7 at once (avg 1.9) 2026-06-12: up to 10 at once (avg 3.5) 2026-06-13: up to 10 at once (avg 3.5) 2026-06-14: up to 10 at once (avg 2.9) 2026-06-15: up to 10 at once (avg 2.6) 2026-06-16: up to 10 at once (avg 3.4) 2026-06-17: up to 9 at once (avg 3.3) 2026-06-18: up to 11 at once (avg 3.7) 2026-06-19: up to 16 at once (avg 4.7) 2026-06-22: up to 10 at once (avg 4.0) 2026-06-23: up to 17 at once (avg 3.7) 2026-06-24: up to 20 at once (avg 4.6) 2026-06-25: up to 14 at once (avg 5.0) 2026-06-26: up to 14 at once (avg 5.5) 2026-06-27: up to 5 at once (avg 2.0) 2026-06-28: up to 6 at once (avg 2.3) 2026-06-29: up to 10 at once (avg 2.8) 2026-06-30: up to 7 at once (avg 2.5) 2026-07-01: up to 12 at once (avg 3.3) 2026-07-02: up to 10 at once (avg 4.1) 2026-07-03: up to 14 at once (avg 4.2) 2026-07-04: up to 9 at once (avg 2.9) 2026-07-05: up to 9 at once (avg 3.1) 2026-07-06: up to 10 at once (avg 2.2) 2026-07-07: up to 11 at once (avg 3.2) 2026-07-08: up to 10 at once (avg 3.2) 2026-07-09: up to 13 at once (avg 3.4) 2026-07-10: up to 10 at once (avg 3.3) 2026-07-11: up to 5 at once (avg 1.6) 2026-07-12: up to 11 at once (avg 1.6) 2026-07-13: up to 8 at once (avg 2.1) 2026-07-14: up to 7 at once (avg 2.2) 2026-07-15: up to 8 at once (avg 2.8) 2026-07-16: up to 12 at once (avg 2.7) 2026-07-17: up to 9 at once (avg 2.1) 2026-07-18: up to 9 at once (avg 3.1) 2026-07-19: up to 10 at once (avg 3.2) 2026-07-20: up to 11 at once (avg 2.3) 2026-07-21: up to 9 at once (avg 2.6) 2026-07-22: up to 13 at once (avg 3.7) 2026-07-23: up to 10 at once (avg 3.6) 2026-07-24: up to 9 at once (avg 3.3) 2026-04-012026-05-012026-06-012026-07-01

They are not free. Swapping — what happens when a machine runs out of real memory and starts shuffling data onto disk to cope — climbs steadily with the number of agents running, from about 10.6 GB with none to 14.0 GB with 8 or more, on a machine with 24 GB of memory installed.

The chart below tracks both over the whole run. Memory used sits pinned near the 24 GB ceiling the entire time, and swap lives high with it — peaking at 34 GB, well past the physical memory installed, because swap spills onto disk. This laptop has been over its memory budget continuously for four months. Not spiking under load — simply living there.

Memory and swap used, by day
Memory used Swap used 24 GB installed
0 19 37 2026-04-012026-05-012026-06-012026-07-01
Memory swapped, by concurrent agents
0.0 7.0 14.0 0 running: typical swap 10.6 GB 1 running: typical swap 10.9 GB 2 running: typical swap 11.5 GB 3 running: typical swap 12.5 GB 4 running: typical swap 13.1 GB 5 running: typical swap 13.1 GB 6 running: typical swap 13.2 GB 7 running: typical swap 12.9 GB 8 or more running: typical swap 14.0 GB 012345678

Is 24 GB enough?

One way to ask whether a machine has enough memory: add up what it is actually holding — the part kept in fast RAM plus the part pushed out to disk — and compare it to the RAM installed. That total is the working set, the memory the workload genuinely wants at once.

Here it sits above the 24 GB line on 104 of 126 days. Typically it wants 29 GB, on a busy day 37 GB, and at its peak 52 GB — more than twice the RAM installed. The resident line, meanwhile, is pinned flat just under the ceiling: it can't rise to meet demand because there's no more RAM to rise into, so everything above it spills to disk. That flat line under a floating one is what a memory-constrained machine looks like.

Committed (wants) Resident (fits) 24 GB installed
0 28 56 2026-04-012026-05-012026-06-012026-07-01

The gap between the two lines is swap: memory the machine wanted resident but had to keep on disk instead.

The disk fills up, then empties in a single afternoon

Disk space in use, day by day, out of 1,858 GB. The underlying trend is upward at about 1.1 GB a day, which is the boring part.

The interesting part is the cliffs. The largest is 623 GB vanishing on 2026-07-08 — a working set of datasets and build artifacts that accumulated for weeks and then got cleared out in one go. A monthly average would show none of this.

0 923 1846 2026-03-19: 0 GB used 2026-03-20: 1331 GB used 2026-03-21: 1356 GB used 2026-03-22: 1334 GB used 2026-03-23: 1336 GB used 2026-03-24: 1340 GB used 2026-03-25: 1387 GB used 2026-03-26: 1418 GB used 2026-03-27: 1425 GB used 2026-03-28: 1422 GB used 2026-03-29: 1413 GB used 2026-03-30: 1413 GB used 2026-03-31: 1437 GB used 2026-04-01: 1508 GB used 2026-04-02: 1542 GB used 2026-04-03: 1535 GB used 2026-04-04: 1541 GB used 2026-04-05: 1546 GB used 2026-04-06: 1556 GB used 2026-04-07: 1567 GB used 2026-04-08: 1580 GB used 2026-04-09: 1557 GB used 2026-04-10: 1568 GB used 2026-04-11: 1569 GB used 2026-04-12: 1577 GB used 2026-04-13: 1578 GB used 2026-04-14: 1596 GB used 2026-04-15: 1594 GB used 2026-04-16: 1612 GB used 2026-04-17: 1604 GB used 2026-04-18: 1603 GB used 2026-04-19: 1606 GB used 2026-04-20: 1609 GB used 2026-04-21: 1565 GB used 2026-04-22: 1571 GB used 2026-04-23: 1627 GB used 2026-04-24: 1634 GB used 2026-04-25: 1652 GB used 2026-04-26: 1657 GB used 2026-04-27: 1692 GB used 2026-04-28: 1695 GB used 2026-04-29: 1666 GB used 2026-04-30: 1689 GB used 2026-05-01: 1707 GB used 2026-05-02: 1697 GB used 2026-05-03: 1693 GB used 2026-05-04: 1694 GB used 2026-05-05: 1699 GB used 2026-05-06: 1709 GB used 2026-05-07: 1734 GB used 2026-05-08: 1729 GB used 2026-05-09: 1722 GB used 2026-05-10: 1721 GB used 2026-05-11: 1649 GB used 2026-05-12: 1553 GB used 2026-05-13: 1556 GB used 2026-05-14: 1569 GB used 2026-05-15: 1580 GB used 2026-05-16: 1589 GB used 2026-05-17: 1588 GB used 2026-05-18: 1594 GB used 2026-05-19: 1661 GB used 2026-05-20: 1660 GB used 2026-05-21: 1640 GB used 2026-05-22: 1675 GB used 2026-05-23: 1673 GB used 2026-05-24: 1654 GB used 2026-05-25: 1659 GB used 2026-05-26: 1664 GB used 2026-05-27: 1685 GB used 2026-05-28: 1688 GB used 2026-05-29: 1681 GB used 2026-05-30: 1682 GB used 2026-05-31: 1691 GB used 2026-06-01: 1695 GB used 2026-06-02: 1699 GB used 2026-06-03: 1700 GB used 2026-06-04: 1704 GB used 2026-06-05: 1703 GB used 2026-06-06: 1762 GB used 2026-06-07: 1788 GB used 2026-06-08: 1806 GB used 2026-06-09: 1830 GB used 2026-06-10: 1828 GB used 2026-06-11: 1834 GB used 2026-06-12: 1833 GB used 2026-06-13: 1834 GB used 2026-06-14: 1833 GB used 2026-06-15: 1835 GB used 2026-06-16: 1827 GB used 2026-06-17: 1826 GB used 2026-06-18: 1831 GB used 2026-06-19: 1833 GB used 2026-06-22: 1835 GB used 2026-06-23: 1829 GB used 2026-06-24: 1831 GB used 2026-06-25: 1833 GB used 2026-06-26: 1825 GB used 2026-06-27: 1817 GB used 2026-06-28: 1813 GB used 2026-06-29: 1827 GB used 2026-06-30: 1844 GB used 2026-07-01: 1837 GB used 2026-07-02: 1841 GB used 2026-07-03: 1844 GB used 2026-07-04: 1838 GB used 2026-07-05: 1837 GB used 2026-07-06: 1838 GB used 2026-07-07: 1846 GB used 2026-07-08: 1223 GB used 2026-07-09: 1190 GB used 2026-07-10: 1217 GB used 2026-07-11: 1246 GB used 2026-07-12: 1248 GB used 2026-07-13: 1276 GB used 2026-07-14: 1282 GB used 2026-07-15: 1289 GB used 2026-07-16: 1294 GB used 2026-07-17: 1314 GB used 2026-07-18: 1312 GB used 2026-07-19: 1336 GB used 2026-07-20: 1357 GB used 2026-07-21: 1405 GB used 2026-07-22: 1437 GB used 2026-07-23: 1471 GB used 2026-07-24: 1470 GB used 2026-04-012026-05-012026-06-012026-07-01

4 restarts in 126 days

Each bar is one stretch between restarts. The longest ran 92 days. If you reboot weekly this will look reckless; if you run servers it will look normal.

The first bar is an undercount — that session had already been running for some time when the recording started, so its true length is unknown.

2026-03-20
92d
2026-04-21
45.5d
2026-06-05
21.3d
2026-06-26
27.8d