Portfolio
Infrastructure I built and run. Each entry is written up with enough detail that a sceptical reader can check it, and the ones that failed are written up too.
Case studies
Open any row for the short version; the name links to the full write-up.
Agent infrastructure
terse 59% fewer tokens open
A proxy in front of MCP tool servers that losslessly compresses what they return. If a payload cannot be proven to reconstruct exactly, the original is forwarded untouched — lossless is the default, not a mode. Public, MIT, with a benchmark harness in the repo so you can measure the saving on your own tools.
src/terse/ the codec, proxy and policy
scripts/bench/ the TOON comparison in this page
tests/ 73 test files
corpus/ pinned benchmark payloads
BENCHMARKS.md every figure, dated
VERIFY.md how to check the claims
Generated from the repository, not drawn. Browse it.
RunEcho ~12 ms · 0 tokens open
Stops an agent from writing a call to a function your repo does not have — before the write lands, not after the build fails. It runs as a hook inside the agent loop, checking every edit against the symbols the code actually declares: no model, no network, no build, and a clean check costs no context at all. How often it is wrong is measured against dated git history rather than against a user clicking approve: 15.3% false positive, 33.7% premature, 51.0% a real unbacked reference.
cmd/ runecho-guard, -ir, -mcp
internal/ the guard, the IR and the oracle — 168 files
bench/ TOKEN-COST.md, FPAUDIT.md, FINDINGS.md
plugins/ the agent-side hook packaging
scripts/ enrolment and release tooling
docs/ architecture and the scope statement
Generated from the repository, not drawn. Browse it.
testgraph journeys, not tests open
Given a diff, it answers which user journeys the change could have broken, and in what order to test them. Every comparable tool answers in tests and needs coverage from a previous run; testgraph walks a static call graph backwards from the changed lines, so it answers on a repo that has never run its suite. Recall-first on purpose: it would rather flag a journey that turned out fine than quietly drop one that broke.
testgraph/ graph traversal, integrity guard, registry, CLI
harness/ accuracy, selectivity and seeded-mutation evals
hooks/ the pre-push hook that runs it on every push
journeys/ three hand-authored journey registries
maps/ generated symbol to journey maps
skills/ the agent skill that reads a map pre-commit
Generated from the repository, not drawn. Browse it.
harness 4 mechanical checks private
A one-man agent harness in two halves: a deterministic verdict on a code change, then the runtime that drives its own loop. The gate runs four stateless checks — the test suite, a symbol contract, staged secrets, reachable vulnerabilities — and a pass leaves the branch for a human to commit. There is no auto-commit, and the language model is never the judge.
Measurement
modelbench cost per solved task private
A personal benchmark that mines real bug-fix commits out of my own repositories and replays them against cheap models, several times each, so the gap between two models can be called noise or called real. It reports cost per solved task instead of a leaderboard score — and it publishes its own corrections: four figures it had already stated turned out to be a defective task dragging three capability tiers down at once.
Lodestone 5 of 10 at real scale open
Local retrieval over years of my own notes. Semantic search beat keyword search at 1,271 documents and lost to it at 57,500; the write-up leads with that. Includes a pre-registered kill gate, negative controls, and pooled blind judging.
Data and operations
Frostline 50,083 well records open
Spatial models over the public Michigan well record. Depth is predictable from location — Moran’s I 0.393 — and yield is not, at 0.089. A promising target was cut once it proved to be ~96% a restatement of depth.
template/scripts/ the Track B pipeline — export, backtest,
calibration audit, brief generation
template/src/ the estimator surface itself
plans/ the planning record, including the
negative results that closed a line of work
docs/ architecture
site/ the public build
Generated from the repository. Two directories are withheld: the lead and outreach trees are live business data, not engineering.
Origin Sentinel staged self-heal open
Origin-health detection for tunnelled services — the failure a healthy edge hides. It shipped without write access and earned remediation only once its classifications held up in the field.
Multi-provider LLM gateway spend measured open
Routes one coding agent across several model providers by task, with secrets kept out of the environment and cost tracked against a budget rather than estimated after the fact.
Live sites
ericminish.com self-hosted open
This site. Static files, no build step, no third-party requests, rsynced into a container on my own hardware and served by Caddy behind a tunnel.
nmwelldrilling.com reference build open
A contractor-facing reference build, end to end. It is labelled a sample on the page itself — a demo that pretends to be a client is a lie with a deploy pipeline.
thefrostlineco.com business surface open
The business surface for managed intake work, deliberately kept off this site. Separate identity, separate stack, separate promises.
ttrpg.ericminish.com campaign workspace open
The Campaign Table — a tabletop RPG workspace built on extracted rulebook PDFs. FastAPI and a React SPA in one container on its own LXC, deployed by CI with a canary step and a rollback path, and two staging containers behind it so changes land somewhere else first.
Also running
Systems I run
Knowledge graph 442 MB image private
Durable memory my agents write into by proposal only, every fact reviewed before it lands. Moving embeddings to a sidecar took the production image from 2.14 GB to 442 MB; trimming the tool surface cut one response from 271 KB to 26 KB.
Competitive intelligence private client private
A weekly market-intelligence pipeline. The model may never author a source — every citation is backfilled from the collector that actually fetched it, and a test fails the build if a client name is ever hard-coded into the repository.
NFLsignal auction board private
Projection and auction-price engine for fantasy football. Players with no honest baseline to compare against return null rather than a fabricated number that looks authoritative.
miwine news ingestion private
Links winery news to a known entity list. A deterministic matcher proposes candidates and the language model may only confirm or reject them — it is never allowed to invent one.
Honeyslate task scheduler private
A small scheduling app — FastAPI, a Svelte front end and Postgres — running in its own container behind a tunnel. Built to be used rather than demonstrated.
Workflow state systems private work private
Internal operations work turning messy handoffs into explicit states and next actions. Most automation failures I have cleaned up were not automation failures — they were ambiguous state with a scheduler on top.
The environment they run in
Homelab 10 nodes open
Ten machines under Proxmox carrying real routing, monitoring and backups — where a claim about how something fails is something I have watched rather than read.
Browser terminal SSO · no open ports private
A persistent multiplexed shell published through an identity-proxied tunnel. Same live session from any device, nothing listening on the public internet, and no session survives without single sign-on. It is also why the agent work on this page is routine rather than theoretical — a long job keeps running when the laptop closes, and I can look in on it from anywhere without leaving anything listening.
The terminal
My whole working environment is a browser tab. A terminal multiplexer runs on a machine at home, fronted by a small web terminal, published through an identity-proxied tunnel — no port is open to the internet and no session starts without single sign-on. Opening the same address from a phone, a laptop or a borrowed machine attaches to the same live session, so work does not have a device attached to it.
Below is a model of that console on an ordinary day — a rail of agent sessions beside the one that is open. Hover it, or give it focus, to watch it fill in.
site · rebuild the terminal section
shared 3: site · rebuild the terminal section
> make the hover demo match the real console● I'll read the component that's there now before changing it.● Read(portfolio/index.html) └ Read 377 lines● Search(pattern: "code-window", path: "assets") └ Found 24 matches● Update(assets/site.css) └ Updated with 62 additions and 18 removals● Replaced the pane grid with the rail-and-session layout.✳ Running… (esc to interrupt)
>
opus · ctx 15% · $6.20 · attached from two devices
▶▶ auto mode on (shift+tab to cycle)
scroll live agents tab cancel send stop
A model of the console, not a capture of a real session. The sessions, their output and the usage figures are illustrative; no host name, address, path or session content from the actual environment appears here. The surface is worth describing, its location is not.
Email is the best way to reach me — [email protected].