Serveur Claude Agent : Créez un wrapper WebSocket pour Claude dans Bun E2B January 28, 2026 Catégorie: Projets Open Source Pratiques Étiquettes: Claude OpenSource WebSocket E2B Bun Serveur Claude Agent : Créez un wrapper WebSocket pour Claude dans Bun E2B\n\nSi vous avez cherché une solution propre, éprouvée, pour exposer le SDK Claude Agent via une interface WebSocket, le dépôt claude‑agent‑server est exactement ce dont vous avez besoin. Ce dépôt combine le meilleur des trois mondes :\n\n1. Le SDK Claude Agent – une API puissante pour interagir avec les modèles Claude.\n2. Bun – un runtime JavaScript qui compile en code machine pour des performances fulgurantes.\n3. Les sandboxes E2B – un environnement sécurisé, isolé qui se lance sur demande.\n\nDans cet article, nous passerons en revue l'installation du code, la construction d'un sandbox E2B, la connexion d'un client et l'ajustement des paramètres du serveur. À la fin, vous disposerez d'un assistant de style ChatGPT entièrement fonctionnel que vous pourrez exécuter où vous le souhaitez.\n\n---\n\n## 1. Que fait le dépôt ?\n\nLe dépôt claude‑agent‑server est un monorepo contenant deux sous‑packages principaux :\n\n| Répertoire | Objectif |\n|---|---|\n| packages/server/ | Un serveur Bun minimal qui dirige le trafic WebSocket vers le SDK Claude Agent. Il expose deux points de terminaison HTTP : /config pour définir les options de requête, et /ws pour la communication en temps réel. |\n| packages/client/ | Une bibliothèque TypeScript réutilisable (@dzhng/claude‑agent) qui abstrait la poignée de main WebSocket, la création du sandbox et la sérialisation des messages. |\n\nFonctionnalités clés :\n\n- Déploiement E2B – Le script build:e2b empile le dépôt dans un modèle de sandbox réutilisable.\n- WebSocket un à un – Seul un client peut être connecté à la fois, simplifiant la concurrence.\n- Outils personnalisés – Sélectionnez les outils autorisés, les invites système et les modèles via /config avant d'établir la connexion.\n- Client de test local – Exécutez bun run test:local pour lancer l'exemple packagé contre localhost:3000.\n- Extensible – Modifiez packages/server/index.ts ou message‑handler.ts pour changer le comportement de l'agent ou ajouter de nouvelles commandes.\n\n---\n\n## 2. Prérequis\n\n| Élément | Version minimale |\n|---|---|\n| Git | 2.30+ |\n| Bun | 1.3+ |\n| Node.js (optionnel, pour utilisation npm) | 18+ |\n| Compte E2B | La version gratuite suffira |\n| Clé API Anthropic | Clé valide pour le modèle Claude que vous utiliserez |\n\nSi vous débutez avec Bun, installez-le avec :\n\nbash\ncurl fnm.vercel.app | bash -s -- -b \"$HOME/.bun\"\nsource \"$HOME/.bun/completion.bash\"\n\n\n---\n\n## 3. Cloner le dépôt et installer les dépendances\n\nbash\ngit clone https://github.com/dzhng/claude-agent-server.git\ncd claude-agent-server\nbun install\n\n\nLe dépôt inclut un fichier .env.example qui définit les clés requises :\n\nbash\ncp .env.example .env\n\n\nÉditez le fichier pour indiquer vos clés API :\n\nenv\nANTHROPIC_API_KEY=sk-ant-·····\nE2B_API_KEY=e2b_your-key-here\n\n\n> Astuce : Gardez vos clés secrètes ; ne jamais commettre le fichier .env réel.\n\n---\n\n## 4. Construction d'un modèle de sandbox E2B\n\nE2B fournit des sandboxes isolées sur demande. Le serveur est empaqueté dans un modèle prêt à être déployé nommé claude‑agent‑server.\n\nbash\nbun run build:e2b\n\n\nQue se passe-t-il en coulisses ?\n\n1. Une image de base Bun‑1.3 est créée.\n2. Le dépôt est cloné dans le sandbox.\n3. bun install installe toutes les dépendances d'exécution.\n4. Le serveur démarre automatiquement sur le port 3000.\n5. Le modèle résultant est publié dans votre espace de travail E2B.\n\nUne fois la construction terminée, vous verrez une liste de templates E2B avec une entrée nommée claude‑agent‑server. Elle est désormais prête à être lancée chaque fois que vous avez besoin d'un sandbox neuf.\n\n---\n\n## 5. Utilisation de la bibliothèque client\n\nLe paquet @dzhng/claude‑agent est un wrapper léger qui gère la création du sandbox, la connexion WebSocket et la gestion des messages. Installez-le dans votre projet :\n\nbash\n# Dans votre propre répertoire de projet\nnpm i @dzhng/claude-agent\n# ou, avec Bun\nbun add @dzhng/claude-agent\n\n\n### 5.1 Exemple rapide\n\nts\nimport { ClaudeAgentClient } from '@dzhng/claude-agent';\n\nconst client = new ClaudeAgentClient({\n e2bApiKey: process.env.E2B_API_KEY!,\n anthropicApiKey: process.env.ANTHROPIC_API_KEY!,\n template: 'claude-agent-server', // Utiliser le nom du modèle E2B\n debug: true,\n});\n\nawait client.start();\n\nclient.onMessage((msg) => {\n if (msg.type === 'sdk_message') {\n console.log('Claude:', msg.data);\n }\n});\n\nawait client.send({\n type: 'user_message',\n data: {\n type: 'user',\n session_id: 'my-session',\n message: {\n role: 'user',\n content: 'Hello, Claude!',\n },\n },\n});\n\n// Quand vous avez terminé :\nawait client.stop();\n\n\n> Cycle de vie du sandbox : Le client crée un nouveau sandbox, le maintient en fonctionnement jusqu'à ce que vous appeliez stop(), puis le ferme automatiquement, libérant les ressources.\n\n### 5.2 Connexion à un serveur local\n\nLors du développement, vous pouvez tester contre votre serveur local. Le même client prend en charge une connectionUrl :\n\nts\nconst client = new ClaudeAgentClient({\n connectionUrl: 'http://localhost:3000',\n anthropicApiKey: process.env.ANTHROPIC_API_KEY!,\n});\n\n\nVous pouvez maintenant lancer le serveur local Bun avec bun run start:server et voir la sortie en temps réel dans la console.\n\n---\n\n## 6. Personnalisation du serveur\n\nLe serveur est volontairement léger afin de pouvoir l'étendre facilement.\n\n### 6.1 Éditer le cœur\n\nPoint d'entrée principal : packages/server/index.ts. Il configure les routes HTTP et WebSocket, gère la configuration et transmet les messages entrants au SDK Claude.\n\n### 6.2 Modifier la gestion des messages\n\npackages/server/message-handler.ts contient la logique pour traduire les réponses du SDK en messages JSON. Ajoutez ou modifiez des gestionnaires selon vos besoins.\n\n### 6.3 Ajouter de nouveaux outils\n\nLe tableau allowedTools dans l'appel /config limite les outils que l'agent peut utiliser (par ex. read_file, write_file). Ajoutez des définitions d'outils personnalisés et exposez-les via le SDK.\n\n---\n\n## 7. Test en local\n\nLancez une instance locale et testez avec le client inclus :\n\nbash\n# Dans la racine du dépôt\nbun run start:server # Démarrer sur http://localhost:3000\n\n\nOuvrez un autre terminal et lancez le client de test :\n\nbash\nbun run test:local\n\n\nCe client se connecte à localhost:3000, envoie quelques messages de test et affiche les réponses du SDK. C'est un excellent moyen de vérifier les modifications avant de reconstruire l'image E2B.\n\n---\n\n## 8. Construction d'un nom de template E2B personnalisée\n\nLe nom par défaut du template est claude-agent-server, mais vous pouvez le changer via le constructeur du client ou en modifiant le script de build :\n\nts\nconst client = new ClaudeAgentClient({\n template: 'my-custom-claude-template',\n ...\n});\n\n\nou modifiez l'instanciation Template() dans packages/e2b-build/build.prod.ts.\n\n---\n\n## 9. Sécurité et nettoyage\n\n* Le sandbox ne reste en vie que tant que votre connexion client est ouverte. Lorsqu'on appelle stop(), E2B tue automatiquement le sandbox.\n* Les clés API sont transmises soit via l'environnement, soit via le point de terminaison /config. Le SDK respecte la clé que vous fournissez – il ne fuite jamais votre clé au client.\n* Le serveur n'autorise qu'une seule connexion WebSocket à la fois, évitant un sur‑chargement accidentel.\n\n---\n\n## 10. Conclusion et prochaines étapes\n\nVous disposez désormais d'un wrapper WebSocket d'agent Claude réutilisable, déployable dans un environnement sandboxé, isolé et facilement intégré dans n'importe quelle application TypeScript ou JavaScript.\n\n* Déployer un bot – Utilisez la bibliothèque client dans un bot Telegram, Discord ou Slack.\n* Créer un agent personnalisé – Étendez le serveur pour ajouter des outils spécifiques à un domaine.\n* Publier un kit de démarrage – Partagez votre template sandbox avec d'autres.\n\nPour plus de détails, reportez-vous toujours au README pleinement documenté et aux commentaires de code en ligne dans le dépôt. Bon codage ! Original Article: Voir l’original Partager cet article