{
  "product" : "luce",
  "schema_version" : 1,
  "tools" : [
    {
      "description" : "Get the current develop recipe (global tone/color, crop, LUT, local masks) for the selected image, as JSON.",
      "name" : "get_recipe",
      "tier" : "read"
    },
    {
      "description" : "Get the image currently selected in the editor (its file path) plus a summary of its lens info (model + whether built-in lens correction is supported). Path and lens are one atomic snapshot: lens is null while no image is selected or while the selected image's lens info is still being read — never a previously selected image's lens.",
      "name" : "get_selection",
      "tier" : "read"
    },
    {
      "description" : "List the available develop presets (built-in looks + the user's saved presets) with their id and name. Use an id or name with apply_preset.",
      "name" : "list_presets",
      "tier" : "read"
    },
    {
      "description" : "Apply a develop preset's look to the selected image (its own crop is preserved). Identify the preset by id OR by name. The persistence receipt is returned only after the sidecar's atomic disk write has completed.",
      "name" : "apply_preset",
      "tier" : "write"
    },
    {
      "description" : "Set one tone/color adjustment on the selected image's global recipe — the whole photo, never a local mask, whatever the editor happens to show as selected. To write a local mask, address it by its list_masks index with set_mask_adjustment. Names: blacks, clarity, contrast, dehaze, denoiseColor, denoiseDetail, denoiseLuminance, exposureEV, highlights, monochrome, saturation, shadows, sharpenRadius, sharpness, temperature, texture, tint, vibrance, vignette, whites. The persistence receipt reports only an awaited atomic sidecar commit.",
      "name" : "set_adjustment",
      "tier" : "write"
    },
    {
      "description" : "List the selected image's mask terms (the runtime sequence, not only the primary spec). Empty when the image has none. `index` is the local write address for remove_mask / set_mask_adjustment / combine_masks; `term` is the position in that local's sequence.",
      "name" : "list_masks",
      "tier" : "read"
    },
    {
      "description" : "Add a local mask of one stored kind to the selected image. Kinds: radial, brush, linear, subject, luminance, color, person, face. Uses the same add-mask path as the UI.",
      "name" : "add_mask",
      "tier" : "write"
    },
    {
      "description" : "Remove one local mask on the selected image by the 0-based index from list_masks. Uses the same remove-mask path as the UI.",
      "name" : "remove_mask",
      "tier" : "write"
    },
    {
      "description" : "Set one tone/color adjustment on a local mask identified by list_masks index. Names: blacks, clarity, contrast, dehaze, denoiseColor, denoiseDetail, denoiseLuminance, exposureEV, highlights, monochrome, saturation, shadows, sharpenRadius, sharpness, temperature, texture, tint, vibrance, vignette, whites. Writes that local through setAdjustmentValue.",
      "name" : "set_mask_adjustment",
      "tier" : "write"
    },
    {
      "description" : "Add a mask-algebra operand to the mask at list_masks index. Operation is union, intersect, or subtract. Operand kinds: radial, brush, linear, subject, luminance, color, person, face. Uses the same addMaskOperand path as the UI COMBINE row.",
      "name" : "combine_masks",
      "tier" : "write"
    },
    {
      "description" : "Undo the last develop change on the selected image — the same per-photo stack the UI uses.",
      "name" : "undo",
      "tier" : "write"
    },
    {
      "description" : "Redo the last undone develop change on the selected image — the same per-photo stack the UI uses.",
      "name" : "redo",
      "tier" : "write"
    }
  ]
}
