Building a Multi-Agent Code Review System Using the Viable System Model

I’ve been investigating multi-agent systems and their applications in development workflows. After reading Anthropic’s recent guide to agent coordination patterns, I wanted to experiment beyond established patterns like Evaluator-optimizer and Orchestrator-worker workflows. For this exploration, I’ve chosen automated code review as a sufficiently complex problem domain. I’m building a multi-agent system structured according to the Viable System Model (VSM) – a cybernetics framework that provides an elegant organizational structure for complex systems. This post explores how VSM can serve as a foundation for implementing a multi-agent code review system that’s both effective and adaptive. ...

March 6, 2025 · 3 min · Eoin H

RetentionCast: Building Real-Time Churn Prediction with Change Data Capture

TL;DR This is a quick write-up of RetentionCast, a system I built to predict customer churn in real-time using Change Data Capture. The system processes live transaction data through Kafka and Debezium to calculate churn probability and Customer Lifetime Value. Check out the GitHub repo The Churn Problem If you’ve worked in e-commerce or SaaS, you know customer churn is the silent killer of growth. Traditional approaches to churn prediction often involve batch processing - running models overnight on yesterday’s data. But by the time you’ve identified that a customer is at risk, they might already be gone. ...

February 21, 2025 · 4 min · Eoin H

Easy Semantic Search with Custom Vector Embeddings and Typesense

I’ve been kicking the tires on Typesense, an open-source search engine and alternative to Elasticsearch, for a personal project. So far I’m quite impressed with it. This is a small post recording how easy it was to set up vector embedding fields using a custom model. It is getting much easier to build semantic search applications. In previous work when I was setting up semantic search it was both exciting and frustrating, because the tooling wasn’t there and you had to build basically every piece yourself. It was cutting-edge, but you had to make your own cutting tools before you really saw the benefit. In my case, I had been using Elasticsearch and had to augment it with annoy, (using approximate K nearest neighbour in place of cosine distance, until Elasticsearch added vector search support). ...

June 3, 2024 · 3 min · Eoin H

Data Enrichment with LLMs for Obsidian: Better Tags

One issue I have using Obsidian is that I feel I don’t use enough of its feature set. I have lots of notes, but few are tagged particularly well, so it makes tags less useful overall. I would like to be able to make surprising connections and surface related items, which means imprecise tags are preferable to no tags, so false positives are less of a concern to me, and very low risk. ...

April 25, 2024 · 3 min · Eoin H

Retrieval-Augmented Generation Experiments (Part 1)

I’ve been researching LLMs, trying to find practical ways I can use them for myself, in my work or at home. One area that interests me is as tool to better understand the notes I’ve taken, topics I frequently learn about and areas I might want to explore more. I’m not the first to explore this territory (https://x.com/fortelabs/status/1749861644245848361). I’ll be looking at using a local model and building the system myself. I’m going to detail how I’ve built a toy system to chat with my notes. I’ll be using Ollama1 to serve an open-source model locally, and building the application using LangChain2 and StreamLit3. ...

February 14, 2024 · 6 min · Eoin H