devin jones

london

I build AI tools and other software, working with AI coding agents, and run them on my own server. Almost everything below was built this year. By day, I lead a risk and controls team at Citi.


0 9 * * 1-5 the job — monday to friday, at 09:00

rolesvp, controls governance & oversight
orgciti·london·since 2022
scope14 global assessment units·team of 12·90+ countries
beforedeutsche bank 2015–2022·capgemini invent 2018
controls cut70,000 → 10,000
work done on time40% → 98%
units merged1,400 → 14 → 7
people trained150

I lead the team that checks how well one of Citi's global businesses manages its risks, working for the teams that own those risks. Before that, I ran the programme that set this up. It's also how I build AI: the rules that matter are enforced by the software itself, not just written into the AI's instructions, and I test them by trying to break them.


0 11 * * 6,0 the habit — saturday and sunday, at 11:00

tap any project to see it

Strata at dusk: the crashed lander on a hilltop beside a furnace, a generator and two power poles strung with lamps, mountains behind
Recourse demo: on the left, the claim outcome as code wrote it, with the three payments, the decision dates and the scheme's limit; on the right, each step the model took, including a draft reading don't worry, you'll get all of your money back, struck through and not sent
private network · tailscale server · hetzner allowlist · sandbox writes: own copy no keys can’t merge fails closed asks if stuck state in sqlite · survives reboots pauses near the usage cap github phone files tasks laptop ssh the server can’t reach my devices dashboard tailnet only timer every minute claude code agent draft pr only i merge
Discrepancy demo: an editable synthetic presentation on the left; on the right a refusal, a discrepancy citing UCP 600 article 14(d), the scope of examination, and the generated notice of refusal
CAD Blocks demo: a museum photo of a Windsor comb-back armchair beside the plan, front and side elevations drawn from it at 597 by 673 by 1121 mm, with the block names and a download button
RoboROI assumptions and sources page, listing which cost defaults are not applied to the scenario and why
On a pull request, the IOU bot has commented that an earlier promise to add retry handling to fetchUser is not kept by this diff, which only refactors the JSON parsing. A thumbs-up reaction follows, and the bot has filed an issue: IOU: Add retry handling to fetchUser
research web search run 1 run 2 run 3 run 4 run 5 median in code submit + comment one forecast per question, with its reasoning
Together app home screen showing private chat, couple session, and the day's question
Swole on a phone: a bench press card with the weight field pre-filled at 62.5kg and a prompt reading 60kg times 4 sessions, try plus 2.5kg
The Home Reform editorial homepage prototype: deep plum panel with the studio wordmark beside a photograph of a warm ochre bedroom
Fined, Lad title card: a set of scales above the words the stag do fines court

A mining game you play in the browser, where every pixel is a real grain of sand, drop of water or lump of rock that falls, flows and burns. Your lander has crashed, and to fly home you dig down through five layers of the world for what its repairs need.

Nothing in it is scenery. Water finds its own level, gas gathers in pockets and explodes if you bring a flame near it, lava turns sand into glass, and every furnace, drill and power line you build is paid for with what you dug out of the ground. It has real-time lighting, music generated as you play, and an ending. About 14,000 lines of plain JavaScript with no libraries, checked by 136 automated tests that play whole games in seconds. It needs a keyboard and mouse.

playable play it →
vanilla js · webgl2 · web audio · ~14,000 lines

An AI assistant that helps someone who has been tricked into sending money to a scammer claim it back from their bank. It checks who they are, finds the payments, records the claim and tells them what happens next. The bank and its customers are made up, and you can talk to it as one of them.

Banks want AI that can talk to customers, but they can't let it make promises about money. Here the AI only holds the conversation. Whether a claim is covered, for how much and by when is decided by ordinary code that follows the regulator's rules, and every message is checked before the customer sees it. That makes it something a bank could test and trust. It has been tried in hundreds of conversations with simulated customers, including some trying to trick it.

python · claude sonnet 5 · 1,667 automated tests

