overmind-mcp 2.6.1 → 2.8.0
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.
- package/.mcp.json.example +41 -21
- package/README.md +179 -187
- package/bin/README.md +44 -34
- package/bin/install-overmind-windows.bat +56 -12
- package/dist/bin/cli.js +115 -24
- package/dist/bin/cli.js.map +1 -1
- package/dist/bin/overmind-client.d.ts +77 -0
- package/dist/bin/overmind-client.d.ts.map +1 -0
- package/dist/bin/overmind-client.js +221 -0
- package/dist/bin/overmind-client.js.map +1 -0
- package/dist/lib/agent_lifecycle.d.ts +91 -0
- package/dist/lib/agent_lifecycle.d.ts.map +1 -0
- package/dist/lib/agent_lifecycle.js +155 -0
- package/dist/lib/agent_lifecycle.js.map +1 -0
- package/dist/lib/config.d.ts +5 -26
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +33 -12
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/envUtils.d.ts +1 -1
- package/dist/lib/envUtils.d.ts.map +1 -1
- package/dist/lib/envUtils.js +11 -4
- package/dist/lib/envUtils.js.map +1 -1
- package/dist/lib/loadEnv.d.ts.map +1 -1
- package/dist/lib/loadEnv.js +9 -4
- package/dist/lib/loadEnv.js.map +1 -1
- package/dist/lib/logger.d.ts.map +1 -1
- package/dist/lib/logger.js +20 -4
- package/dist/lib/logger.js.map +1 -1
- package/dist/lib/orchestration/dispatcher.d.ts.map +1 -1
- package/dist/lib/orchestration/dispatcher.js +10 -1
- package/dist/lib/orchestration/dispatcher.js.map +1 -1
- package/dist/lib/orchestration/swarm.d.ts +1 -0
- package/dist/lib/orchestration/swarm.d.ts.map +1 -1
- package/dist/lib/orchestration/swarm.js +11 -9
- package/dist/lib/orchestration/swarm.js.map +1 -1
- package/dist/lib/processRegistry.d.ts +2 -50
- package/dist/lib/processRegistry.d.ts.map +1 -1
- package/dist/lib/processRegistry.js +191 -286
- package/dist/lib/processRegistry.js.map +1 -1
- package/dist/memory/MemoryFactory.d.ts.map +1 -1
- package/dist/memory/MemoryFactory.js +2 -1
- package/dist/memory/MemoryFactory.js.map +1 -1
- package/dist/memory/PostgresMemoryProvider.d.ts +1 -0
- package/dist/memory/PostgresMemoryProvider.d.ts.map +1 -1
- package/dist/memory/PostgresMemoryProvider.js +22 -3
- package/dist/memory/PostgresMemoryProvider.js.map +1 -1
- package/dist/server.d.ts +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +84 -80
- package/dist/server.js.map +1 -1
- package/dist/services/AgentManager.d.ts +1 -0
- package/dist/services/AgentManager.d.ts.map +1 -1
- package/dist/services/AgentManager.js +27 -1
- package/dist/services/AgentManager.js.map +1 -1
- package/dist/services/ClaudeRunner.d.ts +0 -12
- package/dist/services/ClaudeRunner.d.ts.map +1 -1
- package/dist/services/ClaudeRunner.js +26 -132
- package/dist/services/ClaudeRunner.js.map +1 -1
- package/dist/services/ClineRunner.d.ts.map +1 -1
- package/dist/services/ClineRunner.js +16 -7
- package/dist/services/ClineRunner.js.map +1 -1
- package/dist/services/GeminiRunner.d.ts.map +1 -1
- package/dist/services/GeminiRunner.js +13 -6
- package/dist/services/GeminiRunner.js.map +1 -1
- package/dist/services/KiloRunner.d.ts.map +1 -1
- package/dist/services/KiloRunner.js +7 -4
- package/dist/services/KiloRunner.js.map +1 -1
- package/dist/services/NousHermesRunner.d.ts +4 -0
- package/dist/services/NousHermesRunner.d.ts.map +1 -1
- package/dist/services/NousHermesRunner.js +131 -34
- package/dist/services/NousHermesRunner.js.map +1 -1
- package/dist/services/OpenClawRunner.d.ts.map +1 -1
- package/dist/services/OpenClawRunner.js +16 -7
- package/dist/services/OpenClawRunner.js.map +1 -1
- package/dist/services/OpenCodeRunner.d.ts.map +1 -1
- package/dist/services/OpenCodeRunner.js +16 -7
- package/dist/services/OpenCodeRunner.js.map +1 -1
- package/dist/services/PromptManager.d.ts.map +1 -1
- package/dist/services/PromptManager.js +4 -0
- package/dist/services/PromptManager.js.map +1 -1
- package/dist/services/QwenCliRunner.d.ts.map +1 -1
- package/dist/services/QwenCliRunner.js +16 -7
- package/dist/services/QwenCliRunner.js.map +1 -1
- package/dist/tools/agent_control.d.ts +2 -69
- package/dist/tools/agent_control.d.ts.map +1 -1
- package/dist/tools/agent_control.js +191 -275
- package/dist/tools/agent_control.js.map +1 -1
- package/dist/tools/config_example.d.ts +2 -2
- package/dist/tools/config_example.d.ts.map +1 -1
- package/dist/tools/config_example.js +2 -4
- package/dist/tools/config_example.js.map +1 -1
- package/dist/tools/create_agent.d.ts.map +1 -1
- package/dist/tools/create_agent.js +11 -0
- package/dist/tools/create_agent.js.map +1 -1
- package/dist/tools/manage_agents.d.ts.map +1 -1
- package/dist/tools/manage_agents.js +3 -2
- package/dist/tools/manage_agents.js.map +1 -1
- package/dist/tools/memory_store.d.ts +1 -1
- package/dist/tools/run_agent.d.ts +1 -2
- package/dist/tools/run_agent.d.ts.map +1 -1
- package/dist/tools/run_agent.js +1 -13
- package/dist/tools/run_agent.js.map +1 -1
- package/dist/tools/run_agent_cli.d.ts +4 -10
- package/dist/tools/run_agent_cli.d.ts.map +1 -1
- package/dist/tools/run_agent_cli.js +11 -91
- package/dist/tools/run_agent_cli.js.map +1 -1
- package/dist/tools/run_agents_parallel.d.ts +1 -2
- package/dist/tools/run_agents_parallel.d.ts.map +1 -1
- package/dist/tools/run_claude.d.ts +0 -1
- package/dist/tools/run_claude.d.ts.map +1 -1
- package/dist/tools/run_claude.js +1 -9
- package/dist/tools/run_claude.js.map +1 -1
- package/dist/tools/run_hermes.d.ts +1 -0
- package/dist/tools/run_hermes.d.ts.map +1 -1
- package/dist/tools/run_hermes.js +4 -3
- package/dist/tools/run_hermes.js.map +1 -1
- package/docs/agent-http-tutorial.md +527 -0
- package/package.json +114 -112
- package/scripts/postgres-manager.mjs +0 -0
- package/scripts/setup.mjs +0 -0
- package/scripts/uninstall.mjs +0 -0
|
@@ -0,0 +1,527 @@
|
|
|
1
|
+
# Tutoriel : Créer et piloter des agents via HTTP (Overmind MCP)
|
|
2
|
+
|
|
3
|
+
> **Note** : `runner` est **obligatoire** dans `run_agent` (pas déduit du registry). Doit correspondre au runner utilisé lors du `create_agent`.
|
|
4
|
+
>
|
|
5
|
+
> `claude` et `kilo` nécessitent une auth (EXIT_CODE_1 = token manquant). `gemini` fonctionne avec le token libre. `hermes` fonctionne avec les tokens ZAI.
|
|
6
|
+
> Auth : `Authorization: Bearer $OVERMIND_AUTH`
|
|
7
|
+
> Tous les appels retournent du SSE (`Accept: application/json, text/event-stream`)
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Prérequis
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
# Le serveur Overmind doit tourner (via start-all-mcp-servers.bat ou manuellement)
|
|
15
|
+
curl http://localhost:3099/health
|
|
16
|
+
# → ✓ Ok
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Méthode 1 — Via l'API HTTP MCP (externe, n'importe quel client)
|
|
22
|
+
|
|
23
|
+
Toutes les opérations passent par `tools/call` avec le bon `name` d'outil.
|
|
24
|
+
|
|
25
|
+
### Headers obligatoires
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
Content-Type: application/json
|
|
29
|
+
Accept: application/json, text/event-stream
|
|
30
|
+
Authorization: Bearer $OVERMIND_AUTH
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
### 1.1 Créer 5 agents (Claude, Kilo, Hermes × 2, Gemini)
|
|
36
|
+
|
|
37
|
+
Chaque `create_agent` enregistre l'agent dans le registry. `run_agent` lancera le bon runner selon le champ `runner`.
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
# Agent 1 — ClaudeRunner
|
|
41
|
+
curl -s -X POST http://localhost:3099/mcp \
|
|
42
|
+
-H "Content-Type: application/json" \
|
|
43
|
+
-H "Accept: application/json, text/event-stream" \
|
|
44
|
+
-H "Authorization: Bearer $OVERMIND_AUTH" \
|
|
45
|
+
-d '{
|
|
46
|
+
"jsonrpc": "2.0", "id": 1, "method": "tools/call",
|
|
47
|
+
"params": {
|
|
48
|
+
"name": "create_agent",
|
|
49
|
+
"arguments": {
|
|
50
|
+
"name": "dev_assistant",
|
|
51
|
+
"runner": "claude",
|
|
52
|
+
"prompt": "Tu es un assistant développement. Réponds en moins de 3 phrases."
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}' | grep -o '"text":"[^"]*"' | python3 -c "import sys,json; print(json.loads(sys.stdin.read())['text'])" 2>/dev/null || curl -s -X POST http://localhost:3099/mcp \
|
|
56
|
+
-H "Content-Type: application/json" \
|
|
57
|
+
-H "Accept: application/json, text/event-stream" \
|
|
58
|
+
-H "Authorization: Bearer $OVERMIND_AUTH" \
|
|
59
|
+
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"create_agent","arguments":{"name":"dev_assistant","runner":"claude","prompt":"Tu es un assistant développement."}}}'
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
**En JSON (copier-coller dans Postman/Insomnia) :**
|
|
63
|
+
|
|
64
|
+
```json
|
|
65
|
+
{
|
|
66
|
+
"jsonrpc": "2.0", "id": 1, "method": "tools/call",
|
|
67
|
+
"params": {
|
|
68
|
+
"name": "create_agent",
|
|
69
|
+
"arguments": {
|
|
70
|
+
"name": "dev_assistant",
|
|
71
|
+
"runner": "claude",
|
|
72
|
+
"prompt": "Tu es un assistant développement."
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
```json
|
|
79
|
+
// Agent 2 — KiloRunner
|
|
80
|
+
{
|
|
81
|
+
"jsonrpc": "2.0", "id": 2, "method": "tools/call",
|
|
82
|
+
"params": {
|
|
83
|
+
"name": "create_agent",
|
|
84
|
+
"arguments": {
|
|
85
|
+
"name": "archi_bot",
|
|
86
|
+
"runner": "kilo",
|
|
87
|
+
"prompt": "Tu es un expert architecture système."
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
```json
|
|
94
|
+
// Agent 3 — HermesRunner #1
|
|
95
|
+
{
|
|
96
|
+
"jsonrpc": "2.0", "id": 3, "method": "tools/call",
|
|
97
|
+
"params": {
|
|
98
|
+
"name": "create_agent",
|
|
99
|
+
"arguments": {
|
|
100
|
+
"name": "nexus_guard",
|
|
101
|
+
"runner": "hermes",
|
|
102
|
+
"prompt": "Tu es un garde système. Rapporte tout incident."
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
```json
|
|
109
|
+
// Agent 4 — HermesRunner #2
|
|
110
|
+
{
|
|
111
|
+
"jsonrpc": "2.0", "id": 4, "method": "tools/call",
|
|
112
|
+
"params": {
|
|
113
|
+
"name": "create_agent",
|
|
114
|
+
"arguments": {
|
|
115
|
+
"name": "nexus_sentinel",
|
|
116
|
+
"runner": "hermes",
|
|
117
|
+
"prompt": "Tu surveilles les métriques système."
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
```json
|
|
124
|
+
// Agent 5 — GeminiRunner
|
|
125
|
+
{
|
|
126
|
+
"jsonrpc": "2.0", "id": 5, "method": "tools/call",
|
|
127
|
+
"params": {
|
|
128
|
+
"name": "create_agent",
|
|
129
|
+
"arguments": {
|
|
130
|
+
"name": "fast_probe",
|
|
131
|
+
"runner": "gemini",
|
|
132
|
+
"prompt": "Réponds en une phrase concise."
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
**Runners disponibles** : `claude` | `gemini` | `kilo` | `qwencli` | `openclaw` | `cline` | `opencode` | `hermes`
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
### 1.2 Lister les agents
|
|
143
|
+
|
|
144
|
+
```json
|
|
145
|
+
{
|
|
146
|
+
"jsonrpc": "2.0", "id": 10, "method": "tools/call",
|
|
147
|
+
"params": { "name": "list_agents", "arguments": {} }
|
|
148
|
+
}
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
### 1.3 Lancer un agent (run_agent)
|
|
154
|
+
|
|
155
|
+
```json
|
|
156
|
+
{
|
|
157
|
+
"jsonrpc": "2.0", "id": 11, "method": "tools/call",
|
|
158
|
+
"params": {
|
|
159
|
+
"name": "run_agent",
|
|
160
|
+
"arguments": {
|
|
161
|
+
"agentName": "dev_assistant",
|
|
162
|
+
"prompt": "Explique ce qu'est un mutex en 2 phrases.",
|
|
163
|
+
"timeoutMs": 60000
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
Le runner correspondant (`claude`) est automatiquement choisi d'après le registry.
|
|
170
|
+
Le PID du child process est inscrit dans `agent_lifecycle` (RAM, pas de disk I/O).
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
### 1.4 Surveiller en temps réel (stream)
|
|
175
|
+
|
|
176
|
+
```json
|
|
177
|
+
// Lire l'output sans bloquer (polling)
|
|
178
|
+
{
|
|
179
|
+
"jsonrpc": "2.0", "id": 12, "method": "tools/call",
|
|
180
|
+
"params": {
|
|
181
|
+
"name": "agent_control",
|
|
182
|
+
"arguments": {
|
|
183
|
+
"agentName": "dev_assistant",
|
|
184
|
+
"action": "stream"
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
```json
|
|
191
|
+
// Statut complet (pid, status, sessionId, buffer)
|
|
192
|
+
{
|
|
193
|
+
"jsonrpc": "2.0", "id": 13, "method": "tools/call",
|
|
194
|
+
"params": {
|
|
195
|
+
"name": "agent_control",
|
|
196
|
+
"arguments": {
|
|
197
|
+
"agentName": "dev_assistant",
|
|
198
|
+
"action": "status"
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
### 1.5 Lancer 5 agents en parallèle
|
|
207
|
+
|
|
208
|
+
```bash
|
|
209
|
+
# Lancer les 5 en arrière-plan avec '&'
|
|
210
|
+
curl -s -X POST http://localhost:3099/mcp \
|
|
211
|
+
-H "Content-Type: application/json" \
|
|
212
|
+
-H "Accept: application/json, text/event-stream" \
|
|
213
|
+
-H "Authorization: Bearer $OVERMIND_AUTH" \
|
|
214
|
+
-d '{"jsonrpc":"2.0","id":20,"method":"tools/call","params":{"name":"run_agent","arguments":{"agentName":"dev_assistant","prompt":"Question rapide","timeoutMs":30000}}}' &
|
|
215
|
+
|
|
216
|
+
curl -s -X POST http://localhost:3099/mcp \
|
|
217
|
+
-H "Content-Type: application/json" \
|
|
218
|
+
-H "Accept: application/json, text/event-stream" \
|
|
219
|
+
-H "Authorization: Bearer $OVERMIND_AUTH" \
|
|
220
|
+
-d '{"jsonrpc":"2.0","id":21,"method":"tools/call","params":{"name":"run_agent","arguments":{"agentName":"archi_bot","prompt":"Question rapide","timeoutMs":30000}}}' &
|
|
221
|
+
|
|
222
|
+
curl -s -X POST http://localhost:3099/mcp \
|
|
223
|
+
-H "Content-Type: application/json" \
|
|
224
|
+
-H "Accept: application/json, text/event-stream" \
|
|
225
|
+
-H "Authorization: Bearer $OVERMIND_AUTH" \
|
|
226
|
+
-d '{"jsonrpc":"2.0","id":22,"method":"tools/call","params":{"name":"run_agent","arguments":{"agentName":"nexus_guard","prompt":"Rapporte létat du système","timeoutMs":30000}}}' &
|
|
227
|
+
|
|
228
|
+
curl -s -X POST http://localhost:3099/mcp \
|
|
229
|
+
-H "Content-Type: application/json" \
|
|
230
|
+
-H "Accept: application/json, text/event-stream" \
|
|
231
|
+
-H "Authorization: Bearer $OVERMIND_AUTH" \
|
|
232
|
+
-d '{"jsonrpc":"2.0","id":23,"method":"tools/call","params":{"name":"run_agent","arguments":{"agentName":"nexus_sentinel","prompt":"Liste les processus actifs","timeoutMs":30000}}}' &
|
|
233
|
+
|
|
234
|
+
curl -s -X POST http://localhost:3099/mcp \
|
|
235
|
+
-H "Content-Type: application/json" \
|
|
236
|
+
-H "Accept: application/json, text/event-stream" \
|
|
237
|
+
-H "Authorization: Bearer $OVERMIND_AUTH" \
|
|
238
|
+
-d '{"jsonrpc":"2.0","id":24,"method":"tools/call","params":{"name":"run_agent","arguments":{"agentName":"fast_probe","prompt":"Ping","timeoutMs":30000}}}' &
|
|
239
|
+
|
|
240
|
+
wait
|
|
241
|
+
echo "Tous les agents ont répondu (ou expiré)"
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
Chaque agent s'exécute dans son propre child process (PID distinct).
|
|
245
|
+
Les outputs sont collectés dans `agent_lifecycle` (RAM, ring buffer 256KB/agent).
|
|
246
|
+
|
|
247
|
+
---
|
|
248
|
+
|
|
249
|
+
### 1.6 Attendre qu'un agent finisse (wait)
|
|
250
|
+
|
|
251
|
+
```json
|
|
252
|
+
{
|
|
253
|
+
"jsonrpc": "2.0", "id": 30, "method": "tools/call",
|
|
254
|
+
"params": {
|
|
255
|
+
"name": "agent_control",
|
|
256
|
+
"arguments": {
|
|
257
|
+
"agentName": "dev_assistant",
|
|
258
|
+
"action": "wait",
|
|
259
|
+
"timeoutMs": 900000
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
Blocage jusqu'à terminaison (max 15 min par défaut). Retourne l'output complet.
|
|
266
|
+
|
|
267
|
+
---
|
|
268
|
+
|
|
269
|
+
### 1.7 Tuer un agent
|
|
270
|
+
|
|
271
|
+
```json
|
|
272
|
+
{
|
|
273
|
+
"jsonrpc": "2.0", "id": 31, "method": "tools/call",
|
|
274
|
+
"params": {
|
|
275
|
+
"name": "agent_control",
|
|
276
|
+
"arguments": {
|
|
277
|
+
"agentName": "dev_assistant",
|
|
278
|
+
"action": "kill"
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
Envoie `taskkill /F /T /PID <pid>` (Windows) ou `kill -9` (Unix).
|
|
285
|
+
|
|
286
|
+
---
|
|
287
|
+
|
|
288
|
+
### 1.8 Supprimer un agent du registry
|
|
289
|
+
|
|
290
|
+
```json
|
|
291
|
+
{
|
|
292
|
+
"jsonrpc": "2.0", "id": 32, "method": "tools/call",
|
|
293
|
+
"params": {
|
|
294
|
+
"name": "delete_agent",
|
|
295
|
+
"arguments": { "agentName": "dev_assistant" }
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
## Méthode 2 — Via le SDK Node.js (import direct des runners)
|
|
303
|
+
|
|
304
|
+
Importe les classes directement dans ton script Node pour un contrôle programme par programme.
|
|
305
|
+
|
|
306
|
+
### Installation / Setup
|
|
307
|
+
|
|
308
|
+
```bash
|
|
309
|
+
cd /votre/projet/Workflow
|
|
310
|
+
npm run build # compile le TypeScript
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
### 2.1 Lancer un agent avec ClaudeRunner
|
|
314
|
+
|
|
315
|
+
```javascript
|
|
316
|
+
// run_claude_direct.mjs
|
|
317
|
+
import { ClaudeRunner } from './dist/services/ClaudeRunner.js';
|
|
318
|
+
import { loadEnvQuietly } from './dist/lib/loadEnv.js';
|
|
319
|
+
|
|
320
|
+
const runner = new ClaudeRunner();
|
|
321
|
+
|
|
322
|
+
// Lancer l'agent
|
|
323
|
+
const result = await runner.runAgent({
|
|
324
|
+
agentName: 'mon_agent',
|
|
325
|
+
prompt: 'Explique les channels Go en 2 phrases.',
|
|
326
|
+
timeoutMs: 60_000,
|
|
327
|
+
silent: false, // false = logs dans stderr
|
|
328
|
+
configPath: undefined,
|
|
329
|
+
});
|
|
330
|
+
|
|
331
|
+
console.log('Status:', result.error ?? 'OK');
|
|
332
|
+
console.log('Output:', result.result);
|
|
333
|
+
console.log('Session:', result.sessionId);
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
```bash
|
|
337
|
+
node run_claude_direct.mjs
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
---
|
|
341
|
+
|
|
342
|
+
### 2.2 Lancer avec KiloRunner
|
|
343
|
+
|
|
344
|
+
```javascript
|
|
345
|
+
// run_kilo_direct.mjs
|
|
346
|
+
import { KiloRunner } from './dist/services/KiloRunner.js';
|
|
347
|
+
|
|
348
|
+
const runner = new KiloRunner();
|
|
349
|
+
|
|
350
|
+
const result = await runner.runAgent({
|
|
351
|
+
agentName: 'archi_kilo',
|
|
352
|
+
prompt: 'Décris larchitecture microservices en 3 points.',
|
|
353
|
+
timeoutMs: 90_000,
|
|
354
|
+
silent: false,
|
|
355
|
+
configPath: undefined,
|
|
356
|
+
});
|
|
357
|
+
|
|
358
|
+
console.log(result.result ?? result.error);
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
---
|
|
362
|
+
|
|
363
|
+
### 2.3 Lancer 2 HermesRunner en parallèle
|
|
364
|
+
|
|
365
|
+
```javascript
|
|
366
|
+
// run_hermes_pool.mjs
|
|
367
|
+
import { HermesRunner } from './dist/services/HermesRunner.js';
|
|
368
|
+
|
|
369
|
+
const runners = [
|
|
370
|
+
new HermesRunner({ model: 'glm-5.1' }),
|
|
371
|
+
new HermesRunner({ model: 'glm-4' }),
|
|
372
|
+
];
|
|
373
|
+
|
|
374
|
+
const [res1, res2] = await Promise.all([
|
|
375
|
+
runners[0].runAgent({
|
|
376
|
+
agentName: 'hermes_guard',
|
|
377
|
+
prompt: 'Rapporte les 3 dernières alertes.',
|
|
378
|
+
timeoutMs: 60_000,
|
|
379
|
+
silent: false,
|
|
380
|
+
}),
|
|
381
|
+
runners[1].runAgent({
|
|
382
|
+
agentName: 'hermes_sentinel',
|
|
383
|
+
prompt: 'Affiche les métriques CPU/mémoire.',
|
|
384
|
+
timeoutMs: 60_000,
|
|
385
|
+
silent: false,
|
|
386
|
+
}),
|
|
387
|
+
]);
|
|
388
|
+
|
|
389
|
+
console.log('Guard:', res1.result ?? res1.error);
|
|
390
|
+
console.log('Sentinel:', res2.result ?? res2.error);
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
---
|
|
394
|
+
|
|
395
|
+
### 2.4 Lancer 5 agents mixed pool
|
|
396
|
+
|
|
397
|
+
```javascript
|
|
398
|
+
// run_pool_5.mjs
|
|
399
|
+
import { ClaudeRunner } from './dist/services/ClaudeRunner.js';
|
|
400
|
+
import { KiloRunner } from './dist/services/KiloRunner.js';
|
|
401
|
+
import { HermesRunner } from './dist/services/HermesRunner.js';
|
|
402
|
+
import { GeminiRunner } from './dist/services/GeminiRunner.js';
|
|
403
|
+
|
|
404
|
+
const agents = [
|
|
405
|
+
// 1× ClaudeRunner
|
|
406
|
+
{ runner: new ClaudeRunner(), name: 'dev', prompt: 'Réponds en 1 phrase.', model: null },
|
|
407
|
+
// 1× KiloRunner
|
|
408
|
+
{ runner: new KiloRunner(), name: 'archi', prompt: 'Décris un pattern.', model: null },
|
|
409
|
+
// 2× HermesRunner
|
|
410
|
+
{ runner: new HermesRunner({ model: 'glm-5.1' }), name: 'nexus_g', prompt: 'Ping système.', model: 'glm-5.1' },
|
|
411
|
+
{ runner: new HermesRunner({ model: 'glm-4' }), name: 'nexus_s', prompt: 'Rapport RAM.', model: 'glm-4' },
|
|
412
|
+
// 1× GeminiRunner
|
|
413
|
+
{ runner: new GeminiRunner(), name: 'probe', prompt: 'Combien de cores CPU ?', model: null },
|
|
414
|
+
];
|
|
415
|
+
|
|
416
|
+
const runs = agents.map(({ runner, name, prompt, model }) =>
|
|
417
|
+
runner.runAgent({ agentName: name, prompt, timeoutMs: 45_000, silent: false })
|
|
418
|
+
.then(r => ({ name, result: r.result ?? r.error, model }))
|
|
419
|
+
);
|
|
420
|
+
|
|
421
|
+
const results = await Promise.all(runs);
|
|
422
|
+
|
|
423
|
+
for (const { name, result, model } of results) {
|
|
424
|
+
console.log(`[${model ?? 'default'}] ${name}: ${String(result).slice(0, 80)}`);
|
|
425
|
+
}
|
|
426
|
+
```
|
|
427
|
+
|
|
428
|
+
```bash
|
|
429
|
+
node run_pool_5.mjs
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
---
|
|
433
|
+
|
|
434
|
+
### 2.5 Cycle de vie complet avec abort
|
|
435
|
+
|
|
436
|
+
```javascript
|
|
437
|
+
import { ClaudeRunner } from './dist/services/ClaudeRunner.js';
|
|
438
|
+
import { AgentController } from './dist/lib/agent_lifecycle.js'; // wait helpers
|
|
439
|
+
|
|
440
|
+
const runner = new ClaudeRunner();
|
|
441
|
+
const controller = new AbortController();
|
|
442
|
+
|
|
443
|
+
const agent = runner.runAgent({
|
|
444
|
+
agentName: 'stoppable',
|
|
445
|
+
prompt: 'Décris lUnivers en détail (va prendre longtemps).',
|
|
446
|
+
timeoutMs: 300_000,
|
|
447
|
+
signal: controller.signal, // AbortController = kill externe
|
|
448
|
+
});
|
|
449
|
+
|
|
450
|
+
// Kill après 5 secondes
|
|
451
|
+
setTimeout(() => {
|
|
452
|
+
console.log('→ Abort envoyé');
|
|
453
|
+
controller.abort();
|
|
454
|
+
}, 5_000);
|
|
455
|
+
|
|
456
|
+
const result = await agent;
|
|
457
|
+
console.log('Résultat:', result.error ?? result.result);
|
|
458
|
+
```
|
|
459
|
+
|
|
460
|
+
---
|
|
461
|
+
|
|
462
|
+
## Outil : overmind-serve.bat
|
|
463
|
+
|
|
464
|
+
```batch
|
|
465
|
+
:: Lancer le serveur Overmind MCP
|
|
466
|
+
overmind-serve.bat Start (ou restart si déjà lancé)
|
|
467
|
+
overmind-serve.bat stop Arrêt propre
|
|
468
|
+
overmind-serve.bat restart Restart
|
|
469
|
+
overmind-serve.bat status Voir si ça tourne
|
|
470
|
+
overmind-serve.bat tail 20 dernières lignes du log
|
|
471
|
+
overmind-serve.bat kill Kill forcé
|
|
472
|
+
|
|
473
|
+
:: Fonctionne même si le script est lancé depuis un autre répertoire
|
|
474
|
+
cd C:\ && overmind-serve.bat status
|
|
475
|
+
```
|
|
476
|
+
|
|
477
|
+
Log : `Workflow/logs/overmind.log`
|
|
478
|
+
PID file : `Workflow/overmind.pid`
|
|
479
|
+
Health : `curl http://localhost:3099/health`
|
|
480
|
+
|
|
481
|
+
## Outil : overmind-pool.mjs (client CLI)
|
|
482
|
+
|
|
483
|
+
```bash
|
|
484
|
+
node overmind-pool.mjs --status # health check
|
|
485
|
+
node overmind-pool.mjs --agents # lister agents
|
|
486
|
+
node overmind-pool.mjs --pool # demo 5 agents
|
|
487
|
+
node overmind-pool.mjs --run <n> <r> <p> # run un agent
|
|
488
|
+
node overmind-pool.mjs --create <n> <r> <p> # créer un agent
|
|
489
|
+
node overmind-pool.mjs --kill <name> # tuer un agent
|
|
490
|
+
```
|
|
491
|
+
|
|
492
|
+
## Comparatif rapide
|
|
493
|
+
|
|
494
|
+
| | HTTP MCP (Méthode 1) | SDK Node (Méthode 2) |
|
|
495
|
+
|---|---|---|
|
|
496
|
+
| **Usage** | Scripts, CI, autre machine | Code programme |
|
|
497
|
+
| **Auth** | Bearer token HTTP | Aucun (process local) |
|
|
498
|
+
| **Paralélisme** | curl × N ou HTTP client async | `Promise.all([...])` |
|
|
499
|
+
| **Output streaming** | `agent_control stream` (SSE) | Callback `stdout.on('data')` |
|
|
500
|
+
| **Lifecycle management** | Via `agent_control` tool | Via `agent_lifecycle` + AbortController |
|
|
501
|
+
| **Déploiement** | HTTP ouvert, remote-ready | Même host que le serveur |
|
|
502
|
+
|
|
503
|
+
---
|
|
504
|
+
|
|
505
|
+
## Commandes utilitaires
|
|
506
|
+
|
|
507
|
+
```bash
|
|
508
|
+
# Health check
|
|
509
|
+
curl http://localhost:3099/health
|
|
510
|
+
|
|
511
|
+
# Lister tous les outils disponibles
|
|
512
|
+
curl -s -X POST http://localhost:3099/mcp \
|
|
513
|
+
-H "Content-Type: application/json" \
|
|
514
|
+
-H "Accept: application/json, text/event-stream" \
|
|
515
|
+
-H "Authorization: Bearer $OVERMIND_AUTH" \
|
|
516
|
+
-d '{"jsonrpc":"2.0","id":0,"method":"tools/list","params":{}}'
|
|
517
|
+
|
|
518
|
+
# Lister les agents
|
|
519
|
+
curl -s -X POST http://localhost:3099/mcp \
|
|
520
|
+
-H "Content-Type: application/json" \
|
|
521
|
+
-H "Accept: application/json, text/event-stream" \
|
|
522
|
+
-H "Authorization: Bearer $OVERMIND_AUTH" \
|
|
523
|
+
-d '{"jsonrpc":"2.0","id":0,"method":"tools/call","params":{"name":"list_agents","arguments":{}}}'
|
|
524
|
+
|
|
525
|
+
# Voir le contenu du registry disk
|
|
526
|
+
cat .claude/process-registry.json
|
|
527
|
+
```
|