{
  "name": "kitbitz_scene",
  "description": "Cast a whole scene from one kit: give a brief and the objects it needs, get one illustration per role in a single consistent style, plus a plain list of the roles the library cannot fill. Picks the kit that answers the most roles unless you name one. Offline; needs kitbitz_sync to have run once.",
  "parameters": {
    "properties": {
      "brief": {
        "type": "string",
        "description": "One sentence describing the scene, e.g. \"a medieval market at dusk\" or \"a cyberpunk alley with a food stall\"."
      },
      "roles": {
        "type": "array",
        "items": {
          "type": "string"
        },
        "description": "The objects the scene needs, as plain nouns: [\"merchant\", \"cart\", \"crate\", \"sign\"]. Up to 24. Leave it out and the brief's own nouns are used."
      },
      "kit": {
        "type": "string",
        "description": "Force a kit instead of letting the brief choose one: barbieland, city, cyberpunk, dungeon, halloween, interior, medieval, nature, pirate, ruins, space, western, winter."
      },
      "per_role": {
        "type": "integer",
        "description": "How many options to offer per role, 1-5. Default 1."
      }
    },
    "required": [
      "brief"
    ]
  },
  "run": "NODE_BIN=\"$(command -v node || true)\"; if [ -z \"$NODE_BIN\" ]; then echo 'kitbitz_scene: node not found on PATH' >&2; exit 2; fi; S=\"skills/kitbitz/tools/kitbitz_scene/scene.mjs\"; if [ ! -f \"$S\" ]; then echo 'kitbitz_scene: scene.mjs not found — this tool runs from an installed kitbitz skill folder (skills/kitbitz/)' >&2; exit 2; fi; exec \"$NODE_BIN\" \"$S\""
}
