← Retour au blog
Analyse

Mise à jour de septembre de Google Antigravity Agent : comment passer fichiers, code et résultats de recherche en JSON ?

Publié le 24/09/2026 Dernière mise à jour le 24/09/2026 Environ 15 min Boîte à outils JSON

Comment lire cet article

La page officielle Antigravity Agent a été mise à jour le 23/09/2026. Ce texte est du 24/09/2026 : contre antigravity-preview-09-2026 et le journal de l'IDE 2.13, on démonte les arguments des trois outils fichiers, code et recherche en JSON recettable. Pas de Structured Output. Pourquoi la couche contrat reste un objet : Pourquoi l'IA aime JSON ; comment aligner l'id d'une fonction personnalisée : Tutoriel Live Function Calling.

L'utilisateur dit « écris ce résultat de recherche dans notes.json ». Quand le modèle tend la main, vous ne voyez pas une prose, mais un function_call dans steps : nom, objet d'arguments, id. Le bac à sable distant exécute lui-même les outils fichiers ; une fonction personnalisée exige un function_result. Oublier de recopier call_id, ou traiter StartLine comme une réécriture entière : l'effet de bord est déjà sur disque. Comme pour un Agent texte hébergé : la boucle peut aller vite, le contrat doit pouvoir refuser. Contraste : Pourquoi l'Agents API a encore plus besoin de JSON.

Ce que septembre a vraiment changé

Au 24/09/2026, la documentation Gemini API écrit la chaîne Agent antigravity-preview-09-2026. Sans agent_config, le modèle par défaut est gemini-3.8-flash. Chaque appel peut lever un bac à sable Linux, planifier, exécuter, observer, jusqu'à la fin de la tâche. Vers 135k tokens de contexte, compression automatique.

Les limites utiles pour cet article, à figer :

  • Outils par défaut : code_execution, google_search, url_context. Dès qu'il y a un environment, les outils fichiers s'ouvrent tout seuls.
  • Functions personnalisées / MCP distant : type: function et mcp_server. MCP n'accepte que Streamable HTTP ; name doit être en lettres minuscules et chiffres.
  • Structured outputs : non pris en charge. temperature / top_p / max_output_tokens renvoient 400.
  • Pas encore dispo : file_search, computer_use, google_maps. L'entrée n'accepte que texte et images.
  • Function Calling : uniquement avec état. Il faut continuer le tour avec previous_interaction_id.

Côté IDE, le même mois a des changements vérifiables. 2.13.0 (09/09/2026) ajoute un visualiseur virtualisé et des commentaires en ligne pour SQL / JSONL ; la zone de saisie accepte .json / .md / .csv. Plus tôt, 2.11.0 permet de découvrir la config depuis skills.json, agents.json, rules.json en sous-dossiers ; view_file peut porter une plage de pages. Les workflows seront retirés le 01/11/2026, migration vers des paquets SKILL.md. Frontière Skills : Pourquoi un Coding Agent a besoin de Skills.

Certains exemples SDK écrivent encore antigravity-preview-05-2026. Fiez-vous au corps de la doc et aux exemples REST, ne recopiez pas une chaîne périmée. Pour un bac à sable distant qui ne lit que output_text, changer le nom d'Agent suffit en général ; si vous parsez function_call, les champs ont déjà changé.

En une phrase. La mise à jour de septembre n'est pas « l'Agent parle mieux ». C'est la forme JSON des trois outils fichiers, code et recherche qui a changé.

La boucle d'outils reste function_call

L'officiel écrit la boucle des functions personnalisées tout droit : la session entre en requires_action ; dans steps, trouvez les function_call sans function_result correspondant ; exécutez en local ; renvoyez avec le même call_id. Les outils fichiers apparaissent aussi en function_call, mais environment les exécute tout seul. Ne traitez pas les deux mains tendues comme un même « à vous de lancer ».

Antigravity 09-2026 : trois outils JSON Les outils fichiers appliquent des rustines par plage de lignes ; l'exécution de code capture stdout ; les outils de recherche renvoient des correspondances. Les fonctions personnalisées exigent un function_result. Fichiers JSON par lignes Code objet stdout Recherche Query / matches
Les trois charges n'ont pas la même forme. Les fusionner en une chaîne « message brut » et l'étape suivante traitera la rustine comme un fichier entier.

Figer d'abord l'enveloppe de retour d'une function personnalisée :

{
  "agent": "antigravity-preview-09-2026",
  "previous_interaction_id": "INTERACTION_ID",
  "environment": "ENVIRONMENT_ID",
  "input": [
    {
      "type": "function_result",
      "name": "get_weather",
      "call_id": "call_weather_01",
      "result": {
        "temperature": 23,
        "unit": "celsius"
      }
    }
  ]
}

C'est la même forme que required_actions → tool_result d'un Agent texte ; l'enveloppe devient les steps d'Interactions. MCP reste un type de connexion dans tools : Agents API vs MCP.

Fichiers : plage de lignes, plus de réécriture entière

La page Hooks officielle écrit les paramètres des outils fichiers en PascalCase. Créer et éditer ne sont pas la même opération :

  • write_to_file : créer. TargetFile, CodeContent, Overwrite, Description.
  • replace_file_content : modifier un bloc de texte continu. TargetFile, StartLine, EndLine, TargetContent, ReplacementContent.
  • view_file : lire un fichier. AbsolutePath, StartLine / EndLine optionnels.
  • list_dir : lister un répertoire. DirectoryPath.

Un appel d'édition recettable en local :

{
  "type": "function_call",
  "name": "replace_file_content",
  "id": "call_edit_01",
  "arguments": {
    "TargetFile": "notes.json",
    "StartLine": 4,
    "EndLine": 6,
    "TargetContent": "  \"status\": \"draft\"",
    "ReplacementContent": "  \"status\": \"reviewed\"",
    "Description": "Mark the note as reviewed"
  }
}

Le contrat d'entrée fige le chemin et les numéros de ligne. StartLine manquant, ou le fichier entier fourré dans ReplacementContent : refuser :

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "additionalProperties": false,
  "required": ["TargetFile", "StartLine", "EndLine", "TargetContent", "ReplacementContent"],
  "properties": {
    "TargetFile": { "type": "string", "minLength": 1 },
    "StartLine": { "type": "integer", "minimum": 1 },
    "EndLine": { "type": "integer", "minimum": 1 },
    "TargetContent": { "type": "string" },
    "ReplacementContent": { "type": "string" },
    "Description": { "type": "string" }
  }
}

Formes qui doivent échouer : une ancienne clé snake_case comme file_path ; seulement content, sans numéro de ligne ; StartLine écrit en chaîne "4". Si l'exécuteur comprend encore replace_file_content comme « écraser le fichier entier », une rustine de huit lignes efface tout notes.json. Comment un Coding Agent pose un rustine précis : Comment lire et modifier une config JSON.

Code : arguments et résultat de code_execution

code_execution lance Bash / Python / Node, capture stdout / stderr. Le bac à sable distant l'exécute par défaut ; si vous interceptez avec des Hooks, les arguments restent un objet. Ne mélangez pas chaîne de commande et rustine de fichier.

{
  "type": "function_call",
  "name": "code_execution",
  "id": "call_code_01",
  "arguments": {
    "language": "python",
    "code": "print(open('notes.json').read())"
  },
  "function_result": {
    "call_id": "call_code_01",
    "name": "code_execution",
    "result": {
      "stdout": "{\n  \"status\": \"reviewed\"\n}\n",
      "stderr": "",
      "exit_code": 0
    }
  }
}

L'objet résultat doit parser. Traiter tout le terminal brut comme contrat final, et l'étape suivante « réécrire en JSON » cassera les échappements. Il faut d'abord formater, puis recetter, avec l'outil de formatage de l'espace de travail. Un shell trop large et un MCP malveillant sont le même risque : limiter les permissions d'outils avec un Schema.

Septembre a retiré « chercher dans le dépôt » du shell improvisé pour en faire des outils internes. Paramètres de la page Hooks officielle :

  • grep_search : SearchPath, Query, optionnels IsRegex, CaseInsensitive, Includes.
  • find_by_name : SearchDirectory, Pattern, optionnels MaxDepth, Extensions.
  • Web : google_search / url_context restent des outils par défaut. Dans Hooks, ça correspond à search_web, read_url_content.
{
  "type": "function_call",
  "name": "grep_search",
  "id": "call_grep_01",
  "arguments": {
    "SearchPath": "src",
    "Query": "status",
    "IsRegex": false,
    "Includes": ["*.json"]
  },
  "result": {
    "matches": [
      {
        "path": "src/notes.json",
        "line": 4,
        "text": "  \"status\": \"draft\""
      }
    ]
  }
}

