Nathan Knapp

Software engineer — scientific data systems and agentic AI

Eight years building the data infrastructure computational scientists depend on, six of them in drug discovery, most recently building production agentic AI at a clinical-stage biotech.

Things you can open right now

xcpredict

A learned ranking model over World Cup cross-country skiing, and the database behind it.

Predicts race results from what each skier has done in races like this one — same technique, similar distance, recently — with a similarity kernel over 1,661 races and 79,725 results. Browse any of 809 athletes, see what each is actually best at, and drive the model yourself: the controls recompute every prediction in your browser.

0.826 pairwise accuracy on a season held out of training, against 0.700 for ordering by published FIS points and 0.496 for random. The kernel is what earns it — ignoring technique and distance costs 4.4 points. Fitting weights on top of it adds almost nothing.
PythonNumPylearning to rankSQLiteweb scraping

hERG blocker prediction

A cardiotoxicity screen, and a demonstration of how much of an ML score in drug discovery is an artefact of the data split.

11,059 compounds from ChEMBL, Morgan fingerprints, scaffold-split so that chemical series are kept whole and a test compound never has a close analogue in training.

The same random forest reads 0.860 AUROC on a random split and 0.794 on a scaffold split. That 0.066 is the portion of the apparent performance that was recognising molecules it had effectively already seen — and a random split is the default in most tutorials.
RDKitscikit-learnChEMBLcheminformatics

waxcast

Ski wax recommendations from the weather the snow has actually seen.

Not the current temperature — the freeze-thaw history, time since snowfall and humidity that decide what actually works, pulled live for each Anchorage trail system. It says plainly when there is no snow and the recommendation is hypothetical.

JavaScriptOpen-Meteono build step

chilecule

Agentic drug discovery on fully open-source tooling.

RDKit, ChEMBL, AutoDock Vina and fpocket exposed as MCP tool servers driven by Claude agents, with a strict split between a layer that computes and a layer that decides — the agent never produces a number, only calls the tool that does.

A retrospective validation harness that checks the negative set for bias before reporting any enrichment. Running the agent over real tasks found two bugs no unit test caught, including chemistry — hypobromite esters — that would otherwise have shipped.

The hosted demo is that computing layer with the agent taken off the front: profile a compound, run it past the structural alerts, and run the validation harness yourself. No key, and nothing it tells you came from a language model.

Claude Agent SDKMCPRDKitdocking209 tests

climatelens

What climate change has already done to one place on Earth.

Two thirty-year normals from ERA5 reanalysis with a bootstrapped interval on the difference, five downscaled CMIP6 models for the 2040s each differenced against its own baseline, and what El Niño winters have actually done at that point over 77 years of NOAA's index.

Has an eval harness that traces every number in the generated prose back to the computed data. It caught the model writing "at 7,000 feet" about Santa Fe — correct, and not in the payload.

Pick anywhere on Earth and it computes all of that live. The narration layer is switched off in the hosted copy, so every line on the page is the data itself.

FastAPIERA5CMIP6LLM evaluation

otowi

Where and when driving in northern New Mexico kills people — and a traffic simulation underneath it.

Most traffic simulations built outside transport agencies are an OpenStreetMap network plus randomly generated trips — they animate beautifully and mean nothing. Demand here comes from Census LODES commute flows and ACS departure times, and is validated against NMDOT counts on stations held out of fitting.

A kilometre driven at 3am is about nineteen times more likely to kill someone than one driven at 8am — the rush hour is the safest time on these roads. That needed both halves: a federal census of fatal crashes for the numerator, and the simulation for the exposure denominator, because nobody counts traffic by hour on every road.

A quarter of the people killed here were not in a car, 64% of them after dark. The map ranks corridors by deaths per billion kilometres driven, prefers a real traffic count to the model wherever one exists, and says which it used — and it reports that only 12% of the deaths are on roads that can be ranked at all.

The simulation carries 14% of measured traffic and the README says so at the top. Five bugs found along the way shared one shape: a tool reporting success while silently discarding most of its input.

SUMONHTSA FARSCensus LODESNMDOT countsPython

ojo

Where automated speed enforcement is in northern New Mexico, what actually triggers a citation, and how much any of it can be trusted.

Santa Fe announces six relocatable trailers on a Facebook page. Albuquerque publishes a list of forty pole-mounted cameras with activation dates. Rio Rancho publishes nothing, and everything known about its sixteen cameras was mapped by volunteers. One map, three very different levels of legibility, and it says which is which rather than drawing them alike.

The limit is not the number that cites you. Under the Santa Fe ordinance it is 10 mph over — 5 mph in a school or construction zone, where the fine doubles — so the map shows a threshold speed per corridor, read from the ordinance rather than press coverage. Every corridor also carries the date it was last confirmed, because a trailer seen in August is a weaker claim than a pole the city listed last week.

Trailers get towed, so it draws signed corridors rather than pins: a pin asserts the camera is here, which stops being true the moment one moves. Routing, geocoding and address suggestions all run in your browser against public services — the page has no backend, so there is nowhere a route or an address could be logged.

PythonOpenStreetMapOSRMNCESLeaflet

Also on GitHub

vantage

A terminal summary and local dashboard for who is actually looking at your GitHub.

GitHub shows repository traffic one repo at a time, as raw counts, and deletes it after fourteen days with no API to get it back — if you did not look, it never happened. vantage snapshots every repo into local SQLite on each run, so history accumulates, then grades each referring domain by how strongly it implies someone is evaluating you. Fifty views from a search engine and three from a hiring platform look identical on GitHub's own page; only one of them is a decision being made.

Standard library only, borrowing the gh CLI's token. No accounts, no dependencies, and nothing leaves the machine.

PythonSQLiteGitHub APIstdlib only

Experience

2024 – 2026

Informatics Developer II

Gate Bioscience — remote

Sole engineer on most projects. Built the company's agentic AI capability from nothing: LLMs connected to internal databases and analysis tools over MCP, with the tool interfaces, structured outputs and grounding that let non-technical scientific staff rely on the answers — and the evaluation loops that made that reliance defensible. Architected the production PostgreSQL schema and the Python and R pipelines on AWS, Docker and Nextflow behind it.

2020 – 2024

Technical Developer II

OpenEye, Cadence Molecular Sciences — Santa Fe

Architected a configurable distributed search system over billion-scale molecular databases in Go, Python and C++ — data representation, indexing strategy and parallel query execution under latency constraints. Led technical direction of a major product, translating requirements from computational chemists and pharma customers into shipped capability. Promoted twice.

2017 – 2019

Earlier

SimScale · Stellar Science · Los Alamos National Laboratory

Meshing for a cloud simulation platform in Munich; C++ for US defence and satellite analysis; subsurface flow simulation across LANL's HPC clusters.

Education

M.S. Computational Science & Engineering

Technische Universität München, 2017 · B.S. Chemical Engineering, Yale University, 2014