Dulo AI Agent
Local-first AI agent runtime with a live control panel.




Overview
An AI agent harness built from scratch in TypeScript — a ReAct runtime with no agent framework and no vendor SDK, a risk classifier that judges every tool call from its arguments, and a gate that refuses to let the model declare its own work finished without evidence.
My role
Solo builder — agent runtime, tool sandbox, permission system, web panel, Go TUI
Highlights
- 01
127 tests at 88.7% line coverage over a 7,200-line runtime with six dependencies — no agent framework, no web framework, no LLM SDK
- 02
Tool calls are risk-classified from their arguments, not their names, so a build and a deploy are never treated the same — and an adversarial review of those rules found 8 real holes
- 03
The model cannot mark its own work done: a done-claim is schema-validated for quoted evidence, then re-checked by a separate read-only reviewer agent
Key features
- Hand-written streaming LLM client with a 7-value failure taxonomy, dual stall/total watchdogs and jittered Retry-After backoff
- Conversations as a branching message tree persisted to JSON Lines, with a seq-numbered event log a dropped client resumes without gaps
- MCP client over stdio and Streamable HTTP, every MCP tool gated by default because it sits outside the sandbox
- Agent roles and skills are Markdown files — deny-by-default tool maps, and skill bodies loaded on demand for a ~96% smaller prompt
- Go terminal client on Bubbletea with more test code than production code, including four smoke tests driving a real program