Applied AI & Software Engineer. I build analytical runtimes, AI agents, agent infrastructure and local-first AI tooling — and I measure whether they work.
| Project | What it is | Strongest proof |
|---|---|---|
| BI Notebook Lab | Browser-based analytical runtime: DAX engine, filter context, semantic models | 1,024 tests · 82/83 DAX conformance cases pass |
| OpsTwin | Operational simulation lab comparing workflow changes with paired simulation | 430 tests (247 backend, 183 frontend) · live demo |
| DataBrief AI | Bounded CSV/XLSX analysis pipeline producing grounded, source-cited reports | 176 backend tests · every finding cites its artifact |
| Open VS Code Agent | Coding agent built and benchmarked for a local 7B open-weight model | 37.5% → 75.0% task success on a 24-task benchmark |
| IRIS OS | Personal AI OS: evidence-backed attention, governed agents, human approval | Architecture, contracts and synthetic traces |
| HALO Control | Local AI infrastructure control plane: model routing, telemetry, authorization | Architecture, contracts and a runnable routing demo |
BI Notebook Lab, OpsTwin and DataBrief AI are open source (MIT). IRIS OS, Open VS Code Agent and HALO Control are public architecture editions of active private systems.
Progression: analytical systems (BI Notebook Lab, OpsTwin) → applied AI (DataBrief AI) → AI agents (Open VS Code Agent) → agent systems (IRIS OS) → local AI infrastructure (HALO Control).
Overflow: an offline-resilient iOS training app (Expo, React Native, Supabase) with a dependency-aware sync outbox, row-level data isolation, program progression and 784 passing tests. It was assessed ready for an internal TestFlight beta.
- Lemonade: reject invalid backend-specific config keys (merged). Replaced a substring match in backend config validation with checks against each backend's declared variants, so misspelled keys such as
flm.flm_binfail instead of being silently ignored. Closes #3678. - OpenLIT: LangGraph memory connector (open pull request). A LangGraph Store memory connector with memory CRUD/search, namespace mapping, authentication, safe content handling, docs and integration tests.
- OpenJudge: reject degenerate empty-string matches (open pull request). A grader fix for degenerate empty-string matches.
| AI systems | Agent orchestration (CrewAI), MCP, tool calling, memory, human-in-the-loop approval, Ollama and open-weight models |
| Evaluation | Benchmark harnesses, conformance suites, failure taxonomies, Vitest, Pytest, Playwright |
| Backend | TypeScript, Node.js, Fastify, Python, FastAPI, SimPy |
| Frontend | React, Next.js, Vite, React Flow, Recharts |
| Data | PostgreSQL, SQLite, IndexedDB, DAX and semantic modelling, Power BI concepts |
| Infrastructure | Local inference, Vercel, GitHub Actions |
- Extending the Open VS Code Agent benchmark to BUILD and DEBUG tasks on local models.
- Governed execution and memory in IRIS OS.
- Bringing HALO Control up on the AMD Halo target hardware.