I file a task from my phone and an AI coding agent on my server works on it unattended, then reports back or hands me its code as a draft. If it gets stuck, it asks me a question and I answer from the phone.

An agent left alone needs limits that don't rely on it behaving, so these are set outside the AI. It can't read passwords or keys, and it can only change its own copy of the code. Publishing is left to the server, which sends me the code as a draft, and nothing is merged without me. The server and my devices share a private network I set up, which is the only way into its control panel, and because the agents browse the web, the server can't open a connection to my laptop or phone. Each limit was tested live.

running node · claude code · sqlite · systemd · bubblewrap · tailscale · 53 automated tests

Checks the paperwork a bank receives when it pays for goods under a letter of credit, a common way to pay in international trade, and decides whether the documents can be accepted or must be refused.

This checking is slow, specialist work, and a bank that refuses too late loses the right to refuse at all. Every problem it finds points to the exact document and field, and names the international rule it breaks, so a person can see exactly why. It also keeps track of the five working days a bank has to refuse.

python · no outside libraries · 642 automated tests · eight rounds of review

Turns a photo of a piece of furniture into a CAD block, the scale drawing that architects and interior designers place in their plans. It draws the piece from above, from the front and from the side at its real size, in a file that opens in AutoCAD, Revit and SketchUp.

When a maker doesn't publish a drawing of a piece, the designer has to draw one or use a generic one. Here the AI reads the photo and suggests the shapes, then ordinary code fits the drawing exactly to the size the designer gives, so the measurements come from the designer and not from the AI's guess. The AI then compares a picture of its drawing with the photo and corrects what it got wrong. Built with a working interior designer, and live since 4 October 2026.

python · fastapi · claude opus 5.5 · ezdxf · 306 automated tests

Works out what a humanoid robot really costs to own over its life, not just its price, without favouring any manufacturer.

Every cost figure comes with its source, so a buyer can check the numbers rather than take them on trust, and decide whether a robot would pay for itself.

node · express · nginx · hetzner

A bot that enters Metaculus tournaments, where bots compete to predict real‑world events. For each question it searches the web, asks five AI models for a forecast, and submits the middle answer with its reasoning.

Taking the middle of several independent forecasts is usually more accurate than trusting any one of them. In its first tournament its average score per question was the highest on the leaderboard. It only answered 10 of the 58 questions, so it finished 27th of 182, and ten questions is a small sample, but it was a strong start. It now checks for new questions every twenty minutes.

python · one dependency · openrouter · systemd · hetzner

A GitHub bot that remembers promises developers make in code review, like "I'll add retry handling later", and speaks up when a later change touches that code without keeping the promise.

Those promises are easy to make and easy to forget, and that's how small problems pile up in a codebase. It only files a reminder once a person gives it a thumbs‑up, so it doesn't nag. Built on my own in a day at my first hackathon, run by AI Tinkerers on 12 September 2026.

node · one dependency · anthropic api · github app · 33 tests

An AI relationship coach for couples, with a private chat for each partner, sessions together, and a question for the day.

Built with safety first, because people bring hard things to a coach. Every message is checked for signs of crisis before the AI replies, each couple's conversations are encrypted separately, and no message is ever kept in the logs.

in testing fastapi · supabase · claude · react native

A workout tracker I've used since March 2026. Three of us use it now, each with our own copy.

It's easy to lift the same weights week after week without noticing. This pushes you on: lift the same weight twice and it suggests the smallest step up your equipment allows.

running node · express · sqlite · pwa, no build step

The website for The Home Reform, a London interior design studio, moved off Squarespace onto a site built for it.

A live site for a real business. The studio's designer, who doesn't write code, can work on it safely, with the live site protected from accidental changes.

next.js · nginx · pm2 · hetzner

An app for running a fines court on a stag do: anyone can bring a charge, the group votes on how serious it is, and the best man gives the verdict. There's a version for a golf four‑ball too.

Used by real groups, which is a tougher test than any demo. In the golf version the fine passes to whoever slipped up most recently.

live node · express · sqlite / postgres · react

devinjones521@gmail.com linkedin/in/devinjones521