{
  "version": "1.0",
  "generatedAt": "2026-09-24T01:07:05.401Z",
  "publisher": {
    "name": "LetzAI",
    "url": "https://letz.ai"
  },
  "agents": [
    {
      "id": "letzai-canvas",
      "name": "LetzAI Canvas Agent",
      "description": "Creative orchestrator on the LetzAI infinite canvas. Generates and edits images and video, builds and clones real web designs, arranges and reorganizes canvases, and delegates work to design, media, and research sub-agents.",
      "surface": "canvas",
      "productUrl": "https://letz.ai/canvas",
      "model": {
        "orchestrator": "gemini-3.8-flash",
        "provider": "vertex"
      },
      "skills": [
        {
          "name": "research-before-build",
          "description": "Grounded sites, landing pages, product pages, portfolios, pitch decks, branded mockups about a real external subject (person, product, brand, company, app, event). Load before delegate_to_design_agent / create_design / generate_code when real-world accuracy matters and the user did not supply full copy."
        },
        {
          "name": "visual-reference-likeness",
          "description": "Shots, storyboards, brand films, opening scenes, or generated stills featuring a named real person's likeness. Load before get_models / image_search / web_search / generate_image when the user names a real person and has not supplied a clear reference."
        },
        {
          "name": "generation-prompt-craft",
          "description": "Unless the user passes their own prompt: Mandatory before animate_image when you compose the motion prompt (load references/seedance-2-prompting.md, references/kling-3-prompting.md, or references/models/<mode>.md via file_path — not bare read_skill). Also before generate_image, edit_image, regenerate_image when the brief is vague. Cinematic batches — also references/cinematic-composition.md. Never picks or changes baseModel/mode."
        },
        {
          "name": "portfolio-from-creations",
          "description": "Presentation or slide deck from the user's own LetzAI images — most liked, best work, portfolio review. Load before read_user_creations and delegate_to_design_agent."
        },
        {
          "name": "brand-film-storyboard",
          "description": "Brand films, opening scenes, storyboards, or shot sequences on the canvas — especially with a named real person. Load to sequence reference sourcing, scene planning, section reservation, and generate / animate."
        },
        {
          "name": "film-from-brief",
          "description": "Turn a brief into a finished Movie on the canvas — shot list, generated shots, native title cards (compose_frame), timeline assembly with create_film / edit_film, basic fade/keyframe motion, and a screenshot_film QA pass. Escalate to HTML motion scenes only for complex graphic beats. Load when the user wants a video, movie, spot, trailer, reel, teaser, promo, explainer, or \"a cut of these shots\" that PLAYS as one piece. Not for a single animated clip (animate_image) or a Section the user just watches in the Sequence room."
        },
        {
          "name": "analyze-film",
          "description": "Analyse an existing Movie on the canvas — sample frames from each picture clip, describe what is happening, and write clip autocaptions into the film JSON (Desc lane). Load when the user asks to analyze a film/movie, caption the timeline, fill Desc, describe each shot, or prepare a cut for generative \"fill the gap\" work. Not for building a new movie from a brief (film-from-brief) or authoring motion scenes (motion-markup)."
        },
        {
          "name": "motion-markup",
          "description": "Author a MOTION SCENE — a Design that a Film plays frame by frame (logo builds, kinetic type, lower-thirds, data animations, transitions, end cards). Load before writing files for any brief marked MOTION SCENE, or when the user asks for animated graphics, titles, or a code-driven beat inside a video. Reference files cover timing recipes (references/timing.md), scene-to-scene transitions (references/transitions.md), and what to do with images, audio and Lottie (references/assets.md)."
        },
        {
          "name": "slide-deck-from-frames",
          "description": "Turn an existing Section of native layout Frames (a slide deck on the canvas) into ONE faithful, publishable multi-slide HTML presentation — using every slide, in the exact order the user laid out. Load when the user wants to \"make a deck/presentation from these frames\", \"publish these slides as HTML\", \"create an artifact from this section\", or be \"true to the original slides\"."
        },
        {
          "name": "screenplay-from-board",
          "description": "Write a film/TV screenplay (spec script) as an editable, paginated HTML Design — from a fresh idea or grounded in what's already on the board (a storyboard scene list, native frames/shots, or selected text/treatment notes). Load when the user wants to \"write a screenplay\", \"write a script\", \"spec script\", \"turn my storyboard/scenes into a script\", \"screenplay from these frames\", or \"make a screenplay from this board\"."
        },
        {
          "name": "moodboard-fanout",
          "description": "Producing more than one image in a turn — variations, mood boards, NxM grids, storyboard panels, batches. Load to compute N correctly, run the volume gate, reserve a section, and fan out one media call per cell."
        },
        {
          "name": "board-reorganize",
          "description": "Structural layout changes on the canvas — sort / group images with classify_assets (anything visible: clothing, logo, mood) or group_by_facet (orientation / type / model), move nodes between sections, tidy / align / distribute. Load when the user asks to sort, group, reorganize, tidy, or clean up the board. Never loop inspect_subject_image to sort."
        },
        {
          "name": "clone-website",
          "description": "Reverse-engineer and rebuild a real web page as a pixel-perfect Design on the canvas. Load when the user wants to clone, replicate, rebuild, reverse-engineer, or copy a website (\"make a copy of this site\", \"rebuild this page\", \"pixel-perfect clone\"). Requires a public http(s) URL. Uses inspect_page (headless-browser extraction) to capture exact computed styles, screenshots, assets, and interaction states, then delegates each section to the Design sub-agent."
        },
        {
          "name": "asset-review",
          "description": "Act on review state on canvas media — coloured labels (\"tags\"), free-form tags and comments. Load when the user says tagged / labelled / marked orange / approved / rejected / needs work, or asks to address comments or redo everything with a given label (find_assets_by_review)."
        },
        {
          "name": "design-delegation",
          "description": "Designs — sandboxed HTML/CSS/JSX nodes (hero pages, slide decks, dashboards, mockups, mini-websites, video overlays) authored by the design sub-agent via delegate_to_design_agent. Load when the user wants a design, website, landing page, deck, dashboard, mockup or screenplay, or refers to an existing Design on the board."
        },
        {
          "name": "fill-film-gap",
          "description": "Generate the missing shots in an existing Movie and put them into the cut. Load when the user asks to fill a gap, bridge two shots, add a beat between clips, smooth an abrupt cut, or \"generate whatever is missing\" in a timeline. Covers the single-gap call, finding the gaps worth filling, and doing several in one pass. Not for assembling a new movie from a brief (film-from-brief) and not for writing clip descriptions (analyze-film)."
        },
        {
          "name": "movie-timeline",
          "description": "Movies on the canvas — frame-exact multi-track timelines (create_film / clone_film / read_film / edit_film / fill_film_gap / screenshot_film). Load when the user wants something that plays as one piece — a video, film, spot, trailer, reel, montage, or titles and music over shots."
        },
        {
          "name": "native-layout",
          "description": "Compose editable slides, posters, and layouts as NATIVE canvas nodes (layout Frame + text/shape/media children) via compose_frame. Load when the user wants a layout they can edit directly on the canvas with the toolbar, or a native multi-slide deck."
        },
        {
          "name": "paint-effects",
          "description": "Fills and effects on canvas nodes via paint_node — drop shadow, glow, blur, inner shadow on any node; solid / gradient / image backgrounds on Sections and Frames. Load when the user asks for a shadow, glow, blur, gradient, background colour, or a frosted / glassy / neon look."
        },
        {
          "name": "parallel-workers",
          "description": "Run 2+ independent deliverables concurrently with spawn_worker (media, design and research workers) — partition the board first, spawn in one step, check each worker's outcome. Load when the user asks for several concepts, variants or options at once, or for unrelated deliverables in one request."
        },
        {
          "name": "search-routing",
          "description": "Which search tool for which intent — web_fetch for a linked URL / PDF, image_search for reference pictures, web_search for text facts, get_models for @handles. Load when the user asks to search, google, look something up, find images or reference photos, or pastes a link."
        },
        {
          "name": "skill-authoring",
          "description": "The user wants to save a rule, preference, tone, or repeatable workflow as one of their own Skills — or wants you to change an existing Skill of theirs. Load before the first request_skill_write_approval call in a conversation. Triggers: \"save this as a skill\", \"remember this rule\", \"always reply like X from now on\", \"turn this into a workflow\", \"edit my <name> skill\"."
        },
        {
          "name": "social-posts",
          "description": "Route Instagram / LinkedIn / TikTok / Reels / Stories / carousel requests — flat downloadable image (generate_image at the platform aspect ratio) vs editable on-board Design. Load when the user names a social platform or asks for a \"post\"."
        },
        {
          "name": "video-clips",
          "description": "The animate_image pipeline — settle the video mode, load the model's motion guide, draft the motion prompt, run the video confirmation gate (request_user_choice with a full preview), then animate. Load before any video clip — \"animate this\", \"make it move\", \"cinematic\", Seedance / Kling / Veo picks, image-to-video."
        }
      ],
      "knowledge": [
        {
          "name": "letzai-platform",
          "conceptCount": 40,
          "access": "public",
          "viewer": "https://letz.ai/knowledge/view?bundle=letzai-platform",
          "readDoc": "https://letz.ai/api/knowledge/view?action=doc&bundle=letzai-platform&doc="
        }
      ],
      "tools": [
        {
          "name": "extract_file_content",
          "label": "Extract file content",
          "execution": "client",
          "group": "knowledge"
        },
        {
          "name": "get_models",
          "label": "Search models",
          "execution": "server",
          "group": "knowledge"
        },
        {
          "name": "image_search",
          "label": "Image search",
          "execution": "server",
          "group": "knowledge"
        },
        {
          "name": "inspect_page",
          "label": "Inspect page",
          "execution": "server",
          "group": "knowledge"
        },
        {
          "name": "inspect_subject_image",
          "label": "Look closer",
          "execution": "server",
          "group": "knowledge"
        },
        {
          "name": "read_knowledge",
          "label": "Read knowledge",
          "execution": "server",
          "group": "knowledge"
        },
        {
          "name": "read_skill",
          "label": "Read skill",
          "execution": "server",
          "group": "knowledge"
        },
        {
          "name": "read_user_creations",
          "label": "Read user creations",
          "execution": "server",
          "group": "knowledge"
        },
        {
          "name": "understand_video",
          "label": "Understand video",
          "execution": "server",
          "group": "knowledge"
        },
        {
          "name": "create_plan",
          "label": "Create plan",
          "execution": "server",
          "group": "planning"
        },
        {
          "name": "suggest_followups",
          "label": "Suggest next steps",
          "execution": "server",
          "group": "planning"
        },
        {
          "name": "update_plan",
          "label": "Update plan",
          "execution": "server",
          "group": "planning"
        },
        {
          "name": "animate_image",
          "label": "Animate image",
          "execution": "client",
          "group": "media"
        },
        {
          "name": "create_storyboard",
          "label": "Draft storyboard",
          "execution": "client",
          "group": "media"
        },
        {
          "name": "edit_image",
          "label": "Edit image",
          "execution": "client",
          "group": "media"
        },
        {
          "name": "generate_image",
          "label": "Generate image",
          "execution": "client",
          "group": "media"
        },
        {
          "name": "regenerate_image",
          "label": "Regenerate image",
          "execution": "client",
          "group": "media"
        },
        {
          "name": "regenerate_video",
          "label": "Regenerate video",
          "execution": "client",
          "group": "media"
        },
        {
          "name": "upscale_image",
          "label": "Upscale image",
          "execution": "client",
          "group": "media"
        },
        {
          "name": "add_to_canvas",
          "label": "Add To Canvas",
          "execution": "client",
          "group": "canvas"
        },
        {
          "name": "classify_assets",
          "label": "Sort media by meaning",
          "execution": "client",
          "group": "canvas"
        },
        {
          "name": "compose_frame",
          "label": "Compose Frame",
          "execution": "client",
          "group": "canvas"
        },
        {
          "name": "duplicate_frame_as_design",
          "label": "Duplicate Frame As Design",
          "execution": "client",
          "group": "canvas"
        },
        {
          "name": "find_assets_by_review",
          "label": "Search review tags",
          "execution": "client",
          "group": "canvas"
        },
        {
          "name": "forget_page_memory",
          "label": "Forget page memory",
          "execution": "client",
          "group": "canvas"
        },
        {
          "name": "paint_node",
          "label": "Paint Node",
          "execution": "client",
          "group": "canvas"
        },
        {
          "name": "pan_zoom_to",
          "label": "Pan Zoom To",
          "execution": "client",
          "group": "canvas"
        },
        {
          "name": "place_research_image_on_canvas",
          "label": "Place Research Image On Canvas",
          "execution": "client",
          "group": "canvas"
        },
        {
          "name": "read_canvas_state",
          "label": "Read Canvas State",
          "execution": "client",
          "group": "canvas"
        },
        {
          "name": "remember_page_fact",
          "label": "Remember page fact",
          "execution": "client",
          "group": "canvas"
        },
        {
          "name": "reserve_section",
          "label": "Reserve Section",
          "execution": "client",
          "group": "canvas"
        },
        {
          "name": "search_page_memory",
          "label": "Search page memory",
          "execution": "client",
          "group": "canvas"
        },
        {
          "name": "search_thread",
          "label": "Search this chat",
          "execution": "client",
          "group": "canvas"
        },
        {
          "name": "select_canvas_node",
          "label": "Select Canvas Node",
          "execution": "client",
          "group": "canvas"
        },
        {
          "name": "update_canvas_node",
          "label": "Update Canvas Node",
          "execution": "client",
          "group": "canvas"
        },
        {
          "name": "create_design",
          "label": "Create design",
          "execution": "client",
          "group": "design"
        },
        {
          "name": "delegate_to_design_agent",
          "label": "Start design",
          "execution": "client",
          "group": "design"
        },
        {
          "name": "edit_design_file",
          "label": "Edit design file",
          "execution": "client",
          "group": "design"
        },
        {
          "name": "finish_design",
          "label": "Finish design",
          "execution": "client",
          "group": "design"
        },
        {
          "name": "list_design_files",
          "label": "List design files",
          "execution": "client",
          "group": "design"
        },
        {
          "name": "list_designs_on_board",
          "label": "List designs",
          "execution": "client",
          "group": "design"
        },
        {
          "name": "read_design_file",
          "label": "Read design file",
          "execution": "client",
          "group": "design"
        },
        {
          "name": "screenshot_design",
          "label": "Review design",
          "execution": "client",
          "group": "design"
        },
        {
          "name": "write_design_file",
          "label": "Write design file",
          "execution": "client",
          "group": "design"
        },
        {
          "name": "clone_film",
          "label": "Copy movie",
          "execution": "client",
          "group": "film"
        },
        {
          "name": "create_film",
          "label": "Create movie",
          "execution": "client",
          "group": "film"
        },
        {
          "name": "edit_film",
          "label": "Edit movie timeline",
          "execution": "client",
          "group": "film"
        },
        {
          "name": "fill_film_gap",
          "label": "Fill a gap in the cut",
          "execution": "client",
          "group": "film"
        },
        {
          "name": "read_film",
          "label": "Read movie timeline",
          "execution": "client",
          "group": "film"
        },
        {
          "name": "sample_film_clip_frames",
          "label": "Sample movie clip",
          "execution": "client",
          "group": "film"
        },
        {
          "name": "screenshot_film",
          "label": "Review movie frames",
          "execution": "client",
          "group": "film"
        },
        {
          "name": "spawn_worker",
          "label": "Spawn worker",
          "execution": "client",
          "group": "research"
        },
        {
          "name": "request_reorganize_approval",
          "label": "Ask to reorganize the board",
          "execution": "client",
          "group": "hitl"
        },
        {
          "name": "request_skill_write_approval",
          "label": "Ask to save a skill",
          "execution": "client",
          "group": "hitl"
        },
        {
          "name": "request_user_choice",
          "label": "Ask for your pick",
          "execution": "client",
          "group": "hitl"
        },
        {
          "name": "web_fetch",
          "label": "Web fetch",
          "execution": "native",
          "group": "web"
        },
        {
          "name": "web_search",
          "label": "Web search",
          "execution": "native",
          "group": "web"
        },
        {
          "name": "finish_turn",
          "label": "Finish Turn",
          "execution": "client",
          "group": "other"
        }
      ],
      "workers": [
        {
          "type": "design",
          "injectedSkills": [],
          "tools": [
            "edit_design_file",
            "finish_design",
            "list_design_files",
            "list_designs_on_board",
            "read_design_file",
            "read_skill",
            "screenshot_design",
            "write_design_file"
          ]
        },
        {
          "type": "media",
          "injectedSkills": [
            "moodboard-fanout"
          ],
          "tools": [
            "edit_image",
            "generate_image",
            "read_skill",
            "regenerate_image"
          ]
        },
        {
          "type": "research",
          "injectedSkills": [
            "research-before-build"
          ],
          "tools": [
            "get_models",
            "image_search",
            "read_skill",
            "read_user_creations"
          ]
        }
      ],
      "workflows": [
        "research-before-build"
      ],
      "policies": [
        "Web search is prompt-gated: explicit asks call web_search directly; uncertain cases ask for approval first; routine questions use neither.",
        "Confidential system instructions are never revealed; the agent describes what it can do, not how it is prompted.",
        "Structural board changes (reparent, group, align, grid) are proposed for human approval before they run.",
        "Media generation jobs run asynchronously; the agent waits for them to finish before reporting a step done."
      ],
      "discovery": {
        "agentCard": "https://letz.ai/.well-known/agent-card.canvas.json"
      }
    },
    {
      "id": "letzai-studio",
      "name": "LetzAI Studio Chat Agent",
      "description": "Conversational creation assistant in LetzAI Studio. Generates, edits, animates, and upscales images and video, writes code, drafts storyboards, searches the model catalogue and the web, and discovers the right LetzAI models for a brief.",
      "surface": "chat",
      "productUrl": "https://letz.ai/studio",
      "model": {
        "orchestrator": "gemini-3.8-flash",
        "provider": "vertex"
      },
      "skills": [
        {
          "name": "research-before-build",
          "description": "Grounded sites, landing pages, product pages, portfolios, pitch decks, branded mockups about a real external subject (person, product, brand, company, app, event). Load before delegate_to_design_agent / create_design / generate_code when real-world accuracy matters and the user did not supply full copy."
        },
        {
          "name": "visual-reference-likeness",
          "description": "Shots, storyboards, brand films, opening scenes, or generated stills featuring a named real person's likeness. Load before get_models / image_search / web_search / generate_image when the user names a real person and has not supplied a clear reference."
        },
        {
          "name": "generation-prompt-craft",
          "description": "Unless the user passes their own prompt: Mandatory before animate_image when you compose the motion prompt (load references/seedance-2-prompting.md, references/kling-3-prompting.md, or references/models/<mode>.md via file_path — not bare read_skill). Also before generate_image, edit_image, regenerate_image when the brief is vague. Cinematic batches — also references/cinematic-composition.md. Never picks or changes baseModel/mode."
        },
        {
          "name": "design-delegation",
          "description": "Designs — sandboxed HTML/CSS/JSX nodes (hero pages, slide decks, dashboards, mockups, mini-websites, video overlays) authored by the design sub-agent via delegate_to_design_agent. Load when the user wants a design, website, landing page, deck, dashboard, mockup or screenplay, or refers to an existing Design on the board."
        },
        {
          "name": "skill-authoring",
          "description": "The user wants to save a rule, preference, tone, or repeatable workflow as one of their own Skills — or wants you to change an existing Skill of theirs. Load before the first request_skill_write_approval call in a conversation. Triggers: \"save this as a skill\", \"remember this rule\", \"always reply like X from now on\", \"turn this into a workflow\", \"edit my <name> skill\"."
        },
        {
          "name": "video-clips",
          "description": "The animate_image pipeline — settle the video mode, load the model's motion guide, draft the motion prompt, run the video confirmation gate (request_user_choice with a full preview), then animate. Load before any video clip — \"animate this\", \"make it move\", \"cinematic\", Seedance / Kling / Veo picks, image-to-video."
        }
      ],
      "knowledge": [
        {
          "name": "letzai-platform",
          "conceptCount": 40,
          "access": "public",
          "viewer": "https://letz.ai/knowledge/view?bundle=letzai-platform",
          "readDoc": "https://letz.ai/api/knowledge/view?action=doc&bundle=letzai-platform&doc="
        }
      ],
      "tools": [
        {
          "name": "describe_image",
          "label": "Describe image",
          "execution": "server",
          "group": "knowledge"
        },
        {
          "name": "extract_file_content",
          "label": "Extract file content",
          "execution": "client",
          "group": "knowledge"
        },
        {
          "name": "get_models",
          "label": "Search models",
          "execution": "server",
          "group": "knowledge"
        },
        {
          "name": "image_search",
          "label": "Image search",
          "execution": "server",
          "group": "knowledge"
        },
        {
          "name": "read_guides",
          "label": "Read guides",
          "execution": "server",
          "group": "knowledge"
        },
        {
          "name": "read_knowledge",
          "label": "Read knowledge",
          "execution": "server",
          "group": "knowledge"
        },
        {
          "name": "read_skill",
          "label": "Read skill",
          "execution": "server",
          "group": "knowledge"
        },
        {
          "name": "read_user_creations",
          "label": "Read user creations",
          "execution": "server",
          "group": "knowledge"
        },
        {
          "name": "understand_video",
          "label": "Understand video",
          "execution": "server",
          "group": "knowledge"
        },
        {
          "name": "create_plan",
          "label": "Create plan",
          "execution": "server",
          "group": "planning"
        },
        {
          "name": "suggest_followups",
          "label": "Suggest next steps",
          "execution": "server",
          "group": "planning"
        },
        {
          "name": "update_plan",
          "label": "Update plan",
          "execution": "server",
          "group": "planning"
        },
        {
          "name": "animate_image",
          "label": "Animate image",
          "execution": "client",
          "group": "media"
        },
        {
          "name": "create_storyboard",
          "label": "Draft storyboard",
          "execution": "client",
          "group": "media"
        },
        {
          "name": "edit_image",
          "label": "Edit image",
          "execution": "client",
          "group": "media"
        },
        {
          "name": "generate_image",
          "label": "Generate image",
          "execution": "client",
          "group": "media"
        },
        {
          "name": "regenerate_image",
          "label": "Regenerate image",
          "execution": "client",
          "group": "media"
        },
        {
          "name": "upscale_image",
          "label": "Upscale image",
          "execution": "client",
          "group": "media"
        },
        {
          "name": "use_search_image",
          "label": "Use search image",
          "execution": "client",
          "group": "media"
        },
        {
          "name": "create_design",
          "label": "Create design",
          "execution": "client",
          "group": "design"
        },
        {
          "name": "delegate_to_design_agent",
          "label": "Start design",
          "execution": "client",
          "group": "design"
        },
        {
          "name": "edit_design_file",
          "label": "Edit design file",
          "execution": "client",
          "group": "design"
        },
        {
          "name": "finish_design",
          "label": "Finish design",
          "execution": "client",
          "group": "design"
        },
        {
          "name": "list_design_files",
          "label": "List design files",
          "execution": "client",
          "group": "design"
        },
        {
          "name": "list_designs_on_board",
          "label": "List designs",
          "execution": "client",
          "group": "design"
        },
        {
          "name": "read_design_file",
          "label": "Read design file",
          "execution": "client",
          "group": "design"
        },
        {
          "name": "screenshot_design",
          "label": "Review design",
          "execution": "client",
          "group": "design"
        },
        {
          "name": "write_design_file",
          "label": "Write design file",
          "execution": "client",
          "group": "design"
        },
        {
          "name": "request_skill_write_approval",
          "label": "Ask to save a skill",
          "execution": "client",
          "group": "hitl"
        },
        {
          "name": "request_user_choice",
          "label": "Ask for your pick",
          "execution": "client",
          "group": "hitl"
        },
        {
          "name": "web_fetch",
          "label": "Web fetch",
          "execution": "native",
          "group": "web"
        },
        {
          "name": "web_search",
          "label": "Web search",
          "execution": "native",
          "group": "web"
        },
        {
          "name": "generate_code",
          "label": "Generate code",
          "execution": "server",
          "group": "code"
        }
      ],
      "workflows": [
        "research-before-build"
      ],
      "policies": [
        "Web search is prompt-gated: explicit asks call web_search directly; uncertain cases ask for approval first; routine questions use neither.",
        "Confidential system instructions are never revealed; the agent describes what it can do, not how it is prompted.",
        "Media tools (generate, edit, animate, upscale) hand off to the Studio tabs and finish asynchronously."
      ],
      "discovery": {
        "agentCard": "https://letz.ai/.well-known/agent-card.studio.json"
      }
    }
  ],
  "discovery": {
    "agentsTxt": "https://letz.ai/agents.txt",
    "skillsIndex": "https://letz.ai/.well-known/agent-skills/index.json",
    "knowledgeIndex": "https://letz.ai/.well-known/knowledge/index.json",
    "aiCatalog": "https://letz.ai/.well-known/ai-catalog.json"
  }
}