EJ
ERWAN JEGOU
Labo IA · Mars 2026
๐Ÿฆž
Open source · Plugin Claude Code

Claude Code, mais qui ne s'arrete jamais

ClaudeClaw transforme votre abonnement Claude Code en assistant permanent : taches planifiees, Telegram, Discord, voix, dashboard. Zero cout supplementaire.

Le constat

Claude Code est puissant mais ephemere

Vous ouvrez un terminal, vous posez votre question, Claude repond, et le process s'arrete. Pas de planification, pas de notifications, pas de memoire entre les sessions. ClaudeClaw resout ca en ajoutant un daemon persistant par-dessus Claude Code.

โฐ

Taches planifiees (cron)

Un fichier Markdown avec un schedule cron + un prompt. Le daemon execute a l'heure dite, timezone-aware. Hot-reload toutes les 30 secondes.

"Tous les matins a 8h, verifie les taches en retard et envoie le recap sur Telegram."
๐Ÿ’ฌ

Telegram / Discord

Texte, photos, documents, notes vocales. Le bot repond depuis votre machine, dans votre repertoire projet, avec acces a vos fichiers et outils.

"Prepare la proposition commerciale pour le client X" → document genere en 2 minutes.
โค๏ธ

Heartbeat proactif

Toutes les X minutes, l'agent verifie s'il y a quelque chose qui merite votre attention. S'il detecte un truc, il vous contacte. Sinon, silence.

"3 devis sans reponse depuis 5 jours. Relance recommandee sur le dossier Leclerc."
๐Ÿง 

Memoire CLAUDE.md

Identite, preferences, contexte metier : tout dans un fichier Markdown injecte en system prompt a chaque appel. L'agent ne repart jamais de zero.

Il sait qui vous etes, comment vous travaillez et ce qui est prioritaire.
๐Ÿ‘ป

Personnalite (SOUL)

ClaudeClaw n'est pas un bot generique. Au premier lancement, un wizard conversationnel vous pose des questions pour definir l'identite de l'agent : son nom, son ton, son emoji, ses limites. Un fichier SOUL.md definit sa philosophie : "Tu n'es pas un chatbot. Tu deviens quelqu'un."

"Be warm. Be natural. Have opinions. Read the room." -- extrait du SOUL.md
๐ŸŽค

Voix (Whisper local)

Envoyez une note vocale, whisper.cpp la transcrit localement (pas de cloud), et Claude repond. Fonctionne offline une fois le modele telecharge.

Note vocale de 30 secondes → texte transcrit → reponse en 15 secondes.
๐Ÿ“Š

Dashboard web local

Interface sur le port 4632. Gestion des jobs, logs en temps reel, etat du daemon. Pas besoin de terminal pour piloter l'agent.

Modifier un prompt de cron job depuis le navigateur → actif en 30 secondes.
Sous le capot

Architecture reelle (code source analyse)

J'ai lu le code source de moazbuilds/claudeclaw ligne par ligne. Voici ce qu'il fait reellement, sans marketing.

// Le daemon tourne en fond via Bun nohup bun run src/index.ts start --web// A chaque action (heartbeat, cron, message Telegram/Discord)... Bun.spawn(["claude", "-p", prompt, "--resume", sessionId, "--dangerously-skip-permissions", "--append-system-prompt", SOUL + IDENTITY + USER + CLAUDE_MD])// Claude CLI s'execute avec acces complet aux tools Bash, Read, Write, Edit, Glob, Grep, WebFetch, MCP...// Le resultat est renvoye sur le canal d'origine Telegram / Discord / Dashboard / Logs
Point cle : ClaudeClaw ne reimplemente rien. Il spawne le vrai CLI claude comme subprocess. Tout ce que Claude Code sait faire en terminal, ClaudeClaw sait le faire en automatique ou via Telegram.

Flux d'un message Telegram

Message recu sur Telegram

Texte, photo, document ou note vocale. Verification de l'ID utilisateur autorise.

Pre-traitement

Si voix → whisper.cpp local transcrit en texte. Si image/doc → sauvegarde en fichier temporaire.

Queue serialisee

Le message entre dans une queue. Un seul appel claude -p a la fois (heartbeat, cron et messages partagent la meme queue).

Spawn du process Claude

claude -p "prompt" --resume SESSION_ID --append-system-prompt CLAUDE.MD avec --dangerously-skip-permissions pour le mode headless.

Execution et reponse

Claude a acces a tous les outils (Bash, fichiers, web, MCP). Le resultat est renvoye sur Telegram. Session ID sauvegarde pour le prochain message.

Structure

Ce que le plugin cree dans votre projet

Pas de base de donnees, pas de Docker, pas de serveur externe. Tout est fichiers plats dans .claude/claudeclaw/.

FichierRole
CLAUDE.mdMemoire permanente. Identite, preferences, contexte metier. Injecte en system prompt a chaque appel.
.claude/claudeclaw/settings.jsonConfig : modele, Telegram token, Discord token, heartbeat, timezone, securite, web port.
.claude/claudeclaw/session.jsonSession ID active. Permet a Claude de reprendre la conversation la ou il s'est arrete.
.claude/claudeclaw/jobs/*.mdUn fichier par tache planifiee. Schedule cron en frontmatter YAML, prompt en corps. Hot-reload 30s.
.claude/claudeclaw/prompts/HEARTBEAT.mdPrompt de veille personnalise. Recharge a chaque tick du heartbeat.
prompts/SOUL.mdPhilosophie de l'agent : ton, limites, style de communication, regles d'emoji. Injecte a chaque session.
prompts/IDENTITY.mdNom, creature, vibe, emoji signature. Rempli au premier lancement via le wizard conversationnel.
prompts/USER.mdProfil de l'humain : nom, timezone, contexte. Enrichi au fil du temps par l'agent lui-meme.
prompts/BOOTSTRAP.mdScript du premier contact. L'agent pose des questions une par une pour se configurer ("Hey, je viens de me reveiller. Qui es-tu ?").
.claude/claudeclaw/logs/Logs de chaque execution (heartbeat, cron, messages).

Exemple de job cron

# .claude/claudeclaw/jobs/recap-matin.md --- schedule: "0 8 * * 1-5" recurring: true notify: true --- Verifie les taches ouvertes. Resume les 3 priorites du jour. Si rien d'urgent, dis-le en une phrase.

Niveaux de securite

NiveauOutils disponiblesScope
lockedRead, Grep, Glob uniquementRepertoire projet
strictTout sauf Bash, WebSearch, WebFetchRepertoire projet
moderateTous les outilsRepertoire projet
unrestrictedTous les outilsSysteme entier
A savoir : Tous les niveaux utilisent --dangerously-skip-permissions (mode headless, pas de prompt de confirmation). Le scope "repertoire projet" est enforce via le system prompt, pas via une sandbox systeme. C'est une limitation a connaitre.
Cas d'usage

Ce que ca change pour un independant ou une equipe

Memes fonctionnalites, appliquees a differents contextes. Le principe : tout ce que vous faites manuellement et repetivement avec Claude Code peut etre automatise.

๐Ÿ“ง

Veille et alertes

Heartbeat toutes les 30 min qui verifie vos emails, vos tickets, vos commits. Notification Telegram uniquement si quelque chose merite votre attention.

๐Ÿ“‹

Rapports automatiques

Cron job du lundi 9h : "Resume l'activite de la semaine, les heures facturees, les taches en retard." Le rapport arrive sur Telegram sans rien faire.

๐Ÿ”

Recherche et scraping

Depuis Telegram : "Trouve les 10 derniers appels d'offre BTP dans le 49 sur marches-publics.gouv.fr." L'agent scrape, filtre, et envoie le resultat.

๐Ÿ“„

Generation de documents

Depuis le telephone : "Genere la facture pour le client Dupont, prestation du 12 mars, 3 jours a 600." Fichier PDF cree et envoye.

๐Ÿ—‚๏ธ

Gestion fichiers a distance

Depuis le chantier : "Renomme tous les plans du dossier Leclerc en ajoutant la date du jour." Execute sur votre Mac, confirme par Telegram.

๐Ÿค–

Enchainer avec vos skills

Les skills Claude Code (~/.claude/skills/) sont charges automatiquement. Gmail, Google Calendar, browser automation : tout fonctionne via Telegram.

Integrations

Un webhook pour piloter l'agent depuis n'importe quoi

Telegram et Discord ne sont que deux entrees parmi d'autres. L'agent peut aussi recevoir des commandes par webhook HTTP -- ce qui ouvre la porte a toutes vos apps et a vos workflows n8n.

Le principe

L'agent tourne sur votre Mac avec un serveur web local (dashboard). Ce serveur expose des routes webhook : n'importe quelle application qui sait faire un POST HTTP peut envoyer un prompt a l'agent. Le probleme, c'est que votre Mac est derriere votre box internet, pas accessible depuis l'exterieur.

La solution : un tunnel Cloudflare. Un outil gratuit (cloudflared) cree un tunnel securise entre votre Mac et une URL publique. Pas besoin d'ouvrir de port sur la box, pas besoin de VPS. Votre Mac reste invisible, mais le tunnel rend le webhook accessible depuis n'importe ou.

// Au demarrage de Jarvis : 1. Le serveur web demarre sur localhost:3141 2. Un tunnel Cloudflare s'ouvre automatiquement → URL publique : https://xxxxx.trycloudflare.com 3. Cette URL est envoyee a Vercel (variable d'env) → Vos apps Next.js connaissent l'adresse du webhook // N'importe quelle app externe envoie un POST : POST https://xxxxx.trycloudflare.com/api/webhook/n8n Header: X-Webhook-Secret: votre-secret Body: { "prompt": "Genere le rapport des ventes de mars" }// Le tunnel transmet a votre Mac, l'agent execute localhost:3141 → Claude Code → travaille → repond sur Telegram

Exemples concrets

๐Ÿ”—

n8n / Make / Zapier

Un workflow n8n detecte un nouveau lead dans votre CRM → POST vers /api/webhook/n8n → l'agent genere un email personnalise et l'envoie via Telegram. Toute la logique IA est deleguee a l'agent, pas a un noeud API payant.

Trigger Supabase "nouveau contact" → n8n HTTP Request node → Jarvis redige et envoie l'email de bienvenue.
๐ŸŒ

Votre propre app (Next.js, etc.)

Votre app recupere l'URL du tunnel (stockee en variable d'env Vercel) et fait un POST. L'agent genere le document, le stocke, et confirme sur Telegram. Pas besoin d'API OpenAI dans votre code.

fetch(JARVIS_WEBHOOK_URL + "/api/webhook/n8n", { method: "POST", headers: { "X-Webhook-Secret": secret }, body: JSON.stringify({ prompt }) })
๐Ÿ“ฌ

Pipeline de prospection

Mon cas reel : un webhook /api/webhook/leadgen recoit un ID de prospect depuis Supabase. L'agent genere un site demo personnalise pour ce prospect, le deploie sur Cloudflare Pages, et m'envoie le lien sur Telegram. Tout automatique.

n8n detecte un nouveau prospect → webhook leadgen → Jarvis genere le site → deploy sur slug.erwanjegou.com → notification Telegram.
L'interet economique : Au lieu de payer l'API Claude/GPT dans chaque workflow n8n (token par token), vous centralisez toute l'IA sur l'agent local qui tourne dans votre abonnement. Un seul point d'entree, un seul cout fixe, autant d'integrations que vous voulez.
Demarrage

Operationnel en 5 minutes

Installer le plugin

Deux commandes dans Claude Code. Bun est installe automatiquement si absent.

claude plugin marketplace add moazbuilds/claudeclaw claude plugin install claudeclaw

Lancer le wizard

Dans le dossier de votre projet : /claudeclaw:start. Le wizard configure le modele, Telegram, timezone, securite.

Configurer Telegram (optionnel)

Creer un bot via @BotFather, recuperer le token, et votre user ID via @userinfobot. Le wizard vous guide.

Creer votre premier job

Un fichier .md dans .claude/claudeclaw/jobs/. Schedule cron + prompt. Pris en charge en 30 secondes.

C'est en route

Dashboard sur http://127.0.0.1:4632. L'agent tourne. Envoyez un message Telegram pour tester.

Cout : Zero supplementaire, ca tourne dans votre abonnement Claude Code (Max plan). Mais chaque heartbeat/cron/message = un appel claude -p qui consomme du quota. Si le quota est atteint, fallback automatique vers GLM (si configure).
Le vrai interet

Des automatisations externes sans payer d'API

C'est le point que je trouve le plus malin dans cette approche. Explications.

Le probleme habituel

Pour automatiser quoi que ce soit avec une IA (envoyer des emails, scraper du web, generer des documents, interroger des APIs), il faut payer des tokens API. Avec GPT-4, Claude API, ou n'importe quel provider, c'est du pay-per-use. Ca chiffre vite : quelques centaines de requetes par jour et la facture grimpe.

Ce que ClaudeClaw/Jarvis change

Avec un abonnement Claude Code Max (forfait mensuel fixe), vous avez un quota d'utilisation inclus. ClaudeClaw se greffe la-dessus : chaque automatisation (cron job, heartbeat, message Telegram) utilise ce quota au lieu de payer des tokens API a l'unite. Resultat : vous pouvez lancer des dizaines d'automatisations par jour -- scraping, generation de documents, veille, relances -- pour le meme prix fixe que votre abonnement.

Concretement : un cron job qui scrape 50 annonces chaque matin, un heartbeat qui verifie vos emails toutes les 30 min, et des messages Telegram illimites -- tout ca dans le forfait, pas de facture surprise.

Votre Mac = votre serveur

Pas besoin de VPS, de serveur cloud, ni de Docker. Votre Mac (ou n'importe quelle machine qui tourne en permanence) fait office de serveur. Voici comment ca marche concretement :

1. Le daemon tourne en fond. Quand vous lancez ClaudeClaw, un processus demarre et reste actif tant que votre Mac est allume. Il n'y a pas de fenetre, pas de terminal ouvert -- c'est un process en arriere-plan, comme Spotify ou iCloud.

2. Il ecoute en permanence. Ce process surveille trois choses : les messages Telegram/Discord entrants, l'horloge pour les cron jobs, et le timer du heartbeat. Des qu'un declencheur se produit, il lance un appel Claude.

3. Claude s'execute sur votre machine. L'appel claude -p tourne localement. Il a acces a vos fichiers, vos outils, vos MCP servers. La reponse repart vers Telegram. Tout reste local, rien ne transite par un serveur tiers (sauf l'API Anthropic pour l'inference IA elle-meme).

4. Le dashboard est local aussi. L'interface web (http://127.0.0.1:4632) n'est accessible que depuis votre machine. Personne d'autre ne peut y acceder.
Si votre Mac se met en veille ou s'eteint, le daemon s'arrete. Pour un usage 24/7, il faut soit desactiver la mise en veille, soit utiliser un Mac Mini / Raspberry Pi dedie.
Architecture agent

Jarvis est l'orchestrateur, les agents sont ses bras

ClaudeClaw utilise un seul agent pour tout. Dans Jarvis, j'ai decoupe le travail en agents specialises. Voici comment ca s'articule.

// Vous parlez a Jarvis (l'orchestrateur) Telegram → "Fais un audit securite" ↓ Jarvis (agent principal) analyse la demande ↓ // Il decide : "ca c'est un job pour security-guard" Agent.spawn("security-guard")security-guard s'execute avec ses propres permissions (lecture seule, pas d'edition, pas de bash) ↓ // Le sous-agent termine et renvoie son rapport Jarvis recoit le resultat, le formate, et repond ↓ Telegram → "Audit termine. 0 anomalie detectee."

Les 5 agents et leurs roles

AgentRolePermissionsQuand Jarvis le declenche
memory-manager Consolide la memoire, supprime les doublons, exporte vers brain/ Lecture + ecriture "consolide la memoire", "nettoie les doublons"
task-executor Execute les taches cron, maintenance, backups Lecture + ecriture Taches planifiees, maintenance automatique
security-guard Audit de securite, verification des hooks, integrite Lecture seule "fais un audit securite", "verifie les hooks"
n8n-workflow Cree et configure des workflows n8n Lecture + ecriture "cree un workflow n8n", "automatise X"
project-tracker Suivi des projets et clients, points de situation Lecture + ecriture "point projets", "ou en est le client X"
Orchestrateur, pas team. Ce n'est pas un systeme multi-agents qui discutent entre eux. Jarvis est le cerveau unique : il recoit la demande, decide quel agent est le plus adapte, le lance, attend le resultat, et vous repond. Les agents ne communiquent pas entre eux directement. C'est plus proche d'un manager qui delegue a des specialistes que d'une equipe autonome.
Pourquoi decouper ? Deux raisons. Securite : le security-guard ne peut QUE lire, donc meme s'il recoit un prompt malicieux il ne peut rien casser. Contexte : chaque agent charge uniquement les skills et la memoire dont il a besoin, au lieu de tout mettre dans le meme contexte. Ca evite la confusion sur les taches complexes.

Creer vos propres agents

Un agent n'est qu'un fichier Markdown dans .claude/agents/. Vous decrivez son role, ses permissions, ses skills, et Jarvis (ou ClaudeClaw) sait le deleguer. Pas de code a ecrire.

# .claude/agents/devis-generator.md --- name: devis-generator description: Genere des devis PDF a partir des specs client mode: acceptEdits # Peut lire et ecrire des fichiers, mais pas executer de bash --- Tu es un agent specialise dans la generation de devis. Tu as acces aux templates dans /templates/devis/. Tu connais les tarifs dans /data/tarifs.json. Quand on te donne un brief client : 1. Choisis le bon template 2. Remplis les champs (client, prestations, montants) 3. Genere le PDF dans /output/devis/ 4. Renvoie le chemin du fichier

Vous pouvez creer autant d'agents que vous voulez : un pour les emails, un pour la compta, un pour le support client, un pour la veille concurrentielle. Chacun avec ses propres instructions et son perimetre. L'orchestrateur delegue automatiquement en fonction de la demande.

Comparaison des modeles

๐Ÿฆž

ClaudeClaw : agent unique

Un seul agent fait tout. Simple, rapide a mettre en place. Limite : pas de separation des privileges, contexte partage entre toutes les taches.

VousAgent unique → Tout
๐Ÿค–

Jarvis : orchestrateur + specialistes

Un agent principal qui delegue a des sous-agents selon la tache. Plus complexe, mais chaque agent a ses propres permissions et son propre scope.

VousJarvismemory-managersecurity-guard (lecture seule)task-executorn8n-workflowproject-tracker
Retour d'experience

Les autres briques de Jarvis

Au-dela de l'orchestration, voici les autres differences techniques entre ClaudeClaw vanilla et ce que j'ai construit.

Upgrade

Memoire SQLite + decay

Au lieu d'un fichier CLAUDE.md injecte en entier, j'utilise une base SQLite avec FTS5, des secteurs (semantic, episodic, relationship, mood) et un score de saillance qui decroit naturellement. Les souvenirs importants persistent, les details s'effacent.

Upgrade

Hooks de securite

Des hooks PreToolUse interceptent chaque appel d'outil. Les fichiers sensibles (hooks, settings) sont proteges en ecriture. Tout est logge. Plus robuste que le simple scope via system prompt.

Ajout

Export brain/ quotidien

Chaque jour, la memoire est exportee en Markdown structure dans brain/ : projets, contacts, decisions, apprentissages, resumes quotidiens. Consultable sans ouvrir l'agent.

Ajout

Keychain macOS

Les secrets (tokens, API keys) sont stockes dans le Keychain macOS natif, pas en plaintext dans un fichier .env ou settings.json.

Personnalise

Personnalite JARVIS

ClaudeClaw a deja un systeme de personnalite (SOUL.md). J'ai remplace le ton "ami brillant" par celui de JARVIS (Marvel) : calme, humour britannique, anticipation des besoins, flegme total en situation de crise. Meme mecanique, identite differente.

Ajout

Skills metier

Des skills specifiques a mon activite : generation de sites clients, prospection LeBonCoin, suivi du Centre Social de Champagne, workflows n8n preconfigures. L'agent connait mes clients et mes process.

Limites

Ce qu'il faut savoir avant de se lancer

โš ๏ธ

Dependance Anthropic

ClaudeClaw vit a l'interieur de Claude Code. Si Anthropic modifie son systeme de plugins ou son CLI, le projet peut casser du jour au lendemain.

๐Ÿ”„

Queue unique

Heartbeat, cron et messages partagent la meme queue serialisee. Si un job cron prend 3 minutes, les messages Telegram attendent.

๐Ÿ’ฐ

Consommation quota

Chaque action = un claude -p complet. Un heartbeat toutes les 5 minutes + 10 cron jobs + messages = ca consomme. Surveillez votre usage.

๐Ÿ”“

Securite system prompt

Le scope repertoire est enforce via une instruction dans le prompt, pas via une sandbox. Un prompt injection bien cible pourrait theoriquement le contourner.

๐Ÿ“

Memoire brute

CLAUDE.md est injecte en entier dans le contexte. Sur plusieurs mois, le fichier grossit et consomme la fenetre de contexte. A nettoyer regulierement.

๐Ÿงช

Zero tests

Le projet n'a aucun test unitaire ou d'integration. C'est un outil personnel qui marche, pas un produit battle-tested. Attendez-vous a des bugs.

Comparaison

ClaudeClaw vs OpenClaw vs Jarvis

Critere๐Ÿฆž ClaudeClaw๐Ÿฆ€ OpenClaw๐Ÿค– Jarvis (Erwan)
NaturePlugin Claude CodeGateway autonomeBot custom Claude Code
Installation2 commandes, 5 minScript + config longueProjet custom
CoutZero (abo Claude Code)Paie les APIZero (abo Claude Code)
ModelesClaude + fallback GLMMulti-providerClaude uniquement
MemoireCLAUDE.md brutRetrieval selectiveSQLite FTS5 + decay
Securite4 niveaux (system prompt)Configurable opt-inHooks + logs + Keychain
Multi-agentsNonGateway + Nodes5 agents specialises
PersonnaliteSOUL.md + IDENTITY.md + wizardConfigurableJARVIS (Marvel) custom
VoixWhisper.cpp localIntegreWhisper + TTS cascade
DashboardWeb localWebWeb + chat integre
Dependance100% AnthropicAgnostique100% Anthropic
Demarrage5 min, wizard30 min+Projet sur mesure
Recommandation : Commencez par ClaudeClaw pour decouvrir le concept (5 minutes, installation simple). Gardez en tete que l'agent tourne avec --dangerously-skip-permissions : il peut executer du code, modifier des fichiers et acceder au web sans vous demander confirmation. Testez-le d'abord en mode locked (lecture seule) et dans un dossier dedie, pas votre home. Si vous accrochez, construisez votre propre version avec les briques qui vous manquent.