The goal
Start with one command. Finish with a private desktop assistant.
We are not training a giant language model from scratch. We are assembling a useful local system around an existing open model: an inference engine, a small controller, local memory, speech, and a deliberately limited tool layer.
Microphone
│
▼
Offline speech-to-text ─────┐
▼
Python controller ◄──── SQLite memory
│
▼
Ollama + local LLM
│
┌───────────┼───────────┐
▼ ▼ ▼
Answer Safe tools Local files
│
▼
Offline text-to-speech
│
▼
SpeakersYou will need Internet access during setup to download installers and model files. After those pieces are on the machine, the core assistant can run without sending normal conversations to a cloud LLM. Current weather, news, web search, and similar live information require a network tool that you explicitly add.
Choose the simplest deployment first
| Approach | Best for | Tradeoff |
|---|---|---|
| Native install | Most readers; easiest GPU, microphone, and desktop integration | Less isolation |
| Docker | Repeatable deployment and easy service management | Audio/GPU setup varies by OS |
| Virtual machine | Strong isolation and lab environments | GPU passthrough and audio can be more work |
| Dedicated mini-PC | A finished always-on household assistant | Requires another machine |
This guide uses a native install first. Once the assistant works, Chapter 10 shows how to turn it into a service, container, VM, or dedicated appliance.
Build path
Start here
What we are building
Follow in order →Chapter 01Hardware
Choose what your PC can run
Follow in order →Chapter 02Ollama
Install the local AI engine
Follow in order →Chapter 03First model
Run it and prove it is offline
Follow in order →Chapter 04Personality
Create your assistant model
Follow in order →Chapter 05Controller
Connect Python to the LLM
Follow in order →Chapter 06Memory
Add local long-term memory
Follow in order →Chapter 07Ears
Add offline speech recognition
Follow in order →Chapter 08Voice
Add offline text-to-speech
Follow in order →Chapter 09Tools + safety
Let the assistant do useful work safely
Follow in order →Chapter 10Appliance
Native, Docker, VM, and auto-start
Follow in order →Want a safety net?
Download the small reference implementation and compare it with your work as you go.
Principles for the entire lab
- Get a tiny model working first. A small model that runs is more useful than a giant model your machine cannot load.
- Keep privacy boundaries explicit. Local files and memories stay local unless you intentionally add a network integration.
- Never let model text become arbitrary shell commands. Tools should be named functions with validated arguments and clear permissions.
- Build in checkpoints. Every chapter ends in a state you can test before moving on.