L'identité
Ce qu'elle vend, à qui, avec quelle promesse.
project-context.md · context/brand/
Comment je m'organise
Je fais tourner six produits seul. Pas en travaillant plus vite : en séparant ce qui change de ce qui ne change pas. Un produit apporte son identité, une capacité apporte sa méthode. Le croisement des deux est déterministe — même entrée, même sortie, toujours.
Le premier facteur
Un produit, une marque, bientôt un client. Ce qu'elle possède, aucune capacité ne le duplique — et le jour où le ton change, il change à un seul endroit.
Ce qu'elle vend, à qui, avec quelle promesse.
project-context.md · context/brand/
Le ton, les mots employés, ceux jamais employés, les couleurs, la mascotte.
context/voice/ · social-visual-context.md
Les chiffres réels. La seule source légitime d'une métrique citée quelque part.
context/proof/ · case-studies.md
Ses plafonds, ses canaux ouverts, son compte, son rythme.
lane.env · sources.env · newsletter.env
Le second facteur
Un repo = une compétence. Elle ne connaît aucun produit en particulier : elle prend une company en paramètre. Écrite une fois, elle sert les six.
METHOD.md La doctrine Ce qui est vrai quel que soit le produit. Si un autre fichier la contredit, elle gagne. engine/ Le moteur La mécanique, et surtout les refus. Stdlib seule, il tourne en cron nu. listeners/ L'oreille Ce qui arrive du dehors. Signature vérifiée, événement normalisé, mis en file — jamais traité dans la requête. agent/sessions/ Les recettes Un créneau de travail nommé, exécutable par un agent. C'est ce qu'un cron déclenche. AGENTS.md Le contrat Le point d'entrée de n'importe quel agent. C'est lui qui rend la capacité survivable. Le croisement
Il n'y a pas de version « BeeDone » du moteur d'outreach. Il y a un moteur, qui lit la config de la company qu'on lui nomme et écrit dans son ledger à elle.
Et le déclencheur
Un horaire, c'est moi qui décide quand. Un événement, c'est le monde. Dans les deux cas le déclencheur ne contient aucune méthode : il nomme une capacité et une company, le reste est déjà écrit.
HORAIREje décide quand
30 8 * * 1-6 --skill instagram-outreach --workdir ~/Tech/outreachapp Session `mining` puis `qualification` — company `beedone`. run_summaries/2026-08-06-beedone-mining.json ÉVÉNEMENTle monde décide quand
POST /webhook/socialhook · message.received webhookSocialhook → Cloud Tasks → socialhookWorker (functions/) Compte Instagram connecté — réponse auto contextuelle (webhookLeads/{username}). webhookConversations/{conversationId} → auto_replied (Firestore) Le prompt de ce cron faisait 1 100 caractères de méthode recopiée. Il en fait 223 — et le webhook n'en porte aucune. La méthode a rejoint la capacité, là où elle est relue et testée.
En vrai
Chaque case est un couple réel, avec la commande qui l'exécute et le fichier qu'elle produit.
engine/mine.py --company beedone --from-sources 410 contacts dans un ledger unique
apps/beedone/contacts.csv
skill reddit-marketing · session casual un post par jour, rotation de comptes
apps/beedone/subreddits.md
engine/scan.py --company beedone des idées tracées jusqu'au commit
companies/beedone/ideas.csv
baseline · concurrents · métadonnées positions avant / après
references/beedone-case-study.md
engine/check.py --company youcefelkamel « App World Weekly », chaque lundi
companies/…/issues.csv
engine/episode.py new --company beedone 10 minutes, transcript timé, chapitres
episodes/beedone/…/out/
scaffold.mjs --project ~/Tech/evolum_app · audit.mjs 5 landings du même moteur : evolum, beedone, museotter, strive, ce site
landing/ · landing.config.json
seo-commit-mining → seo-app-articles · cron du lundi 7 h 6 articles FR+EN en 28 jours, l'angle miné dans les commits
landing/src/content/blog/
une capacité en prod → page + article + carrousel + post 2 aimants en ligne, chiffres mesurés au ledger
SHIPPED.md
engine/generate.py --company youcefelkamel --variant jeff 3 pistes jugées à 120 px, A/B test ouvert
companies/…/thumbnails.csv
Pourquoi ça tient
Ce ne sont pas des préférences de style. Chacune répare une panne que j'ai vécue.
Une capacité possède ses données et personne ne les recopie. Un événement entrant garde le sien, brut et immuable ; la capacité en tire ce dont elle a besoin. On projette, on ne recopie pas — sinon deux vérités coexistent et ce qui saute derrière, c'est un compte.
Aucune mémoire cachée dans un agent. Ce qui est appris s'écrit dans le fichier concerné, visible en revue, versionné, relisible dans six mois.
Une skill d'agent peut diverger de la méthode. La règle est écrite dans chaque capacité : le repo tranche. C'est ce qui empêche deux vérités de coexister.
Une question de plus de 35 mots, un DM sans signal, une idée sans commit, un chiffre sans source, un message déjà répondu : refusés. Un refus se corrige, il ne se contourne pas.
L'agent qui déclenche résout un triplet et exécute. Il ne détient ni la méthode, ni les données. On peut le remplacer un lundi matin sans rien perdre. Sa seule mémoire, c'est le repo.
Ne rien stocker n'interdit pas d'écrire. Un retour ne se répète pas deux fois : il devient une ligne dans le fichier concerné, courte et vérifiable. C'est ce qui fait qu'une capacité s'améliore au lieu de se répéter.
Un événement entrant est signé, et la signature se vérifie sur le corps brut, avant de le lire. Pas de signature valide : 401, et rien n'entre dans les livres.
Le récepteur répond 200 tout de suite et met en file — un agent qui réfléchit dix secondes ferait passer la livraison pour un échec. Chaque événement porte un identifiant : un renvoi ne produit jamais deux actions.
Ce qui évolue
L'exécutant ne garde rien en mémoire, mais il a un droit d'écriture : celui d'améliorer ce qui vient de produire le résultat. Vous lui dites que les tirets font IA, il ne le note pas dans un coin de sa tête — il ouvre le bon fichier et ajoute une ligne, précise, vérifiable. Reste à savoir lequel des deux facteurs.
« Arrête les tirets dans mes posts, ça fait IA. »
youcefelkamel/context/voice/linkedin.md ## ÉcriturePhrases courtes, une idée par ligne.+ Jamais de tiret cadratin. Coupe la phrase en deux.
Ne bouge que cette marque. Les cinq autres companies gardent leur voix.
« Une idée sans le commit qui la justifie, je ne la lis pas. »
autocontentapp/METHOD.md ## RefusPas de sujet déjà traité ce mois-ci.+ Refuser toute idée dont le commit source n'est pas cité.
Bouge les six companies d'un coup. Écrit une fois, appliqué partout.
La règle qui dit où atterrit un retour est elle-même dans le repo. C'est ce qui rend le fork viable : vous ne partez pas avec la mécanique, vous partez avec sa façon d'apprendre.
Le même découpage marche pour vous. Votre contexte, votre voix, vos preuves restent chez vous — dans votre dépôt, que vous gardez. Les capacités qu'on branche dessus apportent la méthode et les garde-fous. Le jour où on arrête de travailler ensemble, tout continue de tourner sans moi : c'est le point, pas un effet de bord.
En parlerP.S. — Ces repos sont faits pour être forkés, et pour dépasser leur pot. Le vôtre va prendre vos règles, vos refus, votre voix, et au bout de six mois il ne ressemblera plus vraiment au mien. Ce qui m'intéresse, c'est de voir de quoi il aura l'air dans un an, une fois qu'il aura remplacé assez de lundis matin pour avoir des opinions. Pensez à m'envoyer une photo des racines.