# Building a Local AI Agent from Scratch

*Jan 15, 2026 · AI, Engineering, Agents*

The first question when building an autonomous AI agent isn't "which LLM?" It's "what happens when it's wrong?" I spent several weeks building a local agent runtime, and the hardest problems had nothing to do with the model itself.

The stack: Node.js and TypeScript for the runtime, Ollama for local LLM inference, and LanceDB for vector-based persistent memory. No cloud APIs, no usage costs, no data leaving the machine. The trade-off is latency — a local model is slower than a hosted API, but for an always-on personal agent, privacy and control matter more than raw throughput.

The architectural challenge is memory. A context window is not memory. It's a scratchpad. Real memory means the agent can recall something from six weeks ago, understand how it connects to today's request, and respond with appropriate continuity. That requires a three-tier system: short-term (in-context), episodic (recent interactions indexed by vector similarity), and semantic (synthesized facts extracted from recurring patterns).

The second challenge is autonomy guardrails. An agent that can act — send messages, query APIs, execute code — needs a policy engine that distinguishes between safe, reversible actions and destructive, irreversible ones. I implemented an approval gate architecture where any action above a defined risk threshold requires explicit confirmation before proceeding. This isn't safety theater; it's what makes the agent trustworthy enough to actually delegate to.

The lesson: the capability of the underlying model matters far less than the architecture surrounding it. Orchestration, memory design, and policy enforcement are where the real engineering happens.

[← Back to all posts](https://raphaeljedwards.com/blog)
