Nikita Butenko

AI Automation Engineer. I build tools for other engineers, and these days for AI agents too.

Download CV PDF
Nikita Butenko

I'm an engineer. Since mid-2025 most of my work goes through AI agents. An agent takes a ticket, writes the change, deploys it into a test environment and runs QA on it, mostly on its own. The checks and the deploys are automatic too: an AI reviewer reads every pull request, and dev and production only deploy through CI. I write the rules, check the result and I'm responsible for what ships. Before the agents, for about twenty-five years, I've been building the tools other engineers work with: build systems, deploy pipelines, test setups and so on, whatever makes the team a little faster.

~150Mnpm downloads a year across my open-source packages
Auditedthe exchange platform I built from scratch passed an independent security audit
80%+observability bill cut, and logs kept longer

ai-tooling

Most of my agent tooling is about one problem. Agents claim a lot of things that aren't true, so I make them prove it.

The validator. When an AI reviewer says it found a bug, it also has to write a test that shows the bug. I run that test against the real code, and if it passes there was no bug, so the finding is dropped before a person even reads it.

mcp-review. A code review tool for AI agents. The agent sends me its changes, I read them in a web page and leave comments, and the agent picks the comments up and fixes the code. If the code changes under a comment, the comment is marked as out of date. I've built it on my own, a working version in a couple of days, and then kept refining it next to my normal work. One installer sets it up for three different agent tools.

The sandbox. All my agent work runs inside a container, not directly on my machine. I've shared the setup with the team and some of them use it too.

Before mcp-review. I built a framework for agent work, and then a review system where several agents checked each other. Both are gone now, I removed them when something better came along.

This is agent tooling and AI-assisted engineering, in Go and TypeScript, not machine learning (I don't train or fine-tune models).

work

Now · a futures trading platform (contract)

2022 – present · my main engagement

AI tooling, infrastructure and ops (2025–present). Agents write most of the code I ship on this contract: the CDK for the AWS platform behind the exchange, the Go services and the deploy tooling around them. The steps from ticket to QA run as skills under Claude Code and the Cursor CLI, mostly in full auto mode.

For security reasons agents only get access to test environments, dev and production deploy through CI only. A hosted AI reviewer runs on every pull request and has to prove each bug with a failing test. Every agent I run sits in a container that sees one project folder, and in eleven repositories a gate blocks any package published less than seven days ago. mcp-review, the review tool from the section above, came out of this work.

more on the agent setup

For about three months I ran a personal agent pipeline in the infrastructure repo. It took a ticket through implementation, review, a deploy into my own AWS test environment and QA. The QA agent had to show raw API output and Grafana screenshots. Every phase had a retry cap, and anything that got blocked came back to me. I've retired the pipeline under its own ticket once the agent tools caught up.

I keep the rule and skill tree in the infrastructure repo, linked into both Claude Code and Cursor, so every agent reads the same instructions. They cover the deployment model, Grafana alerts, ticket planning and release integration from four upstream services. One skill lets an agent push a pull request, watch CI and answer each review thread. In the trading monorepo the whole team shares the agent skills (incident investigation, financial verification, change verification). I've written most of them. All of the rules are in Simplified Technical English, and linters in CI check it.

The AI reviewer has rules so it doesn't repeat what the linters already said. Its failing tests run against the real code, and a finding without one is dropped before a person reads it. When an agent invents an API, I revert it under a commit that says so. The package gate also turns install scripts off.

The platform. The product went from a DeFi protocol, to on-chain perpetual futures on several chains, to a high-frequency trading platform, mostly off-chain with on-chain components. I've built the AWS platform under the trading engine from scratch and was its main author for over a year. Dozens of CloudFormation stacks per environment across five AWS accounts, all from one CDK entry point. It passed an independent security audit. Maintenance windows went from 30–40 minutes to under two, and the observability bill dropped by more than 80% while retention went up.

more on the platform

Every difference between environments is an explicit if-statement in the CDK code, so there are no surprises. The part I like most is the deployment setup. Trading services deploy blue/green, both colours share one signer identity, each registers its own service discovery record, and a single DNS name flips between them in one atomic change. The infrastructure writes that DNS record once and never touches it again, so a deploy and a live cutover can't step on each other. Underneath there's a lock on a parameter store write, and it won't let the same holder back in if that would flip the release direction.

I've also replaced the observability vendor with a stack I put together myself: Grafana, Prometheus and Loki, with every dashboard and alert rule in git. Retention went from three days to thirty, plus a permanent archive, and we stopped sampling logs. The old setup dropped all info and debug logs from the index and kept one in a hundred of the noisiest errors, because that was the only way to afford it (I know, I had set that vendor stack up myself half a year earlier).

Frontend, then deployment and dApps (2022–2025). I joined as a frontend engineer on the staking app, then the shared component monorepo that all the frontends were built on. Then I took over the release process: every upgrade replays against a fork of each chain and runs a full end-to-end suite before it goes live. I shipped the liquidity app, started the SDK and the React hooks under it, and moved the frontends onto IPFS and ENS.

more on the dApp years

The protocol runs on several chains, so every upgrade first replays against a fork of each one, then the end-to-end suite runs through stake, borrow, trade, settle and liquidate. Contract addresses, ABIs and the protocol docs are all generated from the deployment, so nobody has to update them by hand.

At the same time I was shipping the apps themselves, mainly the liquidity app. I wrote the harder parts of the web3 client as well: a pull-oracle client that survives a failed gas estimate, and a revert decoder that turns a hex error into a sentence a user can read. A couple of CLIs and a CI step pin every build to a shared IPFS cluster and publish it. That became the standard way the protocol's apps ship. I wrote the IPFS part of the desktop node too, so anyone running a node helps serve the apps.

The monorepo came with its build system, packaging and CI.

Two startups as a co-founder

2021 – present

Two Web3 product startups I co-founded, one after the other, alongside the contract work. Each time I was responsible for the full spectrum of technical tasks: product, frontend, infrastructure, contracts.

more on the ventures

The first (2021–2023) went from nothing to mainnet in about a year and a half, through several product versions. I was the main author of the client and the infrastructure. Users logged in with a wallet signature. Subscriptions were priced in dollars but settled on-chain as atomic transaction groups, and every media request was checked against live on-chain state.

After it wound down I started the second (2024–present), a media and NFT startup. I hired a developer to help, reviewed and merged their work, and built the platform, the content system and the AWS backend myself. The newest product there is almost entirely my own work, with a lot of agent automation.

GuruCat · a CMS for Telegram bot courses

2021 – present · built with my wife

A course creator sends us their bot token, and from then on they build and run the whole course from inside Telegram: every page, price and access rule, no developer needed. One Lambda serves every customer and there's no database, all the data is JSON files in S3, one prefix per customer, and so far it hasn't needed anything more. Still live, with paying customers, and I still add features to it. gurucat.club

Arbor Networks / NETSCOUT

2014 – 2020

The ATLAS team, building a global network visibility platform.

more on the ATLAS years

As we kept adding sections to the portal, it became clear the classic UI build approach couldn't continue (build time was growing and development experience was deteriorating). So I came up with a new architecture: every product section became its own containerised React app, server-rendered in its own process, assembled into one single-page application at request time. A shared vendor bundle so no section ships its own React, namespaced globals and scoped CSS so sections can't collide, section state that survives navigating away and back. About ten separate frontends ran on it. At that time (end of 2016) there was no such thing as "micro-frontends architecture", so I had to invent one. The reference implementation of that pattern was published a few months after my prototype.

I also started ADAM, the Arbor Digital Attack Map, a WebGL globe and map of live DDoS activity. It began as a free-time research project, became a finalist of the company-wide innovation challenge, and shipped as the Map module of NETSCOUT Cyber Threat Horizon.

And I spent years on Agora, the deployment tool every engineer there used: Terraform generated from YAML for several hundred modules, containers on Mesos, monitors in Datadog, all in Ruby and shell. I didn't start it, but I was its top contributor for the last three years and ended up the one supporting it for everybody, just because I really enjoy working on tools and making everyone's life a little better.

Earlier

2000 – 2014, and the contract years in between

the full run

Between Arbor and now (2020–2022). Three Sydney contracts. At icare, performance work and automated end-to-end testing on a large public site. At Woolworths' WooliesX, the API layer behind the mobile shopping app. At Ignition, platform work: a CI migration that made builds three times faster for about half the cost, monorepo packaging, and a UI testing strategy.

PeopleBrowsr (2013–2014). I built a new platform on NodeJS and my own modular frontend framework. Entity definitions were compiled from the server into the browser, so the same code ran on both sides (this was before isomorphic JS was a common thing). I interviewed and built the frontend team. We shipped several projects in about three months for the company's new top-level domains: the claim apps, the identity pages, and a domain storefront with Stripe payments and DNS through a registrar API.

The PHP years (2007–2013). At Cybertone I rewrote an internal CMS from scratch, built my own core on top of Zend, and reused it across more than thirty sites. At DAXX I was the developer and architect of a social networking startup, and ran the whole thing on my own SVN server. And there was e-commerce work at Ziller, Rocket Internet and others.

The start (2000–2007). In Ukraine I started with assembling and repairing computers, then was a sysadmin running over a hundred computers across six cities on one Windows domain. In 2004 I made my first commercial website, a PHP shop with a product catalog auto-updated from CSV (my version is still available in the internet archive). MSc in Computer Science, National Mining University of Ukraine.

open-source

I've maintained a set of small React components since 2015. Together they get well over a hundred million downloads a year. github.com/nkbt

the packages
Package Downloads / yr Since
react-copy-to-clipboard 98M 2015
react-debounce-input 37M 2015
react-collapse 12M 2015
react-height, react-interval, react-page-click and friends ~1M 2015–2017

react-copy-to-clipboard is under 50 lines of source. It renders no DOM of its own. It clones its single child and adds a click handler, which is why it composes with anything. Five major releases since 2015, and I still keep its toolchain up to date.

react-collapse solves the one animation CSS can't do: height auto. v5 was a complete rewrite. Instead of animating the height it measures the content. I tested it under a prerelease name in real projects first, then shipped it with a migration guide.

I've written most of the commits on these, but not all. Between the three big ones there are more than fifty outside contributors whose work I reviewed and merged. There's also a set of tooling repos from the same era: react-component-template shipped a whole component toolchain as one installable package, because I was running a dozen component repos and their configs kept drifting apart.

talks

Sydney meetups, 2014–2016: SydJS, ng-sydney, React Sydney, Node Ninjas, CampJS, NodeGirls.

I also mentored at Muses Code JS for a few years: workshops and coding dojos in JavaScript, Arduino and TDD. Very humbled and grateful to be recognised as Mentor of the Year 2018.

the talks
  • Own NPM modules: pitfalls (SydJS, 2014)
  • Modular, please (SydJS, 2014)
  • Truly modular AngularJS (SydJS 2014, ng-sydney 2015)
  • Brave New World (SydJS 2015, CampJS, recorded)
  • Un.Responsive (React Sydney, 2016)
  • OpenSource with an open book (CampJS, 2016, recorded)

about

First of all I'm an engineer. I love to solve problems. I spend most of my personal time reading about new technologies, new languages and new techniques. Even if I never use them directly, they usually inspire me to invent something new.

I started in Ukraine in 2000, assembling computers and learning PHP, and moved to Australia in 2012. Along the way I've been a sysadmin, a PHP developer, a frontend engineer, a platform engineer and a startup co-founder. Somehow I always end up responsible for the things everyone else builds on: pipelines, monorepos, component libraries, CI. Nobody assigns it to me, it just happens.

I also delete a lot, including my own work, when something simpler comes along.

I work fully remote, as an individual contributor. I've managed teams before and can do it again, but I like hands-on technical work more. The full history is in the CV.

Outside of work: surfing, downhill cycling, photography, cats, sci-fi and cyberpunk. For a few years in Ukraine I ran a little underground music promotion company: more than thirty club events, a couple of club openings and one open-air for about a thousand people with four dance floors. I got good management experience out of it, found many friends and had a lot of fun.