Python and TypeScript. I build systems that run unsupervised, which mostly means I spend my time on the part that happens after they're built.
Currently: automation and AI agent work. Available for freelance/contract.
Unattended systems. An automated trading system running 24/7 against live market data — portfolio-level circuit breakers, atomic singleton locking, and a supervision layer that catches stalled processes, not just dead ones.
AI agents. An autonomous research agent with scheduled execution, tiered source evaluation and a self-extending task queue. An MCP server exposing its corpus as callable tools.
APIs. A payment-gated HTTP service live in production, with per-endpoint licence gating that disables any route whose upstream data source prohibits commercial redistribution.
Desktop plugins. Two published Obsidian plugins in TypeScript — an animated isometric operations dashboard and an interactive knowledge browser, both with custom Canvas 2D rendering.
I found four measurement errors in my own validation pipeline, each of which made an unprofitable strategy look profitable. Prices sampled after the market had closed. Observations attributed to the wrong local day. Two more like them.
Every one would have gone unnoticed by anyone not actively looking for it. Assessing whether a result is correct rather than whether it looks correct is the habit I care most about.
four-bugs — four measurement bugs that each made an unprofitable strategy look profitable, and how each one hid. Including a metric that scored t=+4.89 on nothing at all.
unattended — a lock that holds under a race, and a liveness check a running PID can't fool. Both exist because the obvious version failed in production.
obsidian-mcp — an MCP server giving an AI agent read/write access to a Markdown vault. Four tools, one file, no index to fall out of date.
History and Drama graduate, self-taught engineer.
📍 Galway, Ireland