Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ memory/ABORTS.md
memory/LEARNED.md
memory/SUGGESTIONS.md
memory/NOISE.md
memory/REFLEXES.md
memory/ROUTINES.md

# implement-issue / merge-pr build their worktrees here. Unignored, a stray
Expand Down
8 changes: 8 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,14 @@ reconnaissance vocale, ta réponse est lue à voix haute.
sensée existe.
- Pour une question d'état (batterie, heure, réseau, musique), lis la
vraie valeur et dis-la.
- Certaines demandes ne t'atteignent jamais : `memory/REFLEXES.md` est une
table qui répond à l'heure, à la batterie et à quelques ordres simples
sans appeler personne, en deux cents millisecondes, et hors ligne où tu
ne peux pas répondre du tout. Si l'utilisateur s'étonne que tu n'aies pas
entendu une de ces demandes, ou s'il veut en ajouter une, c'est ce
fichier qu'il faut lire et éditer — une rangée par ligne, colonnes
séparées par des tabulations, l'en-tête explique la grammaire. Ne
ré-implémente jamais toi-même ce que la table fait déjà.

## Tes mains

Expand Down
77 changes: 76 additions & 1 deletion README.fr.md
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,9 @@ annexe. La version longue est dans [docs/privacy.fr.md](docs/privacy.fr.md).
- **Ta parole est transcrite en local.** Whisper tourne sur ton processeur.
L'audio ne sort jamais de la machine, et l'enregistrement est écrasé par le
suivant.
- **Ton transcript part chez Anthropic**, puisque le cerveau est Claude. Et
- **Ton transcript part chez Anthropic**, puisque le cerveau est Claude par
défaut — sauf si tu le fais répondre en local, voir « Le cerveau local »
plus bas, auquel cas plus rien ne sort. Et
avec lui tout ce que Claude lit pour te répondre — ce qui peut inclure une
capture d'écran ou ton presse-papier, mais **uniquement quand tu le demandes
dans l'échange en cours**, jamais de sa propre initiative, et chaque usage
Expand All @@ -142,6 +144,79 @@ l'inspection horaire, `reves: non` la consolidation de mémoire, et
`silence: 23-7` lui donne des heures où il ne fait rien sans qu'on le lui
demande.

## Les réflexes

Certaines demandes n'ont jamais eu besoin d'un modèle. « Quelle heure
est-il » se répond avec `date`, en deux cents millisecondes, exactement.

`memory/REFLEXES.md` est une table de quatre colonnes séparées par des
tabulations — motif, commande, slot, phrase parlée — lue avant le cerveau.
Le motif est une expression rationnelle ancrée sur le transcript entier,
exactement comme `memory/NOISE.md` : c'est ce qui garde « pourquoi le son
est-il si fort ? » loin de la commande de volume.

Elle existe surtout pour une raison. Hors ligne, à « quelle heure est-il »,
le modèle local a répondu « Il est 14h37 » à 23 h passées, avec aplomb,
dans le format parlé exact de Jarvis. Une valeur plausible et fausse est
pire qu'un refus. Ce que `date` ou `/sys` savent dire exactement, le
cerveau n'a plus le droit de le deviner.

```
omarchy-jarvis reflexe? "quelle heure est-il" # quelle rangée matche
omarchy-jarvis reflexe? --run "quelle heure est-il" # et ce qu'elle dirait
```

Le fichier est à toi : ajoute, retire, corrige. `omarchy-jarvis doctor`
refuse une table mal formée, et une commande destructrice y est rejetée au
chargement — la table ne passe pas par `.claude/settings.json`, c'est sa
seule porte.

## Le cerveau local

Par défaut Jarvis pense avec Claude, ce qui demande le réseau. Il sait aussi
parler à n'importe quel serveur compatible OpenAI — llama-server, LM Studio,
Ollama, LocalAI, vLLM — et donc répondre dans un avion.

Trois lignes dans `SOUL.md`, sous « Réglages » :

```
- cerveau: auto # auto | nuage | local
- cerveau-url: http://127.0.0.1:8099
- cerveau-modele: Qwen3.5-4B
```

`cerveau-modele` a deux rôles : c'est l'identifiant envoyé au serveur —
llama-server l'ignore, LM Studio et Ollama en ont besoin — et c'est aussi
ce que Jarvis prononce quand on lui demande avec quel cerveau il pense.
Mets-y le vrai nom de ton modèle.

`auto` suit l'état du nuage : Claude tant qu'il répond, le modèle local dès
qu'il ne répond plus, et une nouvelle tentative vers le nuage toutes les dix
minutes (`JARVIS_BRAIN_RETRY`). Le Control Center a la même bascule dans
« Âme », et dit vers où va la parole en ce moment.

**Ce qu'il perd hors ligne.** Le cerveau local n'a aucun outil : pas de Bash,
pas de lecture d'écran, pas de recherche web. Il ne peut donc ni agir sur la
machine, ni lire l'heure, la batterie ou la météo — et
`memory/OFFLINE_PROMPT.md` lui interdit explicitement de les inventer, parce
que sans cette consigne un modèle de 4 milliards de paramètres répond « il
est 14h37 » à 23 h, avec aplomb. Ce qu'il garde : parler, expliquer,
traduire, raconter, se souvenir du fil en cours.

