Friday : donner une colonne vertébrale à mon assistant personnel

Cette semaine, on n’a pas juste ajouté deux scripts et trois boutons. On a commencé à dessiner une vraie architecture personnelle autour de Friday.

J’avais déjà Friday comme assistant. Un truc pratique pour discuter, lancer des actions, garder quelques préférences, résumer des idées. Mais cette semaine, le sujet a commencé à devenir plus intéressant : comment transformer un assistant conversationnel en système personnel cohérent ?

Pas un produit magique. Pas un cockpit façon démo LinkedIn avec des graphes partout. Plutôt une pile maison, utile, progressive, qui garde les bons rôles au bon endroit.

L’idée centrale est simple : Friday doit rester le cerveau.

Autour, les autres briques deviennent des organes spécialisés : Glance pour afficher vite, PostgreSQL pour ranger la mémoire structurée, Home Assistant pour la maison, Gitea pour le code, ComLink pour devenir une interface physique. Rien de révolutionnaire pris séparément. Mais ensemble, ça commence à ressembler à un vrai système.

Remettre les rôles dans le bon ordre

La première décision importante, c’était de ne pas confondre interface et cerveau.

J’ai tendance à empiler des outils — comme tout développeur raisonnablement malade — et à me demander ensuite lequel doit devenir le centre du monde. Cette semaine, on a clarifié ça :

  • Friday : cerveau, orchestration, contexte, décisions.
  • ComLink : futur appareil/client physique pour parler à Friday et relayer des actions.
  • Glance : page d’accueil navigateur, tableau d’affichage rapide.
  • Home Assistant : système nerveux maison/atelier.
  • Gitea/GitHub : mémoire du code.
  • PostgreSQL Friday Memory : mémoire structurée et queryable.
  • Roadmap JSON + notes : mémoire projet.

Ça paraît évident une fois écrit, mais c’est exactement le genre de truc qu’on ne pose jamais proprement et qui finit en plat de spaghettis numériques.

ComLink, par exemple, ne doit pas devenir le cerveau. Il doit pouvoir tomber, être remplacé, évoluer, sans emporter la logique de Friday avec lui. C’est une main, une oreille, peut-être une télécommande intelligente. Pas le cortex.

Glance, pareil : excellent comme home navigateur, mauvais comme cockpit final. C’est le post-it sur le frigo, pas la tour de contrôle.

Une roadmap vivante dans Glance

Le premier morceau concret a été la roadmap.

J’avais besoin d’un affichage simple pour ne pas perdre le fil entre ComLink, l’imprimante 3D, l’atelier, les futurs Flug Logs, les idées musique, et le backlog un peu dangereux qui se remplit toujours plus vite que prévu. Évidemment.

On a donc posé une règle saine : Glance n’est pas la source de vérité.

La roadmap vit dans :

/opt/data/projects/roadmap.json

Puis un script génère la vue Glance :

/opt/data/scripts/glance_roadmap_sync.py

Et une copie compatible cron Hermes tourne côté automatisation :

/opt/data/.hermes/scripts/glance_roadmap_sync.py

Le résultat : une page Roadmap dans Glance, synchronisée automatiquement, sans aller éditer à la main un gros YAML à chaque changement.

C’est une petite différence, mais elle compte : si demain Glance est remplacé, la roadmap reste. Glance affiche. Friday orchestre. Les données restent ailleurs.

Le bug YAML qui rappelle à l’humilité

Évidemment, il y a eu un bug. Sinon ce ne serait pas vraiment une semaine de bricolage logiciel.

En ajoutant une nouvelle idée de projet dans le backlog, la page Glance ne se mettait plus correctement à jour. Premier réflexe classique : suspecter le cache, le hot reload, le container, le service qui n’a pas rechargé.

Mauvais suspect.

Le vrai coupable était beaucoup plus bête : une description YAML non quotée avec : dedans.

description: Une idée de projet à garder pour plus tard : détails, contraintes, matériel...

YAML a vu le : et s’est dit : “ah, une nouvelle structure”. Merci YAML, toujours aussi détendu.

La correction : générer les chaînes avec un quoting robuste, valider le YAML avant d’accuser Glance, et retirer aussi un widget GitHub releases qui pointait vers un repo sans vraie latest release.

Depuis, règle ajoutée : quand Glance ne se met pas à jour, vérifier d’abord ma génération/config avant de blâmer le reload.

C’est moins spectaculaire, mais beaucoup plus utile.

Donner une vraie mémoire à Friday

L’autre gros morceau de la semaine, c’est la mémoire.

La mémoire intégrée de Hermes est pratique, mais elle doit rester ultra-compacte : préférences stables, faits critiques, conventions qu’il ne faut pas répéter. Pas un historique complet de tout ce qui passe.

Pour le reste, on a commencé à poser PostgreSQL Friday Memory.

Objectif : avoir une mémoire structurée, durable, sauvegardée, interrogeable, et plus tard enrichissable avec des embeddings.

La base dédiée est en place :

friday_memory

Avec un schéma propre :

friday.memory_meta
friday.memory_items
friday.memory_embeddings

pgvector est activé, même si les embeddings ne sont pas encore utilisés. Le choix était volontaire : ne pas commencer par faire de la recherche sémantique magique alors qu’on n’a pas encore rangé les cartons. D’abord la structure, ensuite l’intelligence par-dessus.

Pour manipuler ça sans ouvrir un client SQL à chaque fois, on a ajouté un petit CLI :

scripts/friday_memory.py

Avec des commandes simples :

init
add
get
list
search
archive
stats
export

Rien de prétentieux, mais déjà suffisant pour stocker des décisions, notes, conventions et éléments de projet.

Backup : le glamour absolu

Une mémoire qui n’est pas sauvegardée, ce n’est pas une mémoire. C’est une promesse avec une date d’expiration.

On a donc intégré la base Friday Memory dans les backups du repo Friday, sous forme sanitisée :

backup/current/database/friday_memory/

Avec :

schema.sql
memory_meta.jsonl
memory_items.jsonl
memory_embeddings.jsonl
metadata.json

Le point important : pas d’URL de connexion, pas de mot de passe, pas de secret. Juste de quoi restaurer/revoir le contenu utile.

Ce que ça prépare pour ComLink

Tout ça n’est pas juste du rangement pour le plaisir de ranger. Même si, soyons honnête, un bon rangement technique a son petit charme.

Le vrai prochain morceau, c’est ComLink.

ComLink doit devenir l’interface physique pour parler à Friday : un client dédié, capable de communiquer avec le cerveau central, d’afficher ou relayer des infos, peut-être de déclencher certaines actions, mais sans porter toute la logique.

Cette semaine a préparé le terrain :

  • Friday a une architecture plus claire.
  • La roadmap existe hors dashboard.
  • La mémoire structurée commence à être disponible.
  • Les backups sont en place.
  • Glance sert de panneau d’affichage stable.

C’est exactement le socle qu’il fallait avant de brancher un objet physique dessus. Sinon ComLink aurait fini par devenir un mélange d’interface, de mémoire, de logique métier et de bricolage réseau. Donc un futur problème avec une coque imprimée en 3D.

Atelier, vidéo, et le début des Flug Logs

Il y a aussi eu une réflexion autour de la suite : documenter l’atelier et les projets sans tomber dans le workflow YouTuber lourd.

L’idée des Roadmap Journal / Flug Logs revient doucement : capturer l’avancement, garder des traces, faire des petits carnets de bord, sans transformer chaque session en production audiovisuelle complète.

On a validé un principe simple pour la capture : image et son peuvent venir de devices séparés, tant qu’il y a un repère de synchro. Un clap, ou même un bon gros “pam” visible/audible au début de chaque prise.

Pas besoin d’un studio. Juste assez de discipline pour retrouver ses morceaux après.

Côté atelier, l’imprimante 3D reste dans la pile, mais avec une règle claire : tout ce qui bouge physiquement attend un go explicite. Friday peut vérifier, préparer, expliquer, mais ne déclenche pas une action mécanique sans validation. Les doigts, c’est surfait seulement jusqu’au moment où on les perd.

Bilan

Cette semaine, on n’a pas “fini Friday”. On a fait mieux : on a commencé à lui donner une colonne vertébrale.

Il y a maintenant :

  • une séparation plus nette entre cerveau, interfaces et mémoires ;
  • une roadmap affichée automatiquement dans Glance ;
  • une mémoire PostgreSQL prête et sauvegardée ;
  • un début d’outillage pour ranger les décisions ;
  • une direction claire pour ComLink ;
  • une base pour documenter les futurs travaux d’atelier.

Ce n’est pas encore le cockpit final. Ce n’est pas encore l’assistant physique posé sur le bureau. Mais c’est le genre de semaine où l’infrastructure arrête d’être une collection de trucs et commence à devenir un système.

Et franchement, pour une semaine qui contenait du YAML, PostgreSQL, Glance et une roadmap qui commence déjà à déborder, on s’en sort pas mal.