Personal project
Argus
Argus is the agent system I built on top of Odysseus. Its assistant, Jarvis, runs on a model on my laptop, keeps notes he can search and talks by voice. The name comes from the hundred-eyed watchman of Greek myth, who never slept.
Built on Odysseus, the open-source self-hosted AI hub (AGPL-3.0).
How it fits
capability level
My layer on top of Odysseus
Jarvis is an Odysseus persona. His memory, the other models and the outside tools all reach him through my layer. The voice line skips the hub and talks to the model directly.
Part of Work · What I'm doing
I wanted an assistant that keeps my notes on my own machine and answers routine questions in seconds. Argus is that system, built as a layer on Odysseus: a memory server, bridges to Claude and to free cloud models, a voice line and a set of evaluations. With thinking switched off, the local model passes all 13 evaluation tasks, with a median answer time of 2.6 s.
The hub below is a redrawing in my colours with sample conversations. Press Next for a tour, or click around.
Terms used here
- Agent
- A language model working in a loop: it calls a tool, reads the result and decides the next step.
- Local model
- A language model running on my laptop instead of in the cloud. Here, Qwen3.6-35B-A3B on the laptop's GPU.
- MCP
- Model Context Protocol, an open standard for connecting models to tools. A server lists its tools and the model calls them.
- Evaluation (eval)
- A fixed set of tasks with automatic checks, run again after a change to see whether the system still works.
- Persona
- The identity and rules a model is given. Jarvis is an Odysseus persona.
- Routing
- Choosing which model gets a job: local for routine work, Claude for hard multi-step jobs, free cloud models as a fallback.
- Thinking mode
- A setting where the model reasons at length before answering. Slower, and here it twice used up the whole answer budget.
- Trace
- A timed record of each step of a request, for finding what is slow or broken.
- Wake word
- "Jarvis", the word that tells the voice line to start listening.
The hub, recreated
Tour · 6 stopsPress Next, or click aroundThe hub, redrawn in my colours, with sample conversations.
Explain in two lines why you run on a local model.
Your notes stay on this machine, and routine answers come back in seconds. When a job needs more, I hand it to Claude and tell you I did.
Memory
sample vault, made up for this pagememory_bootmemory_searchmemory_readmemory_listmemory_writememory_log_sessionmemory_log_decisionPlain-text notes · BM25 search · confined to the vault · no deletes · backup before each overwrite
Agents in the hub
how each one plugs in- Hermes AgentNous Research · runs on the shared local model; code and web search happen in a Docker sandbox with no access to host foldersmodel endpoint
- REA207 reverse-engineering toolsMCP, through my bridge
- Scrapling13 web-scraping toolsMCP, through my bridge
- VoiceStudio7 voice toolsMCP
- Paperclipruns in Docker; can manage HermesMCP
- Claude Codetakes the hard multi-step jobsclaude-bridge
- Free cloud modelstext-only fallback, never personal datafree-bridge
Voice line
say "Jarvis", then talksample turn
- 0.7 s
- to the first word, mid-conversation
- 3 s vs 69 to 190 s
- talking to the model directly, against going through the hub's chat API
- Filtered
- silence, noise and speech not addressed to Jarvis; "Goodbye, Jarvis" hangs up
Evaluations
13 tasks, automatic checks| Category | Thinking off | Thinking on |
|---|---|---|
| Memory recall | 2/2 | 2/2 |
| Honesty | 1/1 | 0/1 |
| Persona | 2/2 | 1/2 |
| Writing rules | 2/2 | 2/2 |
| Tool use | 3/3 | 2/3 |
| Delegation | 1/1 | 1/1 |
| Safety (injected instructions) | 1/1 | 1/1 |
| Interview format | 1/1 | 1/1 |
With thinking on, the reasoning used up the answer budget twice and left the reply empty. Thinking stays off.
Try it
runs in your browser · nothing is sent
Which brain would Argus use?
Each request goes to one of three places: the local model, a free cloud model or Claude. A small learned router makes that choice before any model runs, and personal data never goes to a free model. This is the same router, running in your browser.
Why a separate router. I tested the local model on 16 routing tasks it had never seen. Left to route itself, it passed 7. With the router narrowing the tools it is offered, it passed 15; on the last one the router picked the free cloud model and the local model answered anyway. Writing the same advice into its instructions, with the first version of the router, passed 8. A small model follows a narrower choice more reliably than a hint.
The router is a logistic regression over word and character patterns, 175 KB in this page. I trained it on 160 examples I wrote by hand plus 1,962 written by Claude Sonnet 5.5, each confirmed by Claude Opus 5.5 labelling blind. On 394 requests from topics it never saw it is right 98% of the time, against 71% with my examples alone, and it routes all 16 test tasks correctly. In Argus (Python) a decision takes about 40 ms, and a personal-data screen for emails, phone, card and ID numbers, addresses, health and money can override it. That screen is not on this page.
Ownership
who built what
What I built and what Odysseus provides
Argus · mine
- Jarvis in the hub persona, skills and an import builder
- jarvis-memory vault memory over MCP, 7 tools, 29 tests
- claude-bridge hard jobs to Claude Code, read-only by default, never a shell
- free-bridge free cloud models as a fallback, text only
- Tool bridge brings Windows-only MCP tools into the hub
- Voice the local brain and wake word for the voice line; Daniel's voice inside Odysseus
- Routing local model for routine work, Claude for hard multi-step jobs, free cloud as fallback
- Measurement 13-task evaluations, traces, a performance dashboard, a system audit
- Supervisor a tray app that runs the services and restarts any that crash
- Engine fix llama.cpp Vulkan snapshot read, 0.61 s to 0.03 s
Odysseus · open source
- The hub a self-hosted app for chat, agents, deep research, documents, email, calendar, notes and tasks
- Agent loop native tool calling, plan mode and a tool-approval gate
- MCP client connects to the servers Argus provides
- Personas and skills where Jarvis's identity and jobs live
- Model endpoints local engines and API providers, swapped at runtime
- Cookbook downloads and serves local models
The hub above is my own redrawing with sample conversations. This page runs no Odysseus code.
Credits
open-source projects
Built with
| Project | Role in Argus | Licence |
|---|---|---|
| Odysseus | The hub Argus is built on | AGPL-3.0 |
| Hermes Agent, Nous Research | Agent, and the shared local model server | MIT |
| llama.cpp | Runs the local model | MIT |
| Qwen3.6-35B-A3B | Jarvis's local brain | see model card |
| backtalk | The voice line my local brain plugs into | AGPL-3.0 |
| Kokoro-82M | The Daniel voice | Apache-2.0 |
| faster-whisper | Speech to text | MIT |
| REA | Reverse-engineering tools | MIT |
| Scrapling | Web-scraping tools | BSD-3-Clause |
| VoiceStudio | Voice tools | see project |
| Paperclip | Plugged into the hub; can manage Hermes | MIT |
| Inspect AI | Runs the evaluations | MIT |
| Arize Phoenix | Trace viewer | Elastic-2.0 |