CrazyClaude
Configuration Claude Code pour orchestrer des tâches de développement en déléguant les tâches atomiques à Qwen3-Coder via aichat.
Ce dépôt est conçu pour être intégré comme sous-répertoire .claude/ dans n'importe quel projet. Il fournit agents, hooks, skills, un serveur MCP et une collection d'outils prêts à l'emploi.
Pour le détail de l'architecture, voir rapport-orchestration-claude-code.md.
Architecture
Claude Code (orchestrateur)
│
└── MCP qwen3 (stdio)
│
└── aichat --serve (port dynamique)
│
└── LM Studio → Qwen3-Coder-Next
+ outils llm-functions
(fs, shell, web, ...)
Le serveur MCP lance aichat au démarrage sur un port libre. Qwen3 dispose d'outils filesystem, shell et web fournis par llm-functions — sans aucune logique d'outil dans le serveur lui-même.
Prérequis
- Claude Code (
claudedans le PATH) - aichat (
aichatdans le PATH) - LM Studio avec le modèle
qwen/qwen3-coder-nextchargé et accessible depuis aichat - argc — runner de scripts pour llm-functions
- jq — requis par llm-functions
- Python 3.11+ (pour le serveur MCP)
- Outils selon votre stack :
cargo+clippy(Rust),golangci-lint(Go)
Installation dans un projet existant
1. Cloner ce dépôt
Avec Jujutsu :
# Depuis la racine de votre projet
jj git clone https://gargoton.petite-maison-orange.fr/eric/CrazyClaude.git .claude-crazy
Puis copiez le contenu :
cp -r .claude-crazy/.claude ./.claude
cp -r .claude-crazy/llm-functions ./.claude/llm-functions # si présent dans le clone
Avec jj colocalisé git, vous pouvez aussi utiliser subtree :
git subtree add --prefix .claude https://gargoton.petite-maison-orange.fr/eric/CrazyClaude.git main --squash
2. Créer le virtualenv Python
cd .claude
python3 -m venv venv
venv/bin/pip install -r mcp/qwen3-mcp/requirements.txt
3. Installer et construire llm-functions
Si llm-functions/ n'est pas déjà présent dans .claude/ :
git clone https://github.com/sigoden/llm-functions .claude/llm-functions
Choisissez les outils à activer en éditant .claude/llm-functions/tools.txt, puis construisez :
cd .claude/llm-functions
argc build
Les outils activés par défaut :
fs_cat.sh
fs_ls.sh
fs_mkdir.sh
fs_write.sh
fs_patch.sh
execute_command.sh
fetch_url_via_curl.sh
web_search_aichat.sh
execute_py_code.py
4. Configurer aichat
Vérifiez que aichat peut accéder à LM Studio et que le modèle qwen/qwen3-coder-next est disponible :
aichat --list-models | grep qwen
5. Enregistrer le serveur MCP
claude mcp add --transport stdio qwen3 -- .claude/venv/bin/python3 .claude/mcp/qwen3-mcp/server.py
Vérifier :
claude mcp list
# qwen3: ... - ✓ Connected
6. Adapter CLAUDE.md à votre projet
Éditez .claude/CLAUDE.md : mettez à jour la section ## Stack et les heuristiques de délégation.
7. Rendre les hooks exécutables
chmod +x .claude/hooks/*.sh
Structure
.claude/
├── CLAUDE.md # contexte projet + heuristiques de délégation
├── settings.json # hooks et permissions
├── agents/
│ ├── qwen3-worker.md # délégation vers Qwen3 via MCP
│ ├── code-reviewer.md # révision code (Claude Haiku)
│ └── task-planner.md # planification complexe (Claude Opus)
├── skills/
│ ├── delegation-rules.md # quand déléguer à Qwen3
│ └── rust-go-conventions.md # conventions Rust/Go
├── hooks/
│ ├── post-write-lint.sh # lint automatique après écriture
│ ├── subagent-stop-log.sh # log des décisions de délégation
│ └── pre-bash-guard.sh # blocage des commandes dangereuses
├── mcp/
│ └── qwen3-mcp/
│ ├── server.py # serveur MCP stdio : lance aichat + gère tool_calls
│ ├── agent_lm.py # agent loop CLI autonome (usage direct sans MCP)
│ └── requirements.txt
├── llm-functions/ # collection d'outils pour Qwen3 (sous-repo)
│ ├── tools.txt # outils activés
│ ├── functions.json # déclarations générées (lues par server.py)
│ ├── bin/ # binaires générés par argc build
│ └── tools/ # scripts sources (.sh, .py, .js)
├── logs/ # produits par les hooks (ignorés par jj/git)
└── venv/ # virtualenv Python (ignoré par jj/git)
Outils disponibles pour Qwen3
Les outils sont définis dans .claude/llm-functions/tools.txt et buildés avec argc build.
| Outil | Description |
|---|---|
fs_cat |
Lit un fichier |
fs_ls |
Liste un répertoire |
fs_mkdir |
Crée un répertoire |
fs_write |
Écrit/crée un fichier |
fs_patch |
Modifie un fichier par patch |
execute_command |
Exécute une commande shell |
fetch_url_via_curl |
Requête HTTP GET |
web_search_aichat |
Recherche web |
execute_py_code |
Exécute du code Python |
Pour ajouter un outil : éditez tools.txt et relancez argc build.
Configuration du modèle
Le modèle Qwen3 est configuré dans .claude/mcp/qwen3-mcp/server.py :
QWEN3_MODEL = "LMStudio:qwen/qwen3-coder-next"
Le format Provider:model-id suit la convention aichat. Adaptez selon votre installation LM Studio.
Fichiers à ignorer (jj / git)
.claude/venv/
.claude/logs/
.claude/llm-functions/bin/
.claude/llm-functions/cache/
Avec Jujutsu :
printf ".claude/venv/\n.claude/logs/\n.claude/llm-functions/bin/\n.claude/llm-functions/cache/\n" >> .gitignore
Mise à jour
Avec Jujutsu colocalisé (jj git init --colocate), la mise à jour est gérée côté git :
git subtree pull --prefix .claude https://gargoton.petite-maison-orange.fr/eric/CrazyClaude.git main --squash
jj voit le commit résultant comme un commit ordinaire dans son graphe.
Après mise à jour, reconstruire llm-functions si tools.txt a changé :
cd .claude/llm-functions && argc build