Skip to content

Article : « J'ai fait coder mon Mac tout seul pendant deux semaines » - #166

Merged
antoinesd merged 5 commits into
mainfrom
article/yb/2026-08-31-jai-fait-coder-mon-mac-tout-seul
Sep 3, 2026
Merged

antoinesd merged 5 commits into
mainfrom
article/yb/2026-08-31-jai-fait-coder-mon-mac-tout-seul

Conversation

@yblazart

Copy link
Copy Markdown
Contributor

Nouvel article de Yann Blazart (auteur yannblazart) pour la catégorie software / news.

Sujet

Récit de deux semaines à implémenter Jakarta Persistence 3.2 avec un LLM local (Qwen3.6-35B-A3B) sur un MacBook M5 Max, entièrement hors ligne. Ton grand public façon Scientific American : ce qui marche, ce qui déraille, et ce que ça dit de l'état réel de l'IA locale pour du vrai travail d'ingénierie. ~8 000 mots, temps de lecture ~28 min.

Contenu de la PR

  • _posts/2026-08-31-jai-fait-coder-mon-mac-tout-seul.md — l'article (Markdown, front matter Jekyll, toc: true).
  • Vignette de couverture + 4 illustrations éditoriales (générées via Gemini, style cohérent, sans texte).
  • 2 diagrammes (équipe d'agents, boucle de session) pré-rendus en PNG depuis leurs sources .mmd — le blog Markdown ne rend pas mermaid nativement.

Vérifié

  • Rendu contrôlé en local (jekyll serve) : titre, auteur, date, sommaire, vignette et toutes les images inline s'affichent correctement.
  • Style relu : aucun cadratin (—), ton volontairement vivant.

Note : le blog n'ayant pas d'i18n formel, une éventuelle version anglaise se ferait en post autonome séparé (à discuter).

🤖 Generated with Claude Code

https://claude.ai/code/session_01NZfnP6AWEm5WLqNVNHGK6R

…aines »

Récit de deux semaines d'implémentation de Jakarta Persistence avec un LLM
local (Qwen3.6) sur MacBook M5 Max. Les deux diagrammes mermaid (équipe
d'agents, boucle de session) sont pré-rendus en PNG car le blog Markdown ne
rend pas mermaid. Restent à déposer : 5 illustrations (vignette + 4 inline).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NZfnP6AWEm5WLqNVNHGK6R

Signed-off-by: Yann Blazart <yann@durand-blazart.fr>
…o Banana)

Vignette de couverture, stagiaire fantôme, petite entreprise d'agents,
bureau-mémoire qui ralentit, complémentarité homme-machine. Générées via
Gemini (Nano Banana), style éditorial cohérent, palette teal/orange/cream.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NZfnP6AWEm5WLqNVNHGK6R

Signed-off-by: Yann Blazart <yann@durand-blazart.fr>
La v1 portait « FAST/SLOW » malgré la consigne. v2 : cadran vierge (graduations
+ arc rouge), cohérent avec un article en français.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NZfnP6AWEm5WLqNVNHGK6R

Signed-off-by: Yann Blazart <yann@durand-blazart.fr>
Le fichier précédent était un spritesheet parasite récupéré par erreur dans
~/Downloads (le download via le viewer plein écran avait échoué). v2 : robot
au corps translucide présentant un chevalet vide, dérivant vers l'espresso.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NZfnP6AWEm5WLqNVNHGK6R

Signed-off-by: Yann Blazart <yann@durand-blazart.fr>
Comment thread _posts/2026-08-31-jai-fait-coder-mon-mac-tout-seul.md

Bon. Maintenant la vraie vie.

Une IA qui code, ça a une mémoire de travail. Une sorte de bureau sur lequel elle pose tout ce dont elle a besoin : le code en cours, les résultats des tests, mes instructions. Ce bureau a une taille. Quand il déborde, tout tombe par terre et la séance s'arrête net. Un jour, sur une seule tâche, mon assistant a rempli son bureau jusqu'au crash. En enquêtant, j'ai découvert le coupable : pour lire les sources d'un test, il avait décompressé la même archive 34 fois de suite, en s'étalant à chaque fois des milliers de mots inutiles sous les yeux. Comme quelqu'un qui, pour vérifier un numéro de téléphone, réimprimerait l'annuaire entier à chaque appel. Solution : je lui ai tout bonnement interdit de décompresser quoi que ce soit. On délègue ça à un assistant secondaire dont la mémoire, elle, part à la poubelle après usage.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

L'annuaire, est peut-être une référence daté...


J'avais pourtant fini par lui inscrire noir sur blanc dans ses consignes : « Tu ne racontes pas ce que tu vas faire, tu le fais. » Il replongeait quand même. Un modèle de cette taille imite ce qu'il vient de lire plus qu'il n'obéit à ses instructions, et quand il vient d'écrire trois phrases de belles intentions, la pente naturelle est d'en écrire une quatrième. Ce qui l'a réveillé, finalement, ce n'est pas la supplication, ni « tu continues ? », ni le fait d'appuyer sur Entrée en soupirant. C'est l'ordre carré : une commande qui rouvre sèchement sa feuille de route et lui dit « tâche suivante, exécution ». Pas de « s'il te plaît ». Un ordre de mission. Depuis, quand il rêvasse, je ne discute pas et je ne le relance pas gentiment, ce qui ne fait qu'empirer les choses en lui donnant encore de la prose à imiter. Je lui redonne sa feuille de route, point, et il repart au travail. Il y a là-dedans une leçon de management que je vous laisse méditer.

Mon préféré, celui qui m'a fait perdre le plus de temps et rire le plus fort, c'est l'histoire de la version qui ne plaisait pas. Mon assistant a besoin d'un outil d'analyse du code Java pour s'y retrouver, l'équivalent de l'autocomplétion de votre traitement de texte, mais pour les programmes. Cet outil refusait obstinément de démarrer. Des heures d'enquête. Et la cause, la voilà : pour vérifier quelle version de Java était installée, mon assistant posait la question, et attendait une réponse du genre « 25 point 0 point 3 ». Sauf que les versions récentes de Java répondent simplement « 25 ». Sans les points. Et devant cette réponse trop courte, le programme concluait qu'il n'y avait pas de Java du tout, et débranchait tout l'outillage en silence. Toute une chaîne bloquée par un logiciel qui boude parce qu'un numéro n'a pas la ponctuation attendue. J'ai réglé le problème en installant une version de Java dont le numéro contenait les fameux points. C'est d'une bêtise magnifique. C'est aussi, très exactement, le quotidien de l'ingénierie logicielle.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ça me rappelle les galères d'éclipse au passage de Sun à oracle. Où l'outil ne pouvait plus identifier les versions de Java parce que sun était en dur dans la regexp. (Ou le nombre de caractères)


Un modèle lâché seul sur un projet de cette taille se perd. Il oublie ce qu'il faisait, il tourne en rond, il refait trois fois la même erreur avec la même bonne foi. Pour en tirer quelque chose d'utile, il a fallu bâtir autour de lui toute une organisation. Des postes, des droits d'accès, un règlement intérieur, des procédures. Laissez-moi vous présenter le personnel.

Il y a le développeur en chef. C'est lui qui écrit le code, lance les tests, et a le droit de tout modifier. Le gros du travail passe par ses mains. Mais il a une consigne de fer : une seule tâche à la fois, puis il ferme boutique et on repart à neuf. Un développeur qui garde trop de dossiers ouverts sur son bureau finit par tout mélanger, et le sien déborde vite.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Alors, j'aurais envie de parler directement d'agent. C'est peut-être forcer la clarification, mais ton passage à l'équipe créé un peu de flou, parler des le début d'agent devrait supprimer ce flou (cette ambiguïté)
Je me demande également si c'est pas une bonne idée de mettre le lien vers le MD de l'agent


C'est là que j'ai eu mon idée, et je vais me permettre d'en être un peu fier, parce qu'elle est de moi. Pas du gros modèle distant qui a bâti tout l'atelier, pas du petit local qui y travaille. De moi, l'humain resté dans la boucle, avec une astuce toute bête que connaît n'importe quel écrivain : on relit toujours mieux le texte d'un autre que le sien. Le sien, on l'aime déjà, on glisse sur ses défauts sans les voir. Alors pourquoi ne pas faire relire le plan au modèle, mais dans une conversation neuve, cerveau vidé, en lui cachant qu'il en est l'auteur ? Le même modèle, convoqué cette fois comme correcteur, pas comme écrivain.

J'ai fabriqué une seconde commande pour ça. Elle relance le modèle à froid, avec une seule mission : voilà un plan que quelqu'un a écrit, déchire-le, trouve ce qui déborde, ce qui est trop gros, ce qui est mal rangé, et corrige.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ajouter la commande en question


Oui, si vous avez la machine qu'il faut, et cette machine coûte cher et chauffe. Oui, si vous acceptez de passer une partie de votre temps non pas à coder, mais à comprendre pourquoi votre assistant boude. Oui, si vous mesurez tout et ne croyez rien sur parole, y compris et surtout vos propres intuitions, qui se trompent plus souvent qu'on ne l'admet.

Mais que personne ne vous vende la simplicité. Télécharger un modèle et le regarder coder tout seul à votre place, c'est un fantasme de brochure. Ce que j'ai vécu ressemble bien davantage à monter une petite entreprise : recruter les bons profils, écrire les fiches de poste, distribuer les clés, rédiger les procédures, et mesurer sans relâche pour distinguer ce qui marche vraiment de ce qu'on s'est raconté. Le modèle est le moteur, et un bon moteur. Mais un moteur posé sur un établi ne vous emmène nulle part. Il faut construire la voiture autour, et la voiture, c'est le plus gros du chantier. Faire de l'IA locale qui marche, ce n'est pas simple. C'est même exactement le contraire, et c'est le seul enseignement que je retiens sans la moindre réserve.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Je préfèrerais à "monter une entreprise", monter une "équipe", voir "une équipe projet"


*Yann Blazart développe la pile logicielle Vidocq. Toutes les mesures citées dans cet article ont été relevées sur sa propre machine et consignées ; il les fournira volontiers à quiconque doute, ce qui est la moindre des choses quand on parle d'intelligence artificielle.*

*Transparence, tant qu'on y est : cet article a été écrit avec l'aide d'une IA, la même engeance que celle dont il parle. Je n'en ai aucune honte, et je préfère le dire que le cacher. La machine a tenu le clavier et proposé des tournures ; les idées, les mesures, les erreurs, les partis pris et les blagues douteuses restent les miens. Le jus de cerveau, c'est encore moi qui le fournis. Il fallait bien quelqu'un pour décider de quoi parler, trancher ce qui était vrai de ce qui m'arrangeait, et vérifier que la machine ne prenait pas, elle non plus, quelques libertés cachées sous la masse.*

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Est-ce la transparence ne serait pas de mettre les modèles utiliser ?
Y compris dans les descriptifs du projet ?

La métaphore, c'est bien pour la conversation, mais si vous êtes du métier vous voulez voir les vrais boulons. Les voici. Tout tient dans un dossier discret à la racine du projet, `.opencode`, plus quelques fichiers texte. Rien de propriétaire, rien de magique : du Markdown et un peu de JSON, versionnés dans le dépôt comme le reste du code.

```
.opencode/

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remarque : sur mon poste, j'ai dû mettre des modèles pour mes agents dans le fichier de configuration user (~/.config/opencode/opencode.jsonc - un truc du genre), sinon open code s'arrêtait tout seul...

De plus, je pense qu'il y a beaucoup à dire sur l'importance du client (Opencode versus Cursor, Claude-Code etc...) mais peut être dans d'autres blogs

- relie A3B au concept MoE (le sigle n'est pas dans le nom, A3B le trahit)
- introduit le mot « agent » dès la présentation de l'équipe (lève le flou)
- « monter une petite entreprise » -> « monter une équipe projet »
- nomme les commandes évoquées (/next, /check-plan)
- transparence: nomme les modèles (Qwen3.6-35B-A3B en local, Claude en distant)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NZfnP6AWEm5WLqNVNHGK6R

Signed-off-by: Yann Blazart <yann@durand-blazart.fr>
@yblazart

yblazart commented Sep 1, 2026

Copy link
Copy Markdown
Contributor Author

Merci Charles, franchement bonne relecture 🙏 J'ai poussé un commit qui prend le gros de tes remarques :

  • A3B / MoE : t'as raison, le sigle sortait de nulle part. Je relie les deux maintenant, c'est le A3B qui trahit le MoE même quand le mot n'est pas écrit dans le nom.
  • Les agents : j'introduis le mot dès la présentation de l'équipe, ça lève le flou comme tu disais.
  • « monter une entreprise » → « monter une équipe projet » : adopté, c'est plus juste.
  • Les commandes : j'ai nommé /next et /check-plan là où je les évoquais dans le vide.
  • Transparence : je nomme maintenant les modèles (Qwen3.6-35B-A3B en local, Claude en distant). Bonne idée, c'était le sujet, autant être carré.

Ce que je garde volontairement : l'annuaire téléphonique 😅 Je sais que c'est daté, mais le côté rétro me plaît, je l'assume.

Pour tes anecdotes : Eclipse au passage Sun→Oracle avec sun en dur dans la regex, c'est très exactement le même bug, ça m'a fait sourire. Et ton histoire d'OpenCode qui s'arrête tout seul sans modèle défini par agent dans la config user : je viens de me la reprendre en pleine figure hier soir, donc je confirme à 100 %.

La compa des clients (OpenCode vs Cursor vs Claude Code), je la garde pour un prochain billet, c'est un vrai sujet.

Merci encore pour l'approve 🍻

@antoinesd

Copy link
Copy Markdown
Contributor

/preview

@github-actions

github-actions Bot commented Sep 1, 2026 •

Copy link
Copy Markdown

🚀 Preview deployed successfully!

🌐 Preview: https://pr-166-sciam-preview.surge.sh

@antoinesd antoinesd left a comment •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, mais stp la prochaine fis laisse le cartouche par défaut en haut de la PR, ça facilite grandement le suivi des reviews surtout quand il reste plein de commentaires non résolus comme là ;-)


Pour le piloter, j'utilise deux outils. Un serveur local qui héberge le modèle et répond aux questions, et un assistant de programmation qui joue les chefs d'orchestre : il lit mes fichiers, lance les compilations, écrit le code, relance les tests. Le modèle est le cerveau, l'assistant est les mains. Mon travail à moi, dans tout ça, se résume de plus en plus à celui d'un contremaître un peu méfiant.

L'objectif, tant qu'à faire, n'était pas de générer un « bonjour le monde ». Puisque je trichais déjà sur le matériel, autant ne pas tricher sur le reste. J'ai donc visé une bête de concours, une des spécifications les plus retorses de tout l'écosystème Java : implémenter Jakarta Persistence, la norme officielle qui permet à un programme de discuter avec une base de données. Un monument aride, doté de sa propre suite de tests de conformité : 269 familles de tests, environ 1 745 vérifications individuelles, chacune impitoyable. Le genre de montagne qu'on ne gravit pas en un week-end, et que la plupart des gens sensés n'iraient pas attaquer avec une petite IA posée sur un ordinateur portable. Appelez ça de la folie. Moi j'appelle ça refuser de me faciliter la tâche : pour savoir si l'IA locale tient vraiment la route, il faut la mettre face à quelque chose de dur, pas lui tendre une perche. Une démonstration facile ne prouve que la facilité.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tu es sûr pour « bonjour le monde » ?

@yblazart

yblazart commented Sep 2, 2026 via email

Copy link
Copy Markdown
Contributor Author

@antoinesd
antoinesd merged commit e8b15ae into main Sep 3, 2026
2 checks passed
@antoinesd
antoinesd deleted the article/yb/2026-08-31-jai-fait-coder-mon-mac-tout-seul branch September 3, 2026 09:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants