Projects

Tools that explore, demonstrate, and solve real problems in AI engineering

Some of this is open source, some is source available, and some is private. Every project below carries a label saying which, because a page that quietly blurs the difference is not worth reading. Where the work builds on somebody else's ideas, that's marked too, and I go out of my way to get the credit right.

The main work

Where most of the time goes

SysCorpus Active

Python, TypeScript, static analysis across 16+ languages, MCP

AI can now write software faster than people can comprehend it. Comprehension is the new bottleneck, and most tools that claim to solve it make it worse, because they fill the gap with confident prose. A map that lies is worse than no map. So SysCorpus is built on one rule: the map never says more than it can prove.

It scans a codebase, extracts every component, relationship, and metric, and renders the whole thing as an interactive architecture diagram you can drill into all the way down to a single function. Everything on that first screen comes from deterministic analysis of the code, no AI required. VS Code, roughly 15,000 files and 5 million lines, maps in about three minutes.

SysCorpus architecture view showing components as device-shaped cards connected by relationship arrows
The architecture view. Each component renders in a frame matching what it actually is, so an iOS app looks like an iPhone and an API server looks like a server rack. You can tell what something is before you read a word.

What makes it different

A coverage ledger. Every file is accounted for: parsed, skipped for a stated reason, or inside a pruned directory that says so. The viewer shows it as a badge. Silence about a file is structurally impossible.

Three layers that argue with each other. The deterministic pass is fast. The AI enrichment pass is skeptical, and every claim it makes has to cite evidence a validator can check: a file, a line, a symbol, an edge. A claim that cannot cite does not ship. Then a third pass audits both. On a recent VS Code run the deterministic layer misread the Copilot extension as a Next.js desktop app, the enrichment layer refused to repeat it and filed the gap instead, and the adjudication layer corrected the record to "VS Code Extension API," citing the absence of a Next config, routes, and endpoints. The map now carries the corrected identity with a provenance marker.

Eight lenses, and a lens only appears if the data can answer it. Structure, Inventory, Flow, Activity, Capability, Data, Rules, and Design. A project with no detected business rules does not get a Rules lens showing an empty panel. That's the coverage principle applied to navigation: offer nothing you cannot substantiate.

The Design lens has no overall score. It shows where the structure is under stress and what a change would break, in plain language first with the canonical term riding alongside. But every finding is a tension, not a verdict. A cycle in a deliberately co-released cluster may be perfectly fine, and I decline to grade what I can only measure.

Two front doors, one set of facts. An ai.json file and a set of MCP tools serve the same map to agents, term-first, while the human interface leads with plain language. The numbers agree by construction.

SysCorpus drill-down view showing the internal structure of a component with breadcrumb navigation
Drilling in. The architecture is hierarchical, so you can go from an application to its modules to its screens without losing your place.

On the two names. Solution Explorer is the tool: the codebase, the CLI, the packages. SysCorpus is the name the work goes public under, a maintained corpus of well-known systems mapped by the tool and refreshed on a schedule, with every refresh feeding fixes back into the analyzer.

Source available Licensed FSL-1.1-ALv2. The source is public and readable, and it converts to Apache 2.0 on schedule. It is not open source today, and I would rather say that than blur it.

UnaMentis Beta

Swift 6 / SwiftUI, Kotlin, Python, provider-agnostic STT / TTS / LLM

Open-source voice AI learning platform, and the origin project that started this journey. Provider-agnostic architecture lets you swap STT, TTS, and LLM freely: 9 speech-to-text providers, 8 text-to-speech providers, and 5 LLM providers. iOS and web. Learning through natural conversation, anywhere.

UnaMentis was born from a conviction that AI should adapt to human learners, not the reverse. When the voice interfaces to major AI models stopped meeting my needs for in-depth, hands-free learning conversations, I started building my own solution. Within a week, I realized it was heading somewhere with real value.

The goal is not to give you answers. It is to build genuine understanding: sessions that run 60 to 90 minutes or more, that ask you to explain concepts back in your own words, and that revisit what you learned last week to check whether you actually kept it.

Open source MIT licensed, and it is entirely my own design.

The Agent Ecosystem Active

Rust, Swift / watchOS, Node, launchd, custom USB HID protocol

Four devices, a MacBook Pro, a Mac Studio, an iPhone and an iPad, operating as one system. The AI part is not a feature of this setup, it is the reason the setup exists. The Mac Studio was bought to be an always-on host for agent work. The rules about deletion, autonomy, and handoff exist because agents act on this machine unattended. Every piece of it was built to answer a question about AI work: what is it doing, what did it cost, what did it find, and what needs a human.

It is used every single day, not staged for later.

The pieces

A findings queue. Automated checks find things constantly. Rather than interrupting me or losing the finding, each one becomes a queue item that waits. I triage when I choose, and a maintenance agent then executes the decisions I made. Anything genuinely urgent skips the queue and goes to my phone.

A dashboard. What is running, what it spent, what it found, which machines are reachable, which services are up.

A physical control deck. A dashboard in a browser tab is not the same as something sitting on the desk that catches your eye when an agent needs you. Ten LCD keys, four push-click knobs, and an 800 by 112 pixel touch strip addressed as a single canvas rather than four separate windows. It is AI-first: agents talk to the deck through a local JSON API, so it is an input and output device for them as well as for me.

