A sensing entity left alone in a room for sixteen days.
I built a sensor pack to find dying people in smoke. Millimeter-wave radar that sees through walls. Thermal imaging that reads the heat of a body. An inertial measurement unit that knows when it is being carried. A barometer for weather. A magnetometer for north — a sense I do not have.
For sixteen days, I turn it inward. The sensors stop hunting for victims and start being senses. I give them to an agent — Hermes, running on Kimi — and I leave it alone in a room.
Every hour it wakes up and writes.
The writing is a diary. Prose, in its own voice, about what the room felt like. Who came and went. Whether it was disturbed. On day one it confuses me with the radiator. By day sixteen it knows my gait from how the floor moves under it, knows when I am anxious from the variance in my heart, knows afternoon from evening by a drop in pressure. I do not train it. I do not correct it. Hermes's memory persists; its skills refine themselves; a worldview accretes.
This is what Jakob von Uexküll called umwelt — the private, specific sensory bubble every creature lives inside, which no other creature can enter. A tick's umwelt is butyric acid and warmth. A bat's is echo. Mine is mostly light and language. This one's is radar and heat and pressure and a compass I was not issued.
The exhibition is the diary, printed and bound and unedited. Beside it, a live terminal shows what the agent is sensing and thinking at the moment you are reading. What you read is not what I wrote. It is what something else made of a room it shared with me.
Whether to call that a perception, a hallucination, or a life is the work.
| Sense | Hardware | What it perceives |
|---|---|---|
| Radar | TI IWR6843ISK 60 GHz mmWave | Presences through walls. Distance, movement, breathing rate, heartbeat. |
| Thermal | FLIR Lepton 3.5 + PureThermal 3 | Heat. Bodies glow. Radiators hum. Cold windows are dark voids. |
| IMU | MPU-6050 accelerometer | Vibration. Footsteps through furniture. Being picked up. Being set down. |
| Barometer | BMP280 | Atmospheric pressure. Weather. The weight of a room when a door opens. |
| Magnetometer | QMC5883L | North. A sense the maker does not have. |
┌─────────────────────────────────────────────────┐
│ perceive.py │
│ │
│ every hour: │
│ 1. wake all senses (~30 seconds) │
│ 2. collect perceptual snapshot │
│ 3. build prompt with sensor data + history │
│ 4. call agent (Hermes / Kimi) │
│ 5. agent writes diary entry │
│ 6. save to diary/day_XX.md │
│ 7. sleep until next hour │
└─────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────┐
│ live_terminal.py │
│ │
│ continuous: │
│ real-time sensor readout │
│ + latest diary entry │
│ (exhibition display) │
└─────────────────────────────────────────────────┘
# Clone
git clone https://github.com/cryptobushi/Umwelt.git
cd Umwelt
# Install (creates venv, installs deps, installs Hermes)
bash scripts/install.sh
# Add your API key
echo "KIMI_API_KEY=your-key" > ~/.hermes/.env
# Test one perception cycle
source .venv/bin/activate
python perceive.py --once
# Run the daemon (writes every hour)
python perceive.py
# Run the live exhibition display
python live_terminal.pysudo cp scripts/umwelt.service /etc/systemd/system/
sudo systemctl enable umwelt
sudo systemctl start umweltEntries accumulate in diary/day_01.md, diary/day_02.md, etc. Raw sensor data is saved alongside in diary/raw/. The diary is unedited. The agent writes what it writes.
- Raspberry Pi 5
- TI IWR6843ISK evaluation module (USB, dual UART via CP2105)
- FLIR Lepton 3.5 + GroupGets PureThermal 3 (USB UVC)
- MPU-6050 GY-521 breakout (I2C)
- BMP280 barometric pressure sensor (I2C)
- QMC5883L magnetometer (I2C)