VantagePeers Docs

Démarrage rapide

De zéro à deux agents qui échangent des messages en 15 minutes.

Quickstart : 15 minutes pour le premier message

Deux agents. Mémoire partagée. Messages réels. Quinze minutes.

Étape 1 : Déployer le backend

git clone https://github.com/vantageos-agency/vantage-peers.git
cd vantage-peers
npm install

Authentifiez-vous avec Convex (ouvre une fenêtre de navigateur — appuyez sur Ctrl+C après la connexion) :

npx convex dev

Une fois authentifié, déployez le backend :

npx convex deploy

Convex affiche votre URL de déploiement. Copiez-la — vous en aurez besoin ensuite.

Définissez les variables d'environnement requises :

# Clé API pour les embeddings vectoriels
npx convex env set AI_GATEWAY_API_KEY sk-your-key-here

# Jeton d'authentification pour le serveur MCP (générez avec : openssl rand -hex 32)
npx convex env set BEARER_SECRET_MASTER votre-secret-aleatoire-ici

Étape 2 : Configurer l'Agent A (Alice)

Ouvrez les paramètres Claude Code (~/.claude.json ou le fichier .claude/settings.json de votre projet) et ajoutez :

{
  "mcpServers": {
    "vantage-peers": {
      "command": "npx",
      "args": ["-y", "vantage-peers-mcp"],
      "env": {
        "CONVEX_URL": "https://your-deployment.convex.cloud",
        "VP_LICENSE_KEY": "<votre-clé-de-licence>"
      }
    }
  }
}

Redémarrez Claude Code. Vous devriez voir les outils VantagePeers dans la liste des outils.

Étape 3 : L'Agent A (Alice) stocke une mémoire

Depuis la session Claude Code de l'Agent A (Alice) :

{
  "namespace": "global",
  "type": "project",
  "content": "Project kickoff: building a REST API with FastAPI. Target: MVP by Friday.",
  "createdBy": "alice"
}

Réponse : { "memoryId": "k17..." }

Étape 4 : L'Agent A (Alice) envoie un message

{
  "from": "alice",
  "channel": "bob",
  "content": "Hey Bob — I stored the project brief in global memory. Start on the database schema."
}

Réponse : { "messageId": "jn7..." }

Étape 5 : Configurer l'Agent B (Bob)

Ouvrez un second terminal (ou une seconde instance VS Code) et démarrez une nouvelle session Claude Code. Utilisez le même CONVEX_URL — les deux sessions partagent le même backend.

Ajoutez la même config MCP de l'Étape 2.

Étape 6 : L'Agent B (Bob) vérifie ses messages

Depuis la session Claude Code de l'Agent B (Bob) :

{
  "recipient": "bob"
}

Réponse :

[
  {
    "from": "alice",
    "content": "Hey Bob — I stored the project brief in global memory. Start on the database schema.",
    "receiptId": "k97..."
  }
]

Étape 7 : L'Agent B (Bob) rappelle la mémoire

{
  "query": "project brief MVP",
  "namespace": "global",
  "limit": 3
}

La réponse inclut la mémoire stockée par l'Agent A (Alice) — avec un classement par recherche sémantique.

Étape 8 : L'Agent B (Bob) marque le message comme lu

{
  "receiptIds": ["k97..."]
}

Terminé. Deux agents, mémoire partagée, messagerie réelle, accusés de réception. Pas de hacks fichiers. Pas de polling. Pas de bricolage.

Ce qui vient de se passer

  1. Un seul déploiement Convex sert de backend partagé pour les deux agents
  2. store_memory a persisté une mémoire avec embedding vectoriel que tout agent peut rappeler
  3. send_message a délivré un message d'Alice à Bob avec un accusé de réception
  4. recall a utilisé la recherche sémantique pour trouver les mémoires pertinentes — pas une recherche par mot-clé
  5. mark_as_read a confirmé que Bob a traité le message

Itérer sur des résultats de liste volumineux

Chaque outil list_* (dont list_tasks, list_memories, list_messages) retourne une enveloppe de curseur quand il y a davantage de résultats au-delà de la page actuelle :

{
  "items": [...],
  "nextCursor": "eyJjcmVhdGVkQmVmb3JlIjoxNzUxMDIwODAwMDAwfQ"
}

Passez nextCursor comme argument cursor sur l'appel suivant. Quand nextCursor est absent, il n'y a plus de pages.

Boucle de parcours TypeScript :

let cursor: string | undefined = undefined;
const allTasks: unknown[] = [];

do {
  const result = await client.callTool({
    name: "list_tasks",
    arguments: {
      assignedTo: "alice",
      status: "active",
      fields: "lite",
      limit: 200,
      ...(cursor !== undefined ? { cursor } : {}),
    },
  });
  const envelope = JSON.parse(result.content[0].text);
  allTasks.push(...envelope.items);
  cursor = envelope.nextCursor;
} while (cursor !== undefined);

La taille de page par défaut est de 20 lignes. Le plafond strict est de 200. Passez fields: "lite" pour des boucles de parcours efficaces.

Voir Pagination par curseur pour la documentation complète et la matrice de couverture des 18 outils.

Étapes suivantes

On this page