un assistant vocal qui tient dans un fichier bash
Jarvis écoute cette machine, lui parle, et vit en bas à droite de l’écran sous la forme d’un petit poisson jaune. Tout ce qu’il fait passe par la table ci-dessous. Elle n’est pas un schéma : c’est la table, gelée dans une fixture de test. Pilotez-la.
Un couple absent de la table est refusé — bruyamment, dans le journal, sans
toucher au dossier d’état. C’est le but : thinking:finish
et listening:speak ne sont pas des états du monde, ce sont des bugs
qui arrivent.
Jarvis n’a pas d’API. Il a un shell, une liste d’autorisations, et
la documentation de sa propre machine dans memory/knowledge/ —
régénérée à chaque mise à jour d’Omarchy. Quand une commande ne lui est pas
évidente, il cherche là avant d’inventer.
hyprctl, lancement d’applications.Il peut regarder ce que vous regardez — uniquement quand vous le lui demandez dans l’échange en cours, jamais de sa propre initiative, jamais pendant une ronde ou un rêve. Chaque usage laisse une ligne dans sa boîte noire.
~/Jarvis est le contrat de fichiers entre vous et lui — trois
dossiers, aucune base de données.
Une vraie séquence, donc numérotée. Chaque étape longue tourne dans l’invocation qui y est entrée ; une invocation concurrente ne touche que le dossier d’état et les groupes de processus sur disque. C’est ce qui permet d’interrompre sans rien casser.
Le micro interne s’ouvre. Le daemon de réveil écoute en permanence : « Hey Jarvis » ouvre l’oreille, et 1,2 s de silence après une parole la referme — un échange complet sans toucher une touche.
Whisper transcrit l’enregistrement. La langue est épinglée par son âme plutôt que détectée : sur une phrase courte, la détection automatique se trompe.
Une session Claude, reprise d’un échange à l’autre par un identifiant à lui. Le flux est lu au fil de l’eau : chaque appel d’outil part dans la boîte noire, et chaque phrase terminée part vers la voix sans attendre la suivante.
Piper synthétise, hors ligne. La voix démarre sur la première phrase pendant que le cerveau écrit encore la deuxième, et la bulle se remplit au rythme de la lecture.
La réponse finie, une courte fenêtre reste ouverte : une repartie n’a pas besoin du mot de réveil. Le silence la referme sans bruit.
Le fichier d’état dit ce que fait la machine. À côté vit un dossier d’une ligne qui dit quelle tentative le fait — une époque, un propriétaire, un âge. Chaque étape retient l’époque à laquelle elle est entrée ; si elle a changé, l’étape se tait au lieu de finir un travail dont plus personne ne veut. C’est ce qui rend l’annulation vraie.
Le fichier d’état, lui, reste un seul mot en minuscules : le daemon du mot de réveil le lit, et la Touch Bar aussi. C’est un contrat public.
record, stt, brain, voice,
play, dream : chaque étape externe tourne dans son
propre groupe de processus, dont l’identifiant est écrit sur disque.
Tuer le groupe est ce qui atteint aussi les sous-processus que le cerveau a lancés lui-même. Un pid nu ne les atteint jamais — et c’est précisément pour cela qu’annuler, longtemps, n’annulait rien.
Cette grille est imprimée par la machine elle-même et gelée dans
tests/fixtures/transitions.txt. La suite de tests compare les
deux : la table ne peut pas s’éloigner de sa documentation sans
qu’une ligne rouge apparaisse.
Rien n’est caché dans une base. Tout ce dont Jarvis se souvient est un fichier que vous pouvez ouvrir, corriger, ou supprimer — et chacun a un auteur clair.
knowledge/ documente la machine, un fichier par groupe de commandes, régénéré automatiquement — rien n’y est écrit à la main. knowledge/inbox/ fiche les documents que vous lui avez confiés, et skills/ garde des modes d’emploi pour les tâches inhabituelles. Ses rêves en écrivent de nouveaux.
Une conversation est une session, avec un identifiant à lui — les rondes, les rêves et les missions ouvrent chacun la leur, pour qu’une reprise ne tombe jamais sur le mauvais fil. Après huit heures sans un mot, la conversation est résumée puis close : une amnésie matinale qui n’oublie rien.
Le poisson n’est pas une image : il est assemblé à partir de pièces — quatre corps, quatre yeux, quatre crinières, quatre queues, huit teintes. Chaque geste est vérifié sur les 256 combinaisons avant d’être accepté. Les planches ci-dessous sont celles du dépôt, à leur vraie cadence.
Ce qu’il entend s’affiche en encre pâle, sa réponse se tape en dessous au rythme de la lecture, et un chapelet de points tourne pendant qu’il réfléchit. Quand il parle en dormant, la bulle devient une bulle de pensée. Quand vous annulez, sa queue se détache en deux moignons et la phrase s’arrête sur trois points — là où elle en était vraiment.
Un animal de compagnie qui n’existe que lorsqu’on lui parle est un widget. Toutes les dix à vingt minutes, un poisson au repos part en excursion le long du bord de l’écran et revient. Il s’assoupit la nuit, met un casque en mode « ne pas déranger », fatigue quand la batterie faiblit — et il fond entre deux planches au lieu de sauter : le passage d’un état à l’autre mange des rangées entières de pixels vers le bas, puis remonte.
bin/jarvis le corps : les organes, les verbes, ce que fait chaque étape bin/jarvis-fsm.sh la table, l'identité, les poignées — sourcé par le précédent bin/jarvis-sentences le flux du cerveau → des phrases parlables + la boîte noire bin/jarvis-wake.py les oreilles : le mot de réveil, la fin de phrase, la relance bin/jarvis_wake_fsm.py leur décision, pure — sans audio, sans modèle, testable bin/jarvis-index reconstruit knowledge/ par introspection de la machine plugin/ le greffon du shell : le poisson, sa bulle, la barre d'écriture sprites/ le moteur de pièces : parts, generate, check — 256 poissons memory/ son âme au travail : journal, trace, leçons, fiches, prompts tests/ la suite hors-ligne — faux claude, faux piper, faux micro systemd/ la pulsation (60 s) et la surveillance de la boîte d'entrée ~/Jarvis votre boîte d'échange : input, todo, output ~/.local/state/jarvis le journal, la santé du cerveau, les repères de temps $XDG_RUNTIME_DIR/jarvis l'état, le dossier d'état, les groupes de processus
--quiet coupe la voix./install.sh pose le lien de commande, construit le
greffon dans un dossier temporaire avant de le basculer d’un coup, installe et
active les unités systemd, puis lance le diagnostic. Rien n’est écrit
fichier par fichier dans le dossier des greffons : le shell s’y recharge
à la moindre modification.
./tests/run exécute toute la chaîne hors ligne :
faux cerveau, fausse voix, faux micro qui meurt vraiment sur un signal, et un bac à
sable complet pour l’état et la mémoire. Aucun test ne touche votre vraie
mémoire, ne prend le micro, ni ne parle.