🌱 Software Engineering student · UIT, VNU-HCM · Ho Chi Minh City
🦉 Local LLMs · macOS · Flutter · Web
Turning local AI models, and the agents that wield them, into calm everyday tools.
I build small, polished tools — lately local-first LLM utilities for macOS, alongside cross-platform apps in Flutter and on the web. I like software that feels calm to use: careful typography, defaults that respect the person using them, and no chrome that isn't earning its place. Most of what I make starts as something I wanted on my own machine.
Ship calm, honest tools, and let the defaults respect whoever is on the other side of the screen.
- agent-harness — governing a Claude + Pi coding fleet with one rule source and a destructive-op safety rail. (Jun 2026)
- owlet — a local-LLM rewriter for macOS: on-device, inline diff, nothing leaves the machine. (active)
- Going deeper on on-device LLM workflows and Swift/SwiftUI. (learning)
|
Governing a Claude + Pi coding fleet: one rule source, a destructive-op safety rail, and a bounded memory design. |
A local-LLM rewriter for macOS: select text, press a hotkey, and it is rewritten in place with an inline diff. On-device, nothing leaves the machine. |
owlet · Swift · local LLM
A friendly local-LLM toolkit for macOS. Its Rewriter is a Grammarly-style popup: select any text, press fn+Ctrl+R, and it's rewritten in place with an inline diff — all running on a local Ollama model, so nothing leaves your machine.
MoleMac · SwiftUI
A minimal macOS front-end for the Mole system cleaner — live status, cleanup, uninstall, and disk analysis. Built on editorial design principles: premium type, a single accent color, nothing it doesn't need.
ztf-practices · TypeScript
A mock-exam platform for the Zalo Tech Fresher test — 100 technical and 30 aptitude questions, auto-graded, running entirely client-side. Built so peers can practice under real conditions.
second-brain · TypeScript · React
A read-only dashboard that turns local AI-session logs into a navigable knowledge graph — full-text search, backlinks, and live updates over WebSocket.
A lot of my recent work runs through AI coding agents, and I care as much about governing them as using them. I keep Claude Code and Pi on one shared source of behavioral rules, behind a hook that holds destructive commands for confirmation, with a typed long-term memory they share across sessions — edit a rule once and every agent stays in lockstep.
agent-harness · Bash · Python
The sanitized, documented version of that setup: one source of truth for a couple of coding agents, a destructive-op safety rail, and a bounded memory design.
Comfortable moving across the stack; going deeper right now on Swift/SwiftUI and on-device LLM workflows.