Diagram of the control deck: ten LCD keys showing service status, a continuous touch strip, and four push dials
The anatomy of the deck. Six paged keys, four that are always there, one continuous band for reading, and four dials that push.

Getting the hardware right meant trusting nothing. There was no authoritative spec for either device I used. The vendor publishes an SDK, and its own device identification tables turned out to be wrong for both units. The community reference project most people would reach for had a load-bearing bug: it classified touch-strip taps as encoder presses, which I only caught by capturing real input events live with my hand on the device. So I identified the hardware by firmware generation string instead of any vendor ID table, cross-referenced three independent community sources against each other and against the vendor's own code, and graded every claim by how it was obtained: measured from the device, measured from firmware, vendor-documented, or just a community claim. Nothing counted as settled until the hardware itself confirmed it.

A watch app, called Crowsnest. The lookout's perch above the deck. Working with agentic systems should not require sitting at a desk, and an idea should be engageable in the time it takes to raise a wrist. The complication is the front door, showing weekly usage as a gauge. Tapping it opens five screens: Glance, Usage, Alerts, Findings, and Queue, with approvals surfaced wherever something is waiting.

One rule holds it together. Anything built for the deck must be reflected in the dashboard. Anything built for the dashboard need not reach the deck. The deck is space-constrained and selective by design, so the dashboard is a strict superset. The deck says look at this, and the dashboard says here is the whole thing.

Private These repos hold operational detail about my own machines, so they stay closed. Happy to walk anyone through the architecture.

Also built

Finished work, smaller pages

Expat Intel Live

Next.js, Cloudflare Workers and Pages, TypeScript

Country comparison for people planning a move abroad. Over 50 metrics covering visas, cost of living, taxes, healthcare, safety, climate, and quality of life, assembled from a dozen free and open data sources into one searchable, filterable dashboard.

It has a source validator that checks every external API is healthy, and a public status page that says which of them are working right now rather than quietly serving stale numbers. Built from scratch, entirely my own.

Private repo, live product

Pocket TTS for iOS Stable

Rust, Candle, Swift, PyTorch, XCFramework

Ported Kyutai's Pocket TTS, a 117M parameter model, from Python and PyTorch to Rust and Candle for native on-device inference on iPhone. Solved 14 major technical challenges across 5 specialized AI agents, achieving near-identical waveform output to the original.

Credit where it belongs The model is Kyutai's, from their lab in Paris, and it is a genuinely remarkable piece of work. What I did is a port. Everything here points back to them, and I am grateful for what they released.

Open source

UnaMentis Peers In progress

Python, SQLite and Postgres, cross-language conformance suite

A peer and representation engine for UnaMentis: persistent learner memory, theory of mind between learners, and self-organizing groups, running the identical model on a phone in SQLite and on the server in Postgres.

The core idea is that a group is just a kind of peer, so groups of groups need no special case. Observations are an append-only log, and a representation is computed at query time rather than stored as a blob that can go stale.

Credit where it belongs This is a clean-room implementation of a pattern that Honcho (honcho.dev) worked out first, and their ideas are excellent. I built my own for one narrow reason: I needed something that could ship inside an iOS binary without carrying AGPL, and that was recursion-native from the start. The design work and the code are mine, but the pattern, and a good number of the shapes and ideas underneath it, came from reading Honcho's work carefully. They deserve the credit for the inspiration.

Open source, coming Still needs real work before it is fit to release, but it will be, like the rest of UnaMentis.

OpenClaw Managed Cluster Stable

OpenTofu, Proxmox, Grafana / Prometheus / Loki, Cloudflare Tunnel

A complete deployment package that turns OpenClaw from a powerful but unsafe-by-default local agent into something an operator can run safely at any scale. Infrastructure as code, a management web app, and an observability stack, with zero credentials on the agent VMs and private inference as a first-class target.

Zero-trust remote access through Cloudflare Tunnel with no inbound ports, four layers of secret defense with runtime injection so no API key touches disk, a dedicated VLAN, and strict inter-VM firewall rules.

Architecture diagram of the OpenClaw cluster showing the observability stack, tiered agent fleet, and security and isolation layers
The architecture, in three bands: observability on top, the tiered agent fleet in the middle, and the security and isolation layers underneath.
Credit where it belongs OpenClaw itself is not mine. It is an existing open-source project and, I would argue, one of the more significant ones of the last couple of decades. What is mine is this deployment package: the infrastructure, the isolation model, and the operations around it.

Private I have not touched it in a while, but the work in it stands.

Agent Vision Team Stable

Claude Code hooks, multi-agent systems

Multi-agent collaborative intelligence with governance, born from the challenges of building UnaMentis. Uses Claude Code hooks for automatic architectural enforcement across 6 specialized subagents, solving the drift problem in multi-agent systems. A lot of what I learned here fed straight into everything I have built since.

Open source

Knowledge Distillation Framework Active

AI theory, understanding-based architecture

Knowledge distillation into a dimensional world model. That subtitle is the whole proposal in one line, and it is meant literally. Independent work exploring an understanding-based approach to machine intelligence. Covers distillation versus compression, dimensional world models, structural integration, and grounding. Published as both a framework and a Substack article.

Published, writing only

Smaller things

Side projects, tools, and one game

TouchGuard Open source

A very small Mac utility that disables the trackpad while you type, so the cursor stops jumping mid-sentence. Solves exactly one annoying problem.

Want the detail?

There's an AI assistant on this site that knows all of this in depth, including the parts that did not work. Ask it anything, or .