Subject 01 · ID JV-56A · Rev 1.0.0
JARVIS
Local Voice Agent for Windows
JARVIS is a technological experiment exploring the possibility of creating a personal artificial intelligence system using accessible technology. Not an assistant to consume — an idea to look inside of.
The question
JARVIS is not only an AI assistant. It is an exploration of the relationship between humans and technology.
Origin
JARVIS was not born as a commercial product. It was born from a question: can a personal artificial intelligence system emerge from an individual creator using available technology?
Constraint
It did not begin with a theoretical architecture. It began with a restriction: a voice assistant that understands domestic commands without the voice ever leaving the house. Everything else was derived from there.
Meaning
A practical exploration of technology, creativity and human–machine interaction. What happens when a person decides to build a personal artificial intelligence system?
“Promethean shame consists of being ashamed of having been born and not manufactured.”
System architecture
The inside of a system built by one person
JARVIS listens, understands by intention — not by exact phrase — and acts: it schedules reminders, administers the machine, opens what it is asked for, reports. All of it without a single byte of audio leaving the computer, unless the user decides otherwise for one specific integration. Its interface is deliberately minimal: a circular eye that changes colour with the internal state. No chat screen, no history to review.
Voice in
microphone capture
Voice out
synthesised speech
Local processing
on the machine
No telemetry
no backend receives data
Fig. 01 — Command processing flow
MICROPHONE
Audio is captured from the default Windows input device. Nothing is streamed anywhere: capture, decision and presentation are three independent execution domains that talk over explicit, bounded channels and never share implicit state.
Fig. 02 — Finite state cycle
SLEEPING
idle — Dim ring, no pulse
LISTENING WAKE WORD
standby — Dim ring, no pulse
WAITING COMMAND
listening — Steady ring, medium brightness
THINKING
processing — Pulsing core
SPEAKING
responding — Core synced to the audio
End of audio → back to waiting for the wake word. Command window: 8 s after activation before returning to rest.
Command domains — 10 independent modules
| Domain | Modules | Real example |
|---|---|---|
| Routines | 3 | Sequences saved under one name |
| Reminders / alarms | 4 | Fixed time or relative delay |
| System | 2 | Shutdown with safety delay |
| Communication | 1 | Video calls |
| Resources / navigation | 2 | Programs, folders, sites |
| Information | 5 | Date, weather, news, calculation |
Acceptance threshold
C(u) = P(ŵ|u) / Σ P(w|u) ≥ τ = 0.80
Minimum recognition confidence to accept a command without asking for a repetition.
I(t) = I₀(1 + α·sin(2πft)), f = 0.6 Hz
Core brightness oscillates while the system processes — it never pretends to listen when it is not.
Fig. 04 — Voice volume control
Three spoken steps: up, down, mute
The volume of the synthesised voice is part of the command engine, not of a settings window. JARVIS answers out loud, so the level at which it answers has to be reachable by voice at any moment — while music is playing, during a call, or at night with the house asleep. Three intentions cover it: raise, lower, silence. They are routed like any other command, they are confirmed the same way, and the chosen level is written to disk so the next session starts exactly where the last one ended.
VOLUME UP
“Jarvis, volume up”
Raises the speech output level one step. Each step is a fixed increment, so the same phrase repeated twice moves twice — never to an unpredictable value.
VOLUME DOWN
“Jarvis, turn the volume down”
Lowers the speech output level by the same fixed step. At the lowest step the voice stays audible: silence is reached only by muting, never by accident.
MUTE
“Jarvis, mute” / “Jarvis, unmute”
Silences the spoken answer while the system keeps listening and keeps working. The eye still reports state, so a muted JARVIS is visibly awake, not switched off.
Scope
Only the voice of JARVIS. The master volume of Windows and every other application are left untouched.
Persistence
The level and the mute flag are stored locally and restored on the next start. Nothing about it leaves the machine.
While muted
Recognition, routines and reminders keep running. Anything that would have been said is simply not spoken.
Fig. 03 — Building routines
Sequences written in plain text
A routine is an ordered list of phrases — the same phrases that would be spoken out loud — saved under one number. They live in config/routines.json, next to contacts.json: a plain-text file, opened with Notepad, edited, saved. Nothing has to be restarted, because the file is read again every single time a routine is activated. There is no separate list of “valid commands for routines”: routines go through the same command-processing engine as the voice, so anything JARVIS already understands spoken can be used as a step.
Where
config/routines.json
Reload
read at every activation
Activation
“Jarvis, activate routine 1”
The format
{
"1": {
"time": "08:00",
"steps": ["tell me the news"]
},
"2": {
"time": "12:00",
"steps": ["tell me the weather", "tell me the news"]
},
"3": {
"steps": ["call Mom"]
}
}
The key — "1", "2", "3" — is the routine number: always a number, always inside quotation marks. The number can be spoken as a digit or as a word, because recognition may transcribe it either way.
Example steps
| Step | Action |
|---|---|
| "tell me the news" | Reads the configured news |
| "tell me the weather" | Provides the weather forecast |
| "what time is it" | Tells the current time |
| "call Mom" / "call Dad" | Starts a call through Meet |
| "send John a message saying I’ll be late" | Sends a WhatsApp message |
| "open Word" | Opens any resource declared in resources.json |
Steps run in order, one after another, and JARVIS reads all the responses together at the end.
Creating or editing by voice
“Jarvis, create routine 1 at 8 in the morning with tell me the weather.” Same engine, same file — the routine is written to disk as if it had been typed.
Time format
Optional. 24-hour "HH:MM". With it, the routine fires automatically every day at that time; without it, the routine exists but only runs when it is asked for.
Spoken time
"at 8" and "at 8 in the morning" are read the same way. "Noon" is always 12:00.
Multiple steps
Separate them with "and" or with commas: "with tell me the weather and the news".
Overwriting
If the routine number already exists, it is updated — schedule and steps — instead of being duplicated. Creating and editing are the same action.
Steps starting with "what"
A step such as "what time is it" may be parsed incorrectly when dictated. For those, editing the file by hand is the safer path.
For several routines at once — different schedules, different commands — editing the file directly is faster and more reliable than dictating each one. Voice creation is for quick, isolated changes.
The eye
One single shape
The whole visual interaction surface is reduced to a circle. Not a mascot, not a character — a state-reading instrument, as simple as it could be sustained. The exploded view of the optical unit (plan JV-OPT-003, scale 1:1) describes three concentric parts: outer shell in mirror-finish polycarbonate (60 mm), smoked translucent diffuser lens (45 mm) and the LED emitter core, red channel (12 mm).
Principles
- OFFLINE-FIRST
- DETERMINISM
- PRIVACY BY DEFAULT
- ONE VOICE, NO MEMORY BETWEEN TURNS
Numeric normalisation: N = Σ dₖ·10ᵏ — every number spoken in words is resolved to its positional value before reaching the router.
Advantages over other designs
Commercial assistants solve a different problem: they are made to scale to millions of users and improve with aggregated data. JARVIS does not compete on that ground — and that is where its real advantage lies.
| Dimension | Commercial assistant | JARVIS |
|---|---|---|
| Voice processing | Cloud, by default | 100% local, by default |
| Understanding | General language model | Auditable deterministic router |
| Behaviour | May vary between versions | Identical until the author changes it |
| Usage data | Collected | Does not exist |
| Extensibility | Enabled by the vendor | The code belongs to the author |
The cost of this choice
Being honest requires saying what is lost too. JARVIS does not understand truly open language — if an order does not match a known pattern, it does not understand it, and it says so. What is sacrificed in flexibility is recovered in predictability and total control over what the system can and cannot do.
“An assistant that sometimes surprises you for good can also surprise you for bad. I preferred to build one that never surprises.”
Resilience by design
- If the cloud voice service does not respond, the system falls back automatically to the local voice engine.
- If a reminder was pending while the machine was off, it is announced as soon as the system boots again.
- If the configuration file has an error, the system shows exactly what the problem is instead of closing without explanation.
Reflections on design
There is a question that could not be avoided while building something that listens all the time: who does this work for? The answer that guided every decision was always the same — it works for whoever switched it on, and for nobody else.
No small, offline speech system transcribes human speech perfectly. That fact became an unexpected source of learning: it forced every command to be designed around how people actually speak, not how they should speak. The most useful artificial intelligence is not the most sophisticated one, but the one that best understands the real limits of the situation it lives in.
Growth and evolution
The system was built to grow by adding modules, not by rewriting. Growth by addition: every new capability is added, none replaces the previous one.
Short term
Audio device selector
Today the system always uses the default Windows microphone and speaker.
More accurate recognition model
The current model prioritises speed; a larger option exists today, not enabled by default.
Medium term
Do not disturb mode
The state machine already distinguishes total inactivity from active waiting — the base already exists.
Optional extended understanding layer
An extension point that delegates to a language model whatever does not match a known command.
Technical specifications
| Component | Technology | Function |
|---|---|---|
| Application | Electron | Desktop packaging, interface |
| Speech recognition | Vosk (offline, Spanish) | Transcription without connection |
| Recognition runtime | Python | Isolated subprocess |
| Local speech synthesis | Piper | Offline text-to-speech by default |
| Cloud synthesis | Optional external service | Higher quality, own key |
| Persistence | Local JSON file | Reminders and routines |
| Task scheduling | In-process scheduler | Fires at the exact time |
| Weather | Public keyless service | Current weather query |
| Build | Cloud continuous integration | Installer without owning Windows |
Privacy footprint
| Data | Does it leave the machine? |
|---|---|
| Captured audio | Never |
| Transcribed text | Never |
| Personal configuration | Never |
| Weather query | Coordinates only, no logging |
A technical manual is also a document of intentions. Every row of these tables is a promise as much as a description. This describes a real system, built and refined iteratively by its author — it is not a conceptual proposal.
Subject 01 · ID JV-56A · Rev 1.0.0 · Manual July 2026
Interface skins
The eye is replaceable
The circle is the only surface JARVIS shows, and it belongs to whoever runs it. The appearance of the optical unit is a configurable asset: the user can replace it, so the assistant can look like a machined instrument, a camera body or a bare piece of glass without a single line of the command engine changing. State reading is preserved in every case — the same colours, the same pulse, the same silence when idle.
The eight variants below were designed by the creator of the system and ship with it as the reference set. They are presented as a catalogue, not as a limit: any square image placed in the interface folder becomes a valid skin, and the selection survives restarts.
JV-UI-01
Chrome Shell
Mirror-finish outer ring, deep red core
JV-UI-02
Quadrant
Segmented ring, four reading quadrants
JV-UI-03
Foundry
Machined plate with honeycomb diffuser
JV-UI-04
Optic
Camera body, horizontal light axis
JV-UI-05
Monolith
Matte black, single triangular emitter
JV-UI-06
Carapace
Split shell with exposed red seams
JV-UI-07
Halo
Outer LED crown, brightest state indicator
JV-UI-08
Void
Bare glass, no visible housing
How a skin is applied
Where
assets/interface/ — one square file per skin, dropped in like any other document.
Selection
Declared once in the local configuration and read at start. The chosen skin persists between sessions.
Unchanged
Colour states, pulse frequency and geometry of the reading stay identical. Only the housing changes.
Icon set
One mark, twenty readings
Everything outside the running window still needs a face: the installer, the entry pinned to the Windows taskbar, the shortcut on the desktop. That mark is also chosen by the user. The set below was drawn by the creator of the system as the reference identity — a single red core, read at 16 px as clearly as at full size — and any of them can be assigned to the installer, the taskbar entry or the desktop shortcut, independently of each other.
Assignment
Installer
The mark carried by the setup file and by the entry in the list of installed programs.
Taskbar
Read at small size while the system runs; the variants with a heavier outer ring hold up best there.
Shortcut
The desktop launcher, replaceable at any time without reinstalling anything.
Interface modules
Open the system
Module
Identity
The visual identity of the system: one circle, read as state. Opens inside this interface.
Module
Recording
A recorded session of JARVIS answering by voice, no chat screen involved.
Module
Live
A live capture of the system running on a standard Windows machine.
Module
Creator
The person behind the experiment. Opens inside this interface.
Channel open
Leave a local note
Observations, questions or reflections saved only in this browser.
