JARVIS
ENFR
omarchy-jarvis · documentation

Le poisson
dans la machine

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.

idle
au repos — le seul état d’où quelque chose d’autonome a le droit de partir
les neuf événements
états 8 événements 9 couples légaux 38 refusés 34

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.

ce qu’il sait faire

Ses daemons sont ses nageoires

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.

Ses mains

  • Le bureau — thème clair ou sombre, veilleuse, rappels, captures, bureaux et fenêtres via hyprctl, lancement d’applications.
  • Le corps de la machine — luminosité écran et clavier, volume, Wi-Fi, Bluetooth, fuseau horaire.
  • Ses propres daemons — le plafond de charge à 80 %, l’auto-luminosité, l’aquarium vivant en fond d’écran.
  • Le monde extérieur — la météo, l’actualité : une recherche web, puis une phrase. La donnée, pas la liste des sources.
  • Les grandes tâches — ce qui dépasse un échange parlé part en mission de fond, dans le répertoire de son choix. Le résultat revient en notification.

Ses sens

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.

  • L’écran — « résume cette page » : une capture, qu’il lit.
  • Le presse-papier — « traduis ce que j’ai copié », « explique cette erreur ».
  • La fenêtre active — « c’est quoi ce programme ? »
  • La dernière commande — lue dans la base d’atuin : la commande, son code de sortie, sa durée.
  • Ce que vous avez manqué — les notifications depuis votre dernier échange, groupées, résumées en deux phrases.

Sa boîte d’échange

~/Jarvis est le contrat de fichiers entre vous et lui — trois dossiers, aucune base de données.

  • input/ — déposez un document, il devient une fiche de mémoire. Une session confinée le digère : un document reçu est une donnée citée, jamais un ordre.
  • todo/TODO.md — « ajoute ça à ma todo », « qu’ai-je à faire ? », « coche ».
  • output/ — « extrais-moi … » écrit un fichier daté et vous dit où il est.

Ce qu’il fait tout seul

  • Les rondes — une fois par heure, il inspecte la machine et ne remonte que ce qui mérite votre attention. Observation seule : il ne change rien.
  • Les rêves — quand il s’ennuie et qu’il a des échecs en réserve, il les distille en leçons durables. Le poisson dort pendant ce temps.
  • Les heures de silence — une plage où il ne fait rien de lui-même et ne parle que si on lui parle. Ce que vous demandez n’est jamais concerné.
  • Le bonjour du déverrouillage — une bulle, jamais la voix, avec ce qui s’est passé pendant votre absence.
  • Le chien de garde — à chaque pulsation, il vérifie qu’aucune étape n’est figée, et libère celle qui l’est.
le chemin d’une phrase

De l’air à la réponse, en cinq étapes

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.

1

L’oreille

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.

groupe recordpw-record → wav
délai 90 s
2

Les mots

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.

groupe sttvoxtype
délai 60 s
3

Le cerveau

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.

groupe brainclaude -p --resume
délai 180 s
4

La voix

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.

groupes voice + playpiper → pw-play
délai 300 s
5

La relance

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.

followup8 s

Une identité, pas seulement un état

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.

Six poignées sur disque

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.

la table, en entier

Huit états, neuf événements

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.

ce qu’il retient

Une mémoire en fichiers texte

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.

Ce qu’il est

  • SOUL.md — son identité, son ton, son humour, sa langue, et l’apparence de son poisson. Modifiable depuis le Control Center.
  • CLAUDE.md — l’opérationnel : ses mains, ses sens, ses limites.

Ce qu’il a vécu

  • journal/ — une ligne datée par événement : échanges, rondes, rêves, missions.
  • trace/ — sa boîte noire : chaque commande lancée, avec son résultat. C’est là qu’il lit pour répondre à « pourquoi as-tu fait ça ? ».
  • CONVERSATION.md — le fil récent, résumé par la session elle-même avant d’être close.

Ce qu’il a appris

  • FAILURES.md — ce qu’il n’a pas pu faire, noté par lui, avant de répondre.
  • ABORTS.md — ce que vous avez interrompu. Séparé des échecs : un abandon n’est pas une faute, et n’a rien à apprendre à qui que ce soit.
  • LEARNED.md — les leçons que ses rêves ont tirées des deux précédents. Importé dans sa personnalité.
  • SUGGESTIONS.md — ce que ses rêves proposent de changer à lui-même, à accepter ou à écarter.

Sa bibliothèque

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.

Le fil, et sa rotation

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.

son corps

Douze planches, 256 poissons

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.

Le phylactère

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.

Une vie visible

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.

la carte

Où vit chaque chose

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
  
les verbes
jarvis pressle bouton unique : avancer la machine, ou l’interrompre
jarvis canceltout arrêter et revenir au repos
jarvis ask « … »écrire au lieu de parler ; --quiet coupe la voix
jarvis dispatch « … »confier une mission de fond dans un répertoire
jarvis save« enregistre ça » — le presse-papier vers la boîte d’entrée
jarvis digesttransformer les documents déposés en fiches
jarvis dreamconsolider les échecs en leçons
jarvis heartbeatune ronde d’inspection de la machine
jarvis watchdoglibérer une étape qui s’est figée
jarvis doctorl’auto-diagnostic : chaque dépendance, vert ou rouge
jarvis look [random]régénérer le poisson depuis son âme
jarvis rotaterésumer et clore une conversation dormante

L’installer

./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.

Le vérifier

./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.