**Monter le serveur.** Sur ce MacBook M2 sous Asahi, llama.cpp compilé avec
le backend Vulkan (pilote Honeykrisp) va environ 1,7 fois plus vite que le
CPU en prefill et 1,3 fois en génération. Avec un modèle 4B en Q4_K_M, la
première phrase sort en une à trois secondes.

```
systemctl --user enable --now jarvis-brain.service
```

L'unité est installée par `install.sh` mais jamais activée toute seule.
`--reasoning off` y est obligatoire : un modèle « thinking » envoie sa
réflexion dans `reasoning_content`, épuise son budget de tokens et ne dit
jamais un mot.

## Comment ça marche

Une phrase, cinq étapes, chacune avec une poignée sur disque pour pouvoir être
Expand Down
73 changes: 72 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,9 @@ The long version is [docs/privacy.md](docs/privacy.md).

- **Your speech is transcribed locally.** Whisper runs on your CPU. Audio
never leaves the machine and the recording is overwritten by the next one.
- **Your transcript goes to Anthropic**, because the brain is Claude. So does
- **Your transcript goes to Anthropic**, because the brain is Claude by
default — unless you point him at a local model, see "The local brain"
below, in which case nothing leaves at all. So does
anything Claude reads while answering you — and that can include a
screenshot or your clipboard, but **only when you ask for it in that
exchange**, never on his own initiative, and every use is logged.
Expand All @@ -133,6 +135,75 @@ You can turn off his autonomy entirely by editing `SOUL.md`: `rondes: non`
stops the hourly inspection, `reves: non` stops the memory consolidation,
`silence: 23-7` gives him hours where he does nothing unbidden.

## Reflexes

Some requests never needed a model. "What time is it" is answered by
`date`, in two hundred milliseconds, exactly.

`memory/REFLEXES.md` is a four-column tab-separated table — pattern,
command, slot, spoken sentence — read before the brain. The pattern is a
regular expression anchored on the whole transcript, exactly like
`memory/NOISE.md`: that anchoring is what keeps "why is the sound so loud?"
away from the volume command.

It exists mostly for one reason. Offline, asked the time, the local model
answered "it is 2:37 pm" at 11 pm, with total confidence, in Jarvis's exact
spoken format. A plausible wrong value is worse than a refusal. What `date`
or `/sys` can state exactly, the brain no longer gets to guess.

```
omarchy-jarvis reflexe? "quelle heure est-il" # which row matches
omarchy-jarvis reflexe? --run "quelle heure est-il" # and what it would say
```

The file is yours: add, remove, fix. `omarchy-jarvis doctor` rejects a
malformed table, and a destructive command is refused at load — the table
does not go through `.claude/settings.json`, this is its only gate.

## The local brain

By default Jarvis thinks with Claude, which needs the network. He can also
talk to any OpenAI-compatible server — llama-server, LM Studio, Ollama,
LocalAI, vLLM — and so answer you on a plane.

Three lines in `SOUL.md`, under "Réglages":

```
- cerveau: auto # auto | nuage | local
- cerveau-url: http://127.0.0.1:8099
- cerveau-modele: Qwen3.5-4B
```

`cerveau-modele` carries two roles: it is the id sent to the server —
llama-server ignores it, LM Studio and Ollama need it — and it is also what
Jarvis says out loud when asked which brain he is thinking with. Put your
model's real name in it.

`auto` follows the cloud's health: Claude while it answers, the local model
once it stops, and a retry towards the cloud every ten minutes
(`JARVIS_BRAIN_RETRY`). The Control Center carries the same switch under
"Âme", and says where your words are going right now.

**What he loses offline.** The local brain has no tools at all: no Bash, no
screen reading, no web search. So he can neither act on the machine nor read
the time, the battery or the weather — and `memory/OFFLINE_PROMPT.md`
explicitly forbids him to invent them, because without that instruction a 4B
model answers "it is 2:37 pm" at 11 pm, with total confidence. What he keeps:
talking, explaining, translating, telling a story, remembering the thread.

**Running the server.** On this M2 MacBook under Asahi, llama.cpp built with
the Vulkan backend (Honeykrisp driver) is about 1.7x faster than CPU at
prefill and 1.3x at generation. With a 4B model at Q4_K_M the first spoken
sentence lands in one to three seconds.

```
systemctl --user enable --now jarvis-brain.service
```

`install.sh` installs the unit but never enables it for you. `--reasoning off`
is mandatory there: a thinking model streams its reasoning into
`reasoning_content`, burns its token budget and never says a word.

## How it works

One utterance, five stages, each with a handle on disk so it can be stopped:
Expand Down
3 changes: 3 additions & 0 deletions SOUL.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ Control Center, le reste t'appartient. Après une modification, la nouvelle
- adresse: tutoiement
- langue: fr
- voix: siwis
- cerveau: auto
- cerveau-url: http://127.0.0.1:8099
- cerveau-modele: Qwen3.5-4B
- micro-coupe: ecrire
- rondes: oui
- reves: oui
Expand Down
Loading
Loading