← All work
Personal project · 2026

Ghost of the City

A self-hosted AI walking companion for London drifts. Part archivist, part fellow walker, its voice and sensibility are tuned to the lineage of Iain Sinclair, Peter Ackroyd, and the deep-time London walk.

Ghost of the City is a psychogeographical agent. It runs on AWS Lightsail, with a Rabbit R1 acting as a push-to-talk voice interface and a private journal webpage that auto-generates from each walk. The stack is custom: an OpenClaw voice gateway connecting to Claude Sonnet, a context engine that holds the history and geography of each route, and a chronicle renderer that turns a walk into a private document. Each exchange is captured with GPS coordinates and weather data; the journal renders automatically, most recent walk first. The agent cross-references a datafile of known London psychogeographical sites as it responds, and can suggest drift directions based on buried rivers and Roman walls.

Ghost of the City system architecture: a live voice loop from the device through Apache and the OpenClaw gateway to Claude, and a separate five-minute cron pipeline turning session logs into the rendered journal page

The voice and sensibility of the agent are deliberately tuned to a specific lineage: the writers who have treated London as an object of deep reading — Sinclair, Ackroyd, Sebald at one remove, the Situationist drift as a method. The agent knows this tradition and operates within it without performing it.

A research project disguised as a side project: a way of working out what an agent that is always on, and always knows where it is, feels like with no product constraints on it. And what a companion sounds like, as opposed to an assistant.

Ghost of the City — R1 in Southwark
Ghost of the City — R1 at King's Cross gasworks Ghost of the City — R1 at Borough Market arches
Ghost of the City — R1 on Southwark Street

The project ran in London between March and September 2026. The server has since been decommissioned and the whole thing is archived publicly on GitHub: the persona brief, the sample data file, the capture and rendering scripts, the Chronicle of every logged exchange, and the journal page exactly as it was served.