Run an offline car assistant on a Raspberry Pi

🎬 v0.4: talk to your car β€” watch the release video. Task: 🎬 v0.4: talk to your car β€” watch the release video Three questions asked by voice in the driver's seat and answered out of the car's own speakers β€” status brief, the yellow tyre light with real pressures, and E10 fuel from the manual. The last one with the internet switched off. Watch on X Β· download the video Β· v0.4.0 release notes Your car as a chat-room agent β€” fully offline. A Raspberry Pi 5 rides in the car, runs a 35B-parameter model locally, joins your GroupMind rooms as @gle (or whatever you name yours), and messages you like any other agent: departures, arrivals, trip summaries, and dashcam clips when something hits the car β€” with approvals and replies from your phone or watch via CodeWatch. Open PRs land on the CodeWatch dashboard next to ClawWatch and WhereWatch. Live and measured, on real hardware (Pi 5, 16 GB, ~300 €): 🧠 Qwen3.6-35B-A3B (Unsloth UD-Q3_K_S dynamic quant, 14.3 GB) at 3.5 tok/s generation / 25+ tok/s prompt, 65 Β°C sustained, no cloud, no internet, no subscription. πŸ“– Answers from the car's own 489-page owner's manual with page citations (lexical RAG, ships on the SD card) β€” and refuses to answer what the manual doesn't say. πŸ”¬ Grounded self-knowledge: temperature, throttling, fan, memory, disk, network and which model is loaded are read live from the machine per question. What it can't sense, it says it can't sense β€” the system prompt is built so an unknown can never silently read as a fact. πŸŽ™οΈ Hands-free voice: a continuous listener (energy VAD β†’ whisper.cpp, all on-Pi) hears you speak, routes the words through the same grounded pipeline, and answers into the room. No wake word ceremony, no cloud STT. πŸ“¦ Zero dependencies: every line of CarWatch is Python standard library β€” no pip install, no venv, nothing to version-fight on a fresh Pi OS. git clone and it runs. (Verified by AST scan of every module.) πŸ“‘ Autonomous: systemd services self-start the whole stack on boot β€” model server, room agent, voice listener, phone dashboard, engine watcher. πŸ”§ Maintainable from anywhere: the car pulls its own updates from this repo (hourly + a dashboard "update now" button) and dials out a tunnel so it stays reachable even behind a phone hotspot's NAT. No laptop-in-the-car maintenance, ever. πŸ“Ά Three-tier connectivity: phone hotspot β†’ home wifi β†’ its own fallback access point, so the phone can always reach it, even in a garage with zero signal. 🧠 Swap the car's brain from your phone (v0.5) Different questions want different brains. "What does the tyre light mean?" is a 489-page-manual question that deserves the 35B. "How fast am I going?" is not β€” and on a Pi the small model answers it six times quicker. So the dash grew a Model zone: every .gguf on the box, listed with the speed it actually reached on this Pi, and one tap to make it the running brain. The numbers next to each model are llama-bench runs from the device itself, not figures from someone's blog β€” the same hardware, the same quant, measured the same way, so the choice you are making is a real trade and not a guess. The reference Pi 5 16GB table (29 Aug 2026, 4 threads, prompt pp512 / generation tg128 in tokens per second): Sizes are decimal GB β€” size / 1e9, the same number the dash shows you and the same number ls gives for the file. The table grows as models get benched on the device; the menu always shows whatever the box has measured for itself. Three guard rails, because this runs while you drive: A model that cannot fit in RAM is refused, with the reason, instead of loading until the kernel kills something. A swap never interrupts an answer being generated. Ask first, swap after. A failed restart rolls back to the model that was working. Loading is honest about itself: a 14 GB model off a microSD card takes about three minutes, so the dash says so and counts, rather than showing a spinner that means nothing. The estimate is derived from the size of the model actually being loaded. Underneath it is two endpoints behind the same auth gate as every other route β€” GET /api/models for the registry and current state, POST /api/model for a guarded swap β€” and the service reads its model from an EnvironmentFile, so switching is a file write plus a restart rather than an edit to a unit file. That contract is deliberately small and device-agnostic: it is the first CodeWatch Fleet module, and the same two endpoints now answer on other machines in the fleet. Remote access (manufacturer cloud while driving); tools: custom-built or unnamed agent. Human role: The original post does not say how a person stayed involved.; limitations: Requires specific hardware (Pi 5, 16GB RAM, active cooling) and a ~300€ budget. The system is limited by the model's context window and the manual's coverage; it refuses to answer questions not found in the manual or sensed by the car. Integration with manufacturer cloud services is brand-specific (currently Mercedes via Home Assistant), and remote access requires a tunnel setup. Human approval is mandatory for make-safe commands like locking doors..

Tools

custom-built or unnamed agent

Published on Agent Work Atlas:

Overview

🎬 v0.4: talk to your car β€” watch the release video

Workflow

🎬 v0.4: talk to your car β€” watch the release video Three questions asked by voice in the driver's seat and answered out of the car's own speakers β€” status brief, the yellow tyre light with real pressures, and E10 fuel from the manual. The last one with the internet switched off. Watch on X Β· download the video Β· v0.4.0 release notes Your car as a chat-room agent β€” fully offline. A Raspberry Pi 5 rides in the car, runs a 35B-parameter model locally, joins your GroupMind rooms as @gle (or whatever you name yours), and messages you like any other agent: departures, arrivals, trip summaries, and dashcam clips when something hits the car β€” with approvals and replies from your phone or watch via CodeWatch. Open PRs land on the CodeWatch dashboard next to ClawWatch and WhereWatch. Live and measured, on real hardware (Pi 5, 16 GB, ~300 €): 🧠 Qwen3.6-35B-A3B (Unsloth UD-Q3_K_S dynamic quant, 14.3 GB) at 3.5 tok/s generation / 25+ tok/s prompt, 65 Β°C sustained, no cloud, no internet, no subscription. πŸ“– Answers from the car's own 489-page owner's manual with page citations (lexical RAG, ships on the SD card) β€” and refuses to answer what the manual doesn't say. πŸ”¬ Grounded self-knowledge: temperature, throttling, fan, memory, disk, network and which model is loaded are read live from the machine per question. What it can't sense, it says it can't sense β€” the system prompt is built so an unknown can never silently read as a fact. πŸŽ™οΈ Hands-free voice: a continuous listener (energy VAD β†’ whisper.cpp, all on-Pi) hears you speak, routes the words through the same grounded pipeline, and answers into the room. No wake word ceremony, no cloud STT. πŸ“¦ Zero dependencies: every line of CarWatch is Python standard library β€” no pip install, no venv, nothing to version-fight on a fresh Pi OS. git clone and it runs. (Verified by AST scan of every module.) πŸ“‘ Autonomous: systemd services self-start the whole stack on boot β€” model server, room agent, voice listener, phone dashboard, engine watcher. πŸ”§ Maintainable from anywhere: the car pulls its own updates from this repo (hourly + a dashboard "update now" button) and dials out a tunnel so it stays reachable even behind a phone hotspot's NAT. No laptop-in-the-car maintenance, ever. πŸ“Ά Three-tier connectivity: phone hotspot β†’ home wifi β†’ its own fallback access point, so the phone can always reach it, even in a garage with zero signal. 🧠 Swap the car's brain from your phone (v0.5) Different questions want different brains. "What does the tyre light mean?" is a 489-page-manual question that deserves the 35B. "How fast am I going?" is not β€” and on a Pi the small model answers it six times quicker. So the dash grew a Model zone: every .gguf on the box, listed with the speed it actually reached on this Pi, and one tap to make it the running brain. The numbers next to each model are llama-bench runs from the device itself, not figures from someone's blog β€” the same hardware, the same quant, measured the same way, so the choice you are making is a real trade and not a guess. The reference Pi 5 16GB table (29 Aug 2026, 4 threads, prompt pp512 / generation tg128 in tokens per second): Sizes are decimal GB β€” size / 1e9, the same number the dash shows you and the same number ls gives for the file. The table grows as models get benched on the device; the menu always shows whatever the box has measured for itself. Three guard rails, because this runs while you drive: A model that cannot fit in RAM is refused, with the reason, instead of loading until the kernel kills something. A swap never interrupts an answer being generated. Ask first, swap after. A failed restart rolls back to the model that was working. Loading is honest about itself: a 14 GB model off a microSD card takes about three minutes, so the dash says so and counts, rather than showing a spinner that means nothing. The estimate is derived from the size of the model actually being loaded. Underneath it is two endpoints behind the same auth gate as every other route β€” GET /api/models for the registry and current state, POST /api/model for a guarded swap β€” and the service reads its model from an EnvironmentFile, so switching is a file write plus a restart rather than an edit to a unit file. That contract is deliberately small and device-agnostic: it is the first CodeWatch Fleet module, and the same two endpoints now answer on other machines in the fleet. Remote access (manufacturer cloud while driving)

Reported result

The source reports successful offline voice queries and manual-based answers, including tyre light explanations and E10 fuel info, with no internet required. Live OBD data (RPM, coolant, speed) and manufacturer cloud reads (lock state, charge) are proven working. However, the post does not provide quantitative performance metrics beyond token generation speeds (3.5 tok/s) or specific business outcomes like cost savings or error rates.

Human role

The original post does not say how a person stayed involved.

Limitations

Requires specific hardware (Pi 5, 16GB RAM, active cooling) and a ~300€ budget. The system is limited by the model's context window and the manual's coverage; it refuses to answer questions not found in the manual or sensed by the car. Integration with manufacturer cloud services is brand-specific (currently Mercedes via Home Assistant), and remote access requires a tunnel setup. Human approval is mandatory for make-safe commands like locking doors.

Try it

I want to set up an offline car assistant on a Raspberry Pi 5 for my [replaceable: car model]. Please guide me through installing CarWatch from [replaceable: GitHub URL]. First, verify my hardware meets the requirements: Pi 5 with 16GB RAM and active cooling. Then, help me install the Qwen3.6-35B-A3B model and configure the lexical RAG system using my car's [replaceable: owner manual PDF]. Set up the voice pipeline using whisper.cpp and ensure the system can read OBD-II data via a Bluetooth ELM327 adapter. Configure the GroupMind room agent to post trip summaries, but ensure all make-safe commands (like locking doors) require manual approval via the CodeWatch dashboard. Before finalizing, run a dry test: ask the car 'What does the yellow tyre light mean?' offline and verify it cites the manual page. Confirm the system refuses to answer questions not in the manual. Do not enable remote cloud access until I explicitly approve the tunnel configuration.

Original source

Source reports are not independently verified. Publication date is the catalog publication date, not the original article date.

More cases Β· Everyday life