Work

Some stuff I built. CodeSentinel and the AI phone assistant are open source; the agent stack runs my own work.

CodeSentinel2026

A CODEOWNERS file makes a promise: these people own this code. The promise decays quietly. Someone leaves, a team is reorganised, a directory gets a new owner in an org chart that never reaches the pull request.

CodeSentinel runs offline against a local clone and compares the two sides. It reports four things: ghost owners, declared but with no commits inside the window; drift, declared but no longer the top author; critical files no rule matches at all; and modules where the owner never varies, which is a bus factor of one.

The output is a console summary plus a static HTML report meant to be published on every push. On its own repository it audits 302 tracked files in around a second, with npx, no account and no server. MIT licensed, Node 22 or newer.

TypeScript, Node.js, git, HTML report, MIT

sourcenpmreport

AI phone assistant2026

The call hits a Twilio webhook, which replies with TwiML telling Twilio to open a WebSocket and stream the audio. Audio goes to Deepgram for live transcription, the transcript goes to a chat completion, and the reply goes back through speech synthesis into the open call.

The work was the call state: one socket per call, barge-in when the caller talks over the assistant, timeouts that close a dead call, and a health route that reports whether the upstream APIs are reachable. Jest and Supertest cover the webhook and the socket handling in CI, against a mocked Twilio.

TypeScript, Node.js, Express, WebSocket, Twilio, Deepgram, CI: Jest + Supertest

source

Agent stack2026

Each agent is a profile with its own instructions, skills and memory, and a chief of staff routes work to the rest. Every piece of work is a card with an owner, a dependency graph and a completion contract, and a dispatcher decides what runs next.

The plumbing carries more weight than the prompts. MCP servers sit behind a proxy and each holds its own token, and the profiles' instructions are versioned, so a change in behaviour is a diff someone can read.

My own work runs through it. I write a card from my phone, an agent picks it up, and it comes back with what changed: the tests it ran, screenshots of the result, the files it produced.

Hermes Agent, MCP, Kanban dispatch, homelab, TypeScript, Python

More on github, or write to [email protected].