Here are some public-facing projects I’ve been working on recently.
A dependency-free TypeScript library for following a stream or append-only file line by line, like
tail -F: each complete line arrives as soon as it is written, with its byte offset (in the case of a file). It handles the parts that are easy to get wrong: appends racing the watch setup, coalescedfs.watchevents, lines torn across reads, and atomic replacement by rename.A CLI for orchestrating Claude agents: humans attach a terminal UI while agents and scripts get the full Claude Agent SDK control surface, including context surgery — rewinding a conversation or reshaping an agent’s effective context down to hand-picked messages plus a summary. See Controlling Claude’s context window.
My favorite text renderer for DAGs is Meta’s sapling-renderdag. This is a dependency-free TypeScript port of it.
A
cargosubcommand that keeps resolved dependency versions inCargo.lockfrom silently dropping below a committed baseline.A tiny, daemon-less async work queue: a directory you dispatch background commands into and take their captured results back out when they’re ready.
A CLI for orchestrating pi coding-agent instances, letting humans, agents, and scripts drive the same live sessions simultaneously — each on their own terms.
Typed Rust bindings for pi’s RPC mode: runs pi as a subprocess and drives every RPC command from Rust over a correlated event stream.
A differentiable version of INLA (Integrated Nested Laplace Approximation) for estimating the parameters of a Gaussian Markov Random Field, so that larger numbers of parameters can be fit with gradient-based methods.
Sequential importance sampling for counting and uniformly sampling the space of molecules, built in service of a machine-learning-for-chemistry project.
A differentiable Monte Carlo simulator of a phase 3 clinical trial, built to help a pharma partner plan a COVID vaccine trial: the planner states the forecasts they believe, sees how participant recruitment strategies affect time to success, and can use gradient-based optimization to guide decisions.
Publications
- Mapping the ionosphere with millions of phones
Nature 635(8038):365–369 (2024). doi:10.1038/s41586-024-08072-x Erratum: Nature 637, E23 (2025). - Using phones to map the ionosphere total electron content and improve location accuracy
AGU fall meeting abstracts G54A-02 (2023). - Integrating deep learning and unbiased automated high-content screening to identify complex disease signatures in human fibroblasts
Nature Communications 13:1590 (2022). doi:10.1038/s41467-022-28423-4 - It's easy to fool yourself: Case studies on identifying bias and confounding in bio-medical datasets
NeurIPS 2019 workshop on learning meaningful representations of life (LMRL) (2019). arXiv:1912.07661 - Applying deep neural network analysis to high-content image-based assays
SLAS Discovery 24(8):829–841 (2019). doi:10.1177/2472555219857715 - A “bottom up” characterization of smooth Deligne–Mumford stacks
International Mathematics Research Notices 2017(21):6469–6483 (2017). doi:10.1093/imrn/rnw201 arXiv:1503.05478 - Formal GAGA for good moduli spaces
Algebraic Geometry 2(2):214–230 (2015). doi:10.14231/AG-2015-010 arXiv:1208.2882 - Torus quotients as global quotients by finite groups
Journal of the London Mathematical Society 92(3):736–759 (2015). doi:10.1112/jlms/jdv046 arXiv:1201.4807 - Toric stacks I: The theory of stacky fans
Transactions of the American Mathematical Society 367(2):1033–1071 (2015). doi:10.1090/S0002-9947-2014-06063-7 arXiv:1107.1906 - Toric stacks II: Intrinsic characterization of toric stacks
Transactions of the American Mathematical Society 367(2):1073–1094 (2015). doi:10.1090/S0002-9947-2014-06064-9 arXiv:1107.1907 - There is no degree map for 0-cycles on Artin stacks
Transformation Groups 18(2):385–389 (2013). doi:10.1007/s00031-013-9225-x arXiv:1208.3239 - Toric stacks
PhD thesis, University of California, Berkeley (2011). Adviser: Vera Serganova.
* co-first author. In mathematics, author order is alphabetical. See also my Google Scholar profile.