L'Assistant : votre propre clé
English · Type : procédure + référence · Public : auteur · Contexte : Studio local, Studio de démo · Statut : prête · S'applique depuis : 4.2.1
Le Studio local · contrat : stable · vérifié par la CI (matrice de support de la 4.4.0, 2026-10-23) : Chromium de bout en bout (les vérifications du Studio) ; Windows : la suite unitaire seulement · vérifications automatiques : jobs
e2e,windows; plan de CIe2e,windows; 2 fichiers de tests · passes humaines :studio-hero-matrixpas faite (#238) · limites connues : aucune listée sur cette page
L'Assistant est un tiroir de conversation dans le Studio où vous demandez à un modèle de votre choix (OpenAI, Anthropic, Ollama, Mistral, ou tout point d'accès compatible OpenAI) d'aider à compléter le jeu. Il a les mêmes outils que le serveur MCP et sait ce que vous avez sélectionné. Vous apportez la clé ; sans clé, votre demande devient une tâche pour un agent IA branché en MCP.
Ce que vous obtenez
Un modèle qui lit le lieu ou la case où vous êtes, écrit des lignes de Regarder, des sujets ou des indices dans les fichiers du jeu avec les outils du Studio, et lance validate et solve ; le Studio recharge ce qu'il a écrit.
Contexte et versions
Le Studio local (npm run studio, dépôt du moteur ou projet créé), où le serveur du Studio relaie l'appel, et le
Studio de démo, où la page appelle elle-même le fournisseur. Vrai depuis la 4.2.1.
Prérequis
- Le Studio lancé (présentation).
- Une clé d'API d'un fournisseur (avec un plafond de dépense), ou Ollama sur votre machine avec un modèle qui gère les outils, ou un agent MCP pour la voie sans clé (MCP local : configurer chaque client).
Où lancer les commandes
Dans le navigateur : le bouton Assistant de la barre du haut, ou la touche a quand aucun champ n'a le focus.
Pour Ollama, les commandes ollama se lancent sur votre machine.
Étapes
Choisissez un fournisseur (icône d'engrenage). Préréglages :
Préréglage URL de base Modèles proposés Clé OpenAI https://api.openai.comgpt-5,gpt-5-mini,gpt-4.1oui Anthropic (par défaut) https://api.anthropic.comclaude-sonnet-5(par défaut),claude-opus-5,claude-haiku-4-5oui Ollama (local) http://localhost:11434llama3.1,qwen3,mistral-smallnon Mistral https://api.mistral.aimistral-large-latest,mistral-small-latestoui Custom toute URL de base compatible OpenAI tapé par vous selon le point d'accès Pour Ollama, téléchargez d'abord le modèle (
ollama pull llama3.1) et choisissez-en un qui gère les outils.
- Collez votre clé. Elle n'est gardée que dans cet onglet du navigateur (sessionStorage) et envoyée avec chaque requête ; les autres réglages (préréglage, URL, modèle) sont mémorisés dans le localStorage, jamais la clé. Forget the key la retire. Utilisez une clé à plafond de dépense, et oubliez-la sur un ordinateur partagé.
- Demandez. La zone de saisie montre sur quoi porte la demande :
house › pantry (prop)(le lieu et l'entité sélectionnés dans Rooms),storyboard › <tableau> › <case> (panel)(la case sélectionnée, telle qu'éditée, même non enregistrée), ou le jeu entier. Les actions rapides s'en servent : Write 3 look lines, Suggest a puzzle for this room, Write the talk topics for this character, Find what's missing (validate + solve), Draft the hint chain, Generate the art prompts for this sheet.
- Lisez la réponse. Les réponses sont en markdown léger (paragraphes, listes, code). Chaque appel d'outil est une puce qu'on déplie pour voir ses arguments et son résultat. Stop interrompt la requête (le serveur interrompt aussi l'appel au fournisseur) ; New chat repart de zéro. Après un tour qui a écrit quelque chose, le Studio recharge le lieu, le storyboard (un bandeau s'il a des modifications non enregistrées) ou les notes, et relance Check.
Comment ça marche
- Un seul registre d'outils.
tools/studio/tools.tsdéfinit chaque outil (nom, description, schéma, handler sur un backend) ; le serveur MCP et l'Assistant s'en servent tous deux, donc l'Assistant a les outils du serveur MCP :list_rooms,get_room,set_text,set_value,add_entity,set_layout,get_storyboard,set_storyboard,get_notes,add_note,validate,solve,screenshot,read_doc,run_tests,asset_promptset les autres (Outils MCP). - Le relais (Studio local). La page envoie la conversation à
POST /__studio/api/assistant/chatavec{ provider: { kind, baseUrl, model, apiKey? }, messages: [{ role, content }], context }(un corps de 4 Mo au plus). Le relais (tools/studio/assistant.ts, boucle danstools/studio/assistant-loop.ts) construit un prompt système à partir d'AGENTS.md, du jeu (lieux, personnages, objets, checkpoints) et de la sélection courante avec ses textes. Il appelle le modèle, exécute les appels d'outils sur les fichiers du jeu, et renvoie des événements SSE :{ type: 'text', delta },{ type: 'tool_call', id, name, args },{ type: 'tool_result', id, name, result, isError? }(résultat coupé à 4 Ko dans l'événement ; le modèle en reçoit jusqu'à 32 Ko),{ type: 'error', message }, puis{ type: 'done', usage?, wrote?, stopped? }. Le modèle a pour consigne de demander avant un changement destructif et de garder la voix du jeu. Les tours précédents sont renvoyés sous forme de texte seulement. - Deux formats, pas de SDK.
POST <base>/v1/chat/completionscompatible OpenAI avectoolsetstream: true(OpenAI, Mistral, Ollama, la plupart des autres), etPOST <base>/v1/messagesd'Anthropic avectools,x-api-keyetanthropic-version: 2023-06-01. Les réponses en flux sont lues comme des événements SSE ; un fournisseur qui répond en JSON simple marche aussi. Une URL de base peut finir ou non par/v1.
Limites
| Limite | Valeur | Quand elle est atteinte |
|---|---|---|
| Tours d'outils par requête | 12 | Stopped after 12 tool rounds: ask again to continue. |
| Un appel au fournisseur | 60 s | <url> did not answer within 60 s |
| La réponse d'un fournisseur | 8 Mo | the provider's answer exceeds 8 MB |
| Redirections | aucune suivie | <url> answered with a redirect (…): refused, a provider must answer at its own address |
Garantie ·
provider-no-redirect· référencée · exécutée suraff6caab7514· portée vérifiée par son auteur (IA), pas relue Un appel au fournisseur qui reçoit une redirection est refusé : une redirection pourrait envoyer la requête, et la clé, vers un autre hôte.
Garantie ·
provider-answer-cap· référencée · exécutée suraff6caab7514· portée vérifiée par son auteur (IA), pas relue La réponse d'un fournisseur est lue jusqu'à un plafond, et refusée au-delà.
Fournisseurs personnalisés et WEB_SCUMM_ALLOW_CUSTOM_PROVIDER
Le relais accepte les adresses des préréglages (OpenAI, Anthropic, Mistral) et Ollama sur cette machine (localhost,
127.0.0.1, [::1]). Toute autre URL de base est refusée, sauf si le Studio a été lancé avec l'autorisation :
# dans le dépôt du moteur ou le projet créé
WEB_SCUMM_ALLOW_CUSTOM_PROVIDER=1 npm run studio
Même alors, un fournisseur personnalisé doit être en HTTPS et ne peut pas viser un hôte local ou du réseau privé
(adresses de bouclage, non spécifiées, privées et link-local dans les deux familles d'adresses, .local,
.internal), et une URL de fournisseur ne peut pas porter d'identifiants. Voir
Sécurité en local et en réseau local et
WEB_SCUMM_ALLOW_CUSTOM_PROVIDER.
Garantie ·
custom-provider-opt-in· référencée · exécutée suraff6caab7514· portée vérifiée par son auteur (IA), pas relue Les préréglages et Ollama sur cette machine sont permis ; toute autre adresse demande l'autorisation. Même avec elle, une adresse link-local en HTTP simple (celle des métadonnées du cloud) reste bloquée.
Sûreté de la clé
La clé reste dans cet onglet du navigateur (sessionStorage) et part avec chaque requête. Sur le Studio local, le
relais la garde en mémoire le temps de cette requête seulement : jamais écrite sur disque, jamais journalisée, et
retirée des messages d'erreur (remplacée par ***). Dans le Studio de démo, elle va de la page directement au
fournisseur.
Sans clé : des tâches pour un agent MCP
Sans clé (et hors Ollama), la zone de saisie propose Send as a task to the AI agent. La page envoie
POST /__studio/api/assistant/task avec { about, text }, qui ajoute à notes.json une note avec author: "you" et
task: true, à propos de la sélection courante. Un agent branché en MCP (Claude Code, Cursor, Codex, Gemini CLI…) la
lit avec get_notes et fait le travail ; le Studio montre ses modifications en direct, et l'onglet Notes étiquette ces
notes « task » (Notes).
Dans le Studio de démo
Pas de relais sur un hébergement statique : la page exécute elle-même la même boucle, avec les outils sur le backend
du navigateur (modifications gardées en patchs de démo, Mode démo). screenshot, run_tests
et asset_prompts ne sont pas disponibles, set_value répond qu'il lui faut le serveur de dev, et read_doc n'a que
CONTENT_GUIDE. Le navigateur appelle le fournisseur directement : Anthropic reçoit son en-tête
anthropic-dangerous-direct-browser-access ; OpenAI refuse les appels depuis un navigateur d'origine inconnue pour
certaines clés, et l'erreur le dit. Utilisez Ollama sur votre machine en autorisant l'origine de la page, ou le Studio
local, dont le serveur relaie l'appel :
# sur votre machine, pour la page du Studio de démo
OLLAMA_ORIGINS=<l'origine de la page> ollama serve
Les tâches vont dans les notes de la démo, et dans son patch.
La documentation dans la démo
S'applique depuis la 4.5.0
Une démo construite depuis la 4.5.0 porte aussi les pages prêtes du wiki dans son instantané : l'Assistant de la démo
peut s'en servir avec search_docs, list_docs et read_doc par id.
Résultat attendu, et comment le vérifier
La réponse arrive au fil de l'eau ; une puce d'outil montre validate qui renvoie { ok: true … } ; après une
écriture, le lieu ou le storyboard montre le changement et git diff le contient.
Erreurs fréquentes
| Symptôme | Cause | Que faire |
|---|---|---|
custom provider URLs are disabled (set WEB_SCUMM_ALLOW_CUSTOM_PROVIDER=1 to opt in) | Une URL de base qui n'est pas un préréglage | Relancer le Studio avec l'autorisation, ou prendre un préréglage |
custom providers must use HTTPS and cannot target local or private network hosts | http://, ou une adresse privée | Un point d'accès public en HTTPS ; pour un modèle local, le préréglage Ollama |
`provider.kind` must be openai, anthropic or ollama | Une requête faite à la main | Passer par la fenêtre de réglages |
The browser could not reach <url> … (CORS) | Studio de démo, fournisseur qui refuse les appels du navigateur | Ollama avec OLLAMA_ORIGINS, ou le Studio local |
Stopped after 12 tool rounds | La tâche demande plus de tours | Redemander pour continuer |
Plus : Dépannage du Studio.
Fichiers ou données modifiés
Ce qu'écrivent les outils (fichiers des lieux, layouts, storyboard.json, notes.json), comme le ferait le Studio.
La clé n'est jamais écrite ; les réglages sans la clé sont dans le localStorage du navigateur sous
web-scumm.studio-assistant.
Revenir en arrière
Les écritures du modèle passent par les opérations du Studio : annulez-les depuis l'en-tête pendant la session, ou avec git.
Références
src/studio/assistant.ts(le tiroir),tools/studio/assistant.ts(le relais),tools/studio/assistant-loop.ts(la boucle, partagée avec la démo).- Travailler avec une IA, Sécurité en local et en réseau local.