We Let AI Agents Rewrite a 92M-Message-a-Day Service in Go Checkly, a monitoring platform, rewrote its Results Daemon from Node.js to Go using Claude Code, an AI agent, and the service now processes 92 million messages a day with zero incidents and a 70% reduction in running pods. The rewrite succeeded because Checkly built a black-box test harness with golden files and real boundary services before the agent wrote code, enabling byte-to-byte parity with the legacy system. Our Results Daemon processes about 92 million messages a day. We recently rewrote it from Node.js to Go, and we let Claude Code write it. We wanted to know whether we could trust an agentic rewrite for a critical, high-throughput production service rather than a prototype. It shipped with zero incidents, a 70% reduction in running pods, and a lighter database load. Go's stronger type system also proved a better fit for agents than JavaScript, adding protection against regressions and letting us ship faster and with more confidence. What made it work was the test harness we built before the agent wrote a line. Here's how we designed it, and the principles you can reuse on your own legacy services. The problem the-problem Checkly is a monitoring platform that runs synthetic checks, automated scripts that emulate real users, and uptime checks that confirm a system component is operational. A runner component executes all of these and produces a result that has to be processed, stored, and alerted on. Since we introduced uptime checks, and with the company's overall growth, the volume of checks run on our platform has doubled over the last year. Some components started degrading under that load. The most notable one was Results Daemon, a Node.js component written in vanilla JavaScript. Results Daemon is a background worker. It consumes results from our runner, writes them to databases, determines the check outcome, issues alerts, and schedules retries as needed. It also publishes WebSocket updates to our CLI and UI. In total, this component processes approximately 92,000,000 messages every day , around 40,000,000 of them check results and the rest WebSocket publishes. At that scale, it was becoming a bottleneck. It paged our on-call engineers more often, and limited type safety made every change harder to land safely. So we decided to rewrite Results Daemon in Go using agentic engineering. Designing a test harness designing-a-test-harness We built the harness before we started the rewrite. If an agent is going to write the code, something other than a human reviewer has to define what correct means. We built it on these design principles: - The harness tests the component as a black box. There is zero coupling between the code or language of the system under test and the harness itself. - Every test case provides an input and expects a deterministic output, with all outputs recorded in "golden files." These are generated against the legacy system and later used by the rewrite to assert byte-to-byte parity. - Non-deterministic fields, such as UUIDs or timestamps generated during the test itself, are written as