- reprise lancée une fois en arrière-plan ; suivre et sleep refusés pendant l'attente - réveil lu par le plugin : résultat et conduite selon fin, gain compté à ce moment - lecture entière d'une sortie au verdict valide refusée, sauf chemins sensibles (réglage chemins_sensibles) - compteurs d'attentes, d'essais et d'échecs de contrôle dans /miam-economies - skill deleguer : controle, attendus, reprise et tableau des fin ; README et cahier à jour Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
124 lines
9.0 KiB
Markdown
124 lines
9.0 KiB
Markdown
# miam
|
||
|
||
[← Tous les plugins](../../README.md)
|
||
|
||
Plugin Claude Code pour déléguer des tâches à un modèle local géré par MIAM (Mon IA Manager, orchestrateur llama.cpp), via son serveur MCP.
|
||
|
||
## Contenu
|
||
- Serveur MCP `miam` (http://127.0.0.1:{port}/mcp, jeton Bearer) : point d'entrée pour la communication avec le serveur MCP de MIAM.
|
||
- Skill `deleguer` : règles, pour l'agent principal, sur quand et comment déléguer une tâche à MIAM, y compris à OpenCode (permissions, puis `appliquer` ou `rejeter` le diff).
|
||
|
||
## Prérequis
|
||
MIAM 2.5.1 ou plus (`type`, `seuil` et l'outil `modeles`, champs `offload` à partir de 2.5.2) lancé avec son serveur MCP démarré (interrupteur du dashboard, menu « Serveur MCP » du tray, ou `--auto-start-mcp`).
|
||
|
||
## Installation
|
||
Le plugin fait partie de la marketplace `a2m-plugins` (voir le [README du dépôt](../../README.md#installation) pour
|
||
l'ajout de la marketplace, les dépôts privés et les mises à jour).
|
||
|
||
- **VS Code** : `/plugins` → onglet « Marketplaces » : ajouter
|
||
`https://a2msystemes-git.duckdns.org/ange/plugin-claude-miam.git` (avec `.git`), puis onglet « Plugins » → `miam` →
|
||
Install.
|
||
- **Terminal** :
|
||
```text
|
||
/plugin marketplace add https://a2msystemes-git.duckdns.org/ange/plugin-claude-miam.git
|
||
/plugin install miam@a2m-plugins
|
||
```
|
||
|
||
Portée conseillée : « Install for you » (tous les projets du poste). Mises à jour : augmenter `version` dans
|
||
`.claude-plugin/plugin.json` à chaque publication.
|
||
|
||
Puis : à l'activation, Claude Code demande les réglages (voir section suivante) ; le jeton se copie depuis MIAM (« Copier la config Claude Code », la valeur après « Bearer »).
|
||
|
||
## Réglages
|
||
|
||
| Réglage | Défaut | Rôle |
|
||
| :--- | :--- | :--- |
|
||
| jeton | (vide) | Jeton Bearer du serveur MCP de MIAM, rangé dans le coffre d'identifiants. |
|
||
| port | 8090 | Port du serveur MCP de MIAM sur 127.0.0.1. |
|
||
| incitation | oui | Ajoute au prompt système une consigne de délégation (quelques centaines de tokens, en cache) et un rappel après une grosse lecture. |
|
||
| chemins_sensibles | `src/miam/services/mcp.py`, `src/miam/services/instances.py`, `src/miam/core/aio.py`, `*sandbox*` | Fichiers relus en entier même après un verdict `valide` (concurrence, sécurité), séparés par des virgules. |
|
||
| preset_defaut | pre-16312f8b | Preset MIAM par défaut, démarré quand aucun modèle n'est chargé et que MIAM n'a aucun test pour le type de la tâche. |
|
||
|
||
## Utilisation
|
||
L'agent principal appelle directement l'outil `deleguer`, avec `type` (`code`, `texte`, `rapide`) et `seuil` (0,8 par défaut), puis vérifie le résultat. Le subagent `miam:delegue` est mis de côté : son pilotage rendait les gains négatifs. Sa définition est gardée dans `docs/agent-delegue.md` du dépôt.
|
||
|
||
MIAM choisit le modèle d'après ses tests de qualité : il garde le modèle chargé s'il atteint le seuil, sinon il charge le meilleur preset, quitte à remplacer le modèle chargé (20 à 40 s) ; si aucun n'atteint le seuil, il prend le meilleur et le signale. L'agent principal peut imposer un preset ou demander de garder le modèle chargé. Contrat : `docs/protocole-agents.md` du dépôt MIAM.
|
||
|
||
## Incitation à déléguer
|
||
|
||
Avec `incitation` (par défaut), l'agent principal reçoit une courte consigne dans son prompt système : déléguer par réflexe ce qui s'y prête, sans demander. Après une lecture de plus de 20 000 caractères (`Read`, `Bash`, `PowerShell`), il reçoit aussi un rappel, au plus toutes les 10 minutes et invisible pour l'utilisateur. Les subagents ne reçoivent ni l'une ni l'autre.
|
||
|
||
## Délégation imposée
|
||
|
||
Avec `imposer` (par défaut), et tant que MIAM répond, l'agent principal ne peut plus consommer d'usage sur de longues lectures :
|
||
- `Read` d'un fichier de 20 000 octets ou plus est refusé avant la lecture, sauf plage de 400 lignes au plus (`offset`, `limit`), image, PDF ou fichier écrit par une délégation ;
|
||
- une sortie `Bash` ou `PowerShell` de 20 000 caractères ou plus est enregistrée dans `.claude/miam-sorties/` du projet (dossier ignoré par git) et retenue : le modèle reçoit le chemin, à passer à `deleguer`. Une commande en erreur garde sa sortie et déclenche le rappel.
|
||
|
||
## Attente unique
|
||
|
||
Une délégation pas finie en 45 s renvoie `reprise`, une commande `curl` qui bloque sur MIAM jusqu'à l'état final. Le plugin dit à l'agent principal de la lancer une fois en arrière-plan (Bash, `run_in_background`), puis :
|
||
- refuse de la lancer au premier plan ou avec PowerShell ;
|
||
- refuse `suivre` et les `sleep` tant que la demande est attendue (`suivre` reste permis quand MIAM attend une décision, `fin: besoin_claude`) ;
|
||
- au réveil, lit lui-même la sortie de la commande et donne le résultat et la conduite selon `fin` (`valide`, `termine`, `echec_controle`, `besoin_claude`, `annule`, `perdue`) : une délégation coûte un lancement et un réveil ;
|
||
- après un verdict `valide`, refuse la lecture entière du fichier `sortie` (plage de 400 lignes au plus), sauf chemin sensible.
|
||
|
||
`/miam-economies` compte les attentes uniques, les essais et les échecs de contrôle de la session. Avec `imposer` désactivé, rien n'est refusé.
|
||
|
||
Les subagents ne sont pas concernés. Si MIAM ne répond pas, ou si la sortie ne peut pas être enregistrée, rien n'est bloqué. Si MIAM répond mais que la délégation échoue (`/mcp` à reconnecter, par exemple), la lecture par plages reste possible.
|
||
|
||
## Ligne d'état : gains et usage Claude
|
||
|
||
Une seule ligne, sans coût en tokens (`🟢 MIAM net ~4k (cumul ~35k)🟢 · 5 h 🟩🟩⬛⬛⬛ 42 % (1 h 53) · hebdo 🟩🟩🟩⬛⬛ 53 % (3 j 20 h)`) :
|
||
- le gain net, 🟢 s'il est positif, 🔴 s'il est négatif ;
|
||
- l'usage Claude sur 5 h et sur la semaine : barre, pourcentage et temps avant la remise à zéro. La barre est verte, orange à partir de 70 %, rouge à partir de 90 %. Ces chiffres viennent de la dernière réponse de l'API : ils n'apparaissent qu'après un premier échange, et seulement avec un abonnement.
|
||
|
||
## Tokens économisés
|
||
|
||
Après chaque délégation réussie, une notification (`🟢 MIAM : ~6,1k tokens évités (5,2k lus, 900 écrits)`) et la mise à
|
||
jour de la ligne d'état, dans le terminal comme dans VS Code. `/miam-economies` donne le détail de la session et le cumul ; `/miam-economies raz`
|
||
remet les compteurs à zéro. Le calcul se fait localement dans Claude Code : il ne coûte aucun token.
|
||
Chaque estimation est aussi envoyée à MIAM (`POST /economies`, toutes les 5 s, hors des hooks ; gardée et renvoyée si
|
||
MIAM ne répond pas) : contrat et modèle de données dans [docs/token-summary-mod.md](../../docs/token-summary-mod.md).
|
||
|
||
- **Évités** : les fichiers lus et la réponse écrite par le modèle local (chiffres de MIAM), moins la consigne et ce que
|
||
Claude relit (estimés à 4 caractères par token).
|
||
- **Pilotage** : la consommation réelle d'un subagent qui délègue (lecture en cache comptée au dixième), ou l'usage réel des requêtes de l'agent principal qui suivent OpenCode, contexte relu et relecture du diff compris (lecture en cache au dixième), à déduire. Le gain d'OpenCode vaut les tokens du cloud moins la consigne ; un diff rejeté n'évite rien.
|
||
- **Corrections** : ce que l'agent principal relit (`Read`) ou retouche (`Edit`, `Write`, `NotebookEdit`, `Bash`) dans
|
||
un fichier écrit par une délégation (`sortie`), à déduire aussi. Celles du subagent sont déjà dans le pilotage.
|
||
- **Net** = évités − pilotage − corrections.
|
||
- **Limites** : le brief de l'agent principal et la lecture du compte rendu ne sont pas comptés ; un token de Haiku coûte
|
||
moins qu'un token d'Opus, ce que le net ne pondère pas ; une reprise hors du fichier `sortie` n'est pas vue (d'où
|
||
l'intérêt de faire écrire les résultats par MIAM avec `sortie`).
|
||
|
||
## Tests des modèles
|
||
MIAM teste lui-même les presets, en travaux de fond (page Benchmarks) : le plugin n'a plus de banc. L'ancien dossier de données du plugin (`banc/`, `rapport.md`, `choix.json`) n'est plus lu.
|
||
|
||
## Structure du plugin
|
||
```text
|
||
.claude-plugin/
|
||
plugin.json # manifeste : nom, version, réglages (jeton, port, modèle, preset)
|
||
.mcp.json # serveur MCP miam (http://127.0.0.1:<port>/mcp)
|
||
skills/
|
||
deleguer/SKILL.md # quand et comment déléguer
|
||
hooks/
|
||
hooks.json
|
||
register.tsx # compteur de tokens, ligne d'état, incitation, /miam-economies
|
||
economies.ts # calcul pur, testé
|
||
attente.ts # attente unique et conduite selon `fin` : calcul pur, testé
|
||
contrainte.ts # seuils des lectures et sorties longues
|
||
usage.ts # usage Claude 5 h et hebdo : calcul pur, testé
|
||
*.test.ts(x) # tests : claude plugin test plugins/miam
|
||
LICENSE
|
||
README.md
|
||
```
|
||
|
||
## Limites connues
|
||
- Si MIAM est fermé puis relancé, Claude Code ne se reconnecte pas seul (/mcp → Reconnect sur plugin:miam:miam).
|
||
- deleguer ne transmet que du texte (pas d'image).
|
||
- Un `.mcp.json` de projet qui déclare déjà le serveur `miam` (celui de ce dépôt, celui de MIAM) fait doublon avec le
|
||
plugin : le retirer une fois le plugin installé.
|
||
|
||
## Licence
|
||
|
||
MIT, voir [LICENSE](LICENSE).
|