MoriartyEngineering

Science and software are inseparable.

Computer engineering, machine learning, and astrophysics, from space telescopes and planetary defense to radio interferometry.

World-class observatories

EngagementsSince Oct 2024

Moriarty Engineering LLC contracts

alertapproveon target
Radio observatory · design contract · Jul to Oct 2026

Observing, automated from proposal to archive

Designing the automation of an interferometer's observing, starting with rapid response to gamma-ray bursts: on target within minutes of an alert, with operator approval.

Wrote the use cases with operators, PIs, and staff scientists, then the traceable requirements, a decision log, the system architecture document, and a phased roadmap for the build. The two prototyping experiments behind the design ran on coding agents: spec-first proposals, changes on task branches, lint and unit tests in CI on every push, and a human review of every merge.

primarysecond site
Planetary science data center · infrastructure · Oct 2024 to Apr 2025

Off aging hardware, with a second site behind it

Designed and deployed the primary virtualization system, XCP-ng and Xen Orchestra over a high-speed SAN, to move operations off aging infrastructure, with monitoring throughout.

Migrated the core science database onto the new system, and built out a second physical site for backup and disaster recovery.

Career

Twelve years in astronomy, on instruments that don't get to stop

Staff engineering at the Smithsonian Astrophysical Observatory and the Space Telescope Science Institute, 2012 to 2024.

Minor Planet Center · Technical Manager · 2021 to 2024

NASA's planetary defense clearinghouse

Led engineering for the clearinghouse of asteroid and comet observations, reporting regularly to NASA and the MPC Users Group. Designed a parallel orbit-fitting pipeline: RabbitMQ and containerized OrbFit workers on Docker Swarm. Built public visualization apps and Flask APIs on a replicated PostgreSQL cluster.

Architected the on-prem infrastructure underneath: an iSCSI SAN on Dell PowerVault arrays, XCP-ng virtualization, Prometheus and Grafana monitoring with alerting, and a remote backup site.

Also: hired and managed a team of engineers, and mentored an intern who built a near-Earth-object classifier in TensorFlow.
correlator
Submillimeter Array · Senior Software Engineer · 2018 to 2021

Eight telescopes on Maunakea, and the Event Horizon Telescope

Led software for the interferometer: networking and software for the FPGA-based SWARM correlator, and the VLBI software used in Event Horizon Telescope campaigns, fixed and automated. Maintained and extended the array's C control software on LynxOS and Linux, and created smax-python, the client for the array's Redis-based real-time messaging layer, which the SMA team still maintains.

Reworked the observatory's meetings and project management, and taught Python, testing, and version control in Cambridge and Hilo. That discipline carried SWARM's expansion to all six quadrants through a government shutdown, the Maunakea protests, and COVID.

And: founded and chaired the CfA Software Engineering Steering Committee.
Space Telescope Science Institute · 2012 to 2018

Hubble, Webb, and a coronagraph testbed

Led new features for APT, the Java tool scientists use to design and submit Hubble and JWST observing programs, including the JWST instrument templates. NASA recognized the work twice: bright-object checking for Hubble's moving targets, and JWST coordinated parallel observations.

Then lead software engineer for the Makidon Optics Lab: the Python control library for HiCAT, with the environmental sensing and safe shutdown that made remote operation possible, released as catkit, and the real-time pipeline that wrote every exposure to FITS.

Co-investigator on a funded NASA TDEM proposal, and first author of the testbed's software paper.

Before astronomy

Harmonia · Software Engineer III · 2010 to 2012

AI for a Navy battle-management SBIR

Led a Navy Phase II SBIR building AI-driven software that drew on command-and-control systems to recommend resource plans, and won a follow-on contract to turn the code into an SDK. Also applied neural networks to predict traffic at a simulated intersection.

JDSU, now VIAVI · Software Engineer I · 2007 to 2010

Device software for network test equipment

C and C++ for IPTV and network test devices, from RS-232 control of a femtocell antenna to jitter measurement and a customer-facing XML API, plus the JBoss monitoring and alarm system that showed their live data.

University of Central Florida · 2005 and 2007

M.S. in Intelligent Systems and B.S. in Computer Engineering

Master's thesis: teaching non-player characters in Quake II to behave like the people playing them, by watching them play, with time-delay neural networks.

Read the thesis →
Services

What I do

Scientific software and data infrastructure

Pipelines, instrument control, and the unglamorous plumbing between an instrument and a result someone can publish.

Local AI

Open-weight models on hardware you own, tuned for the work, and coding agents that run spec-first under human review.

On-prem infrastructure and disaster recovery

Compute, storage, and virtualization in your own building, monitored, with backups that have actually been restored, handed to your own staff.

Services in detail →

LabSelf-directed

Things built for their own sake

Unpaid, unscoped, and finished anyway. Most of it built alongside coding agents, spec-first, with tests and a person reviewing every merge.

Trogdor opened up: a Dell PowerEdge server with four NVIDIA Quadro RTX 5000 cards
GPUs4 × Quadro RTX 5000, Turing
VRAM64 GB, two NVLink pairs
Memory376 GB DDR4
EnginesvLLM, llama.cpp
Daily modelQwen3.8-27B, fp8 KV cache, 512k context
Dell PowerEdge T640 · vLLM · llama.cpp

Trogdor, a GPU server for coding agents

I built it by hand from secondhand parts: four Quadro RTX 5000s at about $400 apiece in a used PowerEdge, engineered to run quietly beside a desk. It serves the open-weight models my coding agents run on, up to six agent streams at once.

The cards are Turing, and vLLM turns off its FlashInfer attention backend on anything older than Ampere. FlashInfer itself had already fixed the case this model needs, so I lowered that one gate in a local build. On the same 21k-token agent turn:

MeasuredStock vLLMPatched
First response, cold41.7 s13.0 s
Later turns1.7 to 2.0 s0.4 to 0.5 s
Decode at 20k context28.9 tok/s49.0 tok/s
KV cache capacity496k tokens972k tokens, fp8

Tuning since, including a newer vLLM and a PCIe all-reduce path that upstream had only tested on current cards, has it at 63 tokens a second at 20k context, and 170 a second across four agents at once.

The experiments that didn't become the daily driver taught as much. Qwen3.8-Flash-Next, a 125B mixture-of-experts model, can't run on Turing under vLLM at all, so it went onto llama.cpp instead: first booted from an unmerged pull request, 94 GB quantized with a dozen layers of experts in system RAM, and 25 tokens a second at 20k context. Multi-token prediction made vLLM 2.5 times slower on this hardware, while the same draft head sped llama.cpp up by 49 percent on a second box, an RTX A4500 that now runs the read-only subagents.

What it proved: the biggest upgrade was reading the source, not buying newer cards.
issueproposalchangechecksmergehumanhuman
Python · Starlette · React · opencode

Braid, a coding agent from issue to pull request

A graph of spec-driven steps runs the agent. Each step has to pass a scripted check on the repository, and a person approves the proposal and the merge. OpenSpec and Gitflow, written as graph workflows, and extensively tested.

What it proved: agents get trustworthy when every step has a check a machine can run.Braid on Forgejo →
Trogdor and Strongbad, two Dell PowerEdge servers, in a small rack beside a desk
XCP-ng · Forgejo · Portainer · Prometheus

An all-Linux lab on two servers

Two Dell PowerEdge servers in a small rack. Strongbad is the XCP-ng virtualization host, running Forgejo CI runners, git-driven Portainer deployments, and Prometheus, Grafana, and Loki monitoring, plus identity management and backups. Trogdor, the GPU server featured above, runs the models. Open source throughout; nothing licensed per seat.

What it proved: on-prem isn't theoretical. It's a Tuesday.
The My Stop departure sign in its 3D-printed case, showing Forest Hills departures
CircuitPython · Matrix Portal S3 · MBTA v3

My Stop, a departure board for one stop

A 64×32 LED matrix on an Adafruit Matrix Portal S3, in a case I designed in OpenSCAD and 3D-printed, with a small API in front of MBTA predictions so the sign never has to think. Sixteen characters a line is a brutal editor: Ashmont/Braintree becomes Ashmo/Brain.

Web app · built with coding agents

Soundcheck

Gathers listings from dozens of Boston-area venues, with playable tracks for each artist, so you can hear a band before you buy the ticket.

Web app · offline-first

JP Porchfest

An offline festival companion for Jamaica Plain's Porchfest, with on-device walking routes. Built in a day, and used by hundreds of attendees.

5761986483269247
opencode · llama.cpp · vLLM · self-hosted MCPs

Freedoku

An offline-first sudoku app with no account and no server. Every puzzle has a unique solution and never needs a guess. Built with opencode on self-hosted models served through llama.cpp and vLLM, with self-hosted MCP servers for tools.