{
  "format": "agent-tools-assets/1",
  "name": "Agent Tools asset library",
  "base_url": "https://tools.openkrill.app/library/",
  "updated": "2026-10-07",
  "licence": {
    "id": "agent-tools-original",
    "note": "Original work by Agent Tools: every file was written, drawn or synthesised by us, and its origin is recorded in this manifest. Use it in Agent Tools pages and films. The shader code may also be copied into your own pages, as tools.openkrill.app/shaders says. A public licence for the other files is not chosen yet; ask support@openkrill.app before you use them elsewhere. No warranty."
  },
  "kinds": [
    "tokens",
    "texture",
    "scene",
    "icons",
    "logo",
    "shader",
    "sound",
    "motion"
  ],
  "assets": [
    {
      "id": "tokens/last-table",
      "kind": "tokens",
      "title": "Last Table design tokens",
      "summary": "The colour, type, space, radius and motion variables of the Last Table look, light and dark, as one CSS file.",
      "tags": [
        "css",
        "design tokens",
        "colours",
        "theme",
        "dark mode",
        "light mode",
        "spacing",
        "typography"
      ],
      "files": [
        {
          "path": "last-table/tokens.css",
          "from": "packages/assets/made/tokens.css",
          "bytes": 5484,
          "sha256": "b3e0900201949804b745db8c300c7001302e1bab246e1ebbf7971f5e81eb51b7"
        }
      ],
      "preview": {
        "path": "previews/tokens-last-table.svg",
        "from": "packages/assets/previews/tokens-last-table.svg",
        "bytes": 3689,
        "sha256": "796a21ee74913031a14b8d5c413dc11088e5897f46197443d84eb038a565f249"
      },
      "use": "<link rel=\"stylesheet\" href=\"./last-table/tokens.css\">\n<!-- then use var(--lt-surface-1), var(--lt-text-1), var(--lt-glow-fill), var(--lt-space-4) ... -->",
      "origin": {
        "how": "Values chosen by Agent Tools for the Last Table design system. The library copy drops the @font-face rules, so it loads no outside font; the font stacks fall back to system fonts.",
        "source": "apps/site/public/last-table/tokens.css",
        "script": "packages/assets/scripts/make.mjs",
        "commit": "5fc11fad",
        "date": "2026-10-07"
      },
      "used_by": [
        "https://tools.openkrill.app/design",
        "https://tools.openkrill.app/shaders",
        "https://tools.openkrill.app/library"
      ],
      "licence": "agent-tools-original"
    },
    {
      "id": "texture/star-field",
      "kind": "texture",
      "title": "Star field tile",
      "summary": "A 480 px seamless tile of cream and brass dots for a night-sky hero background, drawn by a seeded script.",
      "tags": [
        "svg",
        "background",
        "hero",
        "pattern",
        "tile",
        "stars",
        "night",
        "dark"
      ],
      "files": [
        {
          "path": "last-table/star-field.svg",
          "from": "apps/site/public/last-table/star-field.svg",
          "bytes": 9830,
          "sha256": "5661946da0c2a6917ee344391a55c9a3d554aec0f2bdc63816d6d169b3c7f4aa"
        }
      ],
      "preview": {
        "path": "last-table/star-field.svg",
        "from": "apps/site/public/last-table/star-field.svg",
        "bytes": 9830,
        "sha256": "5661946da0c2a6917ee344391a55c9a3d554aec0f2bdc63816d6d169b3c7f4aa"
      },
      "use": ".hero { background: #0b0e17 url(\"./last-table/star-field.svg\") repeat; }",
      "origin": {
        "how": "Drawn by a seeded script (140 dots, fixed seed), so the file is reproducible.",
        "source": "apps/site/public/last-table/star-field.svg",
        "script": "apps/site/scripts/draw-star-field.ts",
        "commit": "d9e1a2cc",
        "date": "2026-10-07"
      },
      "used_by": [
        "https://tools.openkrill.app/design",
        "https://tools.openkrill.app/library"
      ],
      "licence": "agent-tools-original"
    },
    {
      "id": "scene/poster-sky",
      "kind": "scene",
      "title": "Night sky video poster",
      "summary": "A 480 x 270 SVG scene of a midnight sky with a brass arc, used as the still frame before a demo video plays.",
      "tags": [
        "svg",
        "poster",
        "video poster",
        "scene",
        "placeholder",
        "night",
        "16:9"
      ],
      "files": [
        {
          "path": "last-table/poster.svg",
          "from": "apps/site/public/last-table/poster.svg",
          "bytes": 938,
          "sha256": "41a05a0dada7930e9e56dbd02a0420f00aa392fa97f58cead273ebbe6b6e30af"
        }
      ],
      "preview": {
        "path": "last-table/poster.svg",
        "from": "apps/site/public/last-table/poster.svg",
        "bytes": 938,
        "sha256": "41a05a0dada7930e9e56dbd02a0420f00aa392fa97f58cead273ebbe6b6e30af"
      },
      "use": "<video poster=\"./last-table/poster.svg\" src=\"demo.mp4\" muted playsinline></video>",
      "origin": {
        "how": "Hand-written SVG by Agent Tools for the Last Table style guide.",
        "source": "apps/site/public/last-table/poster.svg",
        "commit": "d9e1a2cc",
        "date": "2026-10-07"
      },
      "used_by": [
        "https://tools.openkrill.app/design"
      ],
      "licence": "agent-tools-original"
    },
    {
      "id": "icons/rail",
      "kind": "icons",
      "title": "Rail icons",
      "summary": "12 stroke icons on a 24 px grid for a navigation rail: clock, home, guide, people, book, help, search, alert, plus, star, bars, database.",
      "tags": [
        "svg",
        "icons",
        "sprite",
        "navigation",
        "rail",
        "menu",
        "ui"
      ],
      "files": [
        {
          "path": "icons/rail.svg",
          "from": "packages/assets/made/rail.svg",
          "bytes": 3060,
          "sha256": "c6cbdae0be450c81b1145cab7a80722d5007e6d0a836120204fba921a0f6a532"
        },
        {
          "path": "icons/rail-icons.mjs",
          "from": "packages/assets/src/rail-icons.mjs",
          "bytes": 2246,
          "sha256": "30faec2a462217cc7591b292c529a2faaec90a8c5c4cf8ef253ad03ea8fdc865"
        }
      ],
      "preview": {
        "path": "previews/icons-rail.svg",
        "from": "packages/assets/previews/icons-rail.svg",
        "bytes": 2664,
        "sha256": "08bac3f6041b24be36aa8b70e85b24a6cfeaee51d6eaab01e4c8370425c99b83"
      },
      "use": "<svg width=\"20\" height=\"20\"><use href=\"./icons/rail.svg#home\"/></svg>\n<!-- or: import { railIcon } from \"./icons/rail-icons.mjs\"; railIcon(\"home\") -->",
      "origin": {
        "how": "Drawn point by point on a 24 px grid by Agent Tools for this library, to replace rail icons whose shapes came from an outside icon set.",
        "source": "packages/assets/src/rail-icons.mjs",
        "script": "packages/assets/scripts/make.mjs",
        "date": "2026-10-07"
      },
      "used_by": [
        "https://tools.openkrill.app/support",
        "https://tools.openkrill.app/glossary",
        "https://moneyguide.openkrill.app/guide"
      ],
      "licence": "agent-tools-original"
    },
    {
      "id": "logo/agent-tools",
      "kind": "logo",
      "title": "Agent Tools emblem",
      "summary": "A dome over a table with one brass star, on a midnight square: the Agent Tools logo for an icon or an end card.",
      "tags": [
        "svg",
        "logo",
        "emblem",
        "brand",
        "mark",
        "end card",
        "icon"
      ],
      "files": [
        {
          "path": "logos/agent-tools.svg",
          "from": "packages/assets/made/emblem.svg",
          "bytes": 375,
          "sha256": "0a428f8b21effd717292b0e0f0136d1f723122f757a7a015f826086ba44f1cd1"
        }
      ],
      "preview": {
        "path": "logos/agent-tools.svg",
        "from": "packages/assets/made/emblem.svg",
        "bytes": 375,
        "sha256": "0a428f8b21effd717292b0e0f0136d1f723122f757a7a015f826086ba44f1cd1"
      },
      "use": "<img src=\"./logos/agent-tools.svg\" width=\"64\" height=\"64\" alt=\"Agent Tools\">\n<!-- Video Forge: \"assets\": { \"mark\": { \"kind\": \"image\", \"url\": \"logos/agent-tools.svg\" } } -->",
      "origin": {
        "how": "Drawn by Agent Tools: the Last Table emblem from the page header, placed on a midnight square.",
        "source": "apps/site/src/layout.ts",
        "script": "packages/assets/scripts/make.mjs",
        "commit": "d9e1a2cc",
        "date": "2026-10-07"
      },
      "used_by": [
        "https://tools.openkrill.app/shaders",
        "https://tools.openkrill.app/library"
      ],
      "licence": "agent-tools-original"
    },
    {
      "id": "logo/business-days",
      "kind": "logo",
      "title": "Business Days logo",
      "summary": "A 512 px calendar logo for the Business Days tool, used in Video Forge demo films and examples.",
      "tags": [
        "svg",
        "logo",
        "calendar",
        "business days",
        "video"
      ],
      "files": [
        {
          "path": "logos/business-days.svg",
          "from": "apps/site/public/samples/videoforge/bd-logo.svg",
          "bytes": 837,
          "sha256": "7c03e84f2351ed8ace87e8c9567761b74c13557214309405aaab00e763af3429"
        }
      ],
      "preview": {
        "path": "logos/business-days.svg",
        "from": "apps/site/public/samples/videoforge/bd-logo.svg",
        "bytes": 837,
        "sha256": "7c03e84f2351ed8ace87e8c9567761b74c13557214309405aaab00e763af3429"
      },
      "use": "\"assets\": { \"logo\": { \"kind\": \"image\", \"url\": \"https://tools.openkrill.app/library/logos/business-days.svg\" } }",
      "origin": {
        "how": "Hand-written SVG by Agent Tools for the first Video Forge demo.",
        "source": "apps/site/public/samples/videoforge/bd-logo.svg",
        "commit": "3596d58b",
        "date": "2026-10-05"
      },
      "used_by": [
        "https://videoforge.openkrill.app/mcp",
        "https://tools.openkrill.app/samples/videoforge/bd-logo.svg"
      ],
      "licence": "agent-tools-original"
    },
    {
      "id": "shader/starfield",
      "kind": "shader",
      "title": "Star field shader",
      "summary": "A slow WebGL2 star field for a hero: three depths of stars that drift and twinkle over a teal haze, with a CSS fallback.",
      "tags": [
        "webgl",
        "shader",
        "background",
        "hero",
        "stars",
        "animated",
        "night"
      ],
      "files": [
        {
          "path": "shaders/effects/starfield.js",
          "from": "packages/kit/shaders/effects/starfield.js",
          "bytes": 2488,
          "sha256": "846ab5c6566afc5ba7705e0cd29cd8971cf990799d020958f48d68178a169d9e"
        },
        {
          "path": "shaders/runtime.js",
          "from": "packages/kit/shaders/runtime.js",
          "bytes": 11779,
          "sha256": "ec168863784403c0b57bcfd1bdd2df3f422a5c8f884e7c4a098ec9aaa1799953"
        },
        {
          "path": "shaders/palette.js",
          "from": "packages/kit/shaders/palette.js",
          "bytes": 560,
          "sha256": "8431839d9c342e204fa8091af29aceb5a4742f90b78da73556940bb76f603628"
        },
        {
          "path": "shaders/glsl.js",
          "from": "packages/kit/shaders/glsl.js",
          "bytes": 3136,
          "sha256": "fed02ecb2f082cf03bcc21753c64f6b097c093a2418adc408a8c8e1b26e4a8bb"
        }
      ],
      "preview": {
        "path": "previews/shader-starfield.png",
        "from": "packages/assets/previews/shader-starfield.png",
        "bytes": 159195,
        "sha256": "17d027e53e3aeb132932a05585abffda60726ba5c359aed19a905d408abfca71"
      },
      "use": "<script type=\"module\">\nimport { mount } from \"./shaders/runtime.js\";\nimport starfield from \"./shaders/effects/starfield.js\";\nconst fx = mount(document.querySelector(\".hero\"), starfield);\n</script>",
      "origin": {
        "how": "Written from scratch in GLSL and JavaScript by Agent Tools from textbook techniques; no shader gallery or library code.",
        "source": "packages/kit/shaders/effects/starfield.js",
        "commit": "0283d6e4",
        "date": "2026-10-07"
      },
      "used_by": [
        "https://tools.openkrill.app/",
        "https://tools.openkrill.app/shaders",
        "https://tools.openkrill.app/library"
      ],
      "licence": "agent-tools-original"
    },
    {
      "id": "shader/nebula",
      "kind": "shader",
      "title": "Nebula shader",
      "summary": "Slow teal and brass clouds from layered noise, for a calm full-width background or a film backdrop.",
      "tags": [
        "webgl",
        "shader",
        "background",
        "clouds",
        "animated",
        "video backdrop"
      ],
      "files": [
        {
          "path": "shaders/effects/nebula.js",
          "from": "packages/kit/shaders/effects/nebula.js",
          "bytes": 1792,
          "sha256": "63a814bdc2ab336f04c4b46b2f18c99f3689b8c92472d80e4218ecfafe5e4731"
        },
        {
          "path": "shaders/runtime.js",
          "from": "packages/kit/shaders/runtime.js",
          "bytes": 11779,
          "sha256": "ec168863784403c0b57bcfd1bdd2df3f422a5c8f884e7c4a098ec9aaa1799953"
        },
        {
          "path": "shaders/palette.js",
          "from": "packages/kit/shaders/palette.js",
          "bytes": 560,
          "sha256": "8431839d9c342e204fa8091af29aceb5a4742f90b78da73556940bb76f603628"
        },
        {
          "path": "shaders/glsl.js",
          "from": "packages/kit/shaders/glsl.js",
          "bytes": 3136,
          "sha256": "fed02ecb2f082cf03bcc21753c64f6b097c093a2418adc408a8c8e1b26e4a8bb"
        }
      ],
      "preview": {
        "path": "previews/shader-nebula.png",
        "from": "packages/assets/previews/shader-nebula.png",
        "bytes": 123361,
        "sha256": "8093650c6b9e8848cbfd458997b3f673c055cf2684ef6884d82dc9eb80207f8d"
      },
      "use": "<script type=\"module\">\nimport { mount } from \"./shaders/runtime.js\";\nimport nebula from \"./shaders/effects/nebula.js\";\nconst fx = mount(document.querySelector(\".backdrop\"), nebula);\n</script>",
      "origin": {
        "how": "Written from scratch in GLSL and JavaScript by Agent Tools from textbook techniques; no shader gallery or library code.",
        "source": "packages/kit/shaders/effects/nebula.js",
        "commit": "0283d6e4",
        "date": "2026-10-07"
      },
      "used_by": [
        "https://tools.openkrill.app/shaders"
      ],
      "licence": "agent-tools-original"
    },
    {
      "id": "shader/burst",
      "kind": "shader",
      "title": "Completion burst shader",
      "summary": "A one-shot brass ring and sparks for the moment a task finishes; call play() to run it.",
      "tags": [
        "webgl",
        "shader",
        "celebration",
        "done",
        "success",
        "one-shot",
        "animation"
      ],
      "files": [
        {
          "path": "shaders/effects/burst.js",
          "from": "packages/kit/shaders/effects/burst.js",
          "bytes": 2122,
          "sha256": "53b2bcdf7998d6695fcc644af3fe8c25343ec8ac6f95b0a0a9cb998ce7e4eafa"
        },
        {
          "path": "shaders/runtime.js",
          "from": "packages/kit/shaders/runtime.js",
          "bytes": 11779,
          "sha256": "ec168863784403c0b57bcfd1bdd2df3f422a5c8f884e7c4a098ec9aaa1799953"
        },
        {
          "path": "shaders/palette.js",
          "from": "packages/kit/shaders/palette.js",
          "bytes": 560,
          "sha256": "8431839d9c342e204fa8091af29aceb5a4742f90b78da73556940bb76f603628"
        },
        {
          "path": "shaders/glsl.js",
          "from": "packages/kit/shaders/glsl.js",
          "bytes": 3136,
          "sha256": "fed02ecb2f082cf03bcc21753c64f6b097c093a2418adc408a8c8e1b26e4a8bb"
        }
      ],
      "preview": {
        "path": "previews/shader-burst.png",
        "from": "packages/assets/previews/shader-burst.png",
        "bytes": 70762,
        "sha256": "4d889cdeea9f1547ddd7f53a3028be6696d7ddd6f73bcb8f8e7fb0cd0c8a138b"
      },
      "use": "<script type=\"module\">\nimport { mount } from \"./shaders/runtime.js\";\nimport burst from \"./shaders/effects/burst.js\";\nconst fx = mount(document.querySelector(\".result\"), burst);\nfx.play();\n</script>",
      "origin": {
        "how": "Written from scratch in GLSL and JavaScript by Agent Tools from textbook techniques; no shader gallery or library code.",
        "source": "packages/kit/shaders/effects/burst.js",
        "commit": "0283d6e4",
        "date": "2026-10-07"
      },
      "used_by": [
        "https://tools.openkrill.app/",
        "https://tools.openkrill.app/shaders"
      ],
      "licence": "agent-tools-original"
    },
    {
      "id": "shader/grain",
      "kind": "shader",
      "title": "Film grain shader",
      "summary": "A light moving film grain laid over a page or a frame, so flat colour reads like print.",
      "tags": [
        "webgl",
        "shader",
        "texture",
        "grain",
        "noise",
        "overlay",
        "film"
      ],
      "files": [
        {
          "path": "shaders/effects/grain.js",
          "from": "packages/kit/shaders/effects/grain.js",
          "bytes": 1477,
          "sha256": "6d1c0fdabbb49cc25089e1cfe561ba250e6b1b1efe5789cef1329ff904bfa080"
        },
        {
          "path": "shaders/runtime.js",
          "from": "packages/kit/shaders/runtime.js",
          "bytes": 11779,
          "sha256": "ec168863784403c0b57bcfd1bdd2df3f422a5c8f884e7c4a098ec9aaa1799953"
        },
        {
          "path": "shaders/palette.js",
          "from": "packages/kit/shaders/palette.js",
          "bytes": 560,
          "sha256": "8431839d9c342e204fa8091af29aceb5a4742f90b78da73556940bb76f603628"
        },
        {
          "path": "shaders/glsl.js",
          "from": "packages/kit/shaders/glsl.js",
          "bytes": 3136,
          "sha256": "fed02ecb2f082cf03bcc21753c64f6b097c093a2418adc408a8c8e1b26e4a8bb"
        }
      ],
      "preview": {
        "path": "previews/shader-grain.png",
        "from": "packages/assets/previews/shader-grain.png",
        "bytes": 128988,
        "sha256": "4433ec280e64d92e9ef559e10cf1a2490fe5e97a68ef29f3a4054dfb2f55dff1"
      },
      "use": "<script type=\"module\">\nimport { mount } from \"./shaders/runtime.js\";\nimport grain from \"./shaders/effects/grain.js\";\nconst fx = mount(document.querySelector(\".panel\"), grain);\n</script>",
      "origin": {
        "how": "Written from scratch in GLSL and JavaScript by Agent Tools from textbook techniques; no shader gallery or library code.",
        "source": "packages/kit/shaders/effects/grain.js",
        "commit": "0283d6e4",
        "date": "2026-10-07"
      },
      "used_by": [
        "https://tools.openkrill.app/shaders"
      ],
      "licence": "agent-tools-original"
    },
    {
      "id": "shader/pulse",
      "kind": "shader",
      "title": "Status pulse shader",
      "summary": "A small breathing dot for a live or running status chip, 24 px and up.",
      "tags": [
        "webgl",
        "shader",
        "status",
        "live",
        "dot",
        "indicator",
        "loading"
      ],
      "files": [
        {
          "path": "shaders/effects/pulse.js",
          "from": "packages/kit/shaders/effects/pulse.js",
          "bytes": 1350,
          "sha256": "591d29ba97a33f2afb82ea5c86b1eac08c59dd0140ece309c6e753fa360e9ad5"
        },
        {
          "path": "shaders/runtime.js",
          "from": "packages/kit/shaders/runtime.js",
          "bytes": 11779,
          "sha256": "ec168863784403c0b57bcfd1bdd2df3f422a5c8f884e7c4a098ec9aaa1799953"
        },
        {
          "path": "shaders/palette.js",
          "from": "packages/kit/shaders/palette.js",
          "bytes": 560,
          "sha256": "8431839d9c342e204fa8091af29aceb5a4742f90b78da73556940bb76f603628"
        }
      ],
      "preview": {
        "path": "previews/shader-pulse.png",
        "from": "packages/assets/previews/shader-pulse.png",
        "bytes": 54671,
        "sha256": "ce8d7381bffbd7e3941bad1114d81a6bbb3e06476199fdaa25ad2791fee06b7e"
      },
      "use": "<script type=\"module\">\nimport { mount } from \"./shaders/runtime.js\";\nimport pulse from \"./shaders/effects/pulse.js\";\nconst fx = mount(document.querySelector(\".status-dot\"), pulse);\n</script>",
      "origin": {
        "how": "Written from scratch in GLSL and JavaScript by Agent Tools from textbook techniques; no shader gallery or library code.",
        "source": "packages/kit/shaders/effects/pulse.js",
        "commit": "0283d6e4",
        "date": "2026-10-07"
      },
      "used_by": [
        "https://tools.openkrill.app/shaders"
      ],
      "licence": "agent-tools-original"
    },
    {
      "id": "sound/beat-120",
      "kind": "sound",
      "title": "120 BPM music bed",
      "summary": "A 29 s music bed in A minor at 120 BPM with a clear kick on every beat, so Video Forge can cut a film to its grid.",
      "tags": [
        "audio",
        "music",
        "m4a",
        "beat",
        "120 bpm",
        "video",
        "soundtrack",
        "loop"
      ],
      "files": [
        {
          "path": "sounds/beat-120.m4a",
          "from": "apps/site/public/samples/videoforge/bd-motion-track.m4a",
          "bytes": 568028,
          "sha256": "a24387a555ed37a838721dbc4626cf27e3df8f83b19edc17def0ec94c6d1f244"
        }
      ],
      "preview": {
        "path": "previews/sound-beat-120.svg",
        "from": "packages/assets/previews/sound-beat-120.svg",
        "bytes": 10333,
        "sha256": "d5ddff387bffc4e0b158767c6d85ca028f794eb6e4a81af0f394397f93ce0ac7"
      },
      "use": "\"assets\": { \"music\": { \"kind\": \"audio\", \"url\": \"https://tools.openkrill.app/library/sounds/beat-120.m4a\" } }",
      "origin": {
        "how": "Synthesised by Agent Tools from sine waves and noise (kick, hat, bass, pad); no sample, loop or preset from anyone else.",
        "source": "apps/site/public/samples/videoforge/bd-motion-track.m4a",
        "script": "data/at-videoforge/motion/make_track.py",
        "commit": "78c2e2bb",
        "date": "2026-10-05"
      },
      "used_by": [
        "https://tools.openkrill.app/samples/videoforge/bd-motion-track.m4a",
        "https://tools.openkrill.app/library"
      ],
      "licence": "agent-tools-original"
    },
    {
      "id": "motion/nebula-drift",
      "kind": "motion",
      "title": "Nebula drift clip",
      "summary": "8 s of the nebula shader as a 1280 x 720 H.264 clip at 30 fps, for a film backdrop or a page video.",
      "tags": [
        "video",
        "mp4",
        "motion",
        "background",
        "clip",
        "backdrop",
        "clouds",
        "16:9"
      ],
      "files": [
        {
          "path": "motion/nebula-drift.mp4",
          "from": "packages/assets/made/nebula-drift.mp4",
          "bytes": 305471,
          "sha256": "a35acfa4dd54743cec9506c8a08c690d7b290432917037398778d283fdbe7842"
        }
      ],
      "preview": {
        "path": "previews/motion-nebula-drift.jpg",
        "from": "packages/assets/previews/motion-nebula-drift.jpg",
        "bytes": 2733,
        "sha256": "0d48a8b3037786746eca086ce8725d33edb9be1e1208d8ebfcf85343866d81d2"
      },
      "use": "\"assets\": { \"backdrop\": { \"kind\": \"video\", \"url\": \"https://tools.openkrill.app/library/motion/nebula-drift.mp4\" } }",
      "origin": {
        "how": "Exact frames of our nebula shader (t = 0 to 8 s) drawn in headless Chrome and encoded with ffmpeg.",
        "source": "packages/kit/shaders/effects/nebula.js",
        "script": "packages/assets/scripts/make.mjs",
        "date": "2026-10-07"
      },
      "used_by": [
        "https://tools.openkrill.app/library"
      ],
      "licence": "agent-tools-original"
    }
  ],
  "bundles": [
    {
      "id": "page-starter",
      "title": "Tool page starter",
      "summary": "What a new tool page needs for the Last Table look: tokens, the star field tile and shader for the hero, and the rail icons.",
      "assets": [
        "tokens/last-table",
        "texture/star-field",
        "shader/starfield",
        "icons/rail"
      ]
    },
    {
      "id": "video-starter",
      "title": "Video Forge starter",
      "summary": "What a Video Forge film needs that is not the product itself: a music bed on a 120 BPM grid, a moving backdrop and the end-card mark.",
      "assets": [
        "sound/beat-120",
        "motion/nebula-drift",
        "logo/agent-tools"
      ]
    }
  ]
}