Le résultat de recherche est aussi un objet : chemin, numéro de ligne, texte. Si l'Agent doit ensuite modifier cette ligne, il doit émettre replace_file_content, pas relancer un shell à permissions infinies. L'IDE 2.13 accroche JSONL au visualiseur ; ça ne change pas ce contrat — le visualiseur est pour l'humain, l'exécuteur ne mange que des champs.

Pas de Structured Output, pourquoi le Schema compte plus

La fiche modèle et Limitations disent qu'Antigravity Agent ne prend pas en charge Structured outputs. La phrase finale « c'est écrit dans notes.json » n'est pas un objet que vous pouvez figer avec responseSchema. Un développeur en conclut trop vite « pas de contrat JSON ». L'erreur est la couche :

  • Structured Output contraint la réponse finale.
  • Function Calling / outils fichiers contraignent chaque main tendue.

Septembre a rendu la seconde couche plus cassante. Les champs passent de snake_case à PascalCase ; l'édition passe du fichier entier à une plage de lignes. Si l'exécuteur local lit encore file_path, il récupère silencieusement une valeur vide, au lieu d'échouer tout de suite. Sans Schema de réponse pour rattraper, la validation des arguments avant exécution est la seule porte dure. Définition : Qu'est-ce que la Structured Output.

Une function personnalisée suit encore le Schema que vous déclarez. L'exemple météo officiel utilise location, pas Location. Les outils fichiers internes utilisent TargetFile. Ne fusionnez pas les deux jeux de clés en un « args générique ».

Recetter dans la Boîte à outils JSON

  1. Collez le replace_file_content et le grep_search ci-dessus dans le formatage JSON, confirmez que ça parse, et que les clés sont en PascalCase.
  2. Avec JSON → Schema, générez le contrat cœur, puis ajoutez required, minimum et additionalProperties.
  3. Les mêmes champs via Function Calling ; pour réutiliser sur d'autres Hosts, enveloppez encore dans MCP Tool.
  4. Préparez les objets qui doivent échouer (file_path, StartLine: "4", un content fichier entier sans numéro de ligne), confirmez le refus avec la validation Schema. Pour aligner une forme de réponse, Structured Output — souvenez-vous : Antigravity Agent n'avale pas ce contrat de réponse.

Tout se traite dans le navigateur, rien n'est envoyé. D'abord un objet capable de refuser les anciennes clés et une rustine sans numéro de ligne, ensuite seulement changer la chaîne Agent en antigravity-preview-09-2026.

FAQ

Antigravity Agent prend-il en charge Structured Output ?

La doc dit non. Ce que vous pouvez clouer : le Schema des paramètres de fonction, et les arguments des outils fichiers.

Faut-il exécuter localement le write_to_file du bac à sable distant ?

Non. L'environnement l'exécute tout seul. Ce que vous lancez : les functions personnalisées ; au retour, recopiez name et call_id.

Pourquoi les champs des outils fichiers sont-ils en PascalCase ?

La page Hooks officielle les liste ainsi. Une function personnalisée suit encore votre Schema. Ne mélangez pas les deux jeux de clés.

Que faire si on utilise encore antigravity-preview-05-2026 ?

Le corps de la doc est déjà passé à 09-2026. Si vous ne lisez que le texte final, changez la chaîne ; si vous parsez function_call, changez les champs et les rustines par plage de lignes.

Function Calling peut-il rejouer l'historique en mode sans état ?

Non. Il faut continuer le tour avec previous_interaction_id.

En résumé

La mise à jour de septembre d'Antigravity fixe l'Agent par défaut à antigravity-preview-09-2026, modèle Gemini 3.8 Flash. Les fichiers deviennent du JSON par plage de lignes, la recherche se plie en grep_search / find_by_name, l'exécution de code continue de renvoyer un objet stdout. Pas de Structured Output, et l'exécution des functions personnalisées n'a pas été reprise. Ce que le développeur doit tenir : le Schema de function_call.arguments avant l'exécuteur — PascalCase, numéros de ligne, et function_result.call_id. La suite n'est pas d'abord d'ajouter plus d'outils de dépôt. C'est d'abord de refuser file_path et un écrasement fichier entier sans numéro de ligne.