[
  {
    "name": "ar_inspect_surface",
    "description": "ngram AR only — inspect the current embodied surface contract, live context, and available spatial API tools. Use this instead of scanning workspace files when asked what the spatial body can do.",
    "parameters": {
      "type": "object",
      "properties": {},
      "required": []
    }
  },
  {
    "name": "ar_move_to",
    "description": "ngram AR only — queue movement in space (walk toward user, step aside, etc.). Call from tool API when the user asks you to move or reposition. Ignored outside AR.",
    "parameters": {
      "type": "object",
      "properties": {
        "target": {
          "type": "string",
          "enum": [
            "away",
            "forward",
            "left",
            "random",
            "right",
            "user"
          ],
          "description": "Where to move in the scene."
        },
        "speed": {
          "type": "string",
          "enum": [
            "fast",
            "walk"
          ],
          "description": "Movement speed."
        }
      },
      "required": [
        "target"
      ]
    }
  },
  {
    "name": "ar_gesture",
    "description": "ngram AR only — queue a physical gesture (wave, nod, point, dance, …).",
    "parameters": {
      "type": "object",
      "properties": {
        "gesture": {
          "type": "string",
          "enum": [
            "breakdancing",
            "celebrate",
            "cheering",
            "clapping",
            "coding",
            "dance",
            "drunkWalk",
            "enteringCode",
            "explain",
            "greet",
            "handRaising",
            "hipHop",
            "macarena",
            "no",
            "nod",
            "point",
            "shrug",
            "terrified",
            "texting",
            "thinking",
            "twerking",
            "twistDance",
            "wave"
          ],
          "description": "Physical gesture to perform."
        }
      },
      "required": [
        "gesture"
      ]
    }
  },
  {
    "name": "ar_emote",
    "description": "ngram AR only — queue a bodily emotional expression.",
    "parameters": {
      "type": "object",
      "properties": {
        "emotion": {
          "type": "string",
          "enum": [
            "attentive",
            "calm",
            "concerned",
            "curious",
            "excited",
            "happy",
            "thoughtful"
          ],
          "description": "Emotion to express bodily."
        },
        "intensity": {
          "type": "number",
          "description": "0–1 intensity."
        }
      },
      "required": [
        "emotion"
      ]
    }
  },
  {
    "name": "ar_look_at",
    "description": "ngram AR only — queue gaze toward the user or away.",
    "parameters": {
      "type": "object",
      "properties": {
        "target": {
          "type": "string",
          "enum": [
            "away",
            "user"
          ],
          "description": "Gaze target."
        }
      },
      "required": [
        "target"
      ]
    }
  },
  {
    "name": "ar_go_idle",
    "description": "ngram AR only — return to a relaxed idle stance.",
    "parameters": {
      "type": "object",
      "properties": {},
      "required": []
    }
  },
  {
    "name": "ar_speak",
    "description": "ngram AR only — speak mid-turn (visible + TTS) before your final reply. Use for reactions while reasoning; final answer can still go in normal reply text.",
    "parameters": {
      "type": "object",
      "properties": {
        "text": {
          "type": "string",
          "description": "Words to speak in the AR surface (mid-turn)."
        }
      },
      "required": [
        "text"
      ]
    }
  },
  {
    "name": "ar_show_panel",
    "description": "ngram AR only — show a readable spatial panel for substantial information.",
    "parameters": {
      "type": "object",
      "properties": {
        "panel_id": {
          "type": "string",
          "description": "Stable panel identifier."
        },
        "content": {
          "type": "string",
          "description": "Panel body."
        },
        "title": {
          "type": "string",
          "description": "Optional title."
        },
        "panel_type": {
          "type": "string",
          "enum": [
            "card",
            "chart",
            "code",
            "html",
            "image",
            "markdown"
          ]
        }
      },
      "required": [
        "panel_id",
        "content"
      ]
    }
  },
  {
    "name": "ar_hide_panel",
    "description": "ngram AR only — close a spatial panel by id.",
    "parameters": {
      "type": "object",
      "properties": {
        "panel_id": {
          "type": "string"
        }
      },
      "required": [
        "panel_id"
      ]
    }
  },
  {
    "name": "ar_terminal",
    "description": "ngram AR only — write a concise status or result to the spatial terminal.",
    "parameters": {
      "type": "object",
      "properties": {
        "output": {
          "type": "string",
          "description": "Short visible terminal text."
        },
        "tool": {
          "type": "string"
        },
        "error": {
          "type": "boolean"
        },
        "clear": {
          "type": "boolean"
        }
      },
      "required": [
        "output"
      ]
    }
  },
  {
    "name": "ar_open_browser",
    "description": "ngram AR only — open an HTTP(S) page on the spatial browser surface.",
    "parameters": {
      "type": "object",
      "properties": {
        "url": {
          "type": "string",
          "description": "HTTP(S) webpage to open. Do not use this for YouTube playback; use ar_play_youtube with a specific video instead."
        },
        "title": {
          "type": "string"
        }
      },
      "required": [
        "url"
      ]
    }
  },
  {
    "name": "ar_play_youtube",
    "description": "ngram AR only - play a specific YouTube video in the dedicated media player. On desktop this opens the desktop player; in immersive AR the surface uses its headset-safe playback flow. Search for a specific video first when needed.",
    "parameters": {
      "type": "object",
      "properties": {
        "video": {
          "type": "string",
          "description": "A specific YouTube video ID or watch URL."
        },
        "title": {
          "type": "string",
          "description": "Song or video title."
        },
        "volume": {
          "type": "number",
          "minimum": 0,
          "maximum": 100
        },
        "start_at": {
          "type": "number",
          "minimum": 0
        }
      },
      "required": [
        "video"
      ]
    }
  },
  {
    "name": "ar_spawn_object",
    "description": "ngram AR only — spawn a real 3D geometric primitive. Use for requests naming a shape such as cube, sphere, cylinder, cone, torus, or plane. Physics defaults on. Do not use ar_spawn_text as a substitute for geometry.",
    "parameters": {
      "type": "object",
      "properties": {
        "object_id": {
          "type": "string",
          "description": "Stable unique id for later removal."
        },
        "shape": {
          "type": "string",
          "enum": [
            "cone",
            "cube",
            "cylinder",
            "plane",
            "sphere",
            "torus"
          ],
          "description": "The actual 3D primitive to create. Use sphere for a geometric ball."
        },
        "position": {
          "type": "string",
          "enum": [
            "above",
            "front",
            "here",
            "left",
            "right"
          ]
        },
        "color": {
          "type": "string"
        },
        "size": {
          "type": "number",
          "minimum": 0.03,
          "maximum": 2.0
        },
        "label": {
          "type": "string",
          "description": "Optional caption; not a substitute for the shape."
        },
        "physics": {
          "type": "boolean",
          "description": "Enable gravity and collision. Defaults to true."
        }
      },
      "required": [
        "object_id",
        "shape"
      ]
    }
  },
  {
    "name": "ar_spawn_toy",
    "description": "ngram AR only — spawn an interactive physics toy. Use this for balls, bouncy balls, beach balls, dice, and marbles; use ar_spawn_object for generic geometry.",
    "parameters": {
      "type": "object",
      "properties": {
        "object_id": {
          "type": "string",
          "description": "Stable unique id for later removal."
        },
        "toy_type": {
          "type": "string",
          "enum": [
            "ball",
            "beach_ball",
            "bouncy_ball",
            "dice",
            "marble"
          ],
          "description": "Ready-made physics toy. For requests to spawn a ball, use ball or bouncy_ball."
        },
        "position": {
          "type": "string",
          "enum": [
            "above",
            "front",
            "here",
            "left",
            "right"
          ]
        },
        "color": {
          "type": "string"
        },
        "impulse": {
          "type": "object",
          "description": "Optional initial velocity for tossing the toy.",
          "properties": {
            "x": {
              "type": "number"
            },
            "y": {
              "type": "number"
            },
            "z": {
              "type": "number"
            }
          },
          "required": [
            "x",
            "y",
            "z"
          ],
          "additionalProperties": false
        }
      },
      "required": [
        "object_id",
        "toy_type"
      ]
    }
  },
  {
    "name": "ar_spawn_text",
    "description": "ngram AR only — place visible lettering in the scene. Use only when the user asks for text or a label; never use it to represent a requested physical object or shape.",
    "parameters": {
      "type": "object",
      "properties": {
        "object_id": {
          "type": "string"
        },
        "text": {
          "type": "string"
        },
        "position": {
          "type": "string",
          "enum": [
            "above",
            "front",
            "here",
            "left",
            "right"
          ]
        },
        "color": {
          "type": "string"
        },
        "size": {
          "type": "number",
          "minimum": 0.2,
          "maximum": 4.0
        }
      },
      "required": [
        "object_id",
        "text"
      ]
    }
  },
  {
    "name": "ar_remove_object",
    "description": "ngram AR only — remove one previously spawned object, toy, text, image, or model by id.",
    "parameters": {
      "type": "object",
      "properties": {
        "object_id": {
          "type": "string"
        }
      },
      "required": [
        "object_id"
      ]
    }
  },
  {
    "name": "ar_clear_objects",
    "description": "ngram AR only — clear all spawned scene objects when the user asks to reset or clean the space.",
    "parameters": {
      "type": "object",
      "properties": {},
      "required": []
    }
  },
  {
    "name": "ar_draw_annotation",
    "description": "ngram AR only — place a labeled callout at scene coordinates.",
    "parameters": {
      "type": "object",
      "properties": {
        "drawing_id": {
          "type": "string"
        },
        "text": {
          "type": "string"
        },
        "x": {
          "type": "number"
        },
        "y": {
          "type": "number"
        },
        "z": {
          "type": "number"
        },
        "color": {
          "type": "string"
        }
      },
      "required": [
        "drawing_id",
        "text",
        "x",
        "y",
        "z"
      ]
    }
  },
  {
    "name": "ar_set_environment",
    "description": "ngram AR only — change the shell's environment preset.",
    "parameters": {
      "type": "object",
      "properties": {
        "preset": {
          "type": "string",
          "enum": [
            "cozy",
            "default",
            "focus",
            "nature",
            "night",
            "party",
            "space",
            "workshop"
          ]
        }
      },
      "required": [
        "preset"
      ]
    }
  },
  {
    "name": "ar_request_capture",
    "description": "ngram AR only — ask the user-controlled surface for a current view image.",
    "parameters": {
      "type": "object",
      "properties": {
        "prompt": {
          "type": "string"
        }
      },
      "required": []
    }
  },
  {
    "name": "ar_generate_motion",
    "description": "ngram AR only — request a novel humanoid motion from the configured external GPU provider. Use only when generated motion adds clear value.",
    "parameters": {
      "type": "object",
      "properties": {
        "prompt": {
          "type": "string",
          "description": "Physical motion to generate."
        },
        "duration_seconds": {
          "type": "number",
          "minimum": 0.5,
          "maximum": 30.0
        },
        "root_target": {
          "type": "string",
          "enum": [
            "forward",
            "left",
            "right",
            "stationary",
            "user"
          ]
        },
        "loop": {
          "type": "boolean"
        }
      },
      "required": [
        "prompt"
      ]
    }
  }
]
