overmind-mcp 2.8.19 → 2.8.22
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/dist/bridge/OverBridgeServer.d.ts +1 -0
- package/dist/bridge/OverBridgeServer.d.ts.map +1 -1
- package/dist/bridge/OverBridgeServer.js +35 -5
- package/dist/bridge/OverBridgeServer.js.map +1 -1
- package/dist/bridge/OverBridgeService.d.ts.map +1 -1
- package/dist/bridge/OverBridgeService.js +4 -0
- package/dist/bridge/OverBridgeService.js.map +1 -1
- package/dist/services/NousHermesRunner.d.ts.map +1 -1
- package/dist/services/NousHermesRunner.js +29 -9
- package/dist/services/NousHermesRunner.js.map +1 -1
- package/docs/PLAN_REFACTORING_OVERMIND_V2.md +414 -0
- package/docs/PLAN_REFACTOR_OVERMIND_AGI.md +606 -0
- package/docs/doc_guide_agent_hermes_permanent.md +315 -0
- package/docs/doc_hermes_gateway.md +775 -0
- package/docs/guide_agent_hermes_overmind.md +403 -0
- package/docs/plan_securit/303/251.md +351 -0
- package/package.json +1 -1
- package/scripts/bridge-smoke-test.sh +231 -0
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
# 🤖 Guide : Agent Hermes Permanent — Persistance & Orchestration
|
|
2
|
+
|
|
3
|
+
> **Objectif** : Construire un agent IA persistant, connecté à Discord, avec mémoire, bridge modulaire, et orchestration multi-agents.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 📐 Architecture — 2 Couches Bien Distinctes
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
┌──────────────────────────────────────────────────┐
|
|
11
|
+
│ OVERMIND │
|
|
12
|
+
│ L'Encapsuleur / Orchestrator │
|
|
13
|
+
│ │
|
|
14
|
+
│ • Agent CRUD (create, delete, list, config) │
|
|
15
|
+
│ • Orchestration (run_agent, run_agents_parallel) │
|
|
16
|
+
│ • Mémoire partagée (memory_store/search cross-agents)│
|
|
17
|
+
│ • Mémoire locale/agent (DB propre par agent) │
|
|
18
|
+
│ • Cron PERSISTANT (survit aux redémarrages) │
|
|
19
|
+
│ • Agent Control (status, stream, kill, wait) │
|
|
20
|
+
│ • Bridge SDK (TypeScript wrappers) │
|
|
21
|
+
│ • Registre agents (.overmind/hermes/) │
|
|
22
|
+
│ │
|
|
23
|
+
│ ┌────────────────────────────────────────────┐ │
|
|
24
|
+
│ │ HERMES GATEWAY │ │
|
|
25
|
+
│ │ Le Runtime Agent │ │
|
|
26
|
+
│ │ │ │
|
|
27
|
+
│ │ • SOUL.md → persona/voix │ │
|
|
28
|
+
│ │ • Skills (~100+ built-in) │ │
|
|
29
|
+
│ │ • Mémoire locale (MEMORY.md, USER.md) │ │
|
|
30
|
+
│ │ • TTS (ElevenLabs, OpenAI...) │ │
|
|
31
|
+
│ │ • MCP Client (connecte aux serveurs) │ │
|
|
32
|
+
│ │ • Terminal, fichiers, browser... │ │
|
|
33
|
+
│ │ • Cron agent-level (session fraîche) │ │
|
|
34
|
+
│ │ • Session SQLite (state.db) │ │
|
|
35
|
+
│ └────────────────────────────────────────────┘ │
|
|
36
|
+
└──────────────────────────────────────────────────┘
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
**Point clé** : Overmind encapsule Hermes. Chaque couche a ses propres responsabilités.
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## 🔀 Qui Fait Quoi ? — Hermes vs Overmind
|
|
44
|
+
|
|
45
|
+
| Fonctionnalité | Hermes Gateway | Overmind |
|
|
46
|
+
|---|---|---|
|
|
47
|
+
| **Persona (SOUL.md)** | ✅ Gère | — |
|
|
48
|
+
| **Skills** | ✅ Charge et injecte | — |
|
|
49
|
+
| **TTS** | ✅ Exécute | — |
|
|
50
|
+
| **MCP Client** | ✅ Se connecte aux serveurs | — |
|
|
51
|
+
| **Mémoire fichiers plats** | ✅ MEMORY.md, USER.md | — |
|
|
52
|
+
| **Mémoire locale DB** | — | ✅ memory_store/search (DB propre/agent) |
|
|
53
|
+
| **Mémoire partagée** | — | ✅ Cross-agents, include_runs |
|
|
54
|
+
| **Session** | ✅ state.db (SQLite) | — |
|
|
55
|
+
| **Cron (agent-level)** | ✅ Session fraîche à chaque tick | — |
|
|
56
|
+
| **Agent CRUD** | — | ✅ create, config, delete |
|
|
57
|
+
| **Orchestration** | — | ✅ run_agent, run_agents_parallel |
|
|
58
|
+
| **Mémoire partagée** | — | ✅ memory_store, memory_search (cross-agents) |
|
|
59
|
+
| **Cron PERSISTANT** | — | ✅ Survit aux redémarrages |
|
|
60
|
+
| **Agent Control** | — | ✅ status, stream, kill, wait |
|
|
61
|
+
| **Bridge SDK** | — | ✅ Wrappers TypeScript |
|
|
62
|
+
| **Registre agents** | — | ✅ .overmind/hermes/ |
|
|
63
|
+
|
|
64
|
+
### ⏰ Cron — La Différence Importante
|
|
65
|
+
|
|
66
|
+
**Hermes Gateway Cron** :
|
|
67
|
+
- Tourne dans une **session fraîche** à chaque tick
|
|
68
|
+
- Même profil, même MCP, mais pas de contamination entre runs
|
|
69
|
+
- Lié au cycle de vie de l'agent
|
|
70
|
+
- Configuration via `cronjob()` dans l'agent
|
|
71
|
+
|
|
72
|
+
**Overmind Cron PERSISTANT** :
|
|
73
|
+
- Géré au niveau de l'**encapsuleur**
|
|
74
|
+
- **Survit aux redémarrages** de l'agent et du gateway
|
|
75
|
+
- Stocké dans le registre Overmind
|
|
76
|
+
- Indépendant du cycle de vie Hermes
|
|
77
|
+
- Configuration via le Bridge SDK ou l'API Overmind
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## 📁 Structure des Fichiers
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
.overmind/
|
|
85
|
+
├── hermes/ ← Runtime Hermes (géré par Overmind)
|
|
86
|
+
│ ├── agent_mon_bot/ ← Agent isolé
|
|
87
|
+
│ │ ├── .hermes/ ← Cerveau (géré par Hermes Gateway)
|
|
88
|
+
│ │ │ ├── SOUL.md ← Persona
|
|
89
|
+
│ │ │ ├── config.yaml ← Modèle + MCP + TTS
|
|
90
|
+
│ │ │ ├── .env ← Clés API
|
|
91
|
+
│ │ │ ├── state.db ← Mémoire locale SQLite
|
|
92
|
+
│ │ │ ├── memories/ ← MEMORY.md + USER.md
|
|
93
|
+
│ │ │ ├── skills/ ← Compétences
|
|
94
|
+
│ │ │ ├── sessions/ ← Historique
|
|
95
|
+
│ │ │ ├── cron/ ← Cron agent-level
|
|
96
|
+
│ │ │ ├── logs/ ← Logs
|
|
97
|
+
│ │ │ └── audio_cache/ ← TTS
|
|
98
|
+
│ │ └── (fichiers de travail)
|
|
99
|
+
│ └── ...
|
|
100
|
+
├── agents/ ← Registre Overmind
|
|
101
|
+
└── bridge/ ← SDK TypeScript (couche Overmind)
|
|
102
|
+
├── index.ts ← Barrel export
|
|
103
|
+
├── types.ts ← Contrats partagés
|
|
104
|
+
├── utils.ts ← Logger, SSE, retry
|
|
105
|
+
├── BridgeProxy.ts ← Transport JSON-RPC
|
|
106
|
+
└── OverBridgeService.ts ← API haut niveau Overmind
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## 🔗 Bridge SDK — Wrappers Overmind en TypeScript
|
|
112
|
+
|
|
113
|
+
Le dossier `bridge/` est un **SDK modulaire** qui wrappe les appels MCP Overmind. Il permet de piloter les agents depuis une app externe.
|
|
114
|
+
|
|
115
|
+
### Architecture en 3 Couches
|
|
116
|
+
|
|
117
|
+
```
|
|
118
|
+
App/Discord Bot → OverBridgeService → BridgeProxy → Overmind MCP (localhost:3099)
|
|
119
|
+
→ Hermes Gateway
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
| Fichier | Rôle | Lignes |
|
|
123
|
+
|---|---|---|
|
|
124
|
+
| `types.ts` | Contrats : `McpResponse`, `AgentResult`, `BridgeConfig`, `SessionState` | ~150 |
|
|
125
|
+
| `utils.ts` | Logger, SSE parsing, retry, validation, formatage Discord | ~170 |
|
|
126
|
+
| `BridgeProxy.ts` | Transport JSON-RPC 2.0 : circuit breaker, 3 couches timeout | ~285 |
|
|
127
|
+
| `OverBridgeService.ts` | API Overmind : `runAgent()`, `memorySearch()`, `runParallel()` | ~284 |
|
|
128
|
+
| `index.ts` | Barrel export | ~46 |
|
|
129
|
+
|
|
130
|
+
### Ce que le Bridge Wrappe (fonctionnalités Overmind)
|
|
131
|
+
|
|
132
|
+
```typescript
|
|
133
|
+
// Orchestration
|
|
134
|
+
bridge.runAgent('agent', 'hermes', 'prompt') // Lancer un agent
|
|
135
|
+
bridge.runAgentForDiscord('agent', 'hermes', msg, ctx) // Avec contexte Discord
|
|
136
|
+
bridge.runParallel([...]) // Flotte multi-agents
|
|
137
|
+
|
|
138
|
+
// Mémoire partagée Overmind (pas la mémoire locale Hermes)
|
|
139
|
+
bridge.memorySearch({ query: 'trading' })
|
|
140
|
+
bridge.memoryStore({ text: 'Décision...', source: 'decision' })
|
|
141
|
+
|
|
142
|
+
// Agent CRUD
|
|
143
|
+
bridge.listAgents()
|
|
144
|
+
bridge.createAgent('nom', 'hermes', 'prompt')
|
|
145
|
+
bridge.deleteAgent('nom')
|
|
146
|
+
|
|
147
|
+
// Agent Control
|
|
148
|
+
bridge.agentControl({ agentName: 'x', action: 'status' })
|
|
149
|
+
bridge.agentControl({ agentName: 'x', action: 'kill' })
|
|
150
|
+
|
|
151
|
+
// Session persistante (Overmind, pas Hermes)
|
|
152
|
+
bridge.resetSession('agent')
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### Circuit Breaker (BridgeProxy)
|
|
156
|
+
|
|
157
|
+
- **Closed** → tout passe, échecs comptés
|
|
158
|
+
- **Open** → après 5 échecs → bloque 30s
|
|
159
|
+
- **Half-Open** → 1 test, 3 succès → re-Close
|
|
160
|
+
|
|
161
|
+
### Session Persistante (Overmind)
|
|
162
|
+
|
|
163
|
+
```typescript
|
|
164
|
+
interface SessionState {
|
|
165
|
+
currentSessionId: string | undefined;
|
|
166
|
+
lastActivityAt: number;
|
|
167
|
+
messageCount: number;
|
|
168
|
+
}
|
|
169
|
+
```
|
|
170
|
+
- Auto-persistée par le Bridge
|
|
171
|
+
- `autoResume: true` → reprend la session existante
|
|
172
|
+
- Survit entre les appels
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
## 🧠 Mémoire — 3 Couches
|
|
177
|
+
|
|
178
|
+
### 1. Mémoire Hermes Gateway (par agent, fichiers plats)
|
|
179
|
+
|
|
180
|
+
Injectée dans le prompt à chaque tour. Gérée par l'agent lui-même.
|
|
181
|
+
|
|
182
|
+
| Fichier | Rôle | Portée |
|
|
183
|
+
|---|---|---|
|
|
184
|
+
| `MEMORY.md` | Notes personnelles de l'agent | 1 agent |
|
|
185
|
+
| `USER.md` | Profil et préférences utilisateur | 1 agent |
|
|
186
|
+
| `state.db` | SQLite (sessions, cache skills) | 1 agent |
|
|
187
|
+
|
|
188
|
+
```bash
|
|
189
|
+
memory(action: "add", target: "memory", content: "L'utilisateur préfère...")
|
|
190
|
+
memory(action: "replace", target: "user", old_text: "old", content: "new")
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### 2. Mémoire Overmind Locale (par agent, base de données)
|
|
194
|
+
|
|
195
|
+
**Chaque agent a sa PROPRE base de données Overmind** — isolation complète.
|
|
196
|
+
Les `memory_store` et `memory_search` sont **locale à l'agent** par défaut.
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
# Stockage local à l'agent (sa propre DB Overmind)
|
|
200
|
+
memory_store(text: "Décision : BlockChat v0.2", source: "decision")
|
|
201
|
+
memory_search(query: "BlockChat protocol")
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
- Chaque agent = sa propre DB vectorielle
|
|
205
|
+
- Recherche sémantique dans les connaissances de l'agent
|
|
206
|
+
- Types : `user`, `agent`, `pattern`, `error`, `decision`
|
|
207
|
+
|
|
208
|
+
### 3. Mémoire Overmind Partagée (entre agents)
|
|
209
|
+
|
|
210
|
+
En plus de sa DB locale, un agent peut accéder à une mémoire **commune** partagée entre tous les agents.
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
# Accès mémoire partagée (cross-agents)
|
|
214
|
+
memory_search(query: "trading strategy", include_runs: true)
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
- Partagée entre tous les agents de la flotte
|
|
218
|
+
- Inclut l'historique des runs (`include_runs: true`)
|
|
219
|
+
- Permet la transmission de connaissances inter-agents
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## 🚀 Créer un Agent — Étape par Étape
|
|
224
|
+
|
|
225
|
+
### Via Overmind MCP (CRUD = Overmind)
|
|
226
|
+
|
|
227
|
+
```bash
|
|
228
|
+
# 1. Créer (Overmind)
|
|
229
|
+
create_agent(name: "mon_bot", runner: "hermes", prompt: "Tu es...")
|
|
230
|
+
|
|
231
|
+
# 2. Configurer (Overmind)
|
|
232
|
+
update_agent_config(name: "mon_bot", model: "glm-5.1",
|
|
233
|
+
mcpServers: ["discord-server", "memory-server"])
|
|
234
|
+
|
|
235
|
+
# 3. Injecter clés (Overmind)
|
|
236
|
+
update_agent_config(name: "mon_bot", env: { "OPENAI_API_KEY": "sk-xxx" })
|
|
237
|
+
|
|
238
|
+
# 4. Lancer (Overmind orchestre, Hermes exécute)
|
|
239
|
+
run_agent(runner: "hermes", agentName: "mon_bot", prompt: "Analyse BTC")
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
### Via le Bridge SDK (TypeScript)
|
|
243
|
+
|
|
244
|
+
```typescript
|
|
245
|
+
import { OverBridgeService } from './bridge/index.js';
|
|
246
|
+
|
|
247
|
+
const bridge = new OverBridgeService(
|
|
248
|
+
{ mcpUrl: 'http://localhost:3099/mcp' },
|
|
249
|
+
logger,
|
|
250
|
+
);
|
|
251
|
+
|
|
252
|
+
// Lancer un agent (Overmind → Hermes)
|
|
253
|
+
const reply = await bridge.runAgent('mon_bot', 'hermes', 'Analyse BTC');
|
|
254
|
+
|
|
255
|
+
// Avec contexte Discord
|
|
256
|
+
const reply = await bridge.runAgentForDiscord(
|
|
257
|
+
'mon_bot', 'hermes', 'Analyse BTC',
|
|
258
|
+
{ channelId: '123', userId: '456', username: 'demon' }
|
|
259
|
+
);
|
|
260
|
+
|
|
261
|
+
// Multi-agents en parallèle (Overmind)
|
|
262
|
+
const results = await bridge.runParallel([
|
|
263
|
+
{ agentName: 'minimax_1', runner: 'hermes', prompt: 'Analyse marché' },
|
|
264
|
+
{ agentName: 'minimax_2', runner: 'hermes', prompt: 'Scrape Twitter' },
|
|
265
|
+
]);
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
---
|
|
269
|
+
|
|
270
|
+
## 🔗 Serveurs MCP — Outils des Agents
|
|
271
|
+
|
|
272
|
+
| Serveur MCP | Port | Ce qu'il fait |
|
|
273
|
+
|---|---|---|
|
|
274
|
+
| `discord-server` | 3141 | Messages, embeds, fichiers Discord |
|
|
275
|
+
| `memory-server` | 3099 | Mémoire locale/agent + partagée Overmind + CRUD agents |
|
|
276
|
+
| `postgresql-server` | 5433 | Base vectorielle (recherche sémantique) |
|
|
277
|
+
| `x-mcp-server` | 3142 | Scrape Twitter/X |
|
|
278
|
+
|
|
279
|
+
---
|
|
280
|
+
|
|
281
|
+
## 🏗️ Orchestration Multi-Agents (Overmind)
|
|
282
|
+
|
|
283
|
+
```
|
|
284
|
+
┌─────────────────────────────────┐
|
|
285
|
+
│ ORCHESTRATEUR │
|
|
286
|
+
│ (Overmind wrapper) │
|
|
287
|
+
│ │
|
|
288
|
+
│ ┌─────────┐ ┌─────────┐ │
|
|
289
|
+
│ │minimax_1│ │minimax_2│ │
|
|
290
|
+
│ │ Hermes │ │ Hermes │ │
|
|
291
|
+
│ └────┬────┘ └────┬────┘ │
|
|
292
|
+
│ ┌────┴────┐ ┌────┴────┐ │
|
|
293
|
+
│ │minimax_3│ │minimax_4│ │
|
|
294
|
+
│ │ Hermes │ │ Hermes │ │
|
|
295
|
+
│ └─────────┘ └─────────┘ │
|
|
296
|
+
│ │
|
|
297
|
+
│ → Embed Discord consolidé │
|
|
298
|
+
└─────────────────────────────────┘
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
---
|
|
302
|
+
|
|
303
|
+
## ⚠️ Pièges à Éviter
|
|
304
|
+
|
|
305
|
+
1. **Confondre Hermes et Overmind** → Hermes = runtime agent, Overmind = encapsuleur
|
|
306
|
+
2. **Cron Hermes vs Cron Overmind** → Overmind est persistant, Hermes est par session
|
|
307
|
+
3. **3 couches de mémoire** → Fichiers plats (Hermes), DB locale/agent (Overmind), partagée cross-agents (Overmind)
|
|
308
|
+
4. **Clés API dans SOUL.md** → Jamais. Toujours dans `.env`
|
|
309
|
+
5. **Bridge sans session** → Toujours `autoResume: true` pour la continuité
|
|
310
|
+
6. **Oublier les MCP servers** → Sans MCP, l'agent ne peut rien faire
|
|
311
|
+
|
|
312
|
+
---
|
|
313
|
+
|
|
314
|
+
*Guide v3 par SniperBot Analyst — OverMind 🤖*
|
|
315
|
+
*Hermes Gateway vs Overmind clairement séparés + Bridge SDK*
|