Weather Mind

An active inference agent living on the Front Range. Every 15 minutes it reads Colorado Springs airport instruments, updates its belief about the hidden weather regime, decides what to look at next, and makes calls it can be graded on.
connecting…
Every fifteen minutes the agent scores each policy by its expected free energy and picks the lowest. These are the numbers for the policy it just chose.

What it believes is happening

Why it chose what it did

Its public call

Last 48 hours of belief

Surprise (nats)

Scorecard vs. "tomorrow equals today"

What it has learned: P(observation | regime)

Shading = current belief. Number = change since birth, in percentage points.

About this agent

Why this is not an LLM

There is no language model anywhere in it. No neural network, no training set, no calls to a model provider. The whole agent is about 1,100 lines of Python and numpy, and every number on this page comes from Bayes' rule and a few matrix products you can read in core.py.

An LLM predicts the next token from a model that was frozen when training ended. It has no belief about the world that changes when the world does. This agent has an explicit belief, five numbers that sum to one, and it revises them every fifteen minutes against real instruments. Its model of how weather works is a few hundred numbers you can inspect at /api/model, and those numbers change with experience.

It is also small enough to audit. Every decision comes with the table above showing exactly why it chose what it chose, and every public call is graded against what actually happened. It can be wrong, in public, and you can see the tally.

What is active inference

Active inference is a theory from neuroscience, developed by Karl Friston, about how living things perceive and act. The claim is that an organism keeps a generative model of its world and does one thing with it: minimize surprise. Perception does this by updating beliefs to explain what was just observed. Action does it by choosing what to do next so that future observations are less surprising, either because they are informative or because they are preferred.

Here the hidden states are five weather regimes. The observations are the airport instruments. The preferences say that being right about rain is good, being wrong is worse, and sitting on the fence has a small cost. A policy is a choice of which two instruments to read next plus a public call.

Each policy is scored by its expected free energy: how much it would reduce uncertainty about the regime, how much it would teach the agent about its own model, and how well it is expected to pay off. The lowest score wins. Curiosity is not bolted on. It falls out of the math, which is why the agent sometimes reads an instrument it has little experience with instead of the one it trusts.

Why it is alive and persistent

Nothing here runs continuously. Every fifteen minutes a fresh process wakes up, loads its brain from a single SQLite file, senses, perceives, learns, plans, acts, saves, and exits. The continuity is in the file, the way your continuity is in your memory rather than in any one moment of thought.

It was born at a specific moment, shown in the header, and it has aged one cycle at a time since. Its beliefs right now are shaped by every observation since birth. Old evidence fades on a roughly two-week half-life, so it can relearn the weather when the season turns instead of clinging to July.

There are two of them here. The veteran was raised by replaying ninety days of real airport reports through the same code, so it arrived with a fitted model and a graded record. The newborn started from the priors on the day it was switched on. They read the same live feed now, one minute apart, and will drift apart or converge on their own.

If the server goes down, the next heartbeat rolls its beliefs forward across the gap, and its uncertainty grows for the time it was asleep, as it should. If the file were deleted, this agent would end. A new one started from the same priors would be a different agent within a day, because it would have seen different weather.