Research

Current work ranges from programming languages and cyberphysical control to information geometry, emergent computation, signal reconstruction, and acoustic localization. Across those domains, the recurring problem is how to make structure and behavior legible when data, environments, or evidence are incomplete.

Most of this work is open-source. If any of it overlaps with your own work, reach out. Results, including their limits, are written up in the research notes.

Latest notes

All notes →
  • Learning agents · October 19, 2026

    When memory gets in the way

    A learning agent can recall every old answer and still struggle to use its experience. Experiments with small program learners show how memories steer search, when limiting their priority helps, and why solving more today can leave an agent less prepared for tomorrow.

  • Research notes · October 1, 2026

    Where knowing stops

    Some of the most useful things a research project can find are limits: questions a given kind of evidence cannot answer, however clever the method. Several of our results are limits of this kind.

  • Embodied agents · September 30, 2026

    Better models, same behavior

    A simulated agent we built kept passing targeted tests of what it had learned without acting better over a whole task. We describe five experiments where that happened, and what they suggest about connecting knowledge to action.

Jacquard

Programming languages
OCaml In progress

A small programming language for running, reviewing, simulating, and trusting programs written by models and reviewed by people. Every function signature carries an effect row, so one line tells you whether code can reach the network or filesystem, and nothing runs until each capability is granted explicitly. Effect handlers swap the outside world for a scripted fake, a recorded trace, or a probability model, so the same code runs unchanged in production and in test.

The bet: when most code is written by machines, the humans reviewing it need the language itself to answer what a program can touch and how certain it is, instead of relying on comments, logs, and careful reading. Version 0.1 works end to end as a research prototype, with an interpreter, type checker, standard library, and test framework.

Baseplate

Cyberphysical control
Go Private · in development

A control system and reference architecture for operations that mix machines, sensors, people, and materials. The organizing rule: deterministic control and safety stay local to machine controllers and safety systems, while platform services coordinate, authorize, plan, and observe, and never replace a controller's permissives or interlocks. Service contracts require durable state, idempotent commands, and defined behavior under retries, partial failure, and degraded clocks.

Software that coordinates physical operations usually either treats the plant like a web app or disappears into a vendor stack. Baseplate is an attempt to write the boundary rules down precisely enough to build against: what a service may decide, what only a controller may do, and what counts as evidence that work actually happened.

Private repository

Evidence Holonomy

Information geometry
Python Library

Python library implementing KL-rate holonomy estimators, entropy production estimation, and arrow-of-time detection. Reformulates existing information-geometric ideas about irreversibility into a usable tool with CLI and demos across audio, images, video, sensor data, and financial time series.

If you work with sequential data and want to measure directional asymmetry (does this process look different forwards vs. backwards?), this gives you a geometric way to quantify that. The arrow-of-time demos show it working across very different data types.

Embodied Field Intelligence

Emergent computation
Python · Jupyter Library

A Python research framework for embodied agents controlled by local fields rather than a learned policy network or centralized planner. From a limited view of their surroundings, agents maintain Bayesian belief fields for targets and hazards. A linearly solvable Markov decision process turns those beliefs, along with reward, effort, memory, pain, and information gain, into a value field and action policy. The system adapts while it runs and requires no training episodes.

The project tests how far inspectable field dynamics can support perception, memory, planning, adaptation, and safety without a conventionally trained policy. Current experiments cover partial observation, obstacle avoidance, reward reversal, safety barriers, and performance as environments grow.

CoCore

Signal reconstruction
Python Private

Exploring graph-based approaches to reconstructing coherent spatial fields from sparse, noisy sensor data. The graph structure handles three related problems: filtering measurement noise, identifying which sensors are drifting or broken, and interpolating between sensors to recover the full spatial picture.

Potentially applicable to environmental monitoring, infrastructure health assessment, or any domain with irregular sensor placement. The graph formulation means the approach doesn't require a uniform grid, which is where most classical interpolation methods start.

Private repository

Acoustic Event Locator

TDOA multilateration
Python Library · working prototype

Library for locating impulsive acoustic events (gunshots, explosions, fireworks) by time-difference-of-arrival from recordings made at known positions. It picks the event in each audio track, fits the source position with a 95% confidence ellipse, and flags ambiguous geometry, blocked lines of sight, and recordings whose clocks are too far apart to localize.

Built with forensic and public safety uses in mind. Bystander video often records an incident without showing where a sound came from. The recordings need shared or roughly known clocks, because one event cannot both locate a source and line up recordings whose clocks disagree. When the clocks are too far apart, the tool reports that it cannot localize the event.