overmind-mcp 2.8.15 → 2.8.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7,311 +7,311 @@ export const configExampleSchema = z.object({
7
7
  export async function configExample(args) {
8
8
  const { provider } = args;
9
9
  let text = '';
10
- const interpolationNotice = `
11
- 💡 **NOUVEAUTÉ : INTERPOLATION DE VARIABLES**
12
- Vous pouvez désormais utiliser des variables du fichier \`.env\` dans vos fichiers \`settings_[agent].json\`.
13
- Les variables commençant par \`$\` seront automatiquement remplacées par leur valeur réelle au moment de l'exécution.
10
+ const interpolationNotice = `
11
+ 💡 **NOUVEAUTÉ : INTERPOLATION DE VARIABLES**
12
+ Vous pouvez désormais utiliser des variables du fichier \`.env\` dans vos fichiers \`settings_[agent].json\`.
13
+ Les variables commençant par \`$\` seront automatiquement remplacées par leur valeur réelle au moment de l'exécution.
14
14
  `;
15
15
  switch (provider) {
16
16
  case 'glm':
17
- text = `🚀 **EXEMPLE DE CONFIGURATION POUR GLM / Z.AI (ANTHROPIC PROXY)**
18
-
19
- ### 📂 settings_[nom_agent].json
20
- \`\`\`json
21
- {
22
- "env": {
23
- "ANTHROPIC_MODEL": "$ANTHROPIC_MODEL_Z",
24
- "ANTHROPIC_AUTH_TOKEN": "$ANTHROPIC_AUTH_TOKEN_Y",
25
- "ANTHROPIC_AUTH_TOKEN_FALLBACK": "$ANTHROPIC_AUTH_TOKEN_E",
26
- "ANTHROPIC_BASE_URL": "$ANTHROPIC_BASE_URL_Z"
27
- },
28
- "enableAllProjectMcpServers": false,
29
- "enabledMcpjsonServers": [
30
- "postgresql-server",
31
- "memory"
32
- ],
33
- "agent": "nom_agent",
34
- "runner": "claude"
35
- }
36
- \`\`\`
37
-
38
- ### 📂 .env correspondant
39
- \`\`\`
40
- # Z.AI Configuration
41
- ANTHROPIC_BASE_URL_Z=https://api.z.ai/api/anthropic
42
- ANTHROPIC_MODEL_Z=glm-5.1
43
- ANTHROPIC_AUTH_TOKEN_Y=your_primary_token_here
44
- ANTHROPIC_AUTH_TOKEN_E=your_fallback_token_here
45
- \`\`\`
46
-
47
- **Modèles GLM disponibles :**
48
- - \`glm-5.1\` - Flagship modèle (recommandé)
49
- - \`glm-5\` - Performances solides
50
- - \`glm-4.5-air\` - Modèle léger et coût-efficace
51
-
52
- **Fallback automatique :**
53
- - Utilise \`ANTHROPIC_AUTH_TOKEN_Y\` par défaut
54
- - En cas d'erreur 401/429/5xx, bascule automatiquement sur \`ANTHROPIC_AUTH_TOKEN_E\`
55
-
17
+ text = `🚀 **EXEMPLE DE CONFIGURATION POUR GLM / Z.AI (ANTHROPIC PROXY)**
18
+
19
+ ### 📂 settings_[nom_agent].json
20
+ \`\`\`json
21
+ {
22
+ "env": {
23
+ "ANTHROPIC_MODEL": "$ANTHROPIC_MODEL_Z",
24
+ "ANTHROPIC_AUTH_TOKEN": "$ANTHROPIC_AUTH_TOKEN_Y",
25
+ "ANTHROPIC_AUTH_TOKEN_FALLBACK": "$ANTHROPIC_AUTH_TOKEN_E",
26
+ "ANTHROPIC_BASE_URL": "$ANTHROPIC_BASE_URL_Z"
27
+ },
28
+ "enableAllProjectMcpServers": false,
29
+ "enabledMcpjsonServers": [
30
+ "postgresql-server",
31
+ "memory"
32
+ ],
33
+ "agent": "nom_agent",
34
+ "runner": "claude"
35
+ }
36
+ \`\`\`
37
+
38
+ ### 📂 .env correspondant
39
+ \`\`\`
40
+ # Z.AI Configuration
41
+ ANTHROPIC_BASE_URL_Z=https://api.z.ai/api/anthropic
42
+ ANTHROPIC_MODEL_Z=glm-5.1
43
+ ANTHROPIC_AUTH_TOKEN_Y=your_primary_token_here
44
+ ANTHROPIC_AUTH_TOKEN_E=your_fallback_token_here
45
+ \`\`\`
46
+
47
+ **Modèles GLM disponibles :**
48
+ - \`glm-5.1\` - Flagship modèle (recommandé)
49
+ - \`glm-5\` - Performances solides
50
+ - \`glm-4.5-air\` - Modèle léger et coût-efficace
51
+
52
+ **Fallback automatique :**
53
+ - Utilise \`ANTHROPIC_AUTH_TOKEN_Y\` par défaut
54
+ - En cas d'erreur 401/429/5xx, bascule automatiquement sur \`ANTHROPIC_AUTH_TOKEN_E\`
55
+
56
56
  ${interpolationNotice}`;
57
57
  break;
58
58
  case 'ilmu':
59
- text = `🚀 **EXEMPLE DE CONFIGURATION POUR ILMU AI**
60
-
61
- ### 📂 settings_[nom_agent].json
62
- \`\`\`json
63
- {
64
- "env": {
65
- "ANTHROPIC_MODEL": "$Z_AI_MODEL", // Interpolé depuis le .env
66
- "ANTHROPIC_AUTH_TOKEN": "$Z_AI_API_KEY",
67
- "ANTHROPIC_BASE_URL": "$Z_AI_BASE_URL",
68
- "API_TIMEOUT_MS": "900000"
69
- },
70
- "enableAllProjectMcpServers": false,
71
- "enabledMcpjsonServers": [
72
- "postgresql-server",
73
- "memory",
74
- "discord-server"
75
- ],
76
- "agent": "ilmu_agent",
77
- "runner": "kilo"
78
- }
79
- \`\`\`
59
+ text = `🚀 **EXEMPLE DE CONFIGURATION POUR ILMU AI**
60
+
61
+ ### 📂 settings_[nom_agent].json
62
+ \`\`\`json
63
+ {
64
+ "env": {
65
+ "ANTHROPIC_MODEL": "$Z_AI_MODEL", // Interpolé depuis le .env
66
+ "ANTHROPIC_AUTH_TOKEN": "$Z_AI_API_KEY",
67
+ "ANTHROPIC_BASE_URL": "$Z_AI_BASE_URL",
68
+ "API_TIMEOUT_MS": "900000"
69
+ },
70
+ "enableAllProjectMcpServers": false,
71
+ "enabledMcpjsonServers": [
72
+ "postgresql-server",
73
+ "memory",
74
+ "discord-server"
75
+ ],
76
+ "agent": "ilmu_agent",
77
+ "runner": "kilo"
78
+ }
79
+ \`\`\`
80
80
  ${interpolationNotice}`;
81
81
  break;
82
82
  case 'minimax':
83
- text = `🚀 **EXEMPLE DE CONFIGURATION POUR MINIMAX (VIA PROXY ANTHROPIC)**
84
-
85
- ### 📂 settings_[nom_agent].json
86
- \`\`\`json
87
- {
88
- "env": {
89
- "ANTHROPIC_BASE_URL": "https://api.minimax.io/anthropic",
90
- "MINIMAX_CN_API_KEY": "$MINIMAX_CN_API_KEY", // ⚠️ Provider minimax-cn: utilisez MINIMAX_CN_API_KEY (PAS ANTHROPIC_AUTH_TOKEN) — c'est le plugin minimax du binaire hermes v0.16.0 qui décide du nom de la variable.
91
- "API_TIMEOUT_MS": "3000000",
92
- "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": 1,
93
- "ANTHROPIC_MODEL": "The_Chaos_Prophet",
94
- "ANTHROPIC_SMALL_FAST_MODEL": "MiniMax-M2",
95
- "ANTHROPIC_DEFAULT_SONNET_MODEL": "MiniMax-M2",
96
- "ANTHROPIC_DEFAULT_OPUS_MODEL": "MiniMax-M2",
97
- "ANTHROPIC_DEFAULT_HAIKU_MODEL": "MiniMax-M2"
98
- },
99
- "agent": "nom_agent",
100
- "runner": "claude"
101
- }
102
- \`\`\`
103
-
104
- > **Note (Hermes runner + provider minimax-cn)** : le binaire Hermes lit le credential via la variable d'environnement attendue par le plugin provider minimax, soit \`MINIMAX_CN_API_KEY\`. Si vous utilisez \`ANTHROPIC_AUTH_TOKEN\` avec un provider minimax, Hermes upstream va silencieusement renvoyer 401 même si Overmind a la clé. Mapping complet des credentials par provider :
105
- > - \`minimax-cn\` → \`MINIMAX_CN_API_KEY\`
106
- > - \`minimax\` (alias) → \`MINIMAX_API_KEY\`
107
- > - \`zai\` → \`GLM_API_KEY\` ou \`ZAI_ANTHROPIC_FALLBACK_KEY\`
108
- > - \`z-ai\` → \`Z_AI_API_KEY\`
109
- > - \`anthropic\` → \`ANTHROPIC_AUTH_TOKEN\` (accepte les suffixes \`_1.._5\`, \`_E\`, \`_F\`, \`_Y\`)
83
+ text = `🚀 **EXEMPLE DE CONFIGURATION POUR MINIMAX (VIA PROXY ANTHROPIC)**
84
+
85
+ ### 📂 settings_[nom_agent].json
86
+ \`\`\`json
87
+ {
88
+ "env": {
89
+ "ANTHROPIC_BASE_URL": "https://api.minimax.io/anthropic",
90
+ "MINIMAX_CN_API_KEY": "$MINIMAX_CN_API_KEY", // ⚠️ Provider minimax-cn: utilisez MINIMAX_CN_API_KEY (PAS ANTHROPIC_AUTH_TOKEN) — c'est le plugin minimax du binaire hermes v0.16.0 qui décide du nom de la variable.
91
+ "API_TIMEOUT_MS": "3000000",
92
+ "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": 1,
93
+ "ANTHROPIC_MODEL": "The_Chaos_Prophet",
94
+ "ANTHROPIC_SMALL_FAST_MODEL": "MiniMax-M2",
95
+ "ANTHROPIC_DEFAULT_SONNET_MODEL": "MiniMax-M2",
96
+ "ANTHROPIC_DEFAULT_OPUS_MODEL": "MiniMax-M2",
97
+ "ANTHROPIC_DEFAULT_HAIKU_MODEL": "MiniMax-M2"
98
+ },
99
+ "agent": "nom_agent",
100
+ "runner": "claude"
101
+ }
102
+ \`\`\`
103
+
104
+ > **Note (Hermes runner + provider minimax-cn)** : le binaire Hermes lit le credential via la variable d'environnement attendue par le plugin provider minimax, soit \`MINIMAX_CN_API_KEY\`. Si vous utilisez \`ANTHROPIC_AUTH_TOKEN\` avec un provider minimax, Hermes upstream va silencieusement renvoyer 401 même si Overmind a la clé. Mapping complet des credentials par provider :
105
+ > - \`minimax-cn\` → \`MINIMAX_CN_API_KEY\`
106
+ > - \`minimax\` (alias) → \`MINIMAX_API_KEY\`
107
+ > - \`zai\` → \`GLM_API_KEY\` ou \`ZAI_ANTHROPIC_FALLBACK_KEY\`
108
+ > - \`z-ai\` → \`Z_AI_API_KEY\`
109
+ > - \`anthropic\` → \`ANTHROPIC_AUTH_TOKEN\` (accepte les suffixes \`_1.._5\`, \`_E\`, \`_F\`, \`_Y\`)
110
110
  ${interpolationNotice}`;
111
111
  break;
112
112
  case 'openrouter':
113
- text = `🚀 **EXEMPLE DE CONFIGURATION POUR OPENROUTER (VIA PROXY ANTHROPIC)**
114
-
115
- ### 📂 settings_[nom_agent].json
116
- \`\`\`json
117
- {
118
- "env": {
119
- "ANTHROPIC_BASE_URL": "https://openrouter.ai/api/v1",
120
- "ANTHROPIC_AUTH_TOKEN": "$OPENROUTER_API_KEY", // Utilisez une variable .env
121
- "API_TIMEOUT_MS": "3000000",
122
- "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": 1,
123
- "ANTHROPIC_MODEL": "anthropic/claude-3-5-sonnet",
124
- "ANTHROPIC_SMALL_FAST_MODEL": "anthropic/claude-3-haiku",
125
- "ANTHROPIC_DEFAULT_SONNET_MODEL": "anthropic/claude-3-5-sonnet",
126
- "ANTHROPIC_DEFAULT_OPUS_MODEL": "anthropic/claude-3-opus",
127
- "ANTHROPIC_DEFAULT_HAIKU_MODEL": "anthropic/claude-3-haiku"
128
- },
129
- "agent": "nom_agent",
130
- "runner": "claude"
131
- }
132
- \`\`\`
113
+ text = `🚀 **EXEMPLE DE CONFIGURATION POUR OPENROUTER (VIA PROXY ANTHROPIC)**
114
+
115
+ ### 📂 settings_[nom_agent].json
116
+ \`\`\`json
117
+ {
118
+ "env": {
119
+ "ANTHROPIC_BASE_URL": "https://openrouter.ai/api/v1",
120
+ "ANTHROPIC_AUTH_TOKEN": "$OPENROUTER_API_KEY", // Utilisez une variable .env
121
+ "API_TIMEOUT_MS": "3000000",
122
+ "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": 1,
123
+ "ANTHROPIC_MODEL": "anthropic/claude-3-5-sonnet",
124
+ "ANTHROPIC_SMALL_FAST_MODEL": "anthropic/claude-3-haiku",
125
+ "ANTHROPIC_DEFAULT_SONNET_MODEL": "anthropic/claude-3-5-sonnet",
126
+ "ANTHROPIC_DEFAULT_OPUS_MODEL": "anthropic/claude-3-opus",
127
+ "ANTHROPIC_DEFAULT_HAIKU_MODEL": "anthropic/claude-3-haiku"
128
+ },
129
+ "agent": "nom_agent",
130
+ "runner": "claude"
131
+ }
132
+ \`\`\`
133
133
  ${interpolationNotice}`;
134
134
  break;
135
135
  case 'minimaxi':
136
- text = `🚀 **EXEMPLE DE CONFIGURATION POUR MINIMAXI (VERSION ALTERNATIVE)**
137
-
138
- ### 📂 settings_[nom_agent].json
139
- \`\`\`json
140
- {
141
- "env": {
142
- "ANTHROPIC_MODEL": "MiniMax-Text-01",
143
- "ANTHROPIC_AUTH_TOKEN": "$MINIMAXI_API_KEY", // Configuré dans le .env
144
- "ANTHROPIC_BASE_URL": "$MINIMAXI_BASE_URL",
145
- "ANTHROPIC_SMALL_FAST_MODEL": "MiniMax-Text-01",
146
- "ANTHROPIC_DEFAULT_HAIKU_MODEL": "MiniMax-Text-01",
147
- "ANTHROPIC_DEFAULT_OPUS_MODEL": "MiniMax-Text-01",
148
- "ANTHROPIC_DEFAULT_SONNET_MODEL": "MiniMax-Text-01",
149
- "API_TIMEOUT_MS": "900000",
150
- "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1",
151
- "agent": "minimax_agent"
152
- },
153
- "agent": "minimax_agent",
154
- "runner": "claude"
155
- }
156
- \`\`\`
136
+ text = `🚀 **EXEMPLE DE CONFIGURATION POUR MINIMAXI (VERSION ALTERNATIVE)**
137
+
138
+ ### 📂 settings_[nom_agent].json
139
+ \`\`\`json
140
+ {
141
+ "env": {
142
+ "ANTHROPIC_MODEL": "MiniMax-Text-01",
143
+ "ANTHROPIC_AUTH_TOKEN": "$MINIMAXI_API_KEY", // Configuré dans le .env
144
+ "ANTHROPIC_BASE_URL": "$MINIMAXI_BASE_URL",
145
+ "ANTHROPIC_SMALL_FAST_MODEL": "MiniMax-Text-01",
146
+ "ANTHROPIC_DEFAULT_HAIKU_MODEL": "MiniMax-Text-01",
147
+ "ANTHROPIC_DEFAULT_OPUS_MODEL": "MiniMax-Text-01",
148
+ "ANTHROPIC_DEFAULT_SONNET_MODEL": "MiniMax-Text-01",
149
+ "API_TIMEOUT_MS": "900000",
150
+ "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1",
151
+ "agent": "minimax_agent"
152
+ },
153
+ "agent": "minimax_agent",
154
+ "runner": "claude"
155
+ }
156
+ \`\`\`
157
157
  ${interpolationNotice}`;
158
158
  break;
159
159
  // ─── OVERMIND: Guide complet $VAR + FALLBACK TOKENS ───
160
160
  case 'overmind':
161
- text = `🎯 **GUIDE COMPLET : SUBSTITUTION $VAR ET FALLBACK TOKENS**
162
-
163
- Overmind supporte deux mécanismes puissants pour vos agents :
164
-
165
- ---
166
-
167
- ### 1️⃣ SUBSTITUTION $VAR (tous les runners)
168
-
169
- Les settings de vos agents peuvent référencer des variables d'environnement du \`.env\` avec la syntaxe \`$NOM_VARIABLE\`.
170
-
171
- \`\`\`json
172
- {
173
- "env": {
174
- "ANTHROPIC_AUTH_TOKEN": "$ANTHROPIC_AUTH_TOKEN_1",
175
- "ANTHROPIC_BASE_URL": "$Z_AI_BASE_URL"
176
- }
177
- }
178
- \`\`\`
179
-
180
- Au runtime, Overmind remplace automatiquement \`$ANTHROPIC_AUTH_TOKEN_1\` par sa valeur réelle depuis le \`.env\`.
181
-
182
- ---
183
-
184
- ### 2️⃣ RETRY AUTOMATIQUE SUR ERREUR (ClaudeRunner + KiloRunner)
185
-
186
- Quand une erreur se produit, Overmind peut RETENTER automatiquement avec des tokens de secours.
187
-
188
- **Erreurs retryables :**
189
- - **401** : Auth failure (token invalide/expiré)
190
- - **429** : Rate limit / quota exhausted (limite atteinte)
191
- - **500, 502, 503** : Server error (erreur serveur)
192
-
193
- **Détection texte stderr :** \`401\`, \`unauthorized\`, \`invalid api key\`, \`authentication failed\`, \`auth error\`, \`429\`, \`rate limit\`, \`quota exhausted\`, \`limit exhausted\`, \`503\`, \`service unavailable\`, \`500\`, \`internal server error\`
194
-
195
- **Flow :** Token primaire → AUTH_FALLBACK_1 → AUTH_FALLBACK_2 → AUTH_FALLBACK_3 → ÉCHEC
196
-
197
- ---
198
-
199
- ### 📂 EXEMPLE COMPLET : ClaudeRunner avec 3 fallback tokens
200
-
201
- \`\`\`json
202
- {
203
- "model": "claude-sonnet-4-20250514",
204
- "env": {
205
- "ANTHROPIC_AUTH_TOKEN": "$ANTHROPIC_AUTH_TOKEN", // Token principal
206
- "AUTH_FALLBACK_1": "$ANTHROPIC_AUTH_TOKEN_2", // Si 401/429/5xx
207
- "AUTH_FALLBACK_2": "$ANTHROPIC_AUTH_TOKEN_3", // Si encore échoué
208
- "AUTH_FALLBACK_3": "$ANTHROPIC_AUTH_TOKEN_4" // Dernier recours
209
- }
210
- }
211
- \`\`\`
212
-
213
- **.env associé :**
214
- \`\`\`
215
- ANTHROPIC_AUTH_TOKEN=sk-cp-primary... # Token principal ( utilisation normale )
216
- ANTHROPIC_AUTH_TOKEN_2=sk-cp-xxx... # Fallback #1
217
- ANTHROPIC_AUTH_TOKEN_3=sk-cp-yyy... # Fallback #2
218
- ANTHROPIC_AUTH_TOKEN_4=sk-cp-zzz... # Fallback #3
219
- \`\`\`
220
-
221
- **Comment ça marche :**
222
- 1. L'agent commence avec \`ANTHROPIC_AUTH_TOKEN\` = \`$ANTHROPIC_AUTH_TOKEN\` → résolu → \`sk-cp-primary...\`
223
- 2. Si erreur 401/429/5xx → retry avec \`AUTH_FALLBACK_1\` → \`sk-cp-xxx...\`
224
- 3. Si encore échec → retry avec \`AUTH_FALLBACK_2\` → \`sk-cp-yyy...\`
225
- 4. Si encore échec → retry avec \`AUTH_FALLBACK_3\` → \`sk-cp-zzz...\`
226
- 5. Si encore échec → \`RETRYABLE_ERROR_ALL_FALLBACKS_EXHAUSTED\`
227
-
228
- ---
229
-
230
- ### 📂 EXEMPLE COMPLET : KiloRunner avec fallback
231
-
232
- \`\`\`json
233
- {
234
- "model": "claude-sonnet-4-20250514",
235
- "env": {
236
- "OPENAI_API_KEY": "$ANTHROPIC_AUTH_TOKEN", // Clé primaire Kilo
237
- "AUTH_FALLBACK_1": "$ANTHROPIC_AUTH_TOKEN_2", // Fallback #1
238
- "AUTH_FALLBACK_2": "$ANTHROPIC_AUTH_TOKEN_3", // Fallback #2
239
- "AUTH_FALLBACK_3": "$ANTHROPIC_AUTH_TOKEN_4" // Fallback #3
240
- }
241
- }
242
- \`\`\`
243
-
244
- > Kilo utilise \`OPENAI_API_KEY\` comme clé primaire (compatible OpenAI / OpenRouter / etc.).
245
-
246
- ---
247
-
248
- ### 📂 EXEMPLE : Variable $VAR simple (sans fallback)
249
-
250
- \`\`\`json
251
- {
252
- "model": "claude-sonnet-4-20250514",
253
- "env": {
254
- "ANTHROPIC_AUTH_TOKEN": "$ANTHROPIC_AUTH_TOKEN",
255
- "ANTHROPIC_BASE_URL": "$Z_AI_BASE_URL",
256
- "API_TIMEOUT_MS": "$API_TIMEOUT_MS"
257
- }
258
- }
259
- \`\`\`
260
-
261
- Les \`$VAR\` peuvent être sur n'importe quelle valeur de \`env\`.
262
-
263
- ---
264
-
265
- ### ⚠️ RÈGLES IMPORTANTES
266
-
267
- - Les clés \`AUTH_FALLBACK_1\`, \`AUTH_FALLBACK_2\`, \`AUTH_FALLBACK_3\` sont réservées par Overmind pour le retry automatique.
268
- - La substitution est à **un seul niveau** : \`$MINIMAXI_API_KEY\` est remplacé, mais pas récursivement.
269
- - Les tokens sont résolus **avant** le spawn de l'agent.
270
- - Le retry fonctionne sur erreur **401 (auth), 429 (rate limit), 500/502/503 (server error)** — pas sur les erreurs de réseau simples (timeout, DNS...).
271
- - Chaque token fallback ne sera testé qu'une seule fois par session d'agent.
161
+ text = `🎯 **GUIDE COMPLET : SUBSTITUTION $VAR ET FALLBACK TOKENS**
162
+
163
+ Overmind supporte deux mécanismes puissants pour vos agents :
164
+
165
+ ---
166
+
167
+ ### 1️⃣ SUBSTITUTION $VAR (tous les runners)
168
+
169
+ Les settings de vos agents peuvent référencer des variables d'environnement du \`.env\` avec la syntaxe \`$NOM_VARIABLE\`.
170
+
171
+ \`\`\`json
172
+ {
173
+ "env": {
174
+ "ANTHROPIC_AUTH_TOKEN": "$ANTHROPIC_AUTH_TOKEN_1",
175
+ "ANTHROPIC_BASE_URL": "$Z_AI_BASE_URL"
176
+ }
177
+ }
178
+ \`\`\`
179
+
180
+ Au runtime, Overmind remplace automatiquement \`$ANTHROPIC_AUTH_TOKEN_1\` par sa valeur réelle depuis le \`.env\`.
181
+
182
+ ---
183
+
184
+ ### 2️⃣ RETRY AUTOMATIQUE SUR ERREUR (ClaudeRunner + KiloRunner)
185
+
186
+ Quand une erreur se produit, Overmind peut RETENTER automatiquement avec des tokens de secours.
187
+
188
+ **Erreurs retryables :**
189
+ - **401** : Auth failure (token invalide/expiré)
190
+ - **429** : Rate limit / quota exhausted (limite atteinte)
191
+ - **500, 502, 503** : Server error (erreur serveur)
192
+
193
+ **Détection texte stderr :** \`401\`, \`unauthorized\`, \`invalid api key\`, \`authentication failed\`, \`auth error\`, \`429\`, \`rate limit\`, \`quota exhausted\`, \`limit exhausted\`, \`503\`, \`service unavailable\`, \`500\`, \`internal server error\`
194
+
195
+ **Flow :** Token primaire → AUTH_FALLBACK_1 → AUTH_FALLBACK_2 → AUTH_FALLBACK_3 → ÉCHEC
196
+
197
+ ---
198
+
199
+ ### 📂 EXEMPLE COMPLET : ClaudeRunner avec 3 fallback tokens
200
+
201
+ \`\`\`json
202
+ {
203
+ "model": "claude-sonnet-4-20250514",
204
+ "env": {
205
+ "ANTHROPIC_AUTH_TOKEN": "$ANTHROPIC_AUTH_TOKEN", // Token principal
206
+ "AUTH_FALLBACK_1": "$ANTHROPIC_AUTH_TOKEN_2", // Si 401/429/5xx
207
+ "AUTH_FALLBACK_2": "$ANTHROPIC_AUTH_TOKEN_3", // Si encore échoué
208
+ "AUTH_FALLBACK_3": "$ANTHROPIC_AUTH_TOKEN_4" // Dernier recours
209
+ }
210
+ }
211
+ \`\`\`
212
+
213
+ **.env associé :**
214
+ \`\`\`
215
+ ANTHROPIC_AUTH_TOKEN=sk-cp-primary... # Token principal ( utilisation normale )
216
+ ANTHROPIC_AUTH_TOKEN_2=sk-cp-xxx... # Fallback #1
217
+ ANTHROPIC_AUTH_TOKEN_3=sk-cp-yyy... # Fallback #2
218
+ ANTHROPIC_AUTH_TOKEN_4=sk-cp-zzz... # Fallback #3
219
+ \`\`\`
220
+
221
+ **Comment ça marche :**
222
+ 1. L'agent commence avec \`ANTHROPIC_AUTH_TOKEN\` = \`$ANTHROPIC_AUTH_TOKEN\` → résolu → \`sk-cp-primary...\`
223
+ 2. Si erreur 401/429/5xx → retry avec \`AUTH_FALLBACK_1\` → \`sk-cp-xxx...\`
224
+ 3. Si encore échec → retry avec \`AUTH_FALLBACK_2\` → \`sk-cp-yyy...\`
225
+ 4. Si encore échec → retry avec \`AUTH_FALLBACK_3\` → \`sk-cp-zzz...\`
226
+ 5. Si encore échec → \`RETRYABLE_ERROR_ALL_FALLBACKS_EXHAUSTED\`
227
+
228
+ ---
229
+
230
+ ### 📂 EXEMPLE COMPLET : KiloRunner avec fallback
231
+
232
+ \`\`\`json
233
+ {
234
+ "model": "claude-sonnet-4-20250514",
235
+ "env": {
236
+ "OPENAI_API_KEY": "$ANTHROPIC_AUTH_TOKEN", // Clé primaire Kilo
237
+ "AUTH_FALLBACK_1": "$ANTHROPIC_AUTH_TOKEN_2", // Fallback #1
238
+ "AUTH_FALLBACK_2": "$ANTHROPIC_AUTH_TOKEN_3", // Fallback #2
239
+ "AUTH_FALLBACK_3": "$ANTHROPIC_AUTH_TOKEN_4" // Fallback #3
240
+ }
241
+ }
242
+ \`\`\`
243
+
244
+ > Kilo utilise \`OPENAI_API_KEY\` comme clé primaire (compatible OpenAI / OpenRouter / etc.).
245
+
246
+ ---
247
+
248
+ ### 📂 EXEMPLE : Variable $VAR simple (sans fallback)
249
+
250
+ \`\`\`json
251
+ {
252
+ "model": "claude-sonnet-4-20250514",
253
+ "env": {
254
+ "ANTHROPIC_AUTH_TOKEN": "$ANTHROPIC_AUTH_TOKEN",
255
+ "ANTHROPIC_BASE_URL": "$Z_AI_BASE_URL",
256
+ "API_TIMEOUT_MS": "$API_TIMEOUT_MS"
257
+ }
258
+ }
259
+ \`\`\`
260
+
261
+ Les \`$VAR\` peuvent être sur n'importe quelle valeur de \`env\`.
262
+
263
+ ---
264
+
265
+ ### ⚠️ RÈGLES IMPORTANTES
266
+
267
+ - Les clés \`AUTH_FALLBACK_1\`, \`AUTH_FALLBACK_2\`, \`AUTH_FALLBACK_3\` sont réservées par Overmind pour le retry automatique.
268
+ - La substitution est à **un seul niveau** : \`$MINIMAXI_API_KEY\` est remplacé, mais pas récursivement.
269
+ - Les tokens sont résolus **avant** le spawn de l'agent.
270
+ - Le retry fonctionne sur erreur **401 (auth), 429 (rate limit), 500/502/503 (server error)** — pas sur les erreurs de réseau simples (timeout, DNS...).
271
+ - Chaque token fallback ne sera testé qu'une seule fois par session d'agent.
272
272
  - Si tous les fallbacks sont épuisés, l'erreur finale est \`RETRYABLE_ERROR_ALL_FALLBACKS_EXHAUSTED\`.`;
273
273
  break;
274
274
  case 'hermes':
275
- text = `🤖 **EXEMPLE DE CONFIGURATION POUR HERMES (NOUS AGENT)**
276
-
277
- ### 📂 .claude/settings_[nom_agent].json
278
- \`\`\`json
279
- {
280
- "model": "MiniMax-M2.7",
281
- "env": {
282
- "HERMES_AUTH_TOKEN": "$HERMES_AUTH_TOKEN",
283
- "HERMES_BASE_URL": "$HERMES_BASE_URL",
284
- "HERMES_MODEL": "MiniMax-M2.7",
285
- "MAX_TOKENS": "16000"
286
- },
287
- "enableAllProjectMcpServers": false,
288
- "enabledMcpjsonServers": [
289
- "postgresql-server",
290
- "memory"
291
- ],
292
- "agent": "nom_agent",
293
- "runner": "hermes"
294
- }
295
- \`\`\`
296
-
297
- ### 📂 .env correspondant
298
- \`\`\`
299
- # Hermes / Nous Agent Configuration
300
- HERMES_AUTH_TOKEN=your_hermes_token_here
301
- HERMES_BASE_URL=https://api.minimax.io
302
- MAX_TOKENS=16000
303
- \`\`\`
304
-
305
- **Comment ça marche :**
306
- - Hermes utilise les **3 fichiers standard** comme les autres runners : \`.claude/settings_[agent].json\`, \`.claude/agents/[agent].md\`, \`.claude/.mcp.[agent].json\`
307
- - Le modèle par défaut est \`MiniMax-M2.7\` (défini dans \`CONFIG.HERMES.DEFAULT_MODEL\`)
308
- - Les agents sont définis via \`PromptManager\` (\`.claude/agents/[nom].md\`)
309
- - Les MCP servers sont configurés via \`.claude/.mcp.[agent].json\` (même format que Claude/Kilo)
310
- - HERMES_DIR est automatiquement injecté au spawn pour l'isolation
311
- - Pas de fallback token intégré (contrairement à Claude/Kilo) — à implémenter via le réseau de tokens Overmind si besoin
312
-
313
- **Modèle par défaut :** \`MiniMax-M2.7\` (via \`CONFIG.HERMES.DEFAULT_MODEL\`)
314
-
275
+ text = `🤖 **EXEMPLE DE CONFIGURATION POUR HERMES (NOUS AGENT)**
276
+
277
+ ### 📂 .claude/settings_[nom_agent].json
278
+ \`\`\`json
279
+ {
280
+ "model": "MiniMax-M2.7",
281
+ "env": {
282
+ "HERMES_AUTH_TOKEN": "$HERMES_AUTH_TOKEN",
283
+ "HERMES_BASE_URL": "$HERMES_BASE_URL",
284
+ "HERMES_MODEL": "MiniMax-M2.7",
285
+ "MAX_TOKENS": "16000"
286
+ },
287
+ "enableAllProjectMcpServers": false,
288
+ "enabledMcpjsonServers": [
289
+ "postgresql-server",
290
+ "memory"
291
+ ],
292
+ "agent": "nom_agent",
293
+ "runner": "hermes"
294
+ }
295
+ \`\`\`
296
+
297
+ ### 📂 .env correspondant
298
+ \`\`\`
299
+ # Hermes / Nous Agent Configuration
300
+ HERMES_AUTH_TOKEN=your_hermes_token_here
301
+ HERMES_BASE_URL=https://api.minimax.io
302
+ MAX_TOKENS=16000
303
+ \`\`\`
304
+
305
+ **Comment ça marche :**
306
+ - Hermes utilise les **3 fichiers standard** comme les autres runners : \`.claude/settings_[agent].json\`, \`.claude/agents/[agent].md\`, \`.claude/.mcp.[agent].json\`
307
+ - Le modèle par défaut est \`MiniMax-M2.7\` (défini dans \`CONFIG.HERMES.DEFAULT_MODEL\`)
308
+ - Les agents sont définis via \`PromptManager\` (\`.claude/agents/[nom].md\`)
309
+ - Les MCP servers sont configurés via \`.claude/.mcp.[agent].json\` (même format que Claude/Kilo)
310
+ - HERMES_DIR est automatiquement injecté au spawn pour l'isolation
311
+ - Pas de fallback token intégré (contrairement à Claude/Kilo) — à implémenter via le réseau de tokens Overmind si besoin
312
+
313
+ **Modèle par défaut :** \`MiniMax-M2.7\` (via \`CONFIG.HERMES.DEFAULT_MODEL\`)
314
+
315
315
  ${interpolationNotice}`;
316
316
  break;
317
317
  }