Skip to content
Projects

Things I've designed and shipped.

Each write-up focuses on the reasoning — the problem, the architecture, what was actually measured, and what the thing honestly is not.

0 bytes2026

Agent Egress Proxy — a fail-closed perimeter for outbound AI traffic

Every request an agent sends to a model vendor is redacted, metered and logged before a single byte leaves the machine.

RustAxumPII redactionBudget enforcement
Read case study
Deny by default2026

Grit — a policy gateway for MCP tool calls

A tool with no declared policy is denied, never defaulted. Every path is resolved before it is checked. Anything that may write is snapshotted first.

RustMCPPolicy isolationPath containment
Read case study
8 strategies2026

ADLC — adversarial verification judged by the filesystem, not the agent

Generate hostile variants of a tool call, snapshot before and after, and judge the diff against a declared expectation. Never read what the tool said happened.

RustAdversarial testingMCPState diffing
Read case study
1002026

PreviewProof: see your link the way the internet sees it

Paste a URL and see the Google, X, LinkedIn, Slack and WhatsApp previews it really produces, fetched the way the bots do, with a fix for each problem.

TypeScriptReact 19TanStack StartCloudflare Workers
Read case study
4 gates2026

Agent OS — the control plane that decides whether an agent may act

Not an agent. The thing that decides whether one may act, which runtime runs it, what it may spend, and when it must stop and ask a human.

PythonControl planeHuman-in-the-loopBudget posture
Read case study
Only what's new2026

News Brief

My own rebuild of Google's spoken news briefing: short bulletins I choose, stitched on Google Cloud into one brief that skips what I've already played.

PythonCloud RunffmpegText-to-speech
Read case study
≈ £02026

This site — a self-hosted portfolio with a real pipeline

Next.js, GSAP, a WebGL aurora and route changes that never wait on an animation — built accessibility-first and deployed on the same Coolify box as everything else.

Next.jsTypeScriptGSAPWebGL
Read case study

Also building

Smaller tools, mostly built for my own work with Claude Code and other agentic coding assistants. No case studies below — just what each one is and where the code lives.

Codebase-Intelligence MCP Server

Hybrid retrieval for Claude Code: keyword search fused with vector similarity via Reciprocal Rank Fusion, reindexed incrementally from the git history.

Semantic Code-Search MCP Server

Extended an open-source Rust MCP server with the resources, prompts, progress and cancellation surfaces it was missing — roughly doubling the codebase.

Jank-Detection MCP Server

Watches web animations like a human tester and flags jank, stuttering and visual artefacts using AI vision.

MCP Orchestration & Tooling

An orchestration platform for running multiple MCP servers together, plus a persistent Java language-server daemon that gives Claude Code instant reconnects instead of a cold restart per session.

jdtls-claude-daemonThe orchestration platform's source is private for now.

OpenAI-Compatible API Proxy

Adapts the Augment Code SDK behind an OpenAI-compatible API, containerised and deployed.