Comment je m'organise

Une company, une capacité, un résultat.

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.

COMPANY beedone + CAPABILITY outreachapp RÉSULTAT contacts.csv DÉCLENCHEUR horaire · événement
Deux facteurs, un résultat. La boucle en pointillé, c'est le déclencheur : un horaire que je pose, ou un événement qui arrive. Il ne change pas l'équation, il la rejoue.

Le premier facteur

Une company possède son identité

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.

L'identité

Ce qu'elle vend, à qui, avec quelle promesse.

project-context.md · context/brand/

La voix et la DA

Le ton, les mots employés, ceux jamais employés, les couleurs, la mascotte.

context/voice/ · social-visual-context.md

Les preuves

Les chiffres réels. La seule source légitime d'une métrique citée quelque part.

context/proof/ · case-studies.md

Sa config par capacité

Ses plafonds, ses canaux ouverts, son compte, son rythme.

lane.env · sources.env · newsletter.env

  • beedone app de productivité
  • museotter journaling
  • evolum 7 ans, ~30k€ MRR
  • updrive SaaS VTC
  • mindowl quiz multijoueur
  • youcefelkamel la marque perso

Le second facteur

Une capacité possède sa méthode

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.
  • shortapp vidéos courtes 9:16
  • postapp publication multi-plateformes
  • outreachapp DM Instagram à froid
  • minagapp capture et qualification
  • redditapp posting Reddit
  • adsapp media buying Meta
  • autocontentapp commits → idées de post
  • newsletterapp newsletter hebdo
  • podcastapp épisodes de 10 min
  • seogeoboostapp SEO et moteurs de réponse
  • asoboostapp fiches store
  • miniaturapp vignettes de vidéo
  • landingapp landings et blogs
  • leadmagnetapp aimants à leads

Le croisement

Le même moteur, une company en paramètre

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.

outreachapp / engine --company beedone lane.env plafonds · compte · envoi strategy.md ICP · barème · seuil dm-templates.md les deux portes lit contacts.csv une ligne = un profil actions.csv append-only, tient les plafonds écrit
Changez `beedone` en `museotter` : le moteur ne bouge pas, il lit d'autres fichiers et écrit dans un autre ledger.

Et le déclencheur

Deux façons de partir sans moi

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

DÉCLENCHEUR 30 8 * * 1-6
CAPABILITY --skill instagram-outreach --workdir ~/Tech/outreachapp
COMPANY Session `mining` puis `qualification` — company `beedone`.
RÉSULTAT run_summaries/2026-08-06-beedone-mining.json

ÉVÉNEMENTle monde décide quand

DÉCLENCHEUR POST /webhook/socialhook · message.received
CAPABILITY webhookSocialhook → Cloud Tasks → socialhookWorker (functions/)
COMPANY Compte Instagram connecté — réponse auto contextuelle (webhookLeads/{username}).
RÉSULTAT webhookConversations/{conversationId} → auto_replied (Firestore)
  • REFUSÉ AVANT TRAITEMENT
  • déjà vu
  • déjà répondu
  • liste noire
  • hors 24 h

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

Dix croisements qui tournent aujourd'hui

Chaque case est un couple réel, avec la commande qui l'exécute et le fichier qu'elle produit.

beedone × outreachapp
engine/mine.py --company beedone --from-sources

410 contacts dans un ledger unique

apps/beedone/contacts.csv

beedone × redditapp
skill reddit-marketing · session casual

un post par jour, rotation de comptes

apps/beedone/subreddits.md

beedone × autocontentapp
engine/scan.py --company beedone

des idées tracées jusqu'au commit

companies/beedone/ideas.csv

museotter × asoboostapp
baseline · concurrents · métadonnées

positions avant / après

references/beedone-case-study.md

youcefelkamel × newsletterapp
engine/check.py --company youcefelkamel

« App World Weekly », chaque lundi

companies/…/issues.csv

beedone × podcastapp
engine/episode.py new --company beedone

10 minutes, transcript timé, chapitres

episodes/beedone/…/out/

evolum × landingapp
scaffold.mjs --project ~/Tech/evolum_app · audit.mjs

5 landings du même moteur : evolum, beedone, museotter, strive, ce site

landing/ · landing.config.json

beedone × seogeoboostapp
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/

youcefelkamel × leadmagnetapp
une capacité en prod → page + article + carrousel + post

2 aimants en ligne, chiffres mesurés au ledger

SHIPPED.md

youcefelkamel × miniaturapp
engine/generate.py --company youcefelkamel --variant jeff

3 pistes jugées à 120 px, A/B test ouvert

companies/…/thumbnails.csv

Pourquoi ça tient

Huit règles, jamais négociées

Ce ne sont pas des préférences de style. Chacune répare une panne que j'ai vécue.

  1. 01

    Un ledger, jamais deux

    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.

  2. 02

    Tout vit dans le repo

    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.

  3. 03

    En cas de doute, le repo gagne

    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.

  4. 04

    Le moteur refuse, et c'est voulu

    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.

  5. 05

    L'exécutant ne stocke rien

    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.

  6. 06

    Le feedback devient une règle

    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.

  7. 07

    Rien du dehors n'est cru sur parole

    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.

  8. 08

    Accuser réception n'est pas traiter

    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

Un retour ne se répète pas, il s'écrit

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.

Un goût → la company

« 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 méthode → la capacité

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

Ce que ça change pour une entreprise

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 parler

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