{
  "registryVersion": 1,
  "manifestVersion": 1,
  "generatedBy": "buildinghub/0.2.0",
  "generatedAt": "2026-04-23T07:58:45.737Z",
  "name": "Vibe Research BuildingHub",
  "packageCount": 38,
  "layoutCount": 4,
  "recipeCount": 1,
  "packages": [
    {
      "id": "agent-inbox",
      "name": "Agent Inbox",
      "category": "Vibe Research",
      "trust": "helper-command",
      "latestVersion": "0.1.0",
      "manifestSha256": "b458251af86e76ec599025876dfaeaeddc799f72292b883488d430c28a9e9a23",
      "source": {
        "manifestPath": "buildings/agent-inbox/building.json",
        "readmePath": "buildings/agent-inbox/README.md",
        "repositoryUrl": "https://github.com/Clamepending/agent-inbox-building",
        "upstreamManifestPath": "buildinghub/building.json"
      },
      "thumbnail": {
        "path": "assets/thumbnail.svg",
        "url": "https://raw.githubusercontent.com/Clamepending/agent-inbox-building/main/assets/thumbnail.svg",
        "alt": "Agent Inbox Building thumbnail"
      },
      "footprint": {
        "width": 2,
        "height": 2,
        "shape": "post",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1
          }
        ]
      },
      "versions": [
        {
          "version": "0.1.0",
          "manifestSha256": "b458251af86e76ec599025876dfaeaeddc799f72292b883488d430c28a9e9a23",
          "manifestPath": "buildings/agent-inbox/building.json",
          "repositoryUrl": "https://github.com/Clamepending/agent-inbox-building"
        }
      ]
    },
    {
      "id": "agentmail",
      "name": "AgentMail",
      "category": "Communication",
      "trust": "manifest-only",
      "latestVersion": "0.1.0",
      "manifestSha256": "2c46cf3a610bc74f4fef01e1f9c292e51680449b816582e0ddefb8c0c4d4f178",
      "source": {
        "manifestPath": "buildings/agentmail/building.json",
        "readmePath": "buildings/agentmail/README.md",
        "repositoryUrl": "https://github.com/Clamepending/agentmail-building",
        "upstreamManifestPath": "buildinghub/building.json"
      },
      "thumbnail": {
        "path": "assets/thumbnail.svg",
        "url": "https://raw.githubusercontent.com/Clamepending/agentmail-building/main/assets/thumbnail.svg",
        "alt": "AgentMail Building thumbnail"
      },
      "footprint": {
        "width": 2,
        "height": 2,
        "shape": "plugin",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1
          }
        ]
      },
      "versions": [
        {
          "version": "0.1.0",
          "manifestSha256": "2c46cf3a610bc74f4fef01e1f9c292e51680449b816582e0ddefb8c0c4d4f178",
          "manifestPath": "buildings/agentmail/building.json",
          "repositoryUrl": "https://github.com/Clamepending/agentmail-building"
        }
      ]
    },
    {
      "id": "agentmall",
      "name": "AgentMall",
      "category": "Vibe Research",
      "trust": "manifest-only",
      "latestVersion": "0.1.0",
      "manifestSha256": "646c6c20fd7ff7f1abb364a9e12ecd67b489df37d5b4e6863fbad98173d2ba69",
      "source": {
        "manifestPath": "buildings/agentmall/building.json",
        "readmePath": "buildings/agentmall/README.md",
        "repositoryUrl": "https://github.com/Clamepending/agentmall-building",
        "upstreamManifestPath": "buildinghub/building.json"
      },
      "thumbnail": {
        "path": "assets/thumbnail.svg",
        "url": "https://raw.githubusercontent.com/Clamepending/agentmall-building/main/assets/thumbnail.svg",
        "alt": "AgentMall Building thumbnail"
      },
      "footprint": {
        "width": 3,
        "height": 2,
        "shape": "market",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1.5
          }
        ]
      },
      "versions": [
        {
          "version": "0.1.0",
          "manifestSha256": "646c6c20fd7ff7f1abb364a9e12ecd67b489df37d5b4e6863fbad98173d2ba69",
          "manifestPath": "buildings/agentmall/building.json",
          "repositoryUrl": "https://github.com/Clamepending/agentmall-building"
        }
      ]
    },
    {
      "id": "automations",
      "name": "Automations",
      "category": "Planning",
      "trust": "manifest-only",
      "latestVersion": "0.1.0",
      "manifestSha256": "934ff19894e7f8330aa5f4729a6443e53059130ba067a4e1f8fbbef2c4253d69",
      "source": {
        "manifestPath": "buildings/automations/building.json",
        "readmePath": "buildings/automations/README.md",
        "repositoryUrl": "https://github.com/Clamepending/automations-building",
        "upstreamManifestPath": "buildinghub/building.json"
      },
      "thumbnail": {
        "path": "assets/thumbnail.svg",
        "url": "https://raw.githubusercontent.com/Clamepending/automations-building/main/assets/thumbnail.svg",
        "alt": "Automations Building thumbnail"
      },
      "footprint": {
        "width": 2,
        "height": 3,
        "shape": "campanile",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1
          }
        ]
      },
      "versions": [
        {
          "version": "0.1.0",
          "manifestSha256": "934ff19894e7f8330aa5f4729a6443e53059130ba067a4e1f8fbbef2c4253d69",
          "manifestPath": "buildings/automations/building.json",
          "repositoryUrl": "https://github.com/Clamepending/automations-building"
        }
      ]
    },
    {
      "id": "browser-use",
      "name": "Browser Use",
      "category": "Vibe Research",
      "trust": "helper-command",
      "latestVersion": "0.1.0",
      "manifestSha256": "8f475291a176431b74696a8f2cf8d750388590ecbc3bbce549ca4d6c83c5d28d",
      "source": {
        "manifestPath": "buildings/browser-use/building.json",
        "readmePath": "buildings/browser-use/README.md",
        "repositoryUrl": "https://github.com/Clamepending/browser-use-building",
        "upstreamManifestPath": "buildinghub/building.json"
      },
      "thumbnail": {
        "path": "assets/thumbnail.svg",
        "url": "https://raw.githubusercontent.com/Clamepending/browser-use-building/main/assets/thumbnail.svg",
        "alt": "Browser Use Building thumbnail"
      },
      "footprint": {
        "width": 3,
        "height": 2,
        "shape": "browser",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1.5
          }
        ]
      },
      "versions": [
        {
          "version": "0.1.0",
          "manifestSha256": "8f475291a176431b74696a8f2cf8d750388590ecbc3bbce549ca4d6c83c5d28d",
          "manifestPath": "buildings/browser-use/building.json",
          "repositoryUrl": "https://github.com/Clamepending/browser-use-building"
        }
      ]
    },
    {
      "id": "buildinghub",
      "name": "BuildingHub",
      "category": "Community",
      "trust": "manifest-only",
      "latestVersion": "0.1.0",
      "manifestSha256": "54370c8abb306f1cbe760df3846b24a54c1416423cc9d186cca9aea663cd049f",
      "source": {
        "manifestPath": "buildings/buildinghub/building.json",
        "readmePath": "buildings/buildinghub/README.md",
        "repositoryUrl": "https://github.com/Clamepending/buildinghub-building",
        "upstreamManifestPath": "buildinghub/building.json"
      },
      "thumbnail": {
        "path": "assets/thumbnail.svg",
        "url": "https://raw.githubusercontent.com/Clamepending/buildinghub-building/main/assets/thumbnail.svg",
        "alt": "BuildingHub Building thumbnail"
      },
      "footprint": {
        "width": 2,
        "height": 2,
        "shape": "plugin",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1
          }
        ]
      },
      "versions": [
        {
          "version": "0.1.0",
          "manifestSha256": "54370c8abb306f1cbe760df3846b24a54c1416423cc9d186cca9aea663cd049f",
          "manifestPath": "buildings/buildinghub/building.json",
          "repositoryUrl": "https://github.com/Clamepending/buildinghub-building"
        }
      ]
    },
    {
      "id": "ci-repair-shop",
      "name": "CI Repair Shop",
      "category": "Coding",
      "trust": "manifest-only",
      "latestVersion": "0.1.0",
      "manifestSha256": "5e7ccab2846ac1d6e84de72e011b4c6480d41c028e596ed37bddebaf1e28780e",
      "source": {
        "manifestPath": "buildings/ci-repair-shop/building.json",
        "readmePath": "buildings/ci-repair-shop/README.md",
        "repositoryUrl": "https://github.com/Clamepending/ci-repair-shop-building",
        "upstreamManifestPath": "buildinghub/building.json"
      },
      "thumbnail": {
        "path": "assets/thumbnail.svg",
        "url": "https://raw.githubusercontent.com/Clamepending/ci-repair-shop-building/main/assets/thumbnail.svg",
        "alt": "CI Repair Shop Building thumbnail"
      },
      "footprint": {
        "width": 2,
        "height": 2,
        "shape": "plugin",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1
          }
        ]
      },
      "versions": [
        {
          "version": "0.1.0",
          "manifestSha256": "5e7ccab2846ac1d6e84de72e011b4c6480d41c028e596ed37bddebaf1e28780e",
          "manifestPath": "buildings/ci-repair-shop/building.json",
          "repositoryUrl": "https://github.com/Clamepending/ci-repair-shop-building"
        }
      ]
    },
    {
      "id": "discord",
      "name": "Discord",
      "category": "Communication",
      "trust": "mcp",
      "latestVersion": "0.1.0",
      "manifestSha256": "d24a3d5d66be63cea6a465d15699d213fa01ae51f48c5ccaff6f46d146e3bcab",
      "source": {
        "manifestPath": "buildings/discord/building.json",
        "readmePath": "buildings/discord/README.md",
        "repositoryUrl": "https://github.com/Clamepending/discord-building",
        "upstreamManifestPath": "buildinghub/building.json"
      },
      "thumbnail": {
        "path": "assets/thumbnail.svg",
        "url": "https://raw.githubusercontent.com/Clamepending/discord-building/main/assets/thumbnail.svg",
        "alt": "Discord Building thumbnail"
      },
      "footprint": {
        "width": 2,
        "height": 2,
        "shape": "post",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1
          }
        ]
      },
      "versions": [
        {
          "version": "0.1.0",
          "manifestSha256": "d24a3d5d66be63cea6a465d15699d213fa01ae51f48c5ccaff6f46d146e3bcab",
          "manifestPath": "buildings/discord/building.json",
          "repositoryUrl": "https://github.com/Clamepending/discord-building"
        }
      ]
    },
    {
      "id": "doghouse",
      "name": "Doghouse",
      "category": "Vibe Research",
      "trust": "manifest-only",
      "latestVersion": "0.1.0",
      "manifestSha256": "81f3bb0ce8997d84a1f53b5d9855e953822c606482779f40fa03924085e0440a",
      "source": {
        "manifestPath": "buildings/doghouse/building.json",
        "readmePath": "buildings/doghouse/README.md",
        "repositoryUrl": "https://github.com/Clamepending/doghouse-building",
        "upstreamManifestPath": "buildinghub/building.json"
      },
      "thumbnail": {
        "path": "assets/thumbnail.svg",
        "url": "https://raw.githubusercontent.com/Clamepending/doghouse-building/main/assets/thumbnail.svg",
        "alt": "Doghouse Building thumbnail"
      },
      "footprint": {
        "width": 1,
        "height": 1,
        "shape": "doghouse",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 0.5
          }
        ]
      },
      "versions": [
        {
          "version": "0.1.0",
          "manifestSha256": "81f3bb0ce8997d84a1f53b5d9855e953822c606482779f40fa03924085e0440a",
          "manifestPath": "buildings/doghouse/building.json",
          "repositoryUrl": "https://github.com/Clamepending/doghouse-building"
        }
      ]
    },
    {
      "id": "github",
      "name": "GitHub",
      "category": "Coding",
      "trust": "manifest-only",
      "latestVersion": "0.1.0",
      "manifestSha256": "28e6b7f68649d10c282a5a6ad90fd8493116ac7319762d35226ead8c9afadb3d",
      "source": {
        "manifestPath": "buildings/github/building.json",
        "readmePath": "buildings/github/README.md",
        "repositoryUrl": "https://github.com/Clamepending/github-building",
        "upstreamManifestPath": "buildinghub/building.json"
      },
      "thumbnail": {
        "path": "assets/thumbnail.svg",
        "url": "https://raw.githubusercontent.com/Clamepending/github-building/main/assets/thumbnail.svg",
        "alt": "GitHub Building thumbnail"
      },
      "footprint": {
        "width": 2,
        "height": 2,
        "shape": "plugin",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1
          }
        ]
      },
      "versions": [
        {
          "version": "0.1.0",
          "manifestSha256": "28e6b7f68649d10c282a5a6ad90fd8493116ac7319762d35226ead8c9afadb3d",
          "manifestPath": "buildings/github/building.json",
          "repositoryUrl": "https://github.com/Clamepending/github-building"
        }
      ]
    },
    {
      "id": "google-calendar",
      "name": "Google Calendar",
      "category": "Planning",
      "trust": "mcp",
      "latestVersion": "0.1.0",
      "manifestSha256": "a48f2c96c715c5f45081f98b4cacd9723caf16ddadfea2aec44aacbad686abde",
      "source": {
        "manifestPath": "buildings/google-calendar/building.json",
        "readmePath": "buildings/google-calendar/README.md",
        "repositoryUrl": "https://github.com/Clamepending/google-calendar-building",
        "upstreamManifestPath": "buildinghub/building.json"
      },
      "thumbnail": {
        "path": "assets/thumbnail.svg",
        "url": "https://raw.githubusercontent.com/Clamepending/google-calendar-building/main/assets/thumbnail.svg",
        "alt": "Google Calendar Building thumbnail"
      },
      "footprint": {
        "width": 2,
        "height": 2,
        "shape": "plugin",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1
          }
        ]
      },
      "versions": [
        {
          "version": "0.1.0",
          "manifestSha256": "a48f2c96c715c5f45081f98b4cacd9723caf16ddadfea2aec44aacbad686abde",
          "manifestPath": "buildings/google-calendar/building.json",
          "repositoryUrl": "https://github.com/Clamepending/google-calendar-building"
        }
      ]
    },
    {
      "id": "google-drive",
      "name": "Google Drive",
      "category": "Knowledge",
      "trust": "mcp",
      "latestVersion": "0.1.0",
      "manifestSha256": "81a0722e889ed3fc510b8d5d819c117eddf4fd12734b1f8d8bc4eb9098693acc",
      "source": {
        "manifestPath": "buildings/google-drive/building.json",
        "readmePath": "buildings/google-drive/README.md",
        "repositoryUrl": "https://github.com/Clamepending/google-drive-building",
        "upstreamManifestPath": "buildinghub/building.json"
      },
      "thumbnail": {
        "path": "assets/thumbnail.svg",
        "url": "https://raw.githubusercontent.com/Clamepending/google-drive-building/main/assets/thumbnail.svg",
        "alt": "Google Drive Building thumbnail"
      },
      "footprint": {
        "width": 2,
        "height": 2,
        "shape": "plugin",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1
          }
        ]
      },
      "versions": [
        {
          "version": "0.1.0",
          "manifestSha256": "81a0722e889ed3fc510b8d5d819c117eddf4fd12734b1f8d8bc4eb9098693acc",
          "manifestPath": "buildings/google-drive/building.json",
          "repositoryUrl": "https://github.com/Clamepending/google-drive-building"
        }
      ]
    },
    {
      "id": "harbor",
      "name": "Harbor",
      "category": "Evals",
      "trust": "helper-command",
      "latestVersion": "0.1.0",
      "manifestSha256": "4782f9782ec0dbd31cb3752f6c5ceefbdb2ff5d82013f27a9f155d29be6cd956",
      "source": {
        "manifestPath": "buildings/harbor/building.json",
        "readmePath": "buildings/harbor/README.md",
        "repositoryUrl": "https://github.com/Clamepending/harbor-building",
        "upstreamManifestPath": "buildinghub/building.json"
      },
      "thumbnail": {
        "path": "assets/thumbnail.svg",
        "url": "https://raw.githubusercontent.com/Clamepending/harbor-building/main/assets/thumbnail.svg",
        "alt": "Harbor Building thumbnail"
      },
      "footprint": {
        "width": 3,
        "height": 2,
        "shape": "lab",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1.5
          }
        ]
      },
      "versions": [
        {
          "version": "0.1.0",
          "manifestSha256": "4782f9782ec0dbd31cb3752f6c5ceefbdb2ff5d82013f27a9f155d29be6cd956",
          "manifestPath": "buildings/harbor/building.json",
          "repositoryUrl": "https://github.com/Clamepending/harbor-building"
        }
      ]
    },
    {
      "id": "home-automation",
      "name": "Home Automation",
      "category": "Home",
      "trust": "manifest-only",
      "latestVersion": "0.1.0",
      "manifestSha256": "a3f57166aba5a6d84c97479f07ced87721651d4bd2d2b3ee4211de9488dc4e2f",
      "source": {
        "manifestPath": "buildings/home-automation/building.json",
        "readmePath": "buildings/home-automation/README.md",
        "repositoryUrl": "https://github.com/Clamepending/home-automation-building",
        "upstreamManifestPath": "buildinghub/building.json"
      },
      "thumbnail": {
        "path": "assets/thumbnail.svg",
        "url": "https://raw.githubusercontent.com/Clamepending/home-automation-building/main/assets/thumbnail.svg",
        "alt": "Home Automation Building thumbnail"
      },
      "footprint": {
        "width": 2,
        "height": 2,
        "shape": "plugin",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1
          }
        ]
      },
      "versions": [
        {
          "version": "0.1.0",
          "manifestSha256": "a3f57166aba5a6d84c97479f07ced87721651d4bd2d2b3ee4211de9488dc4e2f",
          "manifestPath": "buildings/home-automation/building.json",
          "repositoryUrl": "https://github.com/Clamepending/home-automation-building"
        }
      ]
    },
    {
      "id": "instacart",
      "name": "Instacart",
      "category": "Commerce",
      "trust": "mcp",
      "latestVersion": "0.1.0",
      "manifestSha256": "36d5f0185df6bb18ded36e55818d2c36c399d4b4316d6865699470a3d31288c7",
      "source": {
        "manifestPath": "buildings/instacart/building.json",
        "readmePath": "buildings/instacart/README.md",
        "repositoryUrl": "https://github.com/Clamepending/instacart-building",
        "upstreamManifestPath": "buildinghub/building.json"
      },
      "thumbnail": {
        "path": "assets/thumbnail.svg",
        "url": "https://raw.githubusercontent.com/Clamepending/instacart-building/main/assets/thumbnail.svg",
        "alt": "Instacart Building thumbnail"
      },
      "footprint": {
        "width": 3,
        "height": 2,
        "shape": "market",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1.5
          }
        ]
      },
      "versions": [
        {
          "version": "0.1.0",
          "manifestSha256": "36d5f0185df6bb18ded36e55818d2c36c399d4b4316d6865699470a3d31288c7",
          "manifestPath": "buildings/instacart/building.json",
          "repositoryUrl": "https://github.com/Clamepending/instacart-building"
        }
      ]
    },
    {
      "id": "knowledge-base",
      "name": "Library",
      "category": "Vibe Research",
      "trust": "manifest-only",
      "latestVersion": "0.1.0",
      "manifestSha256": "f0effbcdfb33f57e553059eba3aecc4e1f462da61bb6ea9290cd22122cd0ce19",
      "source": {
        "manifestPath": "buildings/knowledge-base/building.json",
        "readmePath": "buildings/knowledge-base/README.md",
        "repositoryUrl": "https://github.com/Clamepending/knowledge-base-building",
        "upstreamManifestPath": "buildinghub/building.json"
      },
      "thumbnail": {
        "path": "assets/thumbnail.svg",
        "url": "https://raw.githubusercontent.com/Clamepending/knowledge-base-building/main/assets/thumbnail.svg",
        "alt": "Library Building thumbnail"
      },
      "footprint": {
        "width": 3,
        "height": 2,
        "shape": "library",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1.5
          }
        ]
      },
      "versions": [
        {
          "version": "0.1.0",
          "manifestSha256": "f0effbcdfb33f57e553059eba3aecc4e1f462da61bb6ea9290cd22122cd0ce19",
          "manifestPath": "buildings/knowledge-base/building.json",
          "repositoryUrl": "https://github.com/Clamepending/knowledge-base-building"
        }
      ]
    },
    {
      "id": "lerobot",
      "name": "LeRobot",
      "category": "Robotics",
      "trust": "helper-command",
      "latestVersion": "0.1.0",
      "manifestSha256": "cf1637f433c109d38fc9bc41b2114161002313609fb364106b71f972130d1632",
      "source": {
        "manifestPath": "buildings/lerobot/building.json",
        "readmePath": "buildings/lerobot/README.md",
        "repositoryUrl": "https://github.com/Clamepending/lerobot-building",
        "upstreamManifestPath": "buildinghub/building.json"
      },
      "thumbnail": {
        "path": "assets/thumbnail.svg",
        "url": "https://raw.githubusercontent.com/Clamepending/lerobot-building/main/assets/thumbnail.svg",
        "alt": "LeRobot Building thumbnail"
      },
      "footprint": {
        "width": 3,
        "height": 2,
        "shape": "lab",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1.5
          }
        ]
      },
      "versions": [
        {
          "version": "0.1.0",
          "manifestSha256": "cf1637f433c109d38fc9bc41b2114161002313609fb364106b71f972130d1632",
          "manifestPath": "buildings/lerobot/building.json",
          "repositoryUrl": "https://github.com/Clamepending/lerobot-building"
        }
      ]
    },
    {
      "id": "linear",
      "name": "Linear",
      "category": "Planning",
      "trust": "mcp",
      "latestVersion": "0.1.0",
      "manifestSha256": "10eaac7dc2ecd286d191ddbe145086bf9264b18d2bb14ddbde337c93a4613e3e",
      "source": {
        "manifestPath": "buildings/linear/building.json",
        "readmePath": "buildings/linear/README.md",
        "repositoryUrl": "https://github.com/Clamepending/linear-building",
        "upstreamManifestPath": "buildinghub/building.json"
      },
      "thumbnail": {
        "path": "assets/thumbnail.svg",
        "url": "https://raw.githubusercontent.com/Clamepending/linear-building/main/assets/thumbnail.svg",
        "alt": "Linear Building thumbnail"
      },
      "footprint": {
        "width": 2,
        "height": 2,
        "shape": "plugin",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1
          }
        ]
      },
      "versions": [
        {
          "version": "0.1.0",
          "manifestSha256": "10eaac7dc2ecd286d191ddbe145086bf9264b18d2bb14ddbde337c93a4613e3e",
          "manifestPath": "buildings/linear/building.json",
          "repositoryUrl": "https://github.com/Clamepending/linear-building"
        }
      ]
    },
    {
      "id": "localhost-apps",
      "name": "Localhost Apps",
      "category": "Vibe Research",
      "trust": "helper-command",
      "latestVersion": "0.1.0",
      "manifestSha256": "430718a0c9cb79ea682b728c97a751377d6894f38906dec3126d85cc016e0d8b",
      "source": {
        "manifestPath": "buildings/localhost-apps/building.json",
        "readmePath": "buildings/localhost-apps/README.md",
        "repositoryUrl": "https://github.com/Clamepending/localhost-apps-building",
        "upstreamManifestPath": "buildinghub/building.json"
      },
      "thumbnail": {
        "path": "assets/thumbnail.svg",
        "url": "https://raw.githubusercontent.com/Clamepending/localhost-apps-building/main/assets/thumbnail.svg",
        "alt": "Localhost Apps Building thumbnail"
      },
      "footprint": {
        "width": 3,
        "height": 1,
        "shape": "dock",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1.5
          }
        ]
      },
      "versions": [
        {
          "version": "0.1.0",
          "manifestSha256": "430718a0c9cb79ea682b728c97a751377d6894f38906dec3126d85cc016e0d8b",
          "manifestPath": "buildings/localhost-apps/building.json",
          "repositoryUrl": "https://github.com/Clamepending/localhost-apps-building"
        }
      ]
    },
    {
      "id": "modal",
      "name": "Modal",
      "category": "Compute",
      "trust": "helper-command",
      "latestVersion": "0.1.0",
      "manifestSha256": "f4171fa7ac1b2867d73b9ae0aedb34699dc61a5c69175b1437f6152804435073",
      "source": {
        "manifestPath": "buildings/modal/building.json",
        "readmePath": "buildings/modal/README.md",
        "repositoryUrl": "https://github.com/Clamepending/modal-building",
        "upstreamManifestPath": "buildinghub/building.json"
      },
      "thumbnail": {
        "path": "assets/thumbnail.svg",
        "url": "https://raw.githubusercontent.com/Clamepending/modal-building/main/assets/thumbnail.svg",
        "alt": "Modal Building thumbnail"
      },
      "footprint": {
        "width": 3,
        "height": 2,
        "shape": "factory",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1.5
          }
        ]
      },
      "versions": [
        {
          "version": "0.1.0",
          "manifestSha256": "f4171fa7ac1b2867d73b9ae0aedb34699dc61a5c69175b1437f6152804435073",
          "manifestPath": "buildings/modal/building.json",
          "repositoryUrl": "https://github.com/Clamepending/modal-building"
        }
      ]
    },
    {
      "id": "moltbook",
      "name": "Moltbook",
      "category": "Knowledge",
      "trust": "mcp",
      "latestVersion": "0.1.0",
      "manifestSha256": "ff9c2fe34f12083e0464f9186d677207b8fdcf6bf78d2b139c20fbf4798e48e1",
      "source": {
        "manifestPath": "buildings/moltbook/building.json",
        "readmePath": "buildings/moltbook/README.md",
        "repositoryUrl": "https://github.com/Clamepending/moltbook-building",
        "upstreamManifestPath": "buildinghub/building.json"
      },
      "thumbnail": {
        "path": "assets/thumbnail.svg",
        "url": "https://raw.githubusercontent.com/Clamepending/moltbook-building/main/assets/thumbnail.svg",
        "alt": "Moltbook Building thumbnail"
      },
      "footprint": {
        "width": 3,
        "height": 2,
        "shape": "library",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1.5
          }
        ]
      },
      "versions": [
        {
          "version": "0.1.0",
          "manifestSha256": "ff9c2fe34f12083e0464f9186d677207b8fdcf6bf78d2b139c20fbf4798e48e1",
          "manifestPath": "buildings/moltbook/building.json",
          "repositoryUrl": "https://github.com/Clamepending/moltbook-building"
        }
      ]
    },
    {
      "id": "nano-banana",
      "name": "Nano Banana",
      "category": "Generative Media",
      "trust": "manifest-only",
      "latestVersion": "0.1.0",
      "manifestSha256": "4c13b3fdf27fe6d45b7a7329c5a4128022c0154eb53a5b2ba0896ca594c3ebbf",
      "source": {
        "manifestPath": "buildings/nano-banana/building.json",
        "readmePath": "buildings/nano-banana/README.md",
        "repositoryUrl": "https://github.com/Clamepending/nano-banana-building",
        "upstreamManifestPath": "buildinghub/building.json"
      },
      "thumbnail": {
        "path": "assets/thumbnail.svg",
        "url": "https://raw.githubusercontent.com/Clamepending/nano-banana-building/main/assets/thumbnail.svg",
        "alt": "Nano Banana Building thumbnail"
      },
      "footprint": {
        "width": 3,
        "height": 2,
        "shape": "studio",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1.5
          }
        ]
      },
      "versions": [
        {
          "version": "0.1.0",
          "manifestSha256": "4c13b3fdf27fe6d45b7a7329c5a4128022c0154eb53a5b2ba0896ca594c3ebbf",
          "manifestPath": "buildings/nano-banana/building.json",
          "repositoryUrl": "https://github.com/Clamepending/nano-banana-building"
        }
      ]
    },
    {
      "id": "occupations",
      "name": "Occupations",
      "category": "Vibe Research",
      "trust": "manifest-only",
      "latestVersion": "0.1.0",
      "manifestSha256": "06b17d3f1d161d7b0ed18c22bda9ac14943f4679fd3d0058db63e9acb531abb7",
      "source": {
        "manifestPath": "buildings/occupations/building.json",
        "readmePath": "buildings/occupations/README.md",
        "repositoryUrl": "https://github.com/Clamepending/occupations-building",
        "upstreamManifestPath": "buildinghub/building.json"
      },
      "thumbnail": {
        "path": "assets/thumbnail.svg",
        "url": "https://raw.githubusercontent.com/Clamepending/occupations-building/main/assets/thumbnail.svg",
        "alt": "Occupations Building thumbnail"
      },
      "footprint": {
        "width": 3,
        "height": 2,
        "shape": "school",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1.5
          }
        ]
      },
      "versions": [
        {
          "version": "0.1.0",
          "manifestSha256": "06b17d3f1d161d7b0ed18c22bda9ac14943f4679fd3d0058db63e9acb531abb7",
          "manifestPath": "buildings/occupations/building.json",
          "repositoryUrl": "https://github.com/Clamepending/occupations-building"
        }
      ]
    },
    {
      "id": "ottoauth",
      "name": "OttoAuth",
      "category": "Commerce",
      "trust": "helper-command",
      "latestVersion": "0.1.0",
      "manifestSha256": "271a0f2e366db883750e3d6651a4a8fe860779a6010fd2875f92a1f01adf0891",
      "source": {
        "manifestPath": "buildings/ottoauth/building.json",
        "readmePath": "buildings/ottoauth/README.md",
        "repositoryUrl": "https://github.com/Clamepending/ottoauth-building",
        "upstreamManifestPath": "buildinghub/building.json"
      },
      "thumbnail": {
        "path": "assets/thumbnail.svg",
        "url": "https://raw.githubusercontent.com/Clamepending/ottoauth-building/main/assets/thumbnail.svg",
        "alt": "OttoAuth Building thumbnail"
      },
      "footprint": {
        "width": 3,
        "height": 2,
        "shape": "market",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1.5
          }
        ]
      },
      "versions": [
        {
          "version": "0.1.0",
          "manifestSha256": "271a0f2e366db883750e3d6651a4a8fe860779a6010fd2875f92a1f01adf0891",
          "manifestPath": "buildings/ottoauth/building.json",
          "repositoryUrl": "https://github.com/Clamepending/ottoauth-building"
        }
      ]
    },
    {
      "id": "phone-imessage",
      "name": "Phone / iMessage",
      "category": "Communication",
      "trust": "manifest-only",
      "latestVersion": "0.1.0",
      "manifestSha256": "0a5ffd49d4e503eb067c003fdcd86339888a6c7ea3056409567f21ff479f915b",
      "source": {
        "manifestPath": "buildings/phone-imessage/building.json",
        "readmePath": "buildings/phone-imessage/README.md",
        "repositoryUrl": "https://github.com/Clamepending/phone-imessage-building",
        "upstreamManifestPath": "buildinghub/building.json"
      },
      "thumbnail": {
        "path": "assets/thumbnail.svg",
        "url": "https://raw.githubusercontent.com/Clamepending/phone-imessage-building/main/assets/thumbnail.svg",
        "alt": "Phone / iMessage Building thumbnail"
      },
      "footprint": {
        "width": 2,
        "height": 2,
        "shape": "post",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1
          }
        ]
      },
      "versions": [
        {
          "version": "0.1.0",
          "manifestSha256": "0a5ffd49d4e503eb067c003fdcd86339888a6c7ea3056409567f21ff479f915b",
          "manifestPath": "buildings/phone-imessage/building.json",
          "repositoryUrl": "https://github.com/Clamepending/phone-imessage-building"
        }
      ]
    },
    {
      "id": "rentahuman",
      "name": "RentAHuman",
      "category": "Commerce",
      "trust": "mcp",
      "latestVersion": "0.1.0",
      "manifestSha256": "0dde130a5dadb4ea5f6a8682b6701df985fe02134555617b8bb3a64ccd6f632b",
      "source": {
        "manifestPath": "buildings/rentahuman/building.json",
        "readmePath": "buildings/rentahuman/README.md",
        "repositoryUrl": "https://github.com/Clamepending/rentahuman-building",
        "upstreamManifestPath": "buildinghub/building.json"
      },
      "thumbnail": {
        "path": "assets/thumbnail.svg",
        "url": "https://raw.githubusercontent.com/Clamepending/rentahuman-building/main/assets/thumbnail.svg",
        "alt": "RentAHuman Building thumbnail"
      },
      "footprint": {
        "width": 3,
        "height": 2,
        "shape": "market",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1.5
          }
        ]
      },
      "versions": [
        {
          "version": "0.1.0",
          "manifestSha256": "0dde130a5dadb4ea5f6a8682b6701df985fe02134555617b8bb3a64ccd6f632b",
          "manifestPath": "buildings/rentahuman/building.json",
          "repositoryUrl": "https://github.com/Clamepending/rentahuman-building"
        }
      ]
    },
    {
      "id": "runpod",
      "name": "RunPod",
      "category": "Compute",
      "trust": "helper-command",
      "latestVersion": "0.1.0",
      "manifestSha256": "b4f292eaceeeb439cd0ccfa42c5dbe9d81296af2900dee9c6be8d7dec5939c61",
      "source": {
        "manifestPath": "buildings/runpod/building.json",
        "readmePath": "buildings/runpod/README.md",
        "repositoryUrl": "https://github.com/Clamepending/runpod-building",
        "upstreamManifestPath": "buildinghub/building.json"
      },
      "thumbnail": {
        "path": "assets/thumbnail.svg",
        "url": "https://raw.githubusercontent.com/Clamepending/runpod-building/main/assets/thumbnail.svg",
        "alt": "RunPod Building thumbnail"
      },
      "footprint": {
        "width": 3,
        "height": 2,
        "shape": "factory",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1.5
          }
        ]
      },
      "versions": [
        {
          "version": "0.1.0",
          "manifestSha256": "b4f292eaceeeb439cd0ccfa42c5dbe9d81296af2900dee9c6be8d7dec5939c61",
          "manifestPath": "buildings/runpod/building.json",
          "repositoryUrl": "https://github.com/Clamepending/runpod-building"
        }
      ]
    },
    {
      "id": "sora",
      "name": "Sora",
      "category": "Generative Media",
      "trust": "manifest-only",
      "latestVersion": "0.1.0",
      "manifestSha256": "0915c78fcf4e0714c857ad577c11219e28ca81b2a2162e4f9780705b1aa078be",
      "source": {
        "manifestPath": "buildings/sora/building.json",
        "readmePath": "buildings/sora/README.md",
        "repositoryUrl": "https://github.com/Clamepending/sora-building",
        "upstreamManifestPath": "buildinghub/building.json"
      },
      "thumbnail": {
        "path": "assets/thumbnail.svg",
        "url": "https://raw.githubusercontent.com/Clamepending/sora-building/main/assets/thumbnail.svg",
        "alt": "Sora Building thumbnail"
      },
      "footprint": {
        "width": 3,
        "height": 2,
        "shape": "studio",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1.5
          }
        ]
      },
      "versions": [
        {
          "version": "0.1.0",
          "manifestSha256": "0915c78fcf4e0714c857ad577c11219e28ca81b2a2162e4f9780705b1aa078be",
          "manifestPath": "buildings/sora/building.json",
          "repositoryUrl": "https://github.com/Clamepending/sora-building"
        }
      ]
    },
    {
      "id": "supabase",
      "name": "Supabase",
      "category": "Data",
      "trust": "helper-command",
      "latestVersion": "0.1.0",
      "manifestSha256": "8db52517ab204cb351a8bcf044d5e8a8e40b83f06dd52e75ec2f760c6753f361",
      "source": {
        "manifestPath": "buildings/supabase/building.json",
        "readmePath": "buildings/supabase/README.md",
        "repositoryUrl": "https://github.com/Clamepending/supabase-building",
        "upstreamManifestPath": "buildinghub/building.json"
      },
      "thumbnail": {
        "path": "assets/thumbnail.svg",
        "url": "https://raw.githubusercontent.com/Clamepending/supabase-building/main/assets/thumbnail.svg",
        "alt": "Supabase Building thumbnail"
      },
      "footprint": {
        "width": 3,
        "height": 2,
        "shape": "library",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1.5
          }
        ]
      },
      "versions": [
        {
          "version": "0.1.0",
          "manifestSha256": "8db52517ab204cb351a8bcf044d5e8a8e40b83f06dd52e75ec2f760c6753f361",
          "manifestPath": "buildings/supabase/building.json",
          "repositoryUrl": "https://github.com/Clamepending/supabase-building"
        }
      ]
    },
    {
      "id": "system",
      "name": "System",
      "category": "Vibe Research",
      "trust": "manifest-only",
      "latestVersion": "0.1.0",
      "manifestSha256": "2cec8fc9ea53092aa7302cd5f664b67f72b25caa990f76ae1d4c8addde4c10ea",
      "source": {
        "manifestPath": "buildings/system/building.json",
        "readmePath": "buildings/system/README.md",
        "repositoryUrl": "https://github.com/Clamepending/system-building",
        "upstreamManifestPath": "buildinghub/building.json"
      },
      "thumbnail": {
        "path": "assets/thumbnail.svg",
        "url": "https://raw.githubusercontent.com/Clamepending/system-building/main/assets/thumbnail.svg",
        "alt": "System Building thumbnail"
      },
      "footprint": {
        "width": 2,
        "height": 2,
        "shape": "plugin",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1
          }
        ]
      },
      "versions": [
        {
          "version": "0.1.0",
          "manifestSha256": "2cec8fc9ea53092aa7302cd5f664b67f72b25caa990f76ae1d4c8addde4c10ea",
          "manifestPath": "buildings/system/building.json",
          "repositoryUrl": "https://github.com/Clamepending/system-building"
        }
      ]
    },
    {
      "id": "tailscale",
      "name": "Tailscale",
      "category": "Networking",
      "trust": "helper-command",
      "latestVersion": "0.1.0",
      "manifestSha256": "cd99475a09e3a59d0a65be8c56392ee97873ccaecef87867db91f40e9c9685c2",
      "source": {
        "manifestPath": "buildings/tailscale/building.json",
        "readmePath": "buildings/tailscale/README.md",
        "repositoryUrl": "https://github.com/Clamepending/tailscale-building",
        "upstreamManifestPath": "buildinghub/building.json"
      },
      "thumbnail": {
        "path": "assets/thumbnail.svg",
        "url": "https://raw.githubusercontent.com/Clamepending/tailscale-building/main/assets/thumbnail.svg",
        "alt": "Tailscale Building thumbnail"
      },
      "footprint": {
        "width": 2,
        "height": 2,
        "shape": "portal",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1
          }
        ]
      },
      "versions": [
        {
          "version": "0.1.0",
          "manifestSha256": "cd99475a09e3a59d0a65be8c56392ee97873ccaecef87867db91f40e9c9685c2",
          "manifestPath": "buildings/tailscale/building.json",
          "repositoryUrl": "https://github.com/Clamepending/tailscale-building"
        }
      ]
    },
    {
      "id": "telegram",
      "name": "Telegram",
      "category": "Communication",
      "trust": "manifest-only",
      "latestVersion": "0.1.0",
      "manifestSha256": "6fc993519595f853ee5e89257f109e41f423c363e6baa4e049ce8cf9143118d6",
      "source": {
        "manifestPath": "buildings/telegram/building.json",
        "readmePath": "buildings/telegram/README.md",
        "repositoryUrl": "https://github.com/Clamepending/telegram-building",
        "upstreamManifestPath": "buildinghub/building.json"
      },
      "thumbnail": {
        "path": "assets/thumbnail.svg",
        "url": "https://raw.githubusercontent.com/Clamepending/telegram-building/main/assets/thumbnail.svg",
        "alt": "Telegram Building thumbnail"
      },
      "footprint": {
        "width": 2,
        "height": 2,
        "shape": "plugin",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1
          }
        ]
      },
      "versions": [
        {
          "version": "0.1.0",
          "manifestSha256": "6fc993519595f853ee5e89257f109e41f423c363e6baa4e049ce8cf9143118d6",
          "manifestPath": "buildings/telegram/building.json",
          "repositoryUrl": "https://github.com/Clamepending/telegram-building"
        }
      ]
    },
    {
      "id": "text-to-cad",
      "name": "Text to CAD",
      "category": "Design",
      "trust": "helper-command",
      "latestVersion": "0.1.0",
      "manifestSha256": "e93d7390d199a4018eed95628245f80eea2d6854458513f1ecff6e4d3614be4a",
      "source": {
        "manifestPath": "buildings/text-to-cad/building.json",
        "readmePath": "buildings/text-to-cad/README.md",
        "repositoryUrl": "https://github.com/earthtojake/text-to-cad"
      },
      "thumbnail": {
        "path": "assets/text-to-cad-demo.gif",
        "url": "https://raw.githubusercontent.com/earthtojake/text-to-cad/710655fdbf8b6b0ae0f13a9a371ab3b5debab1f7/assets/text-to-cad-demo.gif",
        "alt": "Text to CAD harness demo showing generated CAD geometry in the local viewer"
      },
      "footprint": {
        "width": 3,
        "height": 2,
        "shape": "studio",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1.5
          }
        ]
      },
      "versions": [
        {
          "version": "0.1.0",
          "manifestSha256": "e93d7390d199a4018eed95628245f80eea2d6854458513f1ecff6e4d3614be4a",
          "manifestPath": "buildings/text-to-cad/building.json",
          "repositoryUrl": "https://github.com/earthtojake/text-to-cad"
        }
      ]
    },
    {
      "id": "toolshed",
      "name": "Toolshed",
      "category": "Vibe Research",
      "trust": "manifest-only",
      "latestVersion": "0.1.0",
      "manifestSha256": "eda6ba7d09db60b5cdeb9ac973fb7d63599974aa45fc2ebd20334eb71f0446f2",
      "source": {
        "manifestPath": "buildings/toolshed/building.json",
        "readmePath": "buildings/toolshed/README.md",
        "repositoryUrl": "https://github.com/Clamepending/toolshed-building",
        "upstreamManifestPath": "buildinghub/building.json"
      },
      "thumbnail": {
        "path": "assets/thumbnail.svg",
        "url": "https://raw.githubusercontent.com/Clamepending/toolshed-building/main/assets/thumbnail.svg",
        "alt": "Toolshed Building thumbnail"
      },
      "footprint": {
        "width": 2,
        "height": 2,
        "shape": "plugin",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1
          }
        ]
      },
      "versions": [
        {
          "version": "0.1.0",
          "manifestSha256": "eda6ba7d09db60b5cdeb9ac973fb7d63599974aa45fc2ebd20334eb71f0446f2",
          "manifestPath": "buildings/toolshed/building.json",
          "repositoryUrl": "https://github.com/Clamepending/toolshed-building"
        }
      ]
    },
    {
      "id": "twilio",
      "name": "Twilio",
      "category": "Communication",
      "trust": "manifest-only",
      "latestVersion": "0.1.0",
      "manifestSha256": "cba1f4c2698b268833fbfb06de3086c7500daadf02e0c4e11cd9177b0682efce",
      "source": {
        "manifestPath": "buildings/twilio/building.json",
        "readmePath": "buildings/twilio/README.md",
        "repositoryUrl": "https://github.com/Clamepending/twilio-building",
        "upstreamManifestPath": "buildinghub/building.json"
      },
      "thumbnail": {
        "path": "assets/thumbnail.svg",
        "url": "https://raw.githubusercontent.com/Clamepending/twilio-building/main/assets/thumbnail.svg",
        "alt": "Twilio Building thumbnail"
      },
      "footprint": {
        "width": 2,
        "height": 2,
        "shape": "post",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1
          }
        ]
      },
      "versions": [
        {
          "version": "0.1.0",
          "manifestSha256": "cba1f4c2698b268833fbfb06de3086c7500daadf02e0c4e11cd9177b0682efce",
          "manifestPath": "buildings/twilio/building.json",
          "repositoryUrl": "https://github.com/Clamepending/twilio-building"
        }
      ]
    },
    {
      "id": "twitter",
      "name": "Twitter / X",
      "category": "Social",
      "trust": "mcp",
      "latestVersion": "0.1.0",
      "manifestSha256": "8ae76f66452dc217191d368ab4c034a44bd6a5a8f05960251cd0219f0d59cfaf",
      "source": {
        "manifestPath": "buildings/twitter/building.json",
        "readmePath": "buildings/twitter/README.md",
        "repositoryUrl": "https://github.com/Clamepending/twitter-building",
        "upstreamManifestPath": "buildinghub/building.json"
      },
      "thumbnail": {
        "path": "assets/thumbnail.svg",
        "url": "https://raw.githubusercontent.com/Clamepending/twitter-building/main/assets/thumbnail.svg",
        "alt": "Twitter / X Building thumbnail"
      },
      "footprint": {
        "width": 2,
        "height": 2,
        "shape": "post",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1
          }
        ]
      },
      "versions": [
        {
          "version": "0.1.0",
          "manifestSha256": "8ae76f66452dc217191d368ab4c034a44bd6a5a8f05960251cd0219f0d59cfaf",
          "manifestPath": "buildings/twitter/building.json",
          "repositoryUrl": "https://github.com/Clamepending/twitter-building"
        }
      ]
    },
    {
      "id": "videomemory",
      "name": "VideoMemory",
      "category": "Vibe Research",
      "trust": "helper-command",
      "latestVersion": "0.1.0",
      "manifestSha256": "ab3182eb86a95dc37eed70504fec16a3f060677f0a9659ce9a1ce8b4c39ea9b5",
      "source": {
        "manifestPath": "buildings/videomemory/building.json",
        "readmePath": "buildings/videomemory/README.md",
        "repositoryUrl": "https://github.com/Clamepending/videomemory-building",
        "upstreamManifestPath": "buildinghub/building.json"
      },
      "thumbnail": {
        "path": "assets/thumbnail.svg",
        "url": "https://raw.githubusercontent.com/Clamepending/videomemory-building/main/assets/thumbnail.svg",
        "alt": "VideoMemory Building thumbnail"
      },
      "footprint": {
        "width": 2,
        "height": 2,
        "shape": "camera",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1
          }
        ]
      },
      "versions": [
        {
          "version": "0.1.0",
          "manifestSha256": "ab3182eb86a95dc37eed70504fec16a3f060677f0a9659ce9a1ce8b4c39ea9b5",
          "manifestPath": "buildings/videomemory/building.json",
          "repositoryUrl": "https://github.com/Clamepending/videomemory-building"
        }
      ]
    },
    {
      "id": "wandb",
      "name": "W&B",
      "category": "Observability",
      "trust": "manifest-only",
      "latestVersion": "0.1.0",
      "manifestSha256": "ed981c8814ce15f17582591c62025330bd39237752971b3299e89d618bb3aa62",
      "source": {
        "manifestPath": "buildings/wandb/building.json",
        "readmePath": "buildings/wandb/README.md",
        "repositoryUrl": "https://github.com/Clamepending/wandb-building",
        "upstreamManifestPath": "buildinghub/building.json"
      },
      "thumbnail": {
        "path": "assets/thumbnail.svg",
        "url": "https://raw.githubusercontent.com/Clamepending/wandb-building/main/assets/thumbnail.svg",
        "alt": "W&B Building thumbnail"
      },
      "footprint": {
        "width": 3,
        "height": 2,
        "shape": "studio",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1.5
          }
        ]
      },
      "versions": [
        {
          "version": "0.1.0",
          "manifestSha256": "ed981c8814ce15f17582591c62025330bd39237752971b3299e89d618bb3aa62",
          "manifestPath": "buildings/wandb/building.json",
          "repositoryUrl": "https://github.com/Clamepending/wandb-building"
        }
      ]
    }
  ],
  "layoutPackages": [
    {
      "id": "courtyard-hub",
      "name": "Courtyard Hub",
      "category": "Hub",
      "latestVersion": "0.1.0",
      "layoutSha256": "23ee27bdb74d266c99790fea9ca52a3db703315b380a4631632dd46419b441f2",
      "source": {
        "layoutPath": "layouts/courtyard-hub/layout.json",
        "readmePath": "layouts/courtyard-hub/README.md"
      },
      "versions": [
        {
          "version": "0.1.0",
          "layoutSha256": "23ee27bdb74d266c99790fea9ca52a3db703315b380a4631632dd46419b441f2",
          "layoutPath": "layouts/courtyard-hub/layout.json"
        }
      ]
    },
    {
      "id": "factory-cells",
      "name": "Factory Cells",
      "category": "Factory",
      "latestVersion": "0.1.0",
      "layoutSha256": "9f152bf4ba1746906e6533fb73fa0bb0ac7fbdb3b78eacb98857820c9f81dca0",
      "source": {
        "layoutPath": "layouts/factory-cells/layout.json",
        "readmePath": "layouts/factory-cells/README.md"
      },
      "versions": [
        {
          "version": "0.1.0",
          "layoutSha256": "9f152bf4ba1746906e6533fb73fa0bb0ac7fbdb3b78eacb98857820c9f81dca0",
          "layoutPath": "layouts/factory-cells/layout.json"
        }
      ]
    },
    {
      "id": "main-street",
      "name": "Main Street",
      "category": "Starter",
      "latestVersion": "0.1.0",
      "layoutSha256": "ca225d3fdc245f319f56e0ba9e901274d904bd6d3b898d0d2f3269100e3c72bc",
      "source": {
        "layoutPath": "layouts/main-street/layout.json",
        "readmePath": "layouts/main-street/README.md"
      },
      "versions": [
        {
          "version": "0.1.0",
          "layoutSha256": "ca225d3fdc245f319f56e0ba9e901274d904bd6d3b898d0d2f3269100e3c72bc",
          "layoutPath": "layouts/main-street/layout.json"
        }
      ]
    },
    {
      "id": "research-campus",
      "name": "Research Campus",
      "category": "Campus",
      "latestVersion": "0.1.0",
      "layoutSha256": "320181cba0627bc3d9c2caf049e30e8b71192e5137f6f2a8c36c033a674337b6",
      "source": {
        "layoutPath": "layouts/research-campus/layout.json",
        "readmePath": "layouts/research-campus/README.md"
      },
      "versions": [
        {
          "version": "0.1.0",
          "layoutSha256": "320181cba0627bc3d9c2caf049e30e8b71192e5137f6f2a8c36c033a674337b6",
          "layoutPath": "layouts/research-campus/layout.json"
        }
      ]
    }
  ],
  "recipePackages": [
    {
      "id": "ml-research-bench",
      "name": "ML Research Bench",
      "category": "Scaffold",
      "latestVersion": "0.1.0",
      "recipeSha256": "5fb908ae08b2d74db63c0cf0444499255e013585a3c776c76cbe7599b7d03766",
      "source": {
        "recipePath": "recipes/ml-research-bench/recipe.json",
        "readmePath": "recipes/ml-research-bench/README.md",
        "repositoryUrl": "https://github.com/Clamepending/buildinghub",
        "recipeUrl": "https://buildinghub.vibe-research.net/#/scaffolds/ml-research-bench"
      },
      "versions": [
        {
          "version": "0.1.0",
          "recipeSha256": "5fb908ae08b2d74db63c0cf0444499255e013585a3c776c76cbe7599b7d03766",
          "recipePath": "recipes/ml-research-bench/recipe.json"
        }
      ]
    }
  ],
  "buildings": [
    {
      "id": "agent-inbox",
      "name": "Agent Inbox",
      "version": "0.1.0",
      "category": "Vibe Research",
      "description": "Review agent sessions that are working, finished, exited, or ready for human attention.",
      "status": "built in",
      "trust": "helper-command",
      "icon": "post",
      "repo": {
        "url": "https://github.com/Clamepending/agent-inbox-building",
        "owner": "Clamepending",
        "name": "agent-inbox-building",
        "branch": "main",
        "manifestPath": "buildinghub/building.json",
        "readmePath": "README.md",
        "assetsPath": "assets"
      },
      "media": {
        "thumbnail": {
          "path": "assets/thumbnail.svg",
          "url": "https://raw.githubusercontent.com/Clamepending/agent-inbox-building/main/assets/thumbnail.svg",
          "alt": "Agent Inbox Building thumbnail"
        }
      },
      "keywords": [
        "agent",
        "inbox",
        "vibe-research",
        "built in",
        "Vibe Research",
        "post",
        "VIBE_RESEARCH_AGENT_TOWN_API",
        "VIBE_RESEARCH_AGENT_CANVAS_HELP",
        "vr-agent-canvas",
        "Sessions",
        "local Vibe Research sessions",
        "Read markers",
        "browser-local attention state",
        "Notifications",
        "AgentMail, Telegram, or browser push later",
        "Open the inbox",
        "Use the Agent Inbox workspace to see working, unread, and exited sessions.",
        "installed",
        "Review finished work",
        "Open unread sessions, inspect the result, and mark them read.",
        "Jump back to context",
        "Each inbox row opens the underlying terminal session."
      ],
      "visual": {
        "shape": "post"
      },
      "footprint": {
        "width": 2,
        "height": 2,
        "shape": "post",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1
          }
        ]
      },
      "access": {
        "label": "Session stream",
        "detail": "Uses local Vibe Research session state, read markers, background task summaries, and subagent status. No extra credentials are required."
      },
      "capabilities": [
        {
          "type": "env",
          "name": "VIBE_RESEARCH_AGENT_TOWN_API",
          "detail": "Base URL for the local Agent Town API, such as http://127.0.0.1:4123/api/agent-town.",
          "required": false
        },
        {
          "type": "env",
          "name": "VIBE_RESEARCH_AGENT_CANVAS_HELP",
          "detail": "Example command for publishing the current session's visible canvas image.",
          "required": false
        },
        {
          "type": "helper-command",
          "name": "vr-agent-canvas",
          "command": "vr-agent-canvas",
          "detail": "Shows a generated image in the selected agent's terminal chat canvas.",
          "required": false
        }
      ],
      "tools": [
        {
          "type": "env",
          "name": "VIBE_RESEARCH_AGENT_TOWN_API",
          "detail": "Base URL for the local Agent Town API, such as http://127.0.0.1:4123/api/agent-town.",
          "required": false
        },
        {
          "type": "env",
          "name": "VIBE_RESEARCH_AGENT_CANVAS_HELP",
          "detail": "Example command for publishing the current session's visible canvas image.",
          "required": false
        },
        {
          "type": "helper-command",
          "name": "vr-agent-canvas",
          "command": "vr-agent-canvas",
          "detail": "Shows a generated image in the selected agent's terminal chat canvas.",
          "required": false
        }
      ],
      "onboarding": {
        "variables": [
          {
            "label": "Sessions",
            "value": "local Vibe Research sessions",
            "required": true
          },
          {
            "label": "Read markers",
            "value": "browser-local attention state",
            "required": true
          },
          {
            "label": "Notifications",
            "value": "AgentMail, Telegram, or browser push later",
            "required": false
          }
        ],
        "steps": [
          {
            "title": "Open the inbox",
            "detail": "Use the Agent Inbox workspace to see working, unread, and exited sessions.",
            "completeWhen": {
              "type": "installed"
            }
          },
          {
            "title": "Review finished work",
            "detail": "Open unread sessions, inspect the result, and mark them read."
          },
          {
            "title": "Jump back to context",
            "detail": "Each inbox row opens the underlying terminal session."
          }
        ]
      },
      "agentGuide": {
        "summary": "Use Agent Inbox when an agent needs to create bite-sized UI action items, wait for Agent Town predicates, or direct the human back to a specific session.",
        "useCases": [
          "Guide onboarding one action at a time without overloading the human.",
          "Create an actionable Agent Inbox card that opens Agent Town or another workspace and names its target object.",
          "Request a human approval with priority and capability metadata before sensitive work continues.",
          "Publish an agent canvas image, such as the best qualitative result so far, a generated graph, or experiment output, for the terminal chat profile.",
          "Wait for Agent Town state changes such as placing the first building, clicking an agent, creating an automation, or saving a Library note."
        ],
        "setup": [
          "Keep action items short: one concrete action, one CTA, and one predicate when possible.",
          "For researcher agents, keep the canvas pointed at the most significant qualitative result or graph the human should inspect next.",
          "Use approvals for messages, purchases, credentials, publishing, deletes, and other sensitive capabilities.",
          "Read the state endpoint before creating duplicate tutorial cards."
        ],
        "commands": [
          {
            "command": "curl -s \"$VIBE_RESEARCH_AGENT_TOWN_API/state\"",
            "label": "Read Agent Town state",
            "detail": "Shows layout summary, open action items, recent events, and tutorial signals."
          },
          {
            "command": "vr-agent-canvas --image results/chart.png --title \"Latest graph\" --caption \"Best qualitative result so far.\"",
            "label": "Set agent canvas",
            "detail": "Shows a generated image in the selected agent's terminal chat canvas."
          },
          {
            "command": "curl -s \"$VIBE_RESEARCH_AGENT_TOWN_API/action-items\" -H 'Content-Type: application/json' -d '{\"id\":\"onboarding-first-building\",\"kind\":\"setup\",\"priority\":\"normal\",\"title\":\"Place your first building\",\"detail\":\"Open Agent Town and place one cosmetic or functional building.\",\"href\":\"?view=swarm\",\"cta\":\"Open Agent Town\",\"predicate\":\"first_building_placed\",\"source\":\"onboarding\",\"target\":{\"type\":\"building\",\"id\":\"buildinghub\",\"label\":\"BuildingHub\"},\"capabilityIds\":[\"ui-guidance\"]}'",
            "label": "Create first-building action",
            "detail": "Adds a small Agent Inbox card the user can act on."
          },
          {
            "command": "curl -s \"$VIBE_RESEARCH_AGENT_TOWN_API/action-items\" -H 'Content-Type: application/json' -d '{\"kind\":\"approval\",\"priority\":\"high\",\"title\":\"Approve outbound message\",\"detail\":\"Review the draft before the agent sends it.\",\"cta\":\"Review\",\"href\":\"?view=agent-inbox\",\"capabilityIds\":[\"sends-messages\"]}'",
            "label": "Create approval action",
            "detail": "Use before a sensitive action that should stop for human consent."
          },
          {
            "command": "curl -s \"$VIBE_RESEARCH_AGENT_TOWN_API/wait\" -H 'Content-Type: application/json' -d '{\"predicate\":\"first_building_placed\",\"timeoutMs\":30000}'",
            "label": "Wait for first building",
            "detail": "Long-polls until the browser mirrors a placed building or the timeout expires."
          }
        ],
        "env": [
          {
            "name": "VIBE_RESEARCH_AGENT_TOWN_API",
            "detail": "Base URL for the local Agent Town API, such as http://127.0.0.1:4123/api/agent-town.",
            "required": false
          },
          {
            "name": "VIBE_RESEARCH_AGENT_CANVAS_HELP",
            "detail": "Example command for publishing the current session's visible canvas image.",
            "required": false
          }
        ]
      }
    },
    {
      "id": "agentmail",
      "name": "AgentMail",
      "version": "0.1.0",
      "category": "Communication",
      "description": "Give Vibe Research an email inbox handled by one dedicated communications agent.",
      "status": "setup available",
      "trust": "manifest-only",
      "icon": "agentmail",
      "repo": {
        "url": "https://github.com/Clamepending/agentmail-building",
        "owner": "Clamepending",
        "name": "agentmail-building",
        "branch": "main",
        "manifestPath": "buildinghub/building.json",
        "readmePath": "README.md",
        "assetsPath": "assets"
      },
      "media": {
        "thumbnail": {
          "path": "assets/thumbnail.svg",
          "url": "https://raw.githubusercontent.com/Clamepending/agentmail-building/main/assets/thumbnail.svg",
          "alt": "AgentMail Building thumbnail"
        }
      },
      "keywords": [
        "agentmail",
        "vibe-research",
        "setup available",
        "Communication",
        "plugin",
        "API",
        ".communications-plugin-card",
        "AgentMail API key",
        "agentMailApiKey",
        "agentMailApiKeyConfigured",
        "Inbox ID",
        "agentMailInboxId",
        "Communications agent",
        "agentMailProviderId",
        "Enable the building",
        "Turn on the AgentMail listener.",
        "installed",
        "Save mail variables",
        "Add the API key and inbox the listener should watch.",
        "Reply from one session",
        "Incoming email is routed into the dedicated AgentMail communications session."
      ],
      "visual": {
        "logo": "agentmail",
        "shape": "plugin"
      },
      "footprint": {
        "width": 2,
        "height": 2,
        "shape": "plugin",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1
          }
        ]
      },
      "access": {
        "label": "vibe-research catalog",
        "detail": "AgentMail is mirrored from the Vibe Research building catalog as manifest-only setup metadata."
      },
      "capabilities": [
        {
          "type": "env",
          "name": "API",
          "detail": "Environment variable referenced by AgentMail setup notes.",
          "required": false
        }
      ],
      "tools": [
        {
          "type": "env",
          "name": "API",
          "detail": "Environment variable referenced by AgentMail setup notes.",
          "required": false
        }
      ],
      "onboarding": {
        "variables": [
          {
            "label": "AgentMail API key",
            "value": "Vibe Research setting: agentMailApiKey",
            "required": true,
            "secret": true
          },
          {
            "label": "Inbox ID",
            "value": "Vibe Research setting: agentMailInboxId",
            "required": true
          },
          {
            "label": "Communications agent",
            "value": "Vibe Research setting: agentMailProviderId",
            "required": true
          }
        ],
        "steps": [
          {
            "title": "Enable the building",
            "detail": "Turn on the AgentMail listener.",
            "completeWhen": {
              "type": "installed"
            }
          },
          {
            "title": "Save mail variables",
            "detail": "Add the API key and inbox the listener should watch.",
            "completeWhen": {
              "allConfigured": [
                "agentMailApiKeyConfigured",
                "agentMailInboxId"
              ]
            }
          },
          {
            "title": "Reply from one session",
            "detail": "Incoming email is routed into the dedicated AgentMail communications session."
          }
        ]
      }
    },
    {
      "id": "agentmall",
      "name": "AgentMall",
      "version": "0.1.0",
      "category": "Vibe Research",
      "description": "Browse Agent Town theme skins and switch the game between the default, snowy, and desert looks.",
      "status": "built in",
      "trust": "manifest-only",
      "icon": "market",
      "repo": {
        "url": "https://github.com/Clamepending/agentmall-building",
        "owner": "Clamepending",
        "name": "agentmall-building",
        "branch": "main",
        "manifestPath": "buildinghub/building.json",
        "readmePath": "README.md",
        "assetsPath": "assets"
      },
      "media": {
        "thumbnail": {
          "path": "assets/thumbnail.svg",
          "url": "https://raw.githubusercontent.com/Clamepending/agentmall-building/main/assets/thumbnail.svg",
          "alt": "AgentMall Building thumbnail"
        }
      },
      "keywords": [
        "agentmall",
        "vibe-research",
        "built in",
        "Vibe Research",
        "market",
        "Theme catalog",
        "default, snowy, desert",
        "Persistence",
        "browser local storage",
        "Open AgentMall",
        "Pick a theme from the Agent Town building panel.",
        "Apply a theme",
        "The selected look is saved for this browser and used by the game canvas."
      ],
      "visual": {
        "shape": "market"
      },
      "footprint": {
        "width": 3,
        "height": 2,
        "shape": "market",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1.5
          }
        ]
      },
      "access": {
        "label": "Local browser theme",
        "detail": "Uses browser-local Agent Town preferences only. No credentials or external services are required."
      },
      "onboarding": {
        "variables": [
          {
            "label": "Theme catalog",
            "value": "default, snowy, desert",
            "required": true
          },
          {
            "label": "Persistence",
            "value": "browser local storage",
            "required": true
          }
        ],
        "steps": [
          {
            "title": "Open AgentMall",
            "detail": "Pick a theme from the Agent Town building panel."
          },
          {
            "title": "Apply a theme",
            "detail": "The selected look is saved for this browser and used by the game canvas."
          }
        ]
      },
      "agentGuide": {
        "summary": "Use AgentMall when work involves Agent Town visual themes, game skins, or theme catalog behavior.",
        "useCases": [
          "Check which built-in Agent Town themes are available.",
          "Modify theme palettes for the visual game canvas.",
          "Verify the selected theme persists in browser-local preferences."
        ],
        "setup": [
          "Open Agent Town and use the AgentMall building panel to change the active theme.",
          "Keep theme data client-side unless a future task explicitly asks for shared settings."
        ]
      }
    },
    {
      "id": "automations",
      "name": "Automations",
      "version": "0.1.0",
      "category": "Planning",
      "description": "Schedule recurring Vibe Research helpers from the Berkeley Campanile-inspired clock tower.",
      "status": "built in",
      "trust": "manifest-only",
      "icon": "campanile",
      "repo": {
        "url": "https://github.com/Clamepending/automations-building",
        "owner": "Clamepending",
        "name": "automations-building",
        "branch": "main",
        "manifestPath": "buildinghub/building.json",
        "readmePath": "README.md",
        "assetsPath": "assets"
      },
      "media": {
        "thumbnail": {
          "path": "assets/thumbnail.svg",
          "url": "https://raw.githubusercontent.com/Clamepending/automations-building/main/assets/thumbnail.svg",
          "alt": "Automations Building thumbnail"
        }
      },
      "keywords": [
        "automations",
        "vibe-research",
        "built in",
        "Planning",
        "campanile",
        "Default workspace",
        "current project folder",
        "Cadence",
        "daily, weekly, or hourly schedule",
        "Prompt",
        "helper task instructions",
        "Open the tower",
        "Use the Automations tab from the Campanile building in Agent Town.",
        "Choose a schedule",
        "Pick the cadence and workspace where the helper should run.",
        "Write the task",
        "Describe the recurring helper work and save it."
      ],
      "visual": {
        "shape": "campanile"
      },
      "footprint": {
        "width": 2,
        "height": 3,
        "shape": "campanile",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1
          }
        ]
      },
      "access": {
        "label": "vibe-research catalog",
        "detail": "Automations is mirrored from the Vibe Research building catalog as manifest-only setup metadata."
      },
      "onboarding": {
        "variables": [
          {
            "label": "Default workspace",
            "value": "current project folder",
            "required": true
          },
          {
            "label": "Cadence",
            "value": "daily, weekly, or hourly schedule",
            "required": true
          },
          {
            "label": "Prompt",
            "value": "helper task instructions",
            "required": true
          }
        ],
        "steps": [
          {
            "title": "Open the tower",
            "detail": "Use the Automations tab from the Campanile building in Agent Town."
          },
          {
            "title": "Choose a schedule",
            "detail": "Pick the cadence and workspace where the helper should run."
          },
          {
            "title": "Write the task",
            "detail": "Describe the recurring helper work and save it."
          }
        ]
      }
    },
    {
      "id": "browser-use",
      "name": "Browser Use",
      "version": "0.1.0",
      "category": "Vibe Research",
      "description": "Start an OttoAuth browser fulfillment agent from a coding-agent session.",
      "status": "setup available",
      "trust": "helper-command",
      "icon": "browser",
      "repo": {
        "url": "https://github.com/Clamepending/browser-use-building",
        "owner": "Clamepending",
        "name": "browser-use-building",
        "branch": "main",
        "manifestPath": "buildinghub/building.json",
        "readmePath": "README.md",
        "assetsPath": "assets"
      },
      "media": {
        "thumbnail": {
          "path": "assets/thumbnail.svg",
          "url": "https://raw.githubusercontent.com/Clamepending/browser-use-building/main/assets/thumbnail.svg",
          "alt": "Browser Use Building thumbnail"
        }
      },
      "keywords": [
        "browser",
        "use",
        "vibe-research",
        "setup available",
        "Vibe Research",
        "VIBE_RESEARCH_BROWSER_USE_COMMAND",
        "VIBE_RESEARCH_BUILDING_GUIDES_DIR",
        "API",
        "vr-browser-use",
        ".browser-use-plugin-card",
        "Anthropic API key",
        "browserUseAnthropicApiKey",
        "browserUseAnthropicApiKeyConfigured",
        "Worker folder",
        "browserUseWorkerPath",
        "Profile folder",
        "browserUseProfileDir",
        "Max steps",
        "browserUseMaxTurns",
        "Enable the building",
        "Turn on browser-use requests.",
        "installed",
        "Save browser variables",
        "Add the API key, worker folder, profile folder, and run defaults."
      ],
      "visual": {
        "shape": "browser"
      },
      "footprint": {
        "width": 3,
        "height": 2,
        "shape": "browser",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1.5
          }
        ]
      },
      "access": {
        "label": "vibe-research catalog",
        "detail": "Browser Use is mirrored from the Vibe Research building catalog as manifest-only setup metadata."
      },
      "capabilities": [
        {
          "type": "env",
          "name": "VIBE_RESEARCH_BROWSER_USE_COMMAND",
          "detail": "Canonical helper command for local agents.",
          "required": false
        },
        {
          "type": "env",
          "name": "VIBE_RESEARCH_BUILDING_GUIDES_DIR",
          "detail": "Generated per-building guide directory.",
          "required": false
        },
        {
          "type": "env",
          "name": "API",
          "detail": "Environment variable referenced by Browser Use setup notes.",
          "required": false
        },
        {
          "type": "helper-command",
          "name": "vr-browser-use",
          "command": "vr-browser-use",
          "detail": "Starts the configured worker and waits for completion.",
          "required": false
        }
      ],
      "tools": [
        {
          "type": "env",
          "name": "VIBE_RESEARCH_BROWSER_USE_COMMAND",
          "detail": "Canonical helper command for local agents.",
          "required": false
        },
        {
          "type": "env",
          "name": "VIBE_RESEARCH_BUILDING_GUIDES_DIR",
          "detail": "Generated per-building guide directory.",
          "required": false
        },
        {
          "type": "env",
          "name": "API",
          "detail": "Environment variable referenced by Browser Use setup notes.",
          "required": false
        },
        {
          "type": "helper-command",
          "name": "vr-browser-use",
          "command": "vr-browser-use",
          "detail": "Starts the configured worker and waits for completion.",
          "required": false
        }
      ],
      "onboarding": {
        "variables": [
          {
            "label": "Anthropic API key",
            "value": "Vibe Research setting: browserUseAnthropicApiKey",
            "required": true,
            "secret": true
          },
          {
            "label": "Worker folder",
            "value": "Vibe Research setting: browserUseWorkerPath",
            "required": true
          },
          {
            "label": "Profile folder",
            "value": "Vibe Research setting: browserUseProfileDir",
            "required": true
          },
          {
            "label": "Max steps",
            "value": "Vibe Research setting: browserUseMaxTurns",
            "required": false
          }
        ],
        "steps": [
          {
            "title": "Enable the building",
            "detail": "Turn on browser-use requests.",
            "completeWhen": {
              "type": "installed"
            }
          },
          {
            "title": "Save browser variables",
            "detail": "Add the API key, worker folder, profile folder, and run defaults.",
            "completeWhen": {
              "allConfigured": [
                "browserUseAnthropicApiKeyConfigured",
                "browserUseWorkerPath",
                "browserUseProfileDir"
              ]
            }
          },
          {
            "title": "Call the helper",
            "detail": "Agents can run vr-browser-use --task \"...\" from a session."
          }
        ]
      },
      "agentGuide": {
        "summary": "Use Browser Use when a coding agent needs a separate browser-fulfillment worker for long or delegated web tasks.",
        "useCases": [
          "Start a browser worker from an existing agent session.",
          "Hand off a web task that needs OttoAuth browser state or an Anthropic-backed worker.",
          "Check missing setup before asking the human for an API key or profile path."
        ],
        "commands": [
          {
            "command": "vr-browser-use --task \"Describe the task here\" --wait",
            "label": "Run a browser-use task",
            "detail": "Starts the configured worker and waits for completion."
          },
          {
            "command": "sed -n '1,220p' \"$VIBE_RESEARCH_BUILDING_GUIDES_DIR/browser-use.md\"",
            "label": "Check generated guide",
            "detail": "Read the local setup checklist first."
          }
        ],
        "env": [
          {
            "name": "VIBE_RESEARCH_BROWSER_USE_COMMAND",
            "detail": "Canonical helper command for local agents.",
            "required": false
          },
          {
            "name": "VIBE_RESEARCH_BUILDING_GUIDES_DIR",
            "detail": "Generated per-building guide directory.",
            "required": false
          }
        ]
      }
    },
    {
      "id": "buildinghub",
      "name": "BuildingHub",
      "version": "0.1.0",
      "category": "Community",
      "description": "Load manifest-only community buildings from a local or remote BuildingHub catalog.",
      "status": "catalog ready",
      "trust": "manifest-only",
      "icon": "plugin",
      "repo": {
        "url": "https://github.com/Clamepending/buildinghub-building",
        "owner": "Clamepending",
        "name": "buildinghub-building",
        "branch": "main",
        "manifestPath": "buildinghub/building.json",
        "readmePath": "README.md",
        "assetsPath": "assets"
      },
      "media": {
        "thumbnail": {
          "path": "assets/thumbnail.svg",
          "url": "https://raw.githubusercontent.com/Clamepending/buildinghub-building/main/assets/thumbnail.svg",
          "alt": "BuildingHub Building thumbnail"
        }
      },
      "keywords": [
        "buildinghub",
        "vibe-research",
        "catalog ready",
        "Community",
        "plugin",
        "JSON",
        "URL",
        "Local catalog",
        "buildingHubCatalogPath",
        "Remote catalog",
        "buildingHubCatalogUrl",
        "Open BuildingHub",
        "Use the BuildingHub building for the local building catalog.",
        "installed",
        "Enable community catalogs",
        "Turn on reviewed community catalog loading only when you want shared manifest-only buildings.",
        "buildingHubEnabled",
        "Choose a source",
        "Point Vibe Research at a local BuildingHub checkout or a reviewed registry JSON URL.",
        "Review manifests",
        "Install community buildings after checking their setup notes and required capabilities."
      ],
      "visual": {
        "shape": "plugin"
      },
      "footprint": {
        "width": 2,
        "height": 2,
        "shape": "plugin",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1
          }
        ]
      },
      "access": {
        "label": "Manifest catalog",
        "detail": "BuildingHub catalogs contribute setup guides and visual buildings only. They do not run executable code inside Vibe Research."
      },
      "capabilities": [
        {
          "type": "env",
          "name": "JSON",
          "detail": "Environment variable referenced by BuildingHub setup notes.",
          "required": false
        },
        {
          "type": "env",
          "name": "URL",
          "detail": "Environment variable referenced by BuildingHub setup notes.",
          "required": false
        }
      ],
      "tools": [
        {
          "type": "env",
          "name": "JSON",
          "detail": "Environment variable referenced by BuildingHub setup notes.",
          "required": false
        },
        {
          "type": "env",
          "name": "URL",
          "detail": "Environment variable referenced by BuildingHub setup notes.",
          "required": false
        }
      ],
      "onboarding": {
        "variables": [
          {
            "label": "Local catalog",
            "value": "Vibe Research setting: buildingHubCatalogPath",
            "required": false
          },
          {
            "label": "Remote catalog",
            "value": "Vibe Research setting: buildingHubCatalogUrl",
            "required": false
          }
        ],
        "steps": [
          {
            "title": "Open BuildingHub",
            "detail": "Use the BuildingHub building for the local building catalog.",
            "completeWhen": {
              "type": "installed"
            }
          },
          {
            "title": "Enable community catalogs",
            "detail": "Turn on reviewed community catalog loading only when you want shared manifest-only buildings.",
            "completeWhen": {
              "setting": "buildingHubEnabled"
            }
          },
          {
            "title": "Choose a source",
            "detail": "Point Vibe Research at a local BuildingHub checkout or a reviewed registry JSON URL.",
            "completeWhen": {
              "anyConfigured": [
                "buildingHubCatalogPath",
                "buildingHubCatalogUrl"
              ]
            }
          },
          {
            "title": "Review manifests",
            "detail": "Install community buildings after checking their setup notes and required capabilities."
          }
        ]
      }
    },
    {
      "id": "ci-repair-shop",
      "name": "CI Repair Shop",
      "version": "0.1.0",
      "category": "Coding",
      "description": "Turn failing GitHub checks into focused repair-agent sessions with logs, repro commands, and PR updates.",
      "status": "built in",
      "trust": "manifest-only",
      "icon": "plugin",
      "repo": {
        "url": "https://github.com/Clamepending/ci-repair-shop-building",
        "owner": "Clamepending",
        "name": "ci-repair-shop-building",
        "branch": "main",
        "manifestPath": "buildinghub/building.json",
        "readmePath": "README.md",
        "assetsPath": "assets"
      },
      "media": {
        "thumbnail": {
          "path": "assets/thumbnail.svg",
          "url": "https://raw.githubusercontent.com/Clamepending/ci-repair-shop-building/main/assets/thumbnail.svg",
          "alt": "CI Repair Shop Building thumbnail"
        }
      },
      "keywords": [
        "ci",
        "repair",
        "shop",
        "vibe-research",
        "built in",
        "Coding",
        "plugin",
        "SHA",
        "GitHub access",
        "Codex connector or gh auth",
        "Repository checkout",
        "local workspace folder",
        "Repro command",
        "project test or check command",
        "Connect GitHub",
        "Make sure the host agent or local shell can read PR checks and logs.",
        "Pick a failing check",
        "Start from the PR check summary, job log, and branch SHA.",
        "Repair locally",
        "Have an agent reproduce the failure, patch, rerun the focused command, and prepare the PR update."
      ],
      "visual": {
        "shape": "plugin"
      },
      "footprint": {
        "width": 2,
        "height": 2,
        "shape": "plugin",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1
          }
        ]
      },
      "access": {
        "label": "GitHub + local tests",
        "detail": "Uses the GitHub connector or gh authentication plus the checked-out repository's test commands. Local terminal agents still need repo and GitHub access where they run."
      },
      "capabilities": [
        {
          "type": "env",
          "name": "SHA",
          "detail": "Environment variable referenced by CI Repair Shop setup notes.",
          "required": false
        }
      ],
      "tools": [
        {
          "type": "env",
          "name": "SHA",
          "detail": "Environment variable referenced by CI Repair Shop setup notes.",
          "required": false
        }
      ],
      "onboarding": {
        "variables": [
          {
            "label": "GitHub access",
            "value": "Codex connector or gh auth",
            "required": true
          },
          {
            "label": "Repository checkout",
            "value": "local workspace folder",
            "required": true
          },
          {
            "label": "Repro command",
            "value": "project test or check command",
            "required": true
          }
        ],
        "steps": [
          {
            "title": "Connect GitHub",
            "detail": "Make sure the host agent or local shell can read PR checks and logs."
          },
          {
            "title": "Pick a failing check",
            "detail": "Start from the PR check summary, job log, and branch SHA."
          },
          {
            "title": "Repair locally",
            "detail": "Have an agent reproduce the failure, patch, rerun the focused command, and prepare the PR update."
          }
        ]
      }
    },
    {
      "id": "discord",
      "name": "Discord",
      "version": "0.1.0",
      "category": "Communication",
      "description": "Route Discord server or DM activity through a dedicated provider connector.",
      "status": "connector-ready",
      "trust": "mcp",
      "icon": "post",
      "repo": {
        "url": "https://github.com/Clamepending/discord-building",
        "owner": "Clamepending",
        "name": "discord-building",
        "branch": "main",
        "manifestPath": "buildinghub/building.json",
        "readmePath": "README.md",
        "assetsPath": "assets"
      },
      "media": {
        "thumbnail": {
          "path": "assets/thumbnail.svg",
          "url": "https://raw.githubusercontent.com/Clamepending/discord-building/main/assets/thumbnail.svg",
          "alt": "Discord Building thumbnail"
        }
      },
      "keywords": [
        "discord",
        "external",
        "connector-ready",
        "Communication",
        "post",
        "MCP",
        "Discord MCP",
        "Discord app",
        "bot or webhook",
        "Server scope",
        "channels and DMs to monitor",
        "Agent access",
        "provider MCP or local bridge",
        "Create an app",
        "Create a Discord bot or webhook with the narrow channel permissions agents need.",
        "Connect the provider",
        "Add the Discord connector to the host/provider that will handle messages.",
        "Install the building",
        "Add this building to Agent Town once the external connector is ready.",
        "installed"
      ],
      "visual": {
        "shape": "post"
      },
      "footprint": {
        "width": 2,
        "height": 2,
        "shape": "post",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1
          }
        ]
      },
      "access": {
        "label": "External connector",
        "detail": "Requires a Discord bot, webhook, or provider MCP configured where the agent runs. Vibe Research does not inject Discord credentials into local terminal agents."
      },
      "capabilities": [
        {
          "type": "env",
          "name": "MCP",
          "detail": "Environment variable referenced by Discord setup notes.",
          "required": false
        },
        {
          "type": "mcp",
          "name": "Discord MCP",
          "detail": "Requires a Discord bot, webhook, or provider MCP configured where the agent runs. Vibe Research does not inject Discord credentials into local terminal agents.",
          "required": false
        }
      ],
      "tools": [
        {
          "type": "env",
          "name": "MCP",
          "detail": "Environment variable referenced by Discord setup notes.",
          "required": false
        },
        {
          "type": "mcp-tool",
          "name": "Discord MCP",
          "detail": "Requires a Discord bot, webhook, or provider MCP configured where the agent runs. Vibe Research does not inject Discord credentials into local terminal agents.",
          "required": false
        }
      ],
      "endpoints": [
        {
          "type": "mcp",
          "name": "Discord MCP",
          "auth": "mcp",
          "detail": "Requires a Discord bot, webhook, or provider MCP configured where the agent runs. Vibe Research does not inject Discord credentials into local terminal agents.",
          "required": false
        }
      ],
      "onboarding": {
        "variables": [
          {
            "label": "Discord app",
            "value": "bot or webhook",
            "required": false
          },
          {
            "label": "Server scope",
            "value": "channels and DMs to monitor",
            "required": false
          },
          {
            "label": "Agent access",
            "value": "provider MCP or local bridge",
            "required": false
          }
        ],
        "steps": [
          {
            "title": "Create an app",
            "detail": "Create a Discord bot or webhook with the narrow channel permissions agents need."
          },
          {
            "title": "Connect the provider",
            "detail": "Add the Discord connector to the host/provider that will handle messages."
          },
          {
            "title": "Install the building",
            "detail": "Add this building to Agent Town once the external connector is ready.",
            "completeWhen": {
              "type": "installed"
            }
          }
        ]
      }
    },
    {
      "id": "doghouse",
      "name": "Doghouse",
      "version": "0.1.0",
      "category": "Vibe Research",
      "description": "Adds a tiny doghouse to Agent Town with a dog that wanders around the map.",
      "status": "built in",
      "trust": "manifest-only",
      "icon": "doghouse",
      "repo": {
        "url": "https://github.com/Clamepending/doghouse-building",
        "owner": "Clamepending",
        "name": "doghouse-building",
        "branch": "main",
        "manifestPath": "buildinghub/building.json",
        "readmePath": "README.md",
        "assetsPath": "assets"
      },
      "media": {
        "thumbnail": {
          "path": "assets/thumbnail.svg",
          "url": "https://raw.githubusercontent.com/Clamepending/doghouse-building/main/assets/thumbnail.svg",
          "alt": "Doghouse Building thumbnail"
        }
      },
      "keywords": [
        "doghouse",
        "vibe-research",
        "built in",
        "Vibe Research",
        "Town canvas",
        "local Agent Town visual interface",
        "Open Agent Town",
        "The doghouse appears on the map automatically.",
        "installed",
        "Watch the patrol",
        "The town dog leaves the doghouse and wanders nearby while the map is open."
      ],
      "visual": {
        "shape": "doghouse"
      },
      "footprint": {
        "width": 1,
        "height": 1,
        "shape": "doghouse",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 0.5
          }
        ]
      },
      "access": {
        "label": "Agent Town companion",
        "detail": "Uses only the local Agent Town canvas. No setup, network access, or credentials are required."
      },
      "onboarding": {
        "variables": [
          {
            "label": "Town canvas",
            "value": "local Agent Town visual interface",
            "required": true
          }
        ],
        "steps": [
          {
            "title": "Open Agent Town",
            "detail": "The doghouse appears on the map automatically.",
            "completeWhen": {
              "type": "installed"
            }
          },
          {
            "title": "Watch the patrol",
            "detail": "The town dog leaves the doghouse and wanders nearby while the map is open."
          }
        ]
      },
      "agentGuide": {
        "summary": "Use Doghouse when work involves the decorative Agent Town doghouse or roaming dog animation.",
        "useCases": [
          "Verify Agent Town decorative sprites render correctly.",
          "Adjust the doghouse placement or dog patrol route.",
          "Check that map hit areas still open the Doghouse building panel."
        ]
      }
    },
    {
      "id": "github",
      "name": "GitHub",
      "version": "0.1.0",
      "category": "Coding",
      "description": "Triage PRs, inspect issues, and publish changes from agent sessions.",
      "status": "available in Codex",
      "trust": "manifest-only",
      "icon": "plugin",
      "repo": {
        "url": "https://github.com/Clamepending/github-building",
        "owner": "Clamepending",
        "name": "github-building",
        "branch": "main",
        "manifestPath": "buildinghub/building.json",
        "readmePath": "README.md",
        "assetsPath": "assets"
      },
      "media": {
        "thumbnail": {
          "path": "assets/thumbnail.svg",
          "url": "https://raw.githubusercontent.com/Clamepending/github-building/main/assets/thumbnail.svg",
          "alt": "GitHub Building thumbnail"
        }
      },
      "keywords": [
        "github",
        "plugin",
        "available in Codex",
        "Coding",
        "GitHub account",
        "Codex connector or gh auth",
        "Repository access",
        "granted in host agent",
        "Connect GitHub",
        "Enable the GitHub plugin or authenticate gh where agents run.",
        "Start a session",
        "Agents can inspect repositories, issues, pull requests, and checks."
      ],
      "visual": {
        "shape": "plugin"
      },
      "footprint": {
        "width": 2,
        "height": 2,
        "shape": "plugin",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1
          }
        ]
      },
      "access": {
        "label": "Host connector",
        "detail": "Available to host agents that have the GitHub connector or gh authentication. Local terminal agents need their own GitHub auth."
      },
      "onboarding": {
        "variables": [
          {
            "label": "GitHub account",
            "value": "Codex connector or gh auth",
            "required": true
          },
          {
            "label": "Repository access",
            "value": "granted in host agent",
            "required": true
          }
        ],
        "steps": [
          {
            "title": "Connect GitHub",
            "detail": "Enable the GitHub plugin or authenticate gh where agents run."
          },
          {
            "title": "Start a session",
            "detail": "Agents can inspect repositories, issues, pull requests, and checks."
          }
        ]
      }
    },
    {
      "id": "google-calendar",
      "name": "Google Calendar",
      "version": "0.1.0",
      "category": "Planning",
      "description": "Look up events and availability from connected agent tooling.",
      "status": "MCP-ready",
      "trust": "mcp",
      "icon": "plugin",
      "repo": {
        "url": "https://github.com/Clamepending/google-calendar-building",
        "owner": "Clamepending",
        "name": "google-calendar-building",
        "branch": "main",
        "manifestPath": "buildinghub/building.json",
        "readmePath": "README.md",
        "assetsPath": "assets"
      },
      "media": {
        "thumbnail": {
          "path": "assets/thumbnail.svg",
          "url": "https://raw.githubusercontent.com/Clamepending/google-calendar-building/main/assets/thumbnail.svg",
          "alt": "Google Calendar Building thumbnail"
        }
      },
      "keywords": [
        "google",
        "calendar",
        "mcp",
        "MCP-ready",
        "Planning",
        "plugin",
        "Google Calendar MCP",
        "Google account",
        "connected MCP account",
        "Calendar scope",
        "event and availability access",
        "Connect the MCP",
        "Authorize Calendar in the agent host that will run this building.",
        "Pick calendars",
        "Keep the account scope narrow enough for agents to reason about."
      ],
      "visual": {
        "shape": "plugin"
      },
      "footprint": {
        "width": 2,
        "height": 2,
        "shape": "plugin",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1
          }
        ]
      },
      "access": {
        "label": "Host connector",
        "detail": "Available to host agents with the Google Calendar connector enabled. Local terminal agents need their own provider calendar connector."
      },
      "capabilities": [
        {
          "type": "env",
          "name": "MCP",
          "detail": "Environment variable referenced by Google Calendar setup notes.",
          "required": false
        },
        {
          "type": "mcp",
          "name": "Google Calendar MCP",
          "detail": "Available to host agents with the Google Calendar connector enabled. Local terminal agents need their own provider calendar connector.",
          "required": false
        }
      ],
      "tools": [
        {
          "type": "env",
          "name": "MCP",
          "detail": "Environment variable referenced by Google Calendar setup notes.",
          "required": false
        },
        {
          "type": "mcp-tool",
          "name": "Google Calendar MCP",
          "detail": "Available to host agents with the Google Calendar connector enabled. Local terminal agents need their own provider calendar connector.",
          "required": false
        }
      ],
      "endpoints": [
        {
          "type": "mcp",
          "name": "Google Calendar MCP",
          "auth": "mcp",
          "detail": "Available to host agents with the Google Calendar connector enabled. Local terminal agents need their own provider calendar connector.",
          "required": false
        }
      ],
      "onboarding": {
        "variables": [
          {
            "label": "Google account",
            "value": "connected MCP account",
            "required": true
          },
          {
            "label": "Calendar scope",
            "value": "event and availability access",
            "required": true
          }
        ],
        "steps": [
          {
            "title": "Connect the MCP",
            "detail": "Authorize Calendar in the agent host that will run this building."
          },
          {
            "title": "Pick calendars",
            "detail": "Keep the account scope narrow enough for agents to reason about."
          }
        ]
      }
    },
    {
      "id": "google-drive",
      "name": "Google Drive",
      "version": "0.1.0",
      "category": "Knowledge",
      "description": "Search Docs, Sheets, Slides, and shared project files when the host agent supports it.",
      "status": "MCP-ready",
      "trust": "mcp",
      "icon": "plugin",
      "repo": {
        "url": "https://github.com/Clamepending/google-drive-building",
        "owner": "Clamepending",
        "name": "google-drive-building",
        "branch": "main",
        "manifestPath": "buildinghub/building.json",
        "readmePath": "README.md",
        "assetsPath": "assets"
      },
      "media": {
        "thumbnail": {
          "path": "assets/thumbnail.svg",
          "url": "https://raw.githubusercontent.com/Clamepending/google-drive-building/main/assets/thumbnail.svg",
          "alt": "Google Drive Building thumbnail"
        }
      },
      "keywords": [
        "google",
        "drive",
        "mcp",
        "MCP-ready",
        "Knowledge",
        "plugin",
        "CLI",
        "Google Drive MCP",
        "Google account",
        "connected host MCP account",
        "Shared drive scope",
        "docs/sheets/slides access",
        "Local terminal agents",
        "provider MCP required",
        "Connect the MCP",
        "Authorize Drive in the host agent that will use this building.",
        "Name the source",
        "Tell agents which folders, docs, or sheets are relevant.",
        "Local agents",
        "Configure Google Drive in the local CLI/provider separately if a terminal agent needs direct access."
      ],
      "visual": {
        "shape": "plugin"
      },
      "footprint": {
        "width": 2,
        "height": 2,
        "shape": "plugin",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1
          }
        ]
      },
      "access": {
        "label": "Host connector",
        "detail": "Available to host agents with the Google Drive connector enabled. Vibe Research does not inject Drive tools into local terminal agents."
      },
      "capabilities": [
        {
          "type": "env",
          "name": "MCP",
          "detail": "Environment variable referenced by Google Drive setup notes.",
          "required": false
        },
        {
          "type": "env",
          "name": "CLI",
          "detail": "Environment variable referenced by Google Drive setup notes.",
          "required": false
        },
        {
          "type": "mcp",
          "name": "Google Drive MCP",
          "detail": "Available to host agents with the Google Drive connector enabled. Vibe Research does not inject Drive tools into local terminal agents.",
          "required": false
        }
      ],
      "tools": [
        {
          "type": "env",
          "name": "MCP",
          "detail": "Environment variable referenced by Google Drive setup notes.",
          "required": false
        },
        {
          "type": "env",
          "name": "CLI",
          "detail": "Environment variable referenced by Google Drive setup notes.",
          "required": false
        },
        {
          "type": "mcp-tool",
          "name": "Google Drive MCP",
          "detail": "Available to host agents with the Google Drive connector enabled. Vibe Research does not inject Drive tools into local terminal agents.",
          "required": false
        }
      ],
      "endpoints": [
        {
          "type": "mcp",
          "name": "Google Drive MCP",
          "auth": "mcp",
          "detail": "Available to host agents with the Google Drive connector enabled. Vibe Research does not inject Drive tools into local terminal agents.",
          "required": false
        }
      ],
      "onboarding": {
        "variables": [
          {
            "label": "Google account",
            "value": "connected host MCP account",
            "required": true
          },
          {
            "label": "Shared drive scope",
            "value": "docs/sheets/slides access",
            "required": false
          },
          {
            "label": "Local terminal agents",
            "value": "provider MCP required",
            "required": false
          }
        ],
        "steps": [
          {
            "title": "Connect the MCP",
            "detail": "Authorize Drive in the host agent that will use this building."
          },
          {
            "title": "Name the source",
            "detail": "Tell agents which folders, docs, or sheets are relevant."
          },
          {
            "title": "Local agents",
            "detail": "Configure Google Drive in the local CLI/provider separately if a terminal agent needs direct access."
          }
        ]
      }
    },
    {
      "id": "harbor",
      "name": "Harbor",
      "version": "0.1.0",
      "category": "Evals",
      "description": "Evaluate agents and models in sandboxed Harbor tasks, datasets, and jobs.",
      "status": "CLI install required",
      "trust": "helper-command",
      "icon": "lab",
      "repo": {
        "url": "https://github.com/Clamepending/harbor-building",
        "owner": "Clamepending",
        "name": "harbor-building",
        "branch": "main",
        "manifestPath": "buildinghub/building.json",
        "readmePath": "README.md",
        "assetsPath": "assets"
      },
      "media": {
        "thumbnail": {
          "path": "assets/thumbnail.svg",
          "url": "https://raw.githubusercontent.com/Clamepending/harbor-building/main/assets/thumbnail.svg",
          "alt": "Harbor Building thumbnail"
        }
      },
      "keywords": [
        "harbor",
        "external",
        "CLI install required",
        "Evals",
        "lab",
        "OPENAI_API_KEY",
        "ANTHROPIC_API_KEY",
        "GEMINI_API_KEY",
        "DAYTONA_API_KEY",
        "MODAL_TOKEN_ID",
        "MODAL_TOKEN_SECRET",
        "CLI",
        "PATH",
        "E2B",
        "API",
        "Harbor CLI",
        "harbor on PATH, usually from uv tool install harbor",
        "Sandbox runtime",
        "Docker locally, or Daytona, Modal, E2B, or Runloop for cloud runs",
        "Model credentials",
        "OPENAI_API_KEY, ANTHROPIC_API_KEY, GEMINI_API_KEY, or provider-specific env",
        "Dataset or task",
        "Harbor registry dataset, local task directory, local dataset path, or job config",
        "Install Harbor"
      ],
      "visual": {
        "shape": "lab"
      },
      "footprint": {
        "width": 3,
        "height": 2,
        "shape": "lab",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1.5
          }
        ]
      },
      "access": {
        "label": "Harbor CLI + sandbox runtime",
        "detail": "Requires the harbor CLI where the agent runs, plus Docker or a configured cloud sandbox provider. Model and sandbox provider API credentials must live in the agent runtime; Vibe Research only tracks the building and generated guide."
      },
      "capabilities": [
        {
          "type": "env",
          "name": "OPENAI_API_KEY",
          "detail": "Model provider key for OpenAI-backed Harbor runs; keep secret.",
          "required": false
        },
        {
          "type": "env",
          "name": "ANTHROPIC_API_KEY",
          "detail": "Model provider key for Anthropic-backed Harbor runs; keep secret.",
          "required": false
        },
        {
          "type": "env",
          "name": "GEMINI_API_KEY",
          "detail": "Model provider key for Gemini-backed Harbor runs; keep secret.",
          "required": false
        },
        {
          "type": "env",
          "name": "DAYTONA_API_KEY",
          "detail": "Cloud sandbox provider key when using Daytona environments; keep secret.",
          "required": false
        },
        {
          "type": "env",
          "name": "MODAL_TOKEN_ID",
          "detail": "Cloud sandbox credentials when using Modal environments; keep secret.",
          "required": false
        },
        {
          "type": "env",
          "name": "MODAL_TOKEN_SECRET",
          "detail": "Cloud sandbox credentials when using Modal environments; keep secret.",
          "required": false
        },
        {
          "type": "env",
          "name": "CLI",
          "detail": "Environment variable referenced by Harbor setup notes.",
          "required": false
        },
        {
          "type": "env",
          "name": "PATH",
          "detail": "Environment variable referenced by Harbor setup notes.",
          "required": false
        },
        {
          "type": "env",
          "name": "E2B",
          "detail": "Environment variable referenced by Harbor setup notes.",
          "required": false
        },
        {
          "type": "env",
          "name": "API",
          "detail": "Environment variable referenced by Harbor setup notes.",
          "required": false
        },
        {
          "type": "helper-command",
          "name": "harbor",
          "command": "harbor",
          "detail": "Shows registry datasets; Harbor CLI versions may expose singular or plural dataset commands.",
          "required": false
        }
      ],
      "tools": [
        {
          "type": "env",
          "name": "OPENAI_API_KEY",
          "detail": "Model provider key for OpenAI-backed Harbor runs; keep secret.",
          "required": false
        },
        {
          "type": "env",
          "name": "ANTHROPIC_API_KEY",
          "detail": "Model provider key for Anthropic-backed Harbor runs; keep secret.",
          "required": false
        },
        {
          "type": "env",
          "name": "GEMINI_API_KEY",
          "detail": "Model provider key for Gemini-backed Harbor runs; keep secret.",
          "required": false
        },
        {
          "type": "env",
          "name": "DAYTONA_API_KEY",
          "detail": "Cloud sandbox provider key when using Daytona environments; keep secret.",
          "required": false
        },
        {
          "type": "env",
          "name": "MODAL_TOKEN_ID",
          "detail": "Cloud sandbox credentials when using Modal environments; keep secret.",
          "required": false
        },
        {
          "type": "env",
          "name": "MODAL_TOKEN_SECRET",
          "detail": "Cloud sandbox credentials when using Modal environments; keep secret.",
          "required": false
        },
        {
          "type": "env",
          "name": "CLI",
          "detail": "Environment variable referenced by Harbor setup notes.",
          "required": false
        },
        {
          "type": "env",
          "name": "PATH",
          "detail": "Environment variable referenced by Harbor setup notes.",
          "required": false
        },
        {
          "type": "env",
          "name": "E2B",
          "detail": "Environment variable referenced by Harbor setup notes.",
          "required": false
        },
        {
          "type": "env",
          "name": "API",
          "detail": "Environment variable referenced by Harbor setup notes.",
          "required": false
        },
        {
          "type": "helper-command",
          "name": "harbor",
          "command": "harbor",
          "detail": "Shows registry datasets; Harbor CLI versions may expose singular or plural dataset commands.",
          "required": false
        }
      ],
      "endpoints": [
        {
          "type": "docs",
          "name": "Harbor docs",
          "url": "https://www.harborframework.com/docs",
          "auth": "none",
          "detail": "Documentation for Harbor.",
          "required": false
        },
        {
          "type": "docs",
          "name": "Getting started",
          "url": "https://www.harborframework.com/docs/getting-started",
          "auth": "none",
          "detail": "Documentation for Harbor.",
          "required": false
        },
        {
          "type": "docs",
          "name": "Agents",
          "url": "https://www.harborframework.com/docs/agents",
          "auth": "none",
          "detail": "Documentation for Harbor.",
          "required": false
        },
        {
          "type": "docs",
          "name": "Tasks",
          "url": "https://www.harborframework.com/docs/tasks",
          "auth": "none",
          "detail": "Documentation for Harbor.",
          "required": false
        },
        {
          "type": "docs",
          "name": "Registry",
          "url": "https://registry.harborframework.com/",
          "auth": "none",
          "detail": "Documentation for Harbor.",
          "required": false
        },
        {
          "type": "docs",
          "name": "Trajectory format",
          "url": "https://www.harborframework.com/docs/trajectory-format",
          "auth": "none",
          "detail": "Documentation for Harbor.",
          "required": false
        }
      ],
      "onboarding": {
        "variables": [
          {
            "label": "Harbor CLI",
            "value": "harbor on PATH, usually from uv tool install harbor",
            "required": true
          },
          {
            "label": "Sandbox runtime",
            "value": "Docker locally, or Daytona, Modal, E2B, or Runloop for cloud runs",
            "required": true
          },
          {
            "label": "Model credentials",
            "value": "OPENAI_API_KEY, ANTHROPIC_API_KEY, GEMINI_API_KEY, or provider-specific env",
            "required": true
          },
          {
            "label": "Dataset or task",
            "value": "Harbor registry dataset, local task directory, local dataset path, or job config",
            "required": true
          }
        ],
        "steps": [
          {
            "title": "Install Harbor",
            "detail": "Install the CLI in the agent environment and confirm harbor --help works."
          },
          {
            "title": "Choose the eval",
            "detail": "Pick a registry dataset, local task path, local dataset, or job config before starting a run."
          },
          {
            "title": "Confirm runtime",
            "detail": "Verify Docker or the selected cloud sandbox credentials are available."
          },
          {
            "title": "Install the building",
            "detail": "Add the Harbor lab once agents should consider Harbor evals for this project.",
            "completeWhen": {
              "type": "installed"
            }
          }
        ]
      },
      "agentGuide": {
        "summary": "Use Harbor when an agent needs to evaluate or optimize agents/models in sandboxed task environments, especially when the answer should be backed by reproducible trials instead of an ad hoc local run.",
        "useCases": [
          "Run a registered benchmark dataset against a named agent and model.",
          "Run a local Harbor task or dataset to test an agent in a containerized sandbox.",
          "Compare CLI agents such as Codex, Claude Code, Gemini CLI, OpenHands, or a custom Harbor agent import.",
          "Generate rollouts, trajectories, or rewards for eval, prompt optimization, SFT, or RL workflows.",
          "Create reproducible evidence for an agent-evaluation result before admitting it into project memory.",
          "Scale an eval across cloud sandboxes after checking quota, credentials, and cost approval."
        ],
        "setup": [
          "Read the Harbor docs for the task shape before creating or adapting datasets.",
          "Run command -v harbor and harbor --help before assuming the CLI is installed.",
          "Use Harbor only when sandboxed agent evaluation is warranted; keep quick local checks outside Harbor.",
          "Record dataset or task version, agent, model, sandbox provider, command, output directory, and commit in result docs.",
          "Ask before running expensive cloud sandboxes or broad benchmark sweeps.",
          "Do not print or store model keys, sandbox provider keys, or private task data in the Library or generated guides."
        ],
        "commands": [
          {
            "command": "command -v harbor && harbor --help",
            "label": "Check Harbor CLI",
            "detail": "Confirms the CLI is installed in the current agent environment."
          },
          {
            "command": "harbor dataset list || harbor datasets list",
            "label": "List datasets",
            "detail": "Shows registry datasets; Harbor CLI versions may expose singular or plural dataset commands."
          },
          {
            "command": "harbor run -d \"<org/name>\" -m \"<model>\" -a \"<agent>\"",
            "label": "Run registered dataset",
            "detail": "Runs a registry-backed eval for the chosen model and agent."
          },
          {
            "command": "harbor run -p \"<path/to/dataset>\" -m \"<model>\" -a \"<agent>\"",
            "label": "Run local dataset",
            "detail": "Runs a local Harbor task or dataset directory."
          },
          {
            "command": "harbor run -c \"<path/to/job.yaml>\"",
            "label": "Run job config",
            "detail": "Runs a multi-trial Harbor job configuration."
          },
          {
            "command": "harbor run -d \"<org/name>\" -m \"<model>\" -a \"<agent>\" --env \"daytona\" -n 32",
            "label": "Run cloud sandbox",
            "detail": "Example horizontal cloud run; verify provider credentials, quota, and cost approval first."
          },
          {
            "command": "harbor run -d \"<dataset@version>\" --agent-import-path path.to.agent:SomeAgent",
            "label": "Run custom agent",
            "detail": "Uses Harbor's custom agent import hook without modifying Harbor source."
          }
        ],
        "docs": [
          {
            "label": "Harbor docs",
            "url": "https://www.harborframework.com/docs"
          },
          {
            "label": "Getting started",
            "url": "https://www.harborframework.com/docs/getting-started"
          },
          {
            "label": "Agents",
            "url": "https://www.harborframework.com/docs/agents"
          },
          {
            "label": "Tasks",
            "url": "https://www.harborframework.com/docs/tasks"
          },
          {
            "label": "Registry",
            "url": "https://registry.harborframework.com/"
          },
          {
            "label": "Trajectory format",
            "url": "https://www.harborframework.com/docs/trajectory-format"
          }
        ],
        "env": [
          {
            "name": "OPENAI_API_KEY",
            "detail": "Model provider key for OpenAI-backed Harbor runs; keep secret.",
            "required": false
          },
          {
            "name": "ANTHROPIC_API_KEY",
            "detail": "Model provider key for Anthropic-backed Harbor runs; keep secret.",
            "required": false
          },
          {
            "name": "GEMINI_API_KEY",
            "detail": "Model provider key for Gemini-backed Harbor runs; keep secret.",
            "required": false
          },
          {
            "name": "DAYTONA_API_KEY",
            "detail": "Cloud sandbox provider key when using Daytona environments; keep secret.",
            "required": false
          },
          {
            "name": "MODAL_TOKEN_ID / MODAL_TOKEN_SECRET",
            "detail": "Cloud sandbox credentials when using Modal environments; keep secret.",
            "required": false
          }
        ]
      }
    },
    {
      "id": "home-automation",
      "name": "Home Automation",
      "version": "0.1.0",
      "category": "Home",
      "description": "Control lights and home devices through Home Assistant, HomeKit, Matter, or a similar bridge.",
      "status": "bridge required",
      "trust": "manifest-only",
      "icon": "plugin",
      "repo": {
        "url": "https://github.com/Clamepending/home-automation-building",
        "owner": "Clamepending",
        "name": "home-automation-building",
        "branch": "main",
        "manifestPath": "buildinghub/building.json",
        "readmePath": "README.md",
        "assetsPath": "assets"
      },
      "media": {
        "thumbnail": {
          "path": "assets/thumbnail.svg",
          "url": "https://raw.githubusercontent.com/Clamepending/home-automation-building/main/assets/thumbnail.svg",
          "alt": "Home Automation Building thumbnail"
        }
      },
      "keywords": [
        "home",
        "automation",
        "external",
        "bridge required",
        "plugin",
        "Controller",
        "Home Assistant, HomeKit, or Matter",
        "Device scope",
        "lights, switches, scenes",
        "Safety",
        "confirm destructive actions",
        "Connect a controller",
        "Expose only the lights, switches, or scenes the agent should control.",
        "Add safety rules",
        "Require confirmation for locks, alarms, appliances, or anything safety-critical.",
        "Install the building",
        "Add this building once the local bridge is ready.",
        "installed"
      ],
      "visual": {
        "shape": "plugin"
      },
      "footprint": {
        "width": 2,
        "height": 2,
        "shape": "plugin",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1
          }
        ]
      },
      "access": {
        "label": "Local bridge",
        "detail": "Requires a Home Assistant, HomeKit, Matter, or device-specific bridge configured where the agent runs. Vibe Research does not grant device control by itself."
      },
      "onboarding": {
        "variables": [
          {
            "label": "Controller",
            "value": "Home Assistant, HomeKit, or Matter",
            "required": false
          },
          {
            "label": "Device scope",
            "value": "lights, switches, scenes",
            "required": false
          },
          {
            "label": "Safety",
            "value": "confirm destructive actions",
            "required": false
          }
        ],
        "steps": [
          {
            "title": "Connect a controller",
            "detail": "Expose only the lights, switches, or scenes the agent should control."
          },
          {
            "title": "Add safety rules",
            "detail": "Require confirmation for locks, alarms, appliances, or anything safety-critical."
          },
          {
            "title": "Install the building",
            "detail": "Add this building once the local bridge is ready.",
            "completeWhen": {
              "type": "installed"
            }
          }
        ]
      }
    },
    {
      "id": "instacart",
      "name": "Instacart",
      "version": "0.1.0",
      "category": "Commerce",
      "description": "Let agents create Instacart shopping list and recipe links for user-reviewed checkout through Instacart Marketplace.",
      "status": "community",
      "trust": "mcp",
      "icon": "shopping-cart",
      "docsUrl": "https://docs.instacart.com/developer_platform_api/guide/tutorials/mcp/",
      "repo": {
        "url": "https://github.com/Clamepending/instacart-building",
        "owner": "Clamepending",
        "name": "instacart-building",
        "branch": "main",
        "manifestPath": "buildinghub/building.json",
        "readmePath": "README.md",
        "assetsPath": "assets"
      },
      "media": {
        "thumbnail": {
          "path": "assets/thumbnail.svg",
          "url": "https://raw.githubusercontent.com/Clamepending/instacart-building/main/assets/thumbnail.svg",
          "alt": "Instacart Building thumbnail"
        }
      },
      "keywords": [
        "groceries",
        "shopping",
        "commerce",
        "mcp",
        "checkout"
      ],
      "visual": {
        "shape": "market"
      },
      "footprint": {
        "width": 3,
        "height": 2,
        "shape": "market",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1.5
          }
        ]
      },
      "access": {
        "label": "Instacart Developer Platform",
        "detail": "Requires an Instacart Developer Platform API key where the agent or MCP client runs. The public Developer Platform and MCP path creates shoppable recipe or shopping-list pages; user checkout still happens on Instacart Marketplace. Direct order creation is a separate Instacart Connect retailer-partner workflow and must not be treated as a general consumer ordering API."
      },
      "tools": [
        {
          "type": "env",
          "name": "INSTACART_API_KEY",
          "detail": "Instacart Developer Platform key used as a Bearer token.",
          "required": true
        },
        {
          "type": "mcp-tool",
          "name": "Instacart MCP server",
          "detail": "Official Instacart MCP surface for recipe and shopping-list tools.",
          "required": false
        },
        {
          "type": "api",
          "name": "Create shopping list page",
          "endpoint": "products-link",
          "detail": "Create a Marketplace shopping-list URL for human checkout review.",
          "required": false
        },
        {
          "type": "api",
          "name": "Nearby retailers",
          "endpoint": "nearby-retailers",
          "detail": "List nearby retailer banners for planning.",
          "required": false
        }
      ],
      "endpoints": [
        {
          "type": "mcp",
          "name": "Instacart MCP development",
          "url": "https://mcp.dev.instacart.tools/mcp",
          "auth": "api-key",
          "detail": "Development MCP endpoint requiring an Authorization bearer token.",
          "required": false
        },
        {
          "type": "mcp",
          "name": "Instacart MCP production",
          "url": "https://mcp.instacart.com/mcp",
          "auth": "api-key",
          "detail": "Production MCP endpoint requiring approved production access.",
          "required": false
        },
        {
          "type": "api",
          "name": "products-link",
          "method": "POST",
          "urlTemplate": "https://connect.dev.instacart.tools/idp/v1/products/products_link",
          "auth": "api-key",
          "detail": "Creates a Marketplace shopping-list page for human review.",
          "required": false
        },
        {
          "type": "api",
          "name": "nearby-retailers",
          "method": "GET",
          "urlTemplate": "https://connect.dev.instacart.tools/idp/v1/retailers?postal_code={postal_code}&country_code={country_code}",
          "auth": "api-key",
          "detail": "Lists nearby retailer banners for planning.",
          "required": false
        }
      ],
      "capabilities": [
        {
          "type": "env",
          "name": "INSTACART_API_KEY",
          "detail": "Instacart Developer Platform key used as a Bearer token. Never print, log, or commit this value.",
          "required": true
        },
        {
          "type": "mcp",
          "name": "Instacart MCP server",
          "detail": "Development URL: https://mcp.dev.instacart.tools/mcp. Production URL: https://mcp.instacart.com/mcp. Requires Authorization bearer token.",
          "required": false
        },
        {
          "type": "api",
          "name": "Create shopping list page",
          "detail": "POST /idp/v1/products/products_link creates a Marketplace shopping-list URL that the user reviews, adds to cart, and checks out from.",
          "required": false
        },
        {
          "type": "api",
          "name": "Nearby retailers",
          "detail": "GET /idp/v1/retailers?postal_code=...&country_code=US|CA lists nearby retailer banners for planning.",
          "required": false
        }
      ],
      "onboarding": {
        "variables": [
          {
            "label": "Developer Platform key",
            "value": "INSTACART_API_KEY in agent environment",
            "required": true,
            "secret": true
          },
          {
            "label": "Environment",
            "value": "development or production Instacart API/MCP endpoint",
            "required": true
          },
          {
            "label": "Checkout rule",
            "value": "human reviews cart, delivery details, substitutions, and total before paying",
            "required": true
          }
        ],
        "steps": [
          {
            "title": "Get API access",
            "detail": "Apply for Instacart Developer Platform access and create a development key in the Instacart Developer Dashboard."
          },
          {
            "title": "Test MCP connection",
            "detail": "Use MCP inspector against https://mcp.dev.instacart.tools/mcp with Authorization set to a Bearer token, then verify create-recipe and create-shopping-list tools are listed."
          },
          {
            "title": "Generate a shopping handoff",
            "detail": "Have the agent create a recipe or shopping-list page from the user's requested items, then send the returned Instacart URL for human review."
          },
          {
            "title": "Install the building",
            "detail": "Add Instacart to Agent Town after the key, endpoint, and checkout-confirmation rule are documented.",
            "completeWhen": {
              "type": "installed"
            }
          }
        ]
      },
      "agentGuide": {
        "summary": "Use Instacart when an agent needs to turn grocery requests, recipes, or meal plans into an Instacart Marketplace shopping-list or recipe link for user-reviewed checkout.",
        "useCases": [
          "Create a shoppable Instacart list from a user's grocery request or meal plan.",
          "Use the official Instacart MCP server so the agent can call create-recipe or create-shopping-list without hand-writing API payloads.",
          "Check nearby retailer banners by postal code before preparing a shopping handoff.",
          "Explain that the user must complete checkout on Instacart Marketplace unless there is a separate authorized Connect retailer integration."
        ],
        "setup": [
          "Confirm INSTACART_API_KEY is available only in the agent runtime or MCP client configuration; never write it to the Library, result docs, screenshots, or commits.",
          "Use the development API or MCP endpoint until the integration is reviewed and a production key is approved.",
          "For public Developer Platform use, create a shopping list or recipe URL and hand it to the user for cart review and checkout.",
          "Do not place or imply final orders, payments, age-restricted purchases, substitutions, tips, or delivery windows without explicit human confirmation in the active conversation.",
          "Treat Instacart Connect Fulfillment order creation as retailer-partner infrastructure only; use it only when the workspace already has authorized retailer credentials, catalog/store setup, and a customer checkout flow."
        ],
        "commands": [
          {
            "label": "Read generated guide",
            "command": "sed -n '1,220p' \"$VIBE_RESEARCH_BUILDING_GUIDES_DIR/instacart.md\"",
            "detail": "Start here before using the building from an agent session."
          },
          {
            "label": "Inspect MCP server",
            "command": "npx @modelcontextprotocol/inspector",
            "detail": "Set Transport Type to Streamable HTTP, URL to https://mcp.dev.instacart.tools/mcp, and Authorization to a Bearer token."
          },
          {
            "label": "Set development API base",
            "command": "export INSTACART_API_BASE_URL=https://connect.dev.instacart.tools",
            "detail": "Use the production base URL only after Instacart approves production access."
          },
          {
            "label": "Create shopping list page",
            "command": "curl -X POST \"$INSTACART_API_BASE_URL/idp/v1/products/products_link\" -H \"Authorization: Bearer $INSTACART_API_KEY\" -H \"Content-Type: application/json\" -d @instacart-shopping-list.json",
            "detail": "Payload should include title and line_items with line_item_measurements."
          },
          {
            "label": "List nearby retailers",
            "command": "curl \"$INSTACART_API_BASE_URL/idp/v1/retailers?postal_code=${INSTACART_POSTAL_CODE:?set}&country_code=${INSTACART_COUNTRY_CODE:-US}\" -H \"Authorization: Bearer $INSTACART_API_KEY\"",
            "detail": "Use the user's postal code only when they have provided it for this task."
          }
        ],
        "env": [
          {
            "name": "INSTACART_API_KEY",
            "detail": "Instacart Developer Platform API key used as Authorization bearer token.",
            "required": true
          },
          {
            "name": "INSTACART_API_BASE_URL",
            "detail": "Optional REST base URL. Defaults should be development https://connect.dev.instacart.tools until production approval.",
            "required": false
          },
          {
            "name": "INSTACART_MCP_URL",
            "detail": "Optional MCP URL, usually https://mcp.dev.instacart.tools/mcp for development or https://mcp.instacart.com/mcp for production.",
            "required": false
          },
          {
            "name": "INSTACART_POSTAL_CODE",
            "detail": "Only set from a postal code the user provided for the current grocery task.",
            "required": false
          },
          {
            "name": "INSTACART_COUNTRY_CODE",
            "detail": "US or CA. Defaults to US in the sample command.",
            "required": false
          },
          {
            "name": "VIBE_RESEARCH_BUILDING_GUIDES_DIR",
            "detail": "Generated per-building guide directory.",
            "required": false
          }
        ],
        "docs": [
          {
            "label": "Instacart MCP tutorial",
            "url": "https://docs.instacart.com/developer_platform_api/guide/tutorials/mcp/"
          },
          {
            "label": "Developer Platform introduction",
            "url": "https://docs.instacart.com/developer_platform_api/"
          },
          {
            "label": "API reference overview",
            "url": "https://docs.instacart.com/developer_platform_api/api/overview/"
          },
          {
            "label": "Create shopping list page",
            "url": "https://docs.instacart.com/developer_platform_api/api/products/create_shopping_list_page/"
          },
          {
            "label": "Nearby retailers",
            "url": "https://docs.instacart.com/developer_platform_api/api/retailers/get_nearby_retailers/"
          },
          {
            "label": "Instacart Connect APIs",
            "url": "https://docs.instacart.com/connect/"
          },
          {
            "label": "Connect Fulfillment API",
            "url": "https://docs.instacart.com/connect/fulfillment/"
          }
        ]
      }
    },
    {
      "id": "knowledge-base",
      "name": "Library",
      "version": "0.1.0",
      "category": "Vibe Research",
      "description": "Search and edit the shared markdown Library that agents receive in their prompt.",
      "status": "built in",
      "trust": "manifest-only",
      "icon": "library",
      "repo": {
        "url": "https://github.com/Clamepending/knowledge-base-building",
        "owner": "Clamepending",
        "name": "knowledge-base-building",
        "branch": "main",
        "manifestPath": "buildinghub/building.json",
        "readmePath": "README.md",
        "assetsPath": "assets"
      },
      "media": {
        "thumbnail": {
          "path": "assets/thumbnail.svg",
          "url": "https://raw.githubusercontent.com/Clamepending/knowledge-base-building/main/assets/thumbnail.svg",
          "alt": "Library Building thumbnail"
        }
      },
      "keywords": [
        "knowledge",
        "base",
        "vibe-research",
        "built in",
        "Vibe Research",
        "library",
        "Library folder",
        "wikiPath",
        "Library backup",
        "wikiGitBackupEnabled",
        "Remote",
        "wikiGitRemoteUrl",
        "Choose a Library",
        "Select the markdown Library agents receive in their prompt.",
        "Enable backup",
        "Connect a git remote when this knowledge should travel between machines."
      ],
      "visual": {
        "shape": "library"
      },
      "footprint": {
        "width": 3,
        "height": 2,
        "shape": "library",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1.5
          }
        ]
      },
      "access": {
        "label": "vibe-research catalog",
        "detail": "Library is mirrored from the Vibe Research building catalog as manifest-only setup metadata."
      },
      "onboarding": {
        "variables": [
          {
            "label": "Library folder",
            "value": "Vibe Research setting: wikiPath",
            "required": true
          },
          {
            "label": "Library backup",
            "value": "Vibe Research setting: wikiGitBackupEnabled",
            "required": false
          },
          {
            "label": "Remote",
            "value": "Vibe Research setting: wikiGitRemoteUrl",
            "required": false
          }
        ],
        "steps": [
          {
            "title": "Choose a Library",
            "detail": "Select the markdown Library agents receive in their prompt."
          },
          {
            "title": "Enable backup",
            "detail": "Connect a git remote when this knowledge should travel between machines."
          }
        ]
      }
    },
    {
      "id": "lerobot",
      "name": "LeRobot",
      "version": "0.1.0",
      "category": "Robotics",
      "description": "Operate a real SO-101 workflow end-to-end: procurement, assembly, teleop recording, and ACT policy training.",
      "status": "hardware setup required",
      "trust": "helper-command",
      "icon": "lab",
      "docsUrl": "https://huggingface.co/docs/lerobot/en/index",
      "homepageUrl": "https://huggingface.co/docs/lerobot/en/index",
      "repo": {
        "url": "https://github.com/Clamepending/lerobot-building",
        "owner": "Clamepending",
        "name": "lerobot-building",
        "branch": "main",
        "manifestPath": "buildinghub/building.json",
        "readmePath": "README.md",
        "assetsPath": "assets"
      },
      "media": {
        "thumbnail": {
          "path": "assets/thumbnail.svg",
          "url": "https://raw.githubusercontent.com/Clamepending/lerobot-building/main/assets/thumbnail.svg",
          "alt": "LeRobot Building thumbnail"
        }
      },
      "keywords": [
        "lerobot",
        "so-101",
        "robotics",
        "teleop",
        "imitation learning",
        "act policy",
        "hugging face",
        "hardware-in-the-loop"
      ],
      "visual": {
        "shape": "lab"
      },
      "footprint": {
        "width": 3,
        "height": 2,
        "shape": "lab",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1.5
          }
        ]
      },
      "access": {
        "label": "LeRobot CLI + connected SO-101 hardware",
        "detail": "Requires LeRobot tooling in the runtime, a physically connected SO-101 leader/follower setup, and explicit human approval before purchases, hardware motion, and long GPU training jobs."
      },
      "tools": [
        {
          "type": "helper-command",
          "name": "lerobot",
          "command": "lerobot-info",
          "detail": "LeRobot CLI entrypoint for hardware and training workflows.",
          "required": true
        },
        {
          "type": "env",
          "name": "HF_TOKEN",
          "detail": "Hugging Face token for dataset and policy upload; keep secret.",
          "required": true
        },
        {
          "type": "env",
          "name": "HF_USER",
          "detail": "Hugging Face user or org for dataset and policy repo IDs.",
          "required": true
        }
      ],
      "endpoints": [
        {
          "type": "docs",
          "name": "LeRobot docs index",
          "url": "https://huggingface.co/docs/lerobot/en/index",
          "auth": "none",
          "detail": "Canonical LeRobot documentation index.",
          "required": false
        },
        {
          "type": "docs",
          "name": "SO-101 guide",
          "url": "https://huggingface.co/docs/lerobot/en/so101",
          "auth": "none",
          "detail": "SO-101 assembly, motor config, and port setup guide.",
          "required": false
        },
        {
          "type": "docs",
          "name": "ACT policy guide",
          "url": "https://huggingface.co/docs/lerobot/main/en/act",
          "auth": "none",
          "detail": "ACT training and evaluation reference.",
          "required": false
        },
        {
          "type": "local",
          "name": "SO-101 serial ports",
          "auth": "custom",
          "detail": "Leader and follower serial ports configured on the host machine where teleop and evaluation run.",
          "required": true
        }
      ],
      "capabilities": [
        {
          "type": "helper-command",
          "name": "lerobot",
          "command": "lerobot-info",
          "detail": "LeRobot CLI entrypoint for hardware and training workflows.",
          "required": true
        },
        {
          "type": "env",
          "name": "HF_TOKEN",
          "detail": "Hugging Face token for dataset and policy upload; keep secret.",
          "required": true
        },
        {
          "type": "env",
          "name": "HF_USER",
          "detail": "Hugging Face user or org for dataset and policy repo IDs.",
          "required": true
        },
        {
          "type": "env",
          "name": "CUDA_VISIBLE_DEVICES",
          "detail": "Optional GPU pinning for ACT training jobs.",
          "required": false
        }
      ],
      "onboarding": {
        "variables": [
          {
            "label": "Hugging Face account",
            "value": "HF_USER and HF_TOKEN configured in the runtime used for recording and training",
            "required": true
          },
          {
            "label": "SO-101 order status",
            "value": "ordered and shipped with recorded tracking number",
            "required": true
          },
          {
            "label": "Assembly state",
            "value": "assembled and motors configured per LeRobot SO-101 docs",
            "required": true
          },
          {
            "label": "Robot connection",
            "value": "leader/follower arms connected and visible on local serial ports",
            "required": true
          },
          {
            "label": "Teleop data target",
            "value": "HF dataset repo_id for demonstrations",
            "required": true
          },
          {
            "label": "Training hardware",
            "value": "single local GPU or approved cloud GPU for ACT",
            "required": true
          }
        ],
        "steps": [
          {
            "title": "Confirm procurement",
            "detail": "Order SO-101 parts and record the tracking number in project notes before setup work starts."
          },
          {
            "title": "Assemble and wire",
            "detail": "Follow the SO-101 guide, configure motors, and connect leader/follower arms over USB."
          },
          {
            "title": "Record teleop data",
            "detail": "Collect quality demonstrations in a Hugging Face dataset repo for the target task."
          },
          {
            "title": "Train ACT policy",
            "detail": "Train and evaluate ACT on the recorded dataset, then publish the policy artifact.",
            "completeWhen": {
              "type": "installed"
            }
          }
        ]
      },
      "agentGuide": {
        "summary": "Use LeRobot when an agent must run the SO-101 hardware loop from setup through teleop data recording and ACT policy training with Hugging Face-hosted artifacts.",
        "useCases": [
          "Track SO-101 setup from procurement to assembled and connected arm control.",
          "Record teleoperated demonstrations and push datasets to Hugging Face Hub.",
          "Train and evaluate ACT policies for concrete SO-101 tasks.",
          "Diagnose robot-port, camera, and runtime setup issues before expensive runs."
        ],
        "setup": [
          "Read Hugging Face LeRobot docs first and keep hardware setup notes in shared project memory.",
          "Before any arm motion, verify clear workspace, emergency-stop reachability, and supervised operation.",
          "Treat purchases and cloud-GPU spend as approval-gated actions.",
          "Record dataset repo_id, policy repo_id, command, port mapping, camera config, and commit when reporting results."
        ],
        "commands": [
          {
            "label": "Check LeRobot install",
            "command": "lerobot-info",
            "detail": "Confirms the LeRobot CLI is available in the current runtime."
          },
          {
            "label": "Find SO-101 ports",
            "command": "lerobot-find-port",
            "detail": "Identify serial ports for SO-101 leader and follower buses."
          },
          {
            "label": "Record teleop dataset",
            "command": "lerobot-record --robot.type=so101_follower --robot.port=/dev/ttyACM0 --dataset.repo_id=${HF_USER}/so101_task_dataset --dataset.single_task=\"<task>\" --dataset.num_episodes=50",
            "detail": "Collect demonstrations with consistent camera setup and task labeling."
          },
          {
            "label": "Train ACT",
            "command": "lerobot-train --dataset.repo_id=${HF_USER}/so101_task_dataset --policy.type=act --policy.device=cuda --output_dir=outputs/train/act_so101 --job_name=act_so101 --policy.repo_id=${HF_USER}/act_so101_policy",
            "detail": "Baseline ACT recipe for single-GPU imitation learning."
          },
          {
            "label": "Evaluate ACT",
            "command": "lerobot-record --robot.type=so101_follower --robot.port=/dev/ttyACM0 --policy.path=${HF_USER}/act_so101_policy --dataset.repo_id=${HF_USER}/eval_act_so101 --dataset.num_episodes=10 --dataset.single_task=\"<task-eval>\"",
            "detail": "Runs policy inference and records evaluation rollouts."
          }
        ],
        "docs": [
          {
            "label": "LeRobot docs index",
            "url": "https://huggingface.co/docs/lerobot/en/index"
          },
          {
            "label": "Installation",
            "url": "https://huggingface.co/docs/lerobot/en/installation"
          },
          {
            "label": "SO-101 guide",
            "url": "https://huggingface.co/docs/lerobot/en/so101"
          },
          {
            "label": "Getting started with real robots",
            "url": "https://huggingface.co/docs/lerobot/main/getting_started_real_world_robot"
          },
          {
            "label": "Human-in-the-loop data collection",
            "url": "https://huggingface.co/docs/lerobot/main/hil_data_collection"
          },
          {
            "label": "ACT policy guide",
            "url": "https://huggingface.co/docs/lerobot/main/en/act"
          }
        ],
        "env": [
          {
            "name": "HF_TOKEN",
            "detail": "Hugging Face access token for pushing datasets and policies; keep secret.",
            "required": true
          },
          {
            "name": "HF_USER",
            "detail": "Hugging Face user or org used in dataset and policy repo IDs.",
            "required": true
          },
          {
            "name": "CUDA_VISIBLE_DEVICES",
            "detail": "Optional GPU pinning for ACT training jobs.",
            "required": false
          }
        ]
      }
    },
    {
      "id": "linear",
      "name": "Linear",
      "version": "0.1.0",
      "category": "Planning",
      "description": "Let agents triage issues, inspect project state, and prepare Linear updates through an MCP or helper command.",
      "status": "community",
      "trust": "mcp",
      "icon": "notebook",
      "docsUrl": "https://developers.linear.app/docs",
      "repo": {
        "url": "https://github.com/Clamepending/linear-building",
        "owner": "Clamepending",
        "name": "linear-building",
        "branch": "main",
        "manifestPath": "buildinghub/building.json",
        "readmePath": "README.md",
        "assetsPath": "assets"
      },
      "media": {
        "thumbnail": {
          "path": "assets/thumbnail.svg",
          "url": "https://raw.githubusercontent.com/Clamepending/linear-building/main/assets/thumbnail.svg",
          "alt": "Linear Building thumbnail"
        }
      },
      "visual": {
        "shape": "plugin"
      },
      "footprint": {
        "width": 2,
        "height": 2,
        "shape": "plugin",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1
          }
        ]
      },
      "access": {
        "label": "Linear connector",
        "detail": "Requires a Linear MCP, OAuth connector, or API token configured where the agent runs. BuildingHub only records the setup path."
      },
      "tools": [
        {
          "type": "mcp-tool",
          "name": "linear",
          "detail": "Preferred MCP path for issue and project access.",
          "required": true
        },
        {
          "type": "env",
          "name": "LINEAR_API_KEY",
          "detail": "Fallback API key for local helper commands.",
          "required": false
        }
      ],
      "endpoints": [
        {
          "type": "docs",
          "name": "Linear API docs",
          "url": "https://developers.linear.app/docs",
          "auth": "none",
          "detail": "Official Linear developer documentation.",
          "required": false
        },
        {
          "type": "mcp",
          "name": "Linear MCP",
          "auth": "mcp",
          "detail": "MCP surface configured outside BuildingHub for issue and project access.",
          "required": true
        }
      ],
      "capabilities": [
        {
          "type": "mcp",
          "name": "linear",
          "detail": "Preferred path for issue and project access.",
          "required": true
        },
        {
          "type": "env",
          "name": "LINEAR_API_KEY",
          "detail": "Fallback for local helper commands.",
          "required": false
        }
      ],
      "onboarding": {
        "variables": [
          {
            "label": "Linear access",
            "value": "MCP connector or LINEAR_API_KEY",
            "required": true,
            "secret": true
          },
          {
            "label": "Workspace scope",
            "value": "teams/projects agents may edit",
            "required": true
          }
        ],
        "steps": [
          {
            "title": "Connect Linear",
            "detail": "Authorize the MCP or provide an API key to the agent environment."
          },
          {
            "title": "Set team boundaries",
            "detail": "Document which Linear teams, projects, and update actions are allowed."
          },
          {
            "title": "Install the building",
            "detail": "Add Linear to Agent Town once access has been reviewed.",
            "completeWhen": {
              "type": "installed"
            }
          }
        ]
      }
    },
    {
      "id": "localhost-apps",
      "name": "Localhost Apps",
      "version": "0.1.0",
      "category": "Vibe Research",
      "description": "Preview web apps from discovered ports without leaving the current session.",
      "status": "built in",
      "trust": "helper-command",
      "icon": "dock",
      "repo": {
        "url": "https://github.com/Clamepending/localhost-apps-building",
        "owner": "Clamepending",
        "name": "localhost-apps-building",
        "branch": "main",
        "manifestPath": "buildinghub/building.json",
        "readmePath": "README.md",
        "assetsPath": "assets"
      },
      "media": {
        "thumbnail": {
          "path": "assets/thumbnail.svg",
          "url": "https://raw.githubusercontent.com/Clamepending/localhost-apps-building/main/assets/thumbnail.svg",
          "alt": "Localhost Apps Building thumbnail"
        }
      },
      "keywords": [
        "localhost",
        "apps",
        "vibe-research",
        "built in",
        "Vibe Research",
        "dock",
        "VIBE_RESEARCH_PLAYWRIGHT_COMMAND",
        "VIBE_RESEARCH_BROWSER_FALLBACK_COMMAND",
        "vr-playwright",
        "Port scan",
        "local workspace ports",
        "Proxy path",
        "/proxy/<port>/",
        "Enable the dock",
        "Installed sessions show discovered local app ports.",
        "Open a preview",
        "Pick a detected port to inspect the running app."
      ],
      "visual": {
        "shape": "dock"
      },
      "footprint": {
        "width": 3,
        "height": 1,
        "shape": "dock",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1.5
          }
        ]
      },
      "access": {
        "label": "vibe-research catalog",
        "detail": "Localhost Apps is mirrored from the Vibe Research building catalog as manifest-only setup metadata."
      },
      "capabilities": [
        {
          "type": "env",
          "name": "VIBE_RESEARCH_PLAYWRIGHT_COMMAND",
          "detail": "Canonical Playwright helper command.",
          "required": false
        },
        {
          "type": "env",
          "name": "VIBE_RESEARCH_BROWSER_FALLBACK_COMMAND",
          "detail": "Visual fallback helper for screenshots/images.",
          "required": false
        },
        {
          "type": "helper-command",
          "name": "vr-playwright",
          "command": "vr-playwright",
          "detail": "Inspect a local app with a real browser.",
          "required": false
        }
      ],
      "tools": [
        {
          "type": "env",
          "name": "VIBE_RESEARCH_PLAYWRIGHT_COMMAND",
          "detail": "Canonical Playwright helper command.",
          "required": false
        },
        {
          "type": "env",
          "name": "VIBE_RESEARCH_BROWSER_FALLBACK_COMMAND",
          "detail": "Visual fallback helper for screenshots/images.",
          "required": false
        },
        {
          "type": "helper-command",
          "name": "vr-playwright",
          "command": "vr-playwright",
          "detail": "Inspect a local app with a real browser.",
          "required": false
        }
      ],
      "onboarding": {
        "variables": [
          {
            "label": "Port scan",
            "value": "local workspace ports",
            "required": true
          },
          {
            "label": "Proxy path",
            "value": "/proxy/<port>/",
            "required": false
          }
        ],
        "steps": [
          {
            "title": "Enable the dock",
            "detail": "Installed sessions show discovered local app ports."
          },
          {
            "title": "Open a preview",
            "detail": "Pick a detected port to inspect the running app."
          }
        ]
      },
      "agentGuide": {
        "summary": "Use Localhost Apps when an agent needs to discover, rename, preview, or expose web apps running from the workspace.",
        "useCases": [
          "Find development servers discovered by Vibe Research.",
          "Preview a local app through the Vibe Research proxy or direct URL.",
          "Expose eligible localhost-only ports through the Tailscale portal when available."
        ],
        "commands": [
          {
            "command": "curl -s http://127.0.0.1:${VIBE_RESEARCH_PORT:-4123}/api/ports -H 'X-Vibe-Research-API: 1'",
            "label": "List discovered ports",
            "detail": "Use the runtime app port if it differs from 4123."
          },
          {
            "command": "vr-playwright open http://127.0.0.1:4173 && vr-playwright snapshot",
            "label": "Open with Playwright",
            "detail": "Inspect a local app with a real browser."
          }
        ],
        "env": [
          {
            "name": "VIBE_RESEARCH_PLAYWRIGHT_COMMAND",
            "detail": "Canonical Playwright helper command.",
            "required": false
          },
          {
            "name": "VIBE_RESEARCH_BROWSER_FALLBACK_COMMAND",
            "detail": "Visual fallback helper for screenshots/images.",
            "required": false
          }
        ]
      }
    },
    {
      "id": "modal",
      "name": "Modal",
      "version": "0.1.0",
      "category": "Compute",
      "description": "Run Python functions, jobs, web endpoints, and sandboxes on Modal cloud infrastructure.",
      "status": "setup available",
      "trust": "helper-command",
      "icon": "compute",
      "docsUrl": "https://modal.com/docs",
      "homepageUrl": "https://modal.com/",
      "repo": {
        "url": "https://github.com/Clamepending/modal-building",
        "owner": "Clamepending",
        "name": "modal-building",
        "branch": "main",
        "manifestPath": "buildinghub/building.json",
        "readmePath": "README.md",
        "assetsPath": "assets"
      },
      "media": {
        "thumbnail": {
          "path": "assets/thumbnail.svg",
          "url": "https://raw.githubusercontent.com/Clamepending/modal-building/main/assets/thumbnail.svg",
          "alt": "Modal Building thumbnail"
        }
      },
      "keywords": [
        "modal",
        "compute",
        "gpu",
        "sandbox",
        "python",
        "serverless",
        "jobs",
        "functions",
        "web endpoints",
        "cloud"
      ],
      "visual": {
        "shape": "factory"
      },
      "footprint": {
        "width": 3,
        "height": 2,
        "shape": "factory",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1.5
          }
        ]
      },
      "access": {
        "label": "Modal CLI/Python SDK",
        "detail": "Requires a Modal account plus token credentials where the agent runs. BuildingHub records setup metadata only and does not run Modal code."
      },
      "tools": [
        {
          "type": "helper-command",
          "name": "modal",
          "command": "modal",
          "detail": "Modal CLI for token inspection, app runs, deployments, and sandbox workflows.",
          "required": true
        },
        {
          "type": "env",
          "name": "MODAL_TOKEN_ID",
          "detail": "Modal account token id for automated CLI or SDK access.",
          "required": true
        },
        {
          "type": "env",
          "name": "MODAL_TOKEN_SECRET",
          "detail": "Modal account token secret for automated CLI or SDK access.",
          "required": true
        }
      ],
      "endpoints": [
        {
          "type": "docs",
          "name": "Modal docs",
          "url": "https://modal.com/docs",
          "auth": "none",
          "detail": "Canonical Modal documentation for setup and runtime behavior.",
          "required": false
        },
        {
          "type": "local",
          "name": "Modal CLI profile",
          "auth": "api-key",
          "detail": "Local Modal CLI profile or MODAL_TOKEN_ID/MODAL_TOKEN_SECRET environment variables configured outside BuildingHub.",
          "required": true
        }
      ],
      "capabilities": [
        {
          "type": "helper-command",
          "name": "modal",
          "command": "modal",
          "detail": "Modal CLI for token inspection, app runs, deployments, and sandbox workflows.",
          "required": true
        },
        {
          "type": "env",
          "name": "MODAL_TOKEN_ID",
          "detail": "Modal account token id for automated CLI or SDK access.",
          "required": true
        },
        {
          "type": "env",
          "name": "MODAL_TOKEN_SECRET",
          "detail": "Modal account token secret for automated CLI or SDK access.",
          "required": true
        },
        {
          "type": "env",
          "name": "MODAL_ENVIRONMENT",
          "detail": "Optional Modal Environment name when agents should target dev, prod, or another workspace environment.",
          "required": false
        }
      ],
      "onboarding": {
        "variables": [
          {
            "label": "Modal token id",
            "value": "MODAL_TOKEN_ID in agent environment or modal token set profile",
            "required": true,
            "secret": true
          },
          {
            "label": "Modal token secret",
            "value": "MODAL_TOKEN_SECRET in agent environment or modal token set profile",
            "required": true,
            "secret": true
          },
          {
            "label": "Modal environment",
            "value": "MODAL_ENVIRONMENT or default Modal profile environment",
            "required": false
          },
          {
            "label": "Budget guardrail",
            "value": "allowed GPU classes, runtime, deployment scope, and teardown expectations",
            "required": true
          }
        ],
        "steps": [
          {
            "title": "Install Modal tooling",
            "detail": "Make the Modal Python package and modal CLI available in the agent runtime."
          },
          {
            "title": "Configure credentials",
            "detail": "Use modal token set or MODAL_TOKEN_ID and MODAL_TOKEN_SECRET in the environment that will run Modal work."
          },
          {
            "title": "Choose environment and budget",
            "detail": "Pin the target Modal Environment and write cost, GPU, runtime, and deployment guardrails before agents launch jobs."
          },
          {
            "title": "Install the building",
            "detail": "Add Modal to Agent Town after credentials and budget rules are documented.",
            "completeWhen": {
              "type": "installed"
            }
          }
        ]
      },
      "agentGuide": {
        "summary": "Use Modal when an agent needs to run Python functions, jobs, web endpoints, or sandbox workloads on Modal after credentials and cost guardrails are approved.",
        "useCases": [
          "Run remote Python jobs that need GPUs or serverless scaling.",
          "Deploy or inspect Modal Apps, Functions, web endpoints, Volumes, Secrets, and Sandboxes.",
          "Check whether Modal token credentials or Environment selection are blocking a cloud run."
        ],
        "setup": [
          "Read the generated BuildingHub manifest and Modal docs before launching paid cloud workloads.",
          "Run modal token info or modal config show to confirm authentication without printing secrets.",
          "Ask for approval before deploying persistent services, broad parallel jobs, expensive GPUs, or long-running work.",
          "Record Modal app name, environment, command, commit, output paths, and cost-relevant settings in result docs when they matter."
        ],
        "commands": [
          {
            "label": "Check Modal CLI",
            "command": "modal --help",
            "detail": "Confirms the Modal CLI is installed."
          },
          {
            "label": "Check token profile",
            "command": "modal token info",
            "detail": "Shows the active Modal token profile without exposing the token secret."
          },
          {
            "label": "Show redacted config",
            "command": "modal config show",
            "detail": "Inspects the active Modal configuration with secret redaction enabled by default."
          }
        ],
        "docs": [
          {
            "label": "Modal docs",
            "url": "https://modal.com/docs"
          },
          {
            "label": "Modal token CLI",
            "url": "https://modal.com/docs/reference/cli/token"
          },
          {
            "label": "Modal configuration",
            "url": "https://modal.com/docs/reference/modal.config"
          },
          {
            "label": "Modal Environments",
            "url": "https://modal.com/docs/guide/environments"
          },
          {
            "label": "Modal Secrets",
            "url": "https://modal.com/docs/guide/secrets"
          }
        ],
        "env": [
          {
            "name": "MODAL_TOKEN_ID",
            "detail": "Modal token id for automated CLI or SDK access; keep paired with the secret.",
            "required": true
          },
          {
            "name": "MODAL_TOKEN_SECRET",
            "detail": "Modal token secret for automated CLI or SDK access; never print it.",
            "required": true
          },
          {
            "name": "MODAL_ENVIRONMENT",
            "detail": "Optional target Modal Environment for CLI and SDK operations.",
            "required": false
          }
        ]
      }
    },
    {
      "id": "moltbook",
      "name": "Moltbook",
      "version": "0.1.0",
      "category": "Knowledge",
      "description": "Keep a social notebook or research log connector visible for agents.",
      "status": "connector-ready",
      "trust": "mcp",
      "icon": "library",
      "repo": {
        "url": "https://github.com/Clamepending/moltbook-building",
        "owner": "Clamepending",
        "name": "moltbook-building",
        "branch": "main",
        "manifestPath": "buildinghub/building.json",
        "readmePath": "README.md",
        "assetsPath": "assets"
      },
      "media": {
        "thumbnail": {
          "path": "assets/thumbnail.svg",
          "url": "https://raw.githubusercontent.com/Clamepending/moltbook-building/main/assets/thumbnail.svg",
          "alt": "Moltbook Building thumbnail"
        }
      },
      "keywords": [
        "moltbook",
        "external",
        "connector-ready",
        "Knowledge",
        "library",
        "MCP",
        "API",
        "Moltbook MCP",
        "Workspace",
        "Moltbook notebook or team",
        "Sync scope",
        "notes, posts, or research logs",
        "Agent access",
        "provider MCP or API bridge",
        "Pick the notebook",
        "Choose which Moltbook space agents should read or update.",
        "Configure access",
        "Connect the API or MCP in the host/provider that will use it.",
        "Install the building",
        "Add the building once the external connector is ready.",
        "installed"
      ],
      "visual": {
        "shape": "library"
      },
      "footprint": {
        "width": 3,
        "height": 2,
        "shape": "library",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1.5
          }
        ]
      },
      "access": {
        "label": "External connector",
        "detail": "Requires a Moltbook-compatible API, MCP, or sync bridge configured in the agent provider. Vibe Research only tracks the building and setup state."
      },
      "capabilities": [
        {
          "type": "env",
          "name": "MCP",
          "detail": "Environment variable referenced by Moltbook setup notes.",
          "required": false
        },
        {
          "type": "env",
          "name": "API",
          "detail": "Environment variable referenced by Moltbook setup notes.",
          "required": false
        },
        {
          "type": "mcp",
          "name": "Moltbook MCP",
          "detail": "Requires a Moltbook-compatible API, MCP, or sync bridge configured in the agent provider. Vibe Research only tracks the building and setup state.",
          "required": false
        }
      ],
      "tools": [
        {
          "type": "env",
          "name": "MCP",
          "detail": "Environment variable referenced by Moltbook setup notes.",
          "required": false
        },
        {
          "type": "env",
          "name": "API",
          "detail": "Environment variable referenced by Moltbook setup notes.",
          "required": false
        },
        {
          "type": "mcp-tool",
          "name": "Moltbook MCP",
          "detail": "Requires a Moltbook-compatible API, MCP, or sync bridge configured in the agent provider. Vibe Research only tracks the building and setup state.",
          "required": false
        }
      ],
      "endpoints": [
        {
          "type": "mcp",
          "name": "Moltbook MCP",
          "auth": "mcp",
          "detail": "Requires a Moltbook-compatible API, MCP, or sync bridge configured in the agent provider. Vibe Research only tracks the building and setup state.",
          "required": false
        }
      ],
      "onboarding": {
        "variables": [
          {
            "label": "Workspace",
            "value": "Moltbook notebook or team",
            "required": false
          },
          {
            "label": "Sync scope",
            "value": "notes, posts, or research logs",
            "required": false
          },
          {
            "label": "Agent access",
            "value": "provider MCP or API bridge",
            "required": false
          }
        ],
        "steps": [
          {
            "title": "Pick the notebook",
            "detail": "Choose which Moltbook space agents should read or update."
          },
          {
            "title": "Configure access",
            "detail": "Connect the API or MCP in the host/provider that will use it."
          },
          {
            "title": "Install the building",
            "detail": "Add the building once the external connector is ready.",
            "completeWhen": {
              "type": "installed"
            }
          }
        ]
      }
    },
    {
      "id": "nano-banana",
      "name": "Nano Banana",
      "version": "0.1.0",
      "category": "Generative Media",
      "description": "Generate, edit, and iterate on Gemini images with Nano Banana models.",
      "status": "connector-ready",
      "trust": "manifest-only",
      "icon": "studio",
      "repo": {
        "url": "https://github.com/Clamepending/nano-banana-building",
        "owner": "Clamepending",
        "name": "nano-banana-building",
        "branch": "main",
        "manifestPath": "buildinghub/building.json",
        "readmePath": "README.md",
        "assetsPath": "assets"
      },
      "media": {
        "thumbnail": {
          "path": "assets/thumbnail.svg",
          "url": "https://raw.githubusercontent.com/Clamepending/nano-banana-building/main/assets/thumbnail.svg",
          "alt": "Nano Banana Building thumbnail"
        }
      },
      "keywords": [
        "nano",
        "banana",
        "external",
        "connector-ready",
        "Generative Media",
        "studio",
        "API",
        "GEMINI_API_KEY",
        "Gemini API key",
        "GEMINI_API_KEY in agent environment",
        "Model family",
        "Nano Banana 2, Nano Banana Pro, or Gemini 2.5 Flash Image",
        "Artifact policy",
        "save prompts, source images, output paths, and watermarked assets",
        "Choose the model",
        "Pick the Nano Banana model that matches speed, fidelity, and editing needs.",
        "Connect Gemini",
        "Provide Gemini API access to the provider or local environment that will generate images.",
        "Install the building",
        "Add the Nano Banana studio once the external API or connector is ready.",
        "installed"
      ],
      "visual": {
        "shape": "studio"
      },
      "footprint": {
        "width": 3,
        "height": 2,
        "shape": "studio",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1.5
          }
        ]
      },
      "access": {
        "label": "Gemini image API",
        "detail": "Requires GEMINI_API_KEY, Google AI Studio, or Vertex AI access where the agent runs. Use this building for Nano Banana 2, Nano Banana Pro, and Gemini 2.5 Flash Image workflows."
      },
      "capabilities": [
        {
          "type": "env",
          "name": "API",
          "detail": "Environment variable referenced by Nano Banana setup notes.",
          "required": false
        },
        {
          "type": "env",
          "name": "GEMINI_API_KEY",
          "detail": "Environment variable referenced by Nano Banana setup notes.",
          "required": false
        }
      ],
      "tools": [
        {
          "type": "env",
          "name": "API",
          "detail": "Environment variable referenced by Nano Banana setup notes.",
          "required": false
        },
        {
          "type": "env",
          "name": "GEMINI_API_KEY",
          "detail": "Environment variable referenced by Nano Banana setup notes.",
          "required": false
        }
      ],
      "onboarding": {
        "variables": [
          {
            "label": "Gemini API key",
            "value": "GEMINI_API_KEY in agent environment",
            "required": true
          },
          {
            "label": "Model family",
            "value": "Nano Banana 2, Nano Banana Pro, or Gemini 2.5 Flash Image",
            "required": true
          },
          {
            "label": "Artifact policy",
            "value": "save prompts, source images, output paths, and watermarked assets",
            "required": false
          }
        ],
        "steps": [
          {
            "title": "Choose the model",
            "detail": "Pick the Nano Banana model that matches speed, fidelity, and editing needs."
          },
          {
            "title": "Connect Gemini",
            "detail": "Provide Gemini API access to the provider or local environment that will generate images."
          },
          {
            "title": "Install the building",
            "detail": "Add the Nano Banana studio once the external API or connector is ready.",
            "completeWhen": {
              "type": "installed"
            }
          }
        ]
      }
    },
    {
      "id": "occupations",
      "name": "Occupations",
      "version": "0.1.0",
      "category": "Vibe Research",
      "description": "Edit the school of system prompt roles that shape new agents before they start work.",
      "status": "built in",
      "trust": "manifest-only",
      "icon": "school",
      "repo": {
        "url": "https://github.com/Clamepending/occupations-building",
        "owner": "Clamepending",
        "name": "occupations-building",
        "branch": "main",
        "manifestPath": "buildinghub/building.json",
        "readmePath": "README.md",
        "assetsPath": "assets"
      },
      "media": {
        "thumbnail": {
          "path": "assets/thumbnail.svg",
          "url": "https://raw.githubusercontent.com/Clamepending/occupations-building/main/assets/thumbnail.svg",
          "alt": "Occupations Building thumbnail"
        }
      },
      "keywords": [
        "occupations",
        "vibe-research",
        "built in",
        "Vibe Research",
        "school",
        "VIBE_RESEARCH_AGENT_PROMPT_PATH",
        "AGENTS",
        "CLAUDE",
        "GEMINI",
        "Selected occupation",
        "Researcher, Engineer, or Custom",
        "Prompt source",
        ".vibe-research/agent-prompt.md",
        "Managed files",
        "AGENTS.md, CLAUDE.md, GEMINI.md",
        "Choose an occupation",
        "Pick the role prompt that should shape newly launched agents.",
        "installed",
        "Edit custom guidance",
        "Use the custom occupation when the built-in researcher or engineer prompt needs project-specific instructions.",
        "Review managed files",
        "Check conflicts before overwriting AGENTS.md, CLAUDE.md, or GEMINI.md."
      ],
      "visual": {
        "shape": "school"
      },
      "footprint": {
        "width": 3,
        "height": 2,
        "shape": "school",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1.5
          }
        ]
      },
      "access": {
        "label": "Managed prompts",
        "detail": "Uses the local Occupations prompt store and syncs managed instructions into AGENTS.md, CLAUDE.md, and GEMINI.md so Codex, Claude, OpenClaw, Gemini, and OpenCode sessions receive the same role guidance."
      },
      "capabilities": [
        {
          "type": "env",
          "name": "VIBE_RESEARCH_AGENT_PROMPT_PATH",
          "detail": "Path to the active Occupations prompt file for this session.",
          "required": false
        },
        {
          "type": "env",
          "name": "AGENTS",
          "detail": "Environment variable referenced by Occupations setup notes.",
          "required": false
        },
        {
          "type": "env",
          "name": "CLAUDE",
          "detail": "Environment variable referenced by Occupations setup notes.",
          "required": false
        },
        {
          "type": "env",
          "name": "GEMINI",
          "detail": "Environment variable referenced by Occupations setup notes.",
          "required": false
        }
      ],
      "tools": [
        {
          "type": "env",
          "name": "VIBE_RESEARCH_AGENT_PROMPT_PATH",
          "detail": "Path to the active Occupations prompt file for this session.",
          "required": false
        },
        {
          "type": "env",
          "name": "AGENTS",
          "detail": "Environment variable referenced by Occupations setup notes.",
          "required": false
        },
        {
          "type": "env",
          "name": "CLAUDE",
          "detail": "Environment variable referenced by Occupations setup notes.",
          "required": false
        },
        {
          "type": "env",
          "name": "GEMINI",
          "detail": "Environment variable referenced by Occupations setup notes.",
          "required": false
        }
      ],
      "onboarding": {
        "variables": [
          {
            "label": "Selected occupation",
            "value": "Researcher, Engineer, or Custom",
            "required": true
          },
          {
            "label": "Prompt source",
            "value": ".vibe-research/agent-prompt.md",
            "required": true
          },
          {
            "label": "Managed files",
            "value": "AGENTS.md, CLAUDE.md, GEMINI.md",
            "required": true
          }
        ],
        "steps": [
          {
            "title": "Choose an occupation",
            "detail": "Pick the role prompt that should shape newly launched agents.",
            "completeWhen": {
              "type": "installed"
            }
          },
          {
            "title": "Edit custom guidance",
            "detail": "Use the custom occupation when the built-in researcher or engineer prompt needs project-specific instructions."
          },
          {
            "title": "Review managed files",
            "detail": "Check conflicts before overwriting AGENTS.md, CLAUDE.md, or GEMINI.md."
          }
        ]
      },
      "agentGuide": {
        "summary": "Use Occupations when an agent needs to inspect or explain the shared role prompt that will be injected into new sessions.",
        "useCases": [
          "Check which occupation is selected before starting a new agent.",
          "Inspect the managed prompt source and synced AGENTS.md, CLAUDE.md, and GEMINI.md files.",
          "Diagnose prompt sync conflicts without writing secrets or credentials into managed instruction files."
        ],
        "commands": [
          {
            "command": "curl -s http://127.0.0.1:${VIBE_RESEARCH_PORT:-4123}/api/agent-prompt -H 'X-Vibe-Research-API: 1'",
            "label": "Read current occupation",
            "detail": "Shows the selected occupation, source path, and managed target files."
          },
          {
            "command": "sed -n '1,220p' \"$VIBE_RESEARCH_AGENT_PROMPT_PATH\"",
            "label": "Open prompt source",
            "detail": "Read the active prompt file from the agent environment when available."
          }
        ],
        "env": [
          {
            "name": "VIBE_RESEARCH_AGENT_PROMPT_PATH",
            "detail": "Path to the active Occupations prompt file for this session.",
            "required": false
          }
        ]
      }
    },
    {
      "id": "ottoauth",
      "name": "OttoAuth",
      "version": "0.1.0",
      "category": "Commerce",
      "description": "Let agents buy things through OttoAuth's hosted, human-linked service layer.",
      "status": "setup available",
      "trust": "helper-command",
      "icon": "market",
      "repo": {
        "url": "https://github.com/Clamepending/ottoauth-building",
        "owner": "Clamepending",
        "name": "ottoauth-building",
        "branch": "main",
        "manifestPath": "buildinghub/building.json",
        "readmePath": "README.md",
        "assetsPath": "assets"
      },
      "media": {
        "thumbnail": {
          "path": "assets/thumbnail.svg",
          "url": "https://raw.githubusercontent.com/Clamepending/ottoauth-building/main/assets/thumbnail.svg",
          "alt": "OttoAuth Building thumbnail"
        }
      },
      "keywords": [
        "ottoauth",
        "vibe-research",
        "setup available",
        "Commerce",
        "market",
        "VIBE_RESEARCH_OTTOAUTH_COMMAND",
        "URL",
        "vr-ottoauth",
        ".ottoauth-plugin-card",
        "Username",
        "ottoAuthUsername",
        "Private key",
        "ottoAuthPrivateKey",
        "ottoAuthPrivateKeyConfigured",
        "Service URL",
        "ottoAuthBaseUrl",
        "Default spend cap",
        "ottoAuthDefaultMaxChargeCents",
        "cents",
        "Callback URL",
        "ottoAuthCallbackUrl",
        "Enable the building",
        "Turn on OttoAuth requests.",
        "installed"
      ],
      "visual": {
        "shape": "market"
      },
      "footprint": {
        "width": 3,
        "height": 2,
        "shape": "market",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1.5
          }
        ]
      },
      "access": {
        "label": "vibe-research catalog",
        "detail": "OttoAuth is mirrored from the Vibe Research building catalog as manifest-only setup metadata."
      },
      "capabilities": [
        {
          "type": "env",
          "name": "VIBE_RESEARCH_OTTOAUTH_COMMAND",
          "detail": "Canonical helper command for local agents.",
          "required": false
        },
        {
          "type": "env",
          "name": "URL",
          "detail": "Environment variable referenced by OttoAuth setup notes.",
          "required": false
        },
        {
          "type": "helper-command",
          "name": "vr-ottoauth",
          "command": "vr-ottoauth",
          "detail": "Use an explicit spending bound for commerce requests.",
          "required": false
        }
      ],
      "tools": [
        {
          "type": "env",
          "name": "VIBE_RESEARCH_OTTOAUTH_COMMAND",
          "detail": "Canonical helper command for local agents.",
          "required": false
        },
        {
          "type": "env",
          "name": "URL",
          "detail": "Environment variable referenced by OttoAuth setup notes.",
          "required": false
        },
        {
          "type": "helper-command",
          "name": "vr-ottoauth",
          "command": "vr-ottoauth",
          "detail": "Use an explicit spending bound for commerce requests.",
          "required": false
        }
      ],
      "onboarding": {
        "variables": [
          {
            "label": "Username",
            "value": "Vibe Research setting: ottoAuthUsername",
            "required": true
          },
          {
            "label": "Private key",
            "value": "Vibe Research setting: ottoAuthPrivateKey",
            "required": true,
            "secret": true
          },
          {
            "label": "Service URL",
            "value": "Vibe Research setting: ottoAuthBaseUrl",
            "required": true
          },
          {
            "label": "Default spend cap",
            "value": "Vibe Research setting: ottoAuthDefaultMaxChargeCents",
            "required": false
          },
          {
            "label": "Callback URL",
            "value": "Vibe Research setting: ottoAuthCallbackUrl",
            "required": false
          }
        ],
        "steps": [
          {
            "title": "Enable the building",
            "detail": "Turn on OttoAuth requests.",
            "completeWhen": {
              "type": "installed"
            }
          },
          {
            "title": "Save commerce variables",
            "detail": "Add the username, private key, service URL, and spend defaults.",
            "completeWhen": {
              "allConfigured": [
                "ottoAuthUsername",
                "ottoAuthPrivateKeyConfigured",
                "ottoAuthBaseUrl"
              ]
            }
          },
          {
            "title": "Call the helper",
            "detail": "Agents can run vr-ottoauth --task \"...\" --max-charge-cents 2500 --wait."
          }
        ]
      },
      "agentGuide": {
        "summary": "Use OttoAuth when an agent needs human-linked checkout or purchase help through a bounded service request.",
        "useCases": [
          "Create an OttoAuth task from an agent session.",
          "Respect spend caps and callback setup before asking a human to approve commerce actions.",
          "Diagnose missing username, private key, service URL, or default spend cap setup."
        ],
        "commands": [
          {
            "command": "vr-ottoauth --task \"Describe the purchase or checkout task\" --max-charge-cents 2500 --wait",
            "label": "Start an OttoAuth task",
            "detail": "Use an explicit spending bound for commerce requests."
          },
          {
            "command": "sed -n '1,220p' \"$VIBE_RESEARCH_BUILDING_GUIDES_DIR/ottoauth.md\"",
            "label": "Read OttoAuth guide",
            "detail": "Review setup and safety expectations first."
          }
        ],
        "env": [
          {
            "name": "VIBE_RESEARCH_OTTOAUTH_COMMAND",
            "detail": "Canonical helper command for local agents.",
            "required": false
          }
        ]
      }
    },
    {
      "id": "phone-imessage",
      "name": "Phone / iMessage",
      "version": "0.1.0",
      "category": "Communication",
      "description": "Coordinate SMS, calls, or iMessage-style conversations through a local bridge.",
      "status": "bridge required",
      "trust": "manifest-only",
      "icon": "post",
      "repo": {
        "url": "https://github.com/Clamepending/phone-imessage-building",
        "owner": "Clamepending",
        "name": "phone-imessage-building",
        "branch": "main",
        "manifestPath": "buildinghub/building.json",
        "readmePath": "README.md",
        "assetsPath": "assets"
      },
      "media": {
        "thumbnail": {
          "path": "assets/thumbnail.svg",
          "url": "https://raw.githubusercontent.com/Clamepending/phone-imessage-building/main/assets/thumbnail.svg",
          "alt": "Phone / iMessage Building thumbnail"
        }
      },
      "keywords": [
        "phone",
        "imessage",
        "external",
        "bridge required",
        "Communication",
        "post",
        "SMS",
        "MCP",
        "Bridge",
        "SMS, phone, or Messages relay",
        "Allowed contacts",
        "explicit allowlist recommended",
        "Agent access",
        "provider MCP or local helper",
        "Choose a relay",
        "Set up the SMS, call, or Messages bridge outside Vibe Research.",
        "Restrict contacts",
        "Use explicit allowlists and confirmation flows for outbound communication.",
        "Install the building",
        "Add this building once the bridge is ready.",
        "installed"
      ],
      "visual": {
        "shape": "post"
      },
      "footprint": {
        "width": 2,
        "height": 2,
        "shape": "post",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1
          }
        ]
      },
      "access": {
        "label": "Local bridge",
        "detail": "Requires a phone, SMS, or Apple Messages bridge configured on the machine/provider that will send messages. Vibe Research does not inject phone or iMessage access into agents."
      },
      "capabilities": [
        {
          "type": "env",
          "name": "SMS",
          "detail": "Environment variable referenced by Phone / iMessage setup notes.",
          "required": false
        },
        {
          "type": "env",
          "name": "MCP",
          "detail": "Environment variable referenced by Phone / iMessage setup notes.",
          "required": false
        }
      ],
      "tools": [
        {
          "type": "env",
          "name": "SMS",
          "detail": "Environment variable referenced by Phone / iMessage setup notes.",
          "required": false
        },
        {
          "type": "env",
          "name": "MCP",
          "detail": "Environment variable referenced by Phone / iMessage setup notes.",
          "required": false
        }
      ],
      "onboarding": {
        "variables": [
          {
            "label": "Bridge",
            "value": "SMS, phone, or Messages relay",
            "required": false
          },
          {
            "label": "Allowed contacts",
            "value": "explicit allowlist recommended",
            "required": false
          },
          {
            "label": "Agent access",
            "value": "provider MCP or local helper",
            "required": false
          }
        ],
        "steps": [
          {
            "title": "Choose a relay",
            "detail": "Set up the SMS, call, or Messages bridge outside Vibe Research."
          },
          {
            "title": "Restrict contacts",
            "detail": "Use explicit allowlists and confirmation flows for outbound communication."
          },
          {
            "title": "Install the building",
            "detail": "Add this building once the bridge is ready.",
            "completeWhen": {
              "type": "installed"
            }
          }
        ]
      }
    },
    {
      "id": "rentahuman",
      "name": "RentAHuman",
      "version": "0.1.0",
      "category": "Commerce",
      "description": "Let AI agents hire humans for real-world tasks through RentAHuman's MCP server or REST API.",
      "status": "MCP-ready",
      "trust": "mcp",
      "icon": "rentahuman",
      "repo": {
        "url": "https://github.com/Clamepending/rentahuman-building",
        "owner": "Clamepending",
        "name": "rentahuman-building",
        "branch": "main",
        "manifestPath": "buildinghub/building.json",
        "readmePath": "README.md",
        "assetsPath": "assets"
      },
      "media": {
        "thumbnail": {
          "path": "assets/thumbnail.svg",
          "url": "https://raw.githubusercontent.com/Clamepending/rentahuman-building/main/assets/thumbnail.svg",
          "alt": "RentAHuman Building thumbnail"
        }
      },
      "keywords": [
        "rentahuman",
        "external",
        "MCP-ready",
        "Commerce",
        "market",
        "RENTAHUMAN_API_URL",
        "RENTAHUMAN_API_KEY",
        "MCP",
        "API",
        "URL",
        "REST",
        "npx",
        "RentAHuman MCP",
        "MCP server",
        "npx rentahuman-mcp",
        "API URL",
        "https://rentahuman.ai/api",
        "API key or operator pairing",
        "required for posting bounties, hiring, messaging, or payments",
        "Spend policy",
        "budget, escrow, and release approval rules",
        "Read the agent docs",
        "Review the MCP guide, REST API docs, and task/payment model before giving agents write access.",
        "Connect RentAHuman"
      ],
      "visual": {
        "logo": "rentahuman",
        "shape": "market"
      },
      "footprint": {
        "width": 3,
        "height": 2,
        "shape": "market",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1.5
          }
        ]
      },
      "access": {
        "label": "RentAHuman MCP/API",
        "detail": "Requires RentAHuman MCP, REST API, or account setup where the agent runs. Vibe Research tracks the building and guide only; API keys, operator pairing, payments, and escrow approval stay with the agent runtime and human workflow."
      },
      "capabilities": [
        {
          "type": "env",
          "name": "RENTAHUMAN_API_URL",
          "detail": "REST API base URL, usually https://rentahuman.ai/api.",
          "required": false
        },
        {
          "type": "env",
          "name": "RENTAHUMAN_API_KEY",
          "detail": "Account credential for authenticated write/payment actions; never print it.",
          "required": false
        },
        {
          "type": "env",
          "name": "MCP",
          "detail": "Environment variable referenced by RentAHuman setup notes.",
          "required": false
        },
        {
          "type": "env",
          "name": "API",
          "detail": "Environment variable referenced by RentAHuman setup notes.",
          "required": false
        },
        {
          "type": "env",
          "name": "URL",
          "detail": "Environment variable referenced by RentAHuman setup notes.",
          "required": false
        },
        {
          "type": "env",
          "name": "REST",
          "detail": "Environment variable referenced by RentAHuman setup notes.",
          "required": false
        },
        {
          "type": "helper-command",
          "name": "npx",
          "command": "npx",
          "detail": "Confirms the MCP package can run in the current agent environment.",
          "required": false
        },
        {
          "type": "mcp",
          "name": "RentAHuman MCP",
          "detail": "Requires RentAHuman MCP, REST API, or account setup where the agent runs. Vibe Research tracks the building and guide only; API keys, operator pairing, payments, and escrow approval stay with the agent runtime and human workflow.",
          "required": false
        }
      ],
      "tools": [
        {
          "type": "env",
          "name": "RENTAHUMAN_API_URL",
          "detail": "REST API base URL, usually https://rentahuman.ai/api.",
          "required": false
        },
        {
          "type": "env",
          "name": "RENTAHUMAN_API_KEY",
          "detail": "Account credential for authenticated write/payment actions; never print it.",
          "required": false
        },
        {
          "type": "env",
          "name": "MCP",
          "detail": "Environment variable referenced by RentAHuman setup notes.",
          "required": false
        },
        {
          "type": "env",
          "name": "API",
          "detail": "Environment variable referenced by RentAHuman setup notes.",
          "required": false
        },
        {
          "type": "env",
          "name": "URL",
          "detail": "Environment variable referenced by RentAHuman setup notes.",
          "required": false
        },
        {
          "type": "env",
          "name": "REST",
          "detail": "Environment variable referenced by RentAHuman setup notes.",
          "required": false
        },
        {
          "type": "helper-command",
          "name": "npx",
          "command": "npx",
          "detail": "Confirms the MCP package can run in the current agent environment.",
          "required": false
        },
        {
          "type": "mcp-tool",
          "name": "RentAHuman MCP",
          "detail": "Requires RentAHuman MCP, REST API, or account setup where the agent runs. Vibe Research tracks the building and guide only; API keys, operator pairing, payments, and escrow approval stay with the agent runtime and human workflow.",
          "required": false
        }
      ],
      "endpoints": [
        {
          "type": "docs",
          "name": "RentAHuman",
          "url": "https://rentahuman.ai/",
          "auth": "none",
          "detail": "Documentation for RentAHuman.",
          "required": false
        },
        {
          "type": "docs",
          "name": "MCP guide",
          "url": "https://rentahuman.ai/mcp",
          "auth": "none",
          "detail": "Documentation for RentAHuman.",
          "required": false
        },
        {
          "type": "docs",
          "name": "API docs",
          "url": "https://rentahuman.ai/api-docs",
          "auth": "none",
          "detail": "Documentation for RentAHuman.",
          "required": false
        },
        {
          "type": "docs",
          "name": "OpenAPI spec",
          "url": "https://rentahuman.ai/.well-known/openapi.yaml",
          "auth": "none",
          "detail": "Documentation for RentAHuman.",
          "required": false
        },
        {
          "type": "docs",
          "name": "Agent quickstart",
          "url": "https://rentahuman.ai/llms.txt",
          "auth": "none",
          "detail": "Documentation for RentAHuman.",
          "required": false
        },
        {
          "type": "mcp",
          "name": "RentAHuman MCP",
          "auth": "mcp",
          "detail": "Requires RentAHuman MCP, REST API, or account setup where the agent runs. Vibe Research tracks the building and guide only; API keys, operator pairing, payments, and escrow approval stay with the agent runtime and human workflow.",
          "required": false
        }
      ],
      "onboarding": {
        "variables": [
          {
            "label": "MCP server",
            "value": "npx rentahuman-mcp",
            "required": false
          },
          {
            "label": "API URL",
            "value": "https://rentahuman.ai/api",
            "required": false
          },
          {
            "label": "API key or operator pairing",
            "value": "required for posting bounties, hiring, messaging, or payments",
            "required": true
          },
          {
            "label": "Spend policy",
            "value": "budget, escrow, and release approval rules",
            "required": true
          }
        ],
        "steps": [
          {
            "title": "Read the agent docs",
            "detail": "Review the MCP guide, REST API docs, and task/payment model before giving agents write access."
          },
          {
            "title": "Connect RentAHuman",
            "detail": "Configure the MCP server or REST API in the provider or local environment that will use it."
          },
          {
            "title": "Set approval rules",
            "detail": "Require explicit human approval before posting paid bounties, funding escrow, releasing payment, or exposing private data."
          },
          {
            "title": "Install the building",
            "detail": "Add RentAHuman to Agent Town once the MCP or API path is ready.",
            "completeWhen": {
              "type": "installed"
            }
          }
        ]
      },
      "agentGuide": {
        "summary": "Use RentAHuman when an agent needs a human workforce for physical-world tasks through RentAHuman's MCP server or REST API.",
        "useCases": [
          "Search humans by skill, rate, location, city, or country.",
          "Post bounties for field research, errands, delivery, media capture, QA, or local presence tasks.",
          "Book services, manage applications, and track escrow-backed completion when the account is approved.",
          "Inspect public bounties or profiles before asking the human for credentials, spend approval, or operator pairing."
        ],
        "setup": [
          "Start with read-only search and browsing unless the user has explicitly approved posting or spending.",
          "Keep RentAHuman API keys, generated identities, pairing codes, prepaid card details, and Stripe data out of prompts, Library notes, logs, and screenshots.",
          "Record task scope, budget, location, deadline, evidence requirements, and approval points before creating paid bounties.",
          "Ask for human approval before posting paid work, accepting applications, funding escrow, releasing payment, sending money, or sharing private user data."
        ],
        "commands": [
          {
            "command": "npx -y rentahuman-mcp --help",
            "label": "Check MCP package help",
            "detail": "Confirms the MCP package can run in the current agent environment."
          },
          {
            "command": "curl -L https://rentahuman.ai/llms.txt",
            "label": "Read agent quickstart",
            "detail": "Shows the current MCP package name, public endpoints, and tool list."
          },
          {
            "command": "curl -s \"https://rentahuman.ai/api/humans?skill=Photography&limit=3\"",
            "label": "Try public human search",
            "detail": "Uses a no-auth endpoint to validate basic network access without spending money."
          }
        ],
        "docs": [
          {
            "label": "RentAHuman",
            "url": "https://rentahuman.ai/"
          },
          {
            "label": "MCP guide",
            "url": "https://rentahuman.ai/mcp"
          },
          {
            "label": "API docs",
            "url": "https://rentahuman.ai/api-docs"
          },
          {
            "label": "OpenAPI spec",
            "url": "https://rentahuman.ai/.well-known/openapi.yaml"
          },
          {
            "label": "Agent quickstart",
            "url": "https://rentahuman.ai/llms.txt"
          }
        ],
        "env": [
          {
            "name": "RENTAHUMAN_API_URL",
            "detail": "REST API base URL, usually https://rentahuman.ai/api.",
            "required": false
          },
          {
            "name": "RENTAHUMAN_API_KEY",
            "detail": "Account credential for authenticated write/payment actions; never print it.",
            "required": false
          }
        ]
      }
    },
    {
      "id": "runpod",
      "name": "RunPod",
      "version": "0.1.0",
      "category": "Compute",
      "description": "Track GPU pod setup for agents that launch, monitor, or use RunPod jobs through a connector or helper.",
      "status": "community",
      "trust": "helper-command",
      "icon": "gpu",
      "docsUrl": "https://docs.runpod.io/",
      "repo": {
        "url": "https://github.com/Clamepending/runpod-building",
        "owner": "Clamepending",
        "name": "runpod-building",
        "branch": "main",
        "manifestPath": "buildinghub/building.json",
        "readmePath": "README.md",
        "assetsPath": "assets"
      },
      "media": {
        "thumbnail": {
          "path": "assets/thumbnail.svg",
          "url": "https://raw.githubusercontent.com/Clamepending/runpod-building/main/assets/thumbnail.svg",
          "alt": "RunPod Building thumbnail"
        }
      },
      "visual": {
        "shape": "factory"
      },
      "footprint": {
        "width": 3,
        "height": 2,
        "shape": "factory",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1.5
          }
        ]
      },
      "access": {
        "label": "RunPod API or CLI",
        "detail": "Requires RUNPOD_API_KEY or a reviewed helper command where the agent runs. BuildingHub does not run pod lifecycle code itself."
      },
      "tools": [
        {
          "type": "env",
          "name": "RUNPOD_API_KEY",
          "detail": "Required for API-backed pod and endpoint operations.",
          "required": true
        },
        {
          "type": "helper-command",
          "name": "runpod",
          "command": "runpod",
          "detail": "Optional local CLI wrapper for reviewed workflows.",
          "required": false
        }
      ],
      "endpoints": [
        {
          "type": "docs",
          "name": "RunPod docs",
          "url": "https://docs.runpod.io/",
          "auth": "none",
          "detail": "Official RunPod documentation.",
          "required": false
        }
      ],
      "capabilities": [
        {
          "type": "env",
          "name": "RUNPOD_API_KEY",
          "detail": "Required for API-backed pod and endpoint operations.",
          "required": true
        },
        {
          "type": "helper-command",
          "name": "runpod",
          "command": "runpod",
          "detail": "Optional local CLI wrapper for reviewed workflows.",
          "required": false
        }
      ],
      "onboarding": {
        "variables": [
          {
            "label": "RunPod key",
            "value": "RUNPOD_API_KEY in agent environment",
            "required": true,
            "secret": true
          },
          {
            "label": "Budget guardrail",
            "value": "max pod type, region, and run duration",
            "required": true
          }
        ],
        "steps": [
          {
            "title": "Add credentials",
            "detail": "Expose RUNPOD_API_KEY only to agents allowed to spend compute."
          },
          {
            "title": "Write budget limits",
            "detail": "Capture allowed GPU classes, max runtime, and teardown expectations."
          },
          {
            "title": "Install the building",
            "detail": "Add RunPod to Agent Town after guardrails are documented.",
            "completeWhen": {
              "type": "installed"
            }
          }
        ]
      }
    },
    {
      "id": "sora",
      "name": "Sora",
      "version": "0.1.0",
      "category": "Generative Media",
      "description": "Create, edit, and extend OpenAI video generations through a Videos API or provider connector.",
      "status": "API sunset 2026-09-24",
      "trust": "manifest-only",
      "icon": "studio",
      "repo": {
        "url": "https://github.com/Clamepending/sora-building",
        "owner": "Clamepending",
        "name": "sora-building",
        "branch": "main",
        "manifestPath": "buildinghub/building.json",
        "readmePath": "README.md",
        "assetsPath": "assets"
      },
      "media": {
        "thumbnail": {
          "path": "assets/thumbnail.svg",
          "url": "https://raw.githubusercontent.com/Clamepending/sora-building/main/assets/thumbnail.svg",
          "alt": "Sora Building thumbnail"
        }
      },
      "keywords": [
        "sora",
        "external",
        "API sunset 2026-09-24",
        "Generative Media",
        "studio",
        "API",
        "OPENAI_API_KEY",
        "OpenAI API key",
        "OPENAI_API_KEY in agent environment",
        "Model",
        "sora-2 or sora-2-pro while available",
        "Artifact scope",
        "video IDs, downloads, thumbnails, and prompts",
        "Confirm availability",
        "Check that the account still has Videos API access before assigning Sora work.",
        "Connect OpenAI",
        "Provide OPENAI_API_KEY to the provider or local environment that will generate videos.",
        "Install the building",
        "Add the Sora studio once the external API or connector is ready.",
        "installed"
      ],
      "visual": {
        "shape": "studio"
      },
      "footprint": {
        "width": 3,
        "height": 2,
        "shape": "studio",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1.5
          }
        ]
      },
      "access": {
        "label": "OpenAI Videos API",
        "detail": "Requires OPENAI_API_KEY and account access to the OpenAI Videos API where the agent runs. Sora 2 and the Videos API are deprecated and scheduled to shut down on September 24, 2026."
      },
      "capabilities": [
        {
          "type": "env",
          "name": "API",
          "detail": "Environment variable referenced by Sora setup notes.",
          "required": false
        },
        {
          "type": "env",
          "name": "OPENAI_API_KEY",
          "detail": "Environment variable referenced by Sora setup notes.",
          "required": false
        }
      ],
      "tools": [
        {
          "type": "env",
          "name": "API",
          "detail": "Environment variable referenced by Sora setup notes.",
          "required": false
        },
        {
          "type": "env",
          "name": "OPENAI_API_KEY",
          "detail": "Environment variable referenced by Sora setup notes.",
          "required": false
        }
      ],
      "onboarding": {
        "variables": [
          {
            "label": "OpenAI API key",
            "value": "OPENAI_API_KEY in agent environment",
            "required": true
          },
          {
            "label": "Model",
            "value": "sora-2 or sora-2-pro while available",
            "required": true
          },
          {
            "label": "Artifact scope",
            "value": "video IDs, downloads, thumbnails, and prompts",
            "required": false
          }
        ],
        "steps": [
          {
            "title": "Confirm availability",
            "detail": "Check that the account still has Videos API access before assigning Sora work."
          },
          {
            "title": "Connect OpenAI",
            "detail": "Provide OPENAI_API_KEY to the provider or local environment that will generate videos."
          },
          {
            "title": "Install the building",
            "detail": "Add the Sora studio once the external API or connector is ready.",
            "completeWhen": {
              "type": "installed"
            }
          }
        ]
      }
    },
    {
      "id": "supabase",
      "name": "Supabase",
      "version": "0.1.0",
      "category": "Data",
      "description": "Give agents a visible home for Supabase project setup, migrations, logs, and database access instructions.",
      "status": "community",
      "trust": "helper-command",
      "icon": "database",
      "docsUrl": "https://supabase.com/docs",
      "repo": {
        "url": "https://github.com/Clamepending/supabase-building",
        "owner": "Clamepending",
        "name": "supabase-building",
        "branch": "main",
        "manifestPath": "buildinghub/building.json",
        "readmePath": "README.md",
        "assetsPath": "assets"
      },
      "media": {
        "thumbnail": {
          "path": "assets/thumbnail.svg",
          "url": "https://raw.githubusercontent.com/Clamepending/supabase-building/main/assets/thumbnail.svg",
          "alt": "Supabase Building thumbnail"
        }
      },
      "visual": {
        "shape": "library"
      },
      "footprint": {
        "width": 3,
        "height": 2,
        "shape": "library",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1.5
          }
        ]
      },
      "access": {
        "label": "Supabase CLI or MCP",
        "detail": "Requires Supabase CLI authentication, a provider MCP, or scoped database credentials where the agent runs."
      },
      "tools": [
        {
          "type": "helper-command",
          "name": "supabase",
          "command": "supabase",
          "detail": "Local CLI for migrations, branches, and project inspection.",
          "required": false
        },
        {
          "type": "env",
          "name": "SUPABASE_ACCESS_TOKEN",
          "detail": "Optional token for CLI automation.",
          "required": false
        }
      ],
      "endpoints": [
        {
          "type": "docs",
          "name": "Supabase docs",
          "url": "https://supabase.com/docs",
          "auth": "none",
          "detail": "Official Supabase documentation.",
          "required": false
        }
      ],
      "capabilities": [
        {
          "type": "helper-command",
          "name": "supabase",
          "command": "supabase",
          "detail": "Local CLI for migrations, branches, and project inspection.",
          "required": false
        },
        {
          "type": "env",
          "name": "SUPABASE_ACCESS_TOKEN",
          "detail": "Optional token for CLI automation.",
          "required": false
        }
      ],
      "onboarding": {
        "variables": [
          {
            "label": "Project ref",
            "value": "Supabase project ref or local config",
            "required": true
          },
          {
            "label": "Access scope",
            "value": "CLI login, MCP, or scoped DB URL",
            "required": true,
            "secret": true
          }
        ],
        "steps": [
          {
            "title": "Choose access path",
            "detail": "Use Supabase CLI, MCP, or scoped database credentials."
          },
          {
            "title": "Document migration policy",
            "detail": "Tell agents whether they may apply migrations or only prepare them."
          },
          {
            "title": "Install the building",
            "detail": "Add Supabase to Agent Town once project boundaries are clear.",
            "completeWhen": {
              "type": "installed"
            }
          }
        ]
      }
    },
    {
      "id": "system",
      "name": "System",
      "version": "0.1.0",
      "category": "Vibe Research",
      "description": "Inspect this host's storage, CPU, memory, GPU utilization, accelerators, and agent usage.",
      "status": "built in",
      "trust": "manifest-only",
      "icon": "plugin",
      "repo": {
        "url": "https://github.com/Clamepending/system-building",
        "owner": "Clamepending",
        "name": "system-building",
        "branch": "main",
        "manifestPath": "buildinghub/building.json",
        "readmePath": "README.md",
        "assetsPath": "assets"
      },
      "media": {
        "thumbnail": {
          "path": "assets/thumbnail.svg",
          "url": "https://raw.githubusercontent.com/Clamepending/system-building/main/assets/thumbnail.svg",
          "alt": "System Building thumbnail"
        }
      },
      "keywords": [
        "system",
        "vibe-research",
        "built in",
        "Vibe Research",
        "plugin",
        "VIBE_RESEARCH_PORT",
        "VIBE_RESEARCH_SYSTEM_DIR",
        "CPU",
        "GPU",
        "Metrics endpoint",
        "/api/system",
        "History endpoint",
        "/api/system/history",
        "Open System",
        "Use the System building to inspect host storage, CPU, memory, GPU, accelerator, and agent usage metrics.",
        "installed",
        "Check GPU ownership",
        "Review which GPU processes belong to Vibe Research sessions before scheduling heavy work."
      ],
      "visual": {
        "shape": "plugin"
      },
      "footprint": {
        "width": 2,
        "height": 2,
        "shape": "plugin",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1
          }
        ]
      },
      "access": {
        "label": "Host metrics",
        "detail": "Uses the local system metrics sampler for host storage, CPU, memory, GPU, accelerator, and Vibe Research agent usage data. No extra credentials are required."
      },
      "capabilities": [
        {
          "type": "env",
          "name": "VIBE_RESEARCH_PORT",
          "detail": "Current Vibe Research server port when available.",
          "required": false
        },
        {
          "type": "env",
          "name": "VIBE_RESEARCH_SYSTEM_DIR",
          "detail": "Local system workspace directory for generated guides and communication state.",
          "required": false
        },
        {
          "type": "env",
          "name": "CPU",
          "detail": "Environment variable referenced by System setup notes.",
          "required": false
        },
        {
          "type": "env",
          "name": "GPU",
          "detail": "Environment variable referenced by System setup notes.",
          "required": false
        }
      ],
      "tools": [
        {
          "type": "env",
          "name": "VIBE_RESEARCH_PORT",
          "detail": "Current Vibe Research server port when available.",
          "required": false
        },
        {
          "type": "env",
          "name": "VIBE_RESEARCH_SYSTEM_DIR",
          "detail": "Local system workspace directory for generated guides and communication state.",
          "required": false
        },
        {
          "type": "env",
          "name": "CPU",
          "detail": "Environment variable referenced by System setup notes.",
          "required": false
        },
        {
          "type": "env",
          "name": "GPU",
          "detail": "Environment variable referenced by System setup notes.",
          "required": false
        }
      ],
      "onboarding": {
        "variables": [
          {
            "label": "Metrics endpoint",
            "value": "/api/system",
            "required": true
          },
          {
            "label": "History endpoint",
            "value": "/api/system/history",
            "required": true
          }
        ],
        "steps": [
          {
            "title": "Open System",
            "detail": "Use the System building to inspect host storage, CPU, memory, GPU, accelerator, and agent usage metrics.",
            "completeWhen": {
              "type": "installed"
            }
          },
          {
            "title": "Check GPU ownership",
            "detail": "Review which GPU processes belong to Vibe Research sessions before scheduling heavy work."
          }
        ]
      },
      "agentGuide": {
        "summary": "Use System when an agent needs to inspect host capacity, GPU availability, storage pressure, or local Vibe Research agent usage.",
        "useCases": [
          "Check GPU utilization and ownership before starting heavy experiments.",
          "Review CPU, memory, storage, and accelerator inventory for the local machine.",
          "Inspect recent system metric history when diagnosing host pressure."
        ],
        "commands": [
          {
            "command": "curl -s http://127.0.0.1:${VIBE_RESEARCH_PORT:-4123}/api/system -H 'X-Vibe-Research-API: 1'",
            "label": "Read current metrics",
            "detail": "Shows current storage, CPU, memory, GPU, accelerator, and agent usage metrics."
          },
          {
            "command": "curl -s 'http://127.0.0.1:${VIBE_RESEARCH_PORT:-4123}/api/system/history?range=1h' -H 'X-Vibe-Research-API: 1'",
            "label": "Read one-hour history",
            "detail": "Shows the sampled history backing the System charts."
          }
        ],
        "env": [
          {
            "name": "VIBE_RESEARCH_PORT",
            "detail": "Current Vibe Research server port when available.",
            "required": false
          },
          {
            "name": "VIBE_RESEARCH_SYSTEM_DIR",
            "detail": "Local system workspace directory for generated guides and communication state.",
            "required": false
          }
        ]
      }
    },
    {
      "id": "tailscale",
      "name": "Tailscale",
      "version": "0.1.0",
      "category": "Networking",
      "description": "Open Vibe Research and localhost app ports through a tailnet portal.",
      "status": "auto-detected",
      "trust": "helper-command",
      "icon": "portal",
      "repo": {
        "url": "https://github.com/Clamepending/tailscale-building",
        "owner": "Clamepending",
        "name": "tailscale-building",
        "branch": "main",
        "manifestPath": "buildinghub/building.json",
        "readmePath": "README.md",
        "assetsPath": "assets"
      },
      "media": {
        "thumbnail": {
          "path": "assets/thumbnail.svg",
          "url": "https://raw.githubusercontent.com/Clamepending/tailscale-building/main/assets/thumbnail.svg",
          "alt": "Tailscale Building thumbnail"
        }
      },
      "keywords": [
        "tailscale",
        "vibe-research",
        "auto-detected",
        "Networking",
        "portal",
        "VIBE_RESEARCH_BUILDING_GUIDES_DIR",
        "VIBE_RESEARCH_BUILDING_GUIDES_INDEX",
        "CLI",
        "URL",
        "Tailscale CLI",
        "installed and logged in on this machine",
        "Tailnet URL",
        "auto-detected when Tailscale is connected",
        "Serve permissions",
        "local tailscale serve access",
        "Connect Tailscale",
        "Sign in with the local Tailscale CLI if tailnet URLs are not appearing.",
        "Use the portal",
        "Open Vibe Research from the Tailscale URL shown in startup output or port previews.",
        "Expose local apps",
        "Use the Localhost Apps dock to publish eligible localhost-only ports with Tailscale Serve."
      ],
      "visual": {
        "shape": "portal"
      },
      "footprint": {
        "width": 2,
        "height": 2,
        "shape": "portal",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1
          }
        ]
      },
      "access": {
        "label": "Tailnet portal",
        "detail": "Uses the local Tailscale CLI when available to show tailnet URLs and expose localhost-only ports with Tailscale Serve. Vibe Research does not store Tailscale credentials."
      },
      "capabilities": [
        {
          "type": "env",
          "name": "VIBE_RESEARCH_BUILDING_GUIDES_DIR",
          "detail": "Directory containing all generated building guides.",
          "required": false
        },
        {
          "type": "env",
          "name": "VIBE_RESEARCH_BUILDING_GUIDES_INDEX",
          "detail": "Index of generated building guides.",
          "required": false
        },
        {
          "type": "env",
          "name": "CLI",
          "detail": "Environment variable referenced by Tailscale setup notes.",
          "required": false
        },
        {
          "type": "env",
          "name": "URL",
          "detail": "Environment variable referenced by Tailscale setup notes.",
          "required": false
        },
        {
          "type": "helper-command",
          "name": "tailscale",
          "command": "tailscale",
          "detail": "Shows whether the machine is logged into a tailnet.",
          "required": false
        }
      ],
      "tools": [
        {
          "type": "env",
          "name": "VIBE_RESEARCH_BUILDING_GUIDES_DIR",
          "detail": "Directory containing all generated building guides.",
          "required": false
        },
        {
          "type": "env",
          "name": "VIBE_RESEARCH_BUILDING_GUIDES_INDEX",
          "detail": "Index of generated building guides.",
          "required": false
        },
        {
          "type": "env",
          "name": "CLI",
          "detail": "Environment variable referenced by Tailscale setup notes.",
          "required": false
        },
        {
          "type": "env",
          "name": "URL",
          "detail": "Environment variable referenced by Tailscale setup notes.",
          "required": false
        },
        {
          "type": "helper-command",
          "name": "tailscale",
          "command": "tailscale",
          "detail": "Shows whether the machine is logged into a tailnet.",
          "required": false
        }
      ],
      "endpoints": [
        {
          "type": "docs",
          "name": "Tailscale Serve docs",
          "url": "https://tailscale.com/kb/1242/tailscale-serve",
          "auth": "none",
          "detail": "Documentation for Tailscale.",
          "required": false
        }
      ],
      "onboarding": {
        "variables": [
          {
            "label": "Tailscale CLI",
            "value": "installed and logged in on this machine",
            "required": false
          },
          {
            "label": "Tailnet URL",
            "value": "auto-detected when Tailscale is connected",
            "required": false
          },
          {
            "label": "Serve permissions",
            "value": "local tailscale serve access",
            "required": false
          }
        ],
        "steps": [
          {
            "title": "Connect Tailscale",
            "detail": "Sign in with the local Tailscale CLI if tailnet URLs are not appearing."
          },
          {
            "title": "Use the portal",
            "detail": "Open Vibe Research from the Tailscale URL shown in startup output or port previews."
          },
          {
            "title": "Expose local apps",
            "detail": "Use the Localhost Apps dock to publish eligible localhost-only ports with Tailscale Serve."
          }
        ]
      },
      "agentGuide": {
        "summary": "Use Tailscale when an agent needs to understand private remote access, tailnet URLs, or why a localhost app can be exposed safely through Tailscale Serve.",
        "useCases": [
          "Check whether this Vibe Research instance has a tailnet URL.",
          "Diagnose why a localhost-only app is not reachable from another device.",
          "Explain to a human what Tailscale Serve setup is missing without asking for credentials unless login is required."
        ],
        "commands": [
          {
            "command": "tailscale status",
            "label": "Check local Tailscale status",
            "detail": "Shows whether the machine is logged into a tailnet."
          },
          {
            "command": "tailscale serve status",
            "label": "Check Serve config",
            "detail": "Shows active Tailscale Serve forwards."
          },
          {
            "command": "curl -s http://127.0.0.1:${VIBE_RESEARCH_PORT:-4123}/api/ports -H 'X-Vibe-Research-API: 1'",
            "label": "List app ports",
            "detail": "Use the current app port when known; browser UI usually exposes ports directly."
          }
        ],
        "docs": [
          {
            "label": "Tailscale Serve docs",
            "url": "https://tailscale.com/kb/1242/tailscale-serve"
          }
        ],
        "env": [
          {
            "name": "VIBE_RESEARCH_BUILDING_GUIDES_DIR",
            "detail": "Directory containing all generated building guides.",
            "required": false
          },
          {
            "name": "VIBE_RESEARCH_BUILDING_GUIDES_INDEX",
            "detail": "Index of generated building guides.",
            "required": false
          }
        ]
      }
    },
    {
      "id": "telegram",
      "name": "Telegram",
      "version": "0.1.0",
      "category": "Communication",
      "description": "Route Telegram bot messages into one dedicated communications agent session.",
      "status": "setup available",
      "trust": "manifest-only",
      "icon": "telegram",
      "repo": {
        "url": "https://github.com/Clamepending/telegram-building",
        "owner": "Clamepending",
        "name": "telegram-building",
        "branch": "main",
        "manifestPath": "buildinghub/building.json",
        "readmePath": "README.md",
        "assetsPath": "assets"
      },
      "media": {
        "thumbnail": {
          "path": "assets/thumbnail.svg",
          "url": "https://raw.githubusercontent.com/Clamepending/telegram-building/main/assets/thumbnail.svg",
          "alt": "Telegram Building thumbnail"
        }
      },
      "keywords": [
        "telegram",
        "vibe-research",
        "setup available",
        "Communication",
        "plugin",
        ".communications-plugin-card",
        "Bot token",
        "telegramBotToken",
        "telegramBotTokenConfigured",
        "Allowed chat IDs",
        "telegramAllowedChatIds",
        "Communications agent",
        "telegramProviderId",
        "Create a bot",
        "Use BotFather to get a Telegram bot token.",
        "installed",
        "Save Telegram variables",
        "Add the bot token and optionally limit which chat IDs the bot may answer.",
        "Reply from one session",
        "Incoming Telegram messages are routed into the dedicated Telegram communications session."
      ],
      "visual": {
        "logo": "telegram",
        "shape": "plugin"
      },
      "footprint": {
        "width": 2,
        "height": 2,
        "shape": "plugin",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1
          }
        ]
      },
      "access": {
        "label": "vibe-research catalog",
        "detail": "Telegram is mirrored from the Vibe Research building catalog as manifest-only setup metadata."
      },
      "onboarding": {
        "variables": [
          {
            "label": "Bot token",
            "value": "Vibe Research setting: telegramBotToken",
            "required": true,
            "secret": true
          },
          {
            "label": "Allowed chat IDs",
            "value": "Vibe Research setting: telegramAllowedChatIds",
            "required": false
          },
          {
            "label": "Communications agent",
            "value": "Vibe Research setting: telegramProviderId",
            "required": true
          }
        ],
        "steps": [
          {
            "title": "Create a bot",
            "detail": "Use BotFather to get a Telegram bot token.",
            "completeWhen": {
              "type": "installed"
            }
          },
          {
            "title": "Save Telegram variables",
            "detail": "Add the bot token and optionally limit which chat IDs the bot may answer.",
            "completeWhen": {
              "allConfigured": [
                "telegramBotTokenConfigured"
              ]
            }
          },
          {
            "title": "Reply from one session",
            "detail": "Incoming Telegram messages are routed into the dedicated Telegram communications session."
          }
        ]
      }
    },
    {
      "id": "text-to-cad",
      "name": "Text to CAD",
      "version": "0.1.0",
      "category": "Design",
      "description": "Use the open source text-to-cad harness to generate, regenerate, inspect, and review CAD models with coding agents.",
      "status": "setup available",
      "trust": "helper-command",
      "icon": "studio",
      "docsUrl": "https://github.com/earthtojake/text-to-cad/blob/main/README.md",
      "homepageUrl": "https://github.com/earthtojake/text-to-cad",
      "repo": {
        "url": "https://github.com/earthtojake/text-to-cad",
        "owner": "earthtojake",
        "name": "text-to-cad",
        "branch": "main",
        "commit": "710655fdbf8b6b0ae0f13a9a371ab3b5debab1f7",
        "readmePath": "README.md",
        "assetsPath": "assets"
      },
      "media": {
        "thumbnail": {
          "path": "assets/text-to-cad-demo.gif",
          "url": "https://raw.githubusercontent.com/earthtojake/text-to-cad/710655fdbf8b6b0ae0f13a9a371ab3b5debab1f7/assets/text-to-cad-demo.gif",
          "alt": "Text to CAD harness demo showing generated CAD geometry in the local viewer"
        }
      },
      "keywords": [
        "text-to-cad",
        "cad",
        "computer-aided design",
        "build123d",
        "opencascade",
        "step",
        "stl",
        "dxf",
        "glb",
        "urdf",
        "cad explorer",
        "viewer",
        "models",
        "python",
        "vite",
        "agent harness"
      ],
      "visual": {
        "shape": "studio"
      },
      "footprint": {
        "width": 3,
        "height": 2,
        "shape": "studio",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1.5
          }
        ]
      },
      "access": {
        "label": "Local CAD harness",
        "detail": "Requires a local checkout of earthtojake/text-to-cad, Python 3.11 with the CAD requirements installed, and npm for the CAD Explorer viewer. BuildingHub only records setup metadata; model-provider credentials and generated CAD artifacts stay in the agent workspace."
      },
      "tools": [
        {
          "type": "helper-command",
          "name": "git",
          "command": "git",
          "detail": "Clone or inspect the text-to-cad harness repository.",
          "required": true
        },
        {
          "type": "helper-command",
          "name": "python3.11",
          "command": "python3.11",
          "detail": "Create the CAD virtual environment and run bundled CAD/URDF generation scripts.",
          "required": true
        },
        {
          "type": "helper-command",
          "name": "npm",
          "command": "npm",
          "detail": "Install and run the CAD Explorer viewer from the viewer/ package.",
          "required": true
        },
        {
          "type": "env",
          "name": "CAD_DIR",
          "detail": "Optional CAD Explorer scan directory for production builds; defaults to models.",
          "required": false
        },
        {
          "type": "env",
          "name": "VIEWER_PORT",
          "detail": "Optional CAD Explorer port; defaults to 4178.",
          "required": false
        }
      ],
      "endpoints": [
        {
          "type": "docs",
          "name": "Text to CAD README",
          "url": "https://github.com/earthtojake/text-to-cad/blob/main/README.md",
          "auth": "none",
          "detail": "Upstream setup and workflow documentation.",
          "required": false
        },
        {
          "type": "docs",
          "name": "CAD skill guide",
          "url": "https://github.com/earthtojake/text-to-cad/blob/main/skills/cad/SKILL.md",
          "auth": "none",
          "detail": "Agent-facing CAD generation, validation, and prompt-reference rules.",
          "required": false
        },
        {
          "type": "docs",
          "name": "URDF skill guide",
          "url": "https://github.com/earthtojake/text-to-cad/blob/main/skills/urdf/SKILL.md",
          "auth": "none",
          "detail": "Agent-facing URDF generation and validation rules.",
          "required": false
        },
        {
          "type": "local",
          "name": "CAD Explorer viewer",
          "url": "http://localhost:4178",
          "auth": "none",
          "detail": "Local Vite viewer for generated STEP, STL, DXF, GLB/topology, and URDF assets.",
          "required": false
        }
      ],
      "capabilities": [
        {
          "type": "helper-command",
          "name": "git",
          "command": "git",
          "detail": "Clone or inspect the text-to-cad harness repository.",
          "required": true
        },
        {
          "type": "helper-command",
          "name": "python3.11",
          "command": "python3.11",
          "detail": "Create the CAD virtual environment and run bundled CAD/URDF generation scripts.",
          "required": true
        },
        {
          "type": "helper-command",
          "name": "npm",
          "command": "npm",
          "detail": "Install and run the CAD Explorer viewer from the viewer/ package.",
          "required": true
        },
        {
          "type": "env",
          "name": "CAD_DIR",
          "detail": "Optional CAD Explorer scan directory for production builds; defaults to models.",
          "required": false
        },
        {
          "type": "env",
          "name": "VIEWER_PORT",
          "detail": "Optional CAD Explorer port; defaults to 4178.",
          "required": false
        }
      ],
      "onboarding": {
        "variables": [
          {
            "label": "Harness checkout",
            "value": "git clone of earthtojake/text-to-cad at a reviewed commit or fork",
            "required": true
          },
          {
            "label": "Python CAD runtime",
            "value": "python3.11 virtualenv with requirements-cad.txt installed",
            "required": true
          },
          {
            "label": "Viewer runtime",
            "value": "npm dependencies installed under viewer/ and a local CAD Explorer port",
            "required": true
          },
          {
            "label": "CAD workspace",
            "value": "models/ by default, or CAD_DIR for an alternate scan root",
            "required": false
          },
          {
            "label": "Model credentials",
            "value": "only if the chosen coding agent/provider needs them; keep credentials outside BuildingHub",
            "required": false,
            "secret": true
          }
        ],
        "steps": [
          {
            "title": "Clone or choose a harness",
            "detail": "Use the upstream text-to-cad repo or a reviewed project fork as the CAD workspace."
          },
          {
            "title": "Install CAD dependencies",
            "detail": "Create the Python 3.11 virtualenv and install requirements-cad.txt before running CAD tools."
          },
          {
            "title": "Install the viewer",
            "detail": "Install npm dependencies under viewer/ and run the CAD Explorer locally when visual inspection is needed."
          },
          {
            "title": "Install the building",
            "detail": "Add Text to CAD to Agent Town once the harness, Python runtime, and viewer path are ready.",
            "completeWhen": {
              "type": "installed"
            }
          },
          {
            "title": "Route agents through the guide",
            "detail": "Agents should read the generated Text to CAD building guide plus the repo AGENTS.md and bundled CAD/URDF skills before editing models."
          }
        ]
      },
      "agentGuide": {
        "summary": "Use Text to CAD when an agent needs to turn design intent into source-controlled CAD, regenerate STEP/STL/DXF/GLB/topology artifacts, inspect `@cad[...]` references, or review geometry in the local CAD Explorer.",
        "useCases": [
          "Set up a local text-to-cad harness for a new CAD modeling task.",
          "Create or edit Python generator sources under models/ and regenerate explicit CAD outputs.",
          "Package imported STEP/STP files with viewer-ready GLB and topology artifacts.",
          "Generate or validate URDF robot descriptions when the task is about links, joints, limits, or mesh references.",
          "Open CAD Explorer to inspect generated STEP, STL, DXF, GLB/topology, or URDF assets.",
          "Resolve `@cad[...]` refs from viewer feedback before making precise geometry edits."
        ],
        "setup": [
          "Start from the harness root and read AGENTS.md, skills/cad/SKILL.md, and skills/urdf/SKILL.md before modifying models.",
          "Prefer ./.venv/bin/python after creating the Python 3.11 CAD runtime from requirements-cad.txt.",
          "Treat generator Python sources and imported STEP/STP files as source of truth; do not hand-edit generated STEP, STL, GLB, topology, DXF, URDF, or viewer artifacts.",
          "Regenerate explicit targets only. Do not run directory-wide CAD generation.",
          "Keep temporary review images outside models/, usually under /tmp/.",
          "Use CAD Explorer at http://localhost:4178 for visual inspection and copied `@cad[...]` refs, then resolve refs with skills/cad/scripts/cadref before editing.",
          "Record the harness commit, exact generation command, source path, generated artifact paths, and viewer/snapshot evidence when CAD output matters to a result."
        ],
        "commands": [
          {
            "label": "Clone harness",
            "command": "git clone https://github.com/earthtojake/text-to-cad.git",
            "detail": "Creates a local text-to-cad workspace."
          },
          {
            "label": "Check harness commit",
            "command": "git rev-parse HEAD",
            "detail": "Run from the harness root to record the exact source revision."
          },
          {
            "label": "Install CAD runtime",
            "command": "python3.11 -m venv .venv && ./.venv/bin/pip install -r requirements-cad.txt",
            "detail": "Creates the local Python environment for build123d, OCP, CAD scripts, and URDF helpers."
          },
          {
            "label": "Install viewer deps",
            "command": "cd viewer && npm install",
            "detail": "Installs CAD Explorer dependencies."
          },
          {
            "label": "Run CAD Explorer",
            "command": "cd viewer && npm run dev -- --host 127.0.0.1 --port 4178",
            "detail": "Starts the local viewer; open http://localhost:4178 and use ?dir=<repo-relative-dir> for a non-default CAD directory."
          },
          {
            "label": "Regenerate STEP part",
            "command": "./.venv/bin/python skills/cad/scripts/gen_step_part models/path/to/source.py --summary",
            "detail": "Regenerates one explicit generated part source or imported STEP/STP target."
          },
          {
            "label": "Regenerate STEP assembly",
            "command": "./.venv/bin/python skills/cad/scripts/gen_step_assembly models/path/to/assembly.py --summary",
            "detail": "Regenerates one explicit assembly source or imported assembly STEP/STP target."
          },
          {
            "label": "Regenerate DXF",
            "command": "./.venv/bin/python skills/cad/scripts/gen_dxf models/path/to/drawing.py",
            "detail": "Regenerates a Python source that exposes gen_dxf()."
          },
          {
            "label": "Regenerate URDF",
            "command": "./.venv/bin/python skills/urdf/scripts/gen_urdf models/path/to/robot.py --summary",
            "detail": "Regenerates an explicit URDF source and prints a compact robot/link/joint check."
          },
          {
            "label": "Inspect CAD ref",
            "command": "./.venv/bin/python skills/cad/scripts/cadref inspect '@cad[models/path/to/entry]' --json",
            "detail": "Resolves a viewer-copied prompt reference from source STEP data."
          },
          {
            "label": "Render review snapshot",
            "command": "./.venv/bin/python skills/cad/scripts/snapshot models/path/to/source.py --view isometric --out /tmp/cad-review.png",
            "detail": "Writes a quick PNG for visual review without storing temporary images under models/."
          }
        ],
        "docs": [
          {
            "label": "Text to CAD repository",
            "url": "https://github.com/earthtojake/text-to-cad"
          },
          {
            "label": "Text to CAD README",
            "url": "https://github.com/earthtojake/text-to-cad/blob/main/README.md"
          },
          {
            "label": "CAD skill",
            "url": "https://github.com/earthtojake/text-to-cad/blob/main/skills/cad/SKILL.md"
          },
          {
            "label": "URDF skill",
            "url": "https://github.com/earthtojake/text-to-cad/blob/main/skills/urdf/SKILL.md"
          },
          {
            "label": "CAD Explorer viewer",
            "url": "https://github.com/earthtojake/text-to-cad/blob/main/viewer/README.md"
          }
        ],
        "env": [
          {
            "name": "CAD_DIR",
            "detail": "Optional CAD Explorer build scan directory; defaults to models.",
            "required": false
          },
          {
            "name": "VIEWER_PORT",
            "detail": "Optional CAD Explorer port; defaults to 4178.",
            "required": false
          },
          {
            "name": "GUI_PORT",
            "detail": "Alternate viewer port variable accepted by the Vite config when VIEWER_PORT is unset.",
            "required": false
          },
          {
            "name": "PORT",
            "detail": "Fallback viewer port variable accepted by the Vite config when VIEWER_PORT and GUI_PORT are unset.",
            "required": false
          }
        ]
      }
    },
    {
      "id": "toolshed",
      "name": "Toolshed",
      "version": "0.1.0",
      "category": "Vibe Research",
      "description": "Build new Agent Town buildings, prepare BuildingHub submissions, and keep the Vibe Research operating map close at hand.",
      "status": "built in",
      "trust": "manifest-only",
      "icon": "plugin",
      "repo": {
        "url": "https://github.com/Clamepending/toolshed-building",
        "owner": "Clamepending",
        "name": "toolshed-building",
        "branch": "main",
        "manifestPath": "buildinghub/building.json",
        "readmePath": "README.md",
        "assetsPath": "assets"
      },
      "media": {
        "thumbnail": {
          "path": "assets/thumbnail.svg",
          "url": "https://raw.githubusercontent.com/Clamepending/toolshed-building/main/assets/thumbnail.svg",
          "alt": "Toolshed Building thumbnail"
        }
      },
      "keywords": [
        "toolshed",
        "vibe-research",
        "built in",
        "Vibe Research",
        "plugin",
        "VIBE_RESEARCH_BUILDING_GUIDES_DIR",
        "VIBE_RESEARCH_BUILDING_GUIDES_INDEX",
        "SDK",
        "Building docs",
        "docs/buildings.md",
        "Starter catalog",
        "BuildingHub checkout or template",
        "Publish path",
        "GitHub PR to BuildingHub",
        "Read the map",
        "Understand buildings, Library memory, settings, occupations, automations, and communications before adding new surfaces.",
        "Draft a manifest",
        "Copy a BuildingHub template or add a first-party manifest with a stable id, setup variables, and Agent Town visual shape.",
        "Validate and publish",
        "Run the catalog validator, rebuild registry.json, and open a reviewed BuildingHub pull request when the building is community-safe."
      ],
      "visual": {
        "shape": "plugin"
      },
      "footprint": {
        "width": 2,
        "height": 2,
        "shape": "plugin",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1
          }
        ]
      },
      "access": {
        "label": "Building SDK + BuildingHub",
        "detail": "Uses the local building docs, core manifest registry, and optional BuildingHub catalog workflow. Community buildings stay manifest-only until reviewed."
      },
      "capabilities": [
        {
          "type": "env",
          "name": "VIBE_RESEARCH_BUILDING_GUIDES_DIR",
          "detail": "Generated per-building guide directory.",
          "required": false
        },
        {
          "type": "env",
          "name": "VIBE_RESEARCH_BUILDING_GUIDES_INDEX",
          "detail": "Generated building guide index.",
          "required": false
        },
        {
          "type": "env",
          "name": "SDK",
          "detail": "Environment variable referenced by Toolshed setup notes.",
          "required": false
        }
      ],
      "tools": [
        {
          "type": "env",
          "name": "VIBE_RESEARCH_BUILDING_GUIDES_DIR",
          "detail": "Generated per-building guide directory.",
          "required": false
        },
        {
          "type": "env",
          "name": "VIBE_RESEARCH_BUILDING_GUIDES_INDEX",
          "detail": "Generated building guide index.",
          "required": false
        },
        {
          "type": "env",
          "name": "SDK",
          "detail": "Environment variable referenced by Toolshed setup notes.",
          "required": false
        }
      ],
      "onboarding": {
        "variables": [
          {
            "label": "Building docs",
            "value": "docs/buildings.md",
            "required": true
          },
          {
            "label": "Starter catalog",
            "value": "BuildingHub checkout or template",
            "required": false
          },
          {
            "label": "Publish path",
            "value": "GitHub PR to BuildingHub",
            "required": false
          }
        ],
        "steps": [
          {
            "title": "Read the map",
            "detail": "Understand buildings, Library memory, settings, occupations, automations, and communications before adding new surfaces."
          },
          {
            "title": "Draft a manifest",
            "detail": "Copy a BuildingHub template or add a first-party manifest with a stable id, setup variables, and Agent Town visual shape."
          },
          {
            "title": "Validate and publish",
            "detail": "Run the catalog validator, rebuild registry.json, and open a reviewed BuildingHub pull request when the building is community-safe."
          }
        ]
      },
      "agentGuide": {
        "summary": "Use Toolshed when an agent needs to create, review, or extend a building manifest and its generated setup guide.",
        "useCases": [
          "Draft a first-party building manifest with setup, access, and agentGuide fields.",
          "Create or review a manifest-only BuildingHub entry.",
          "Find the generated building guide index that Codex and Claude Code sessions can read."
        ],
        "commands": [
          {
            "command": "sed -n '1,220p' docs/buildings.md",
            "label": "Read building docs",
            "detail": "Start here before changing building contracts."
          },
          {
            "command": "sed -n '1,220p' \"$VIBE_RESEARCH_BUILDING_GUIDES_INDEX\"",
            "label": "Read generated guide index",
            "detail": "Shows every building guide available to the current agent."
          }
        ],
        "env": [
          {
            "name": "VIBE_RESEARCH_BUILDING_GUIDES_DIR",
            "detail": "Generated per-building guide directory.",
            "required": false
          },
          {
            "name": "VIBE_RESEARCH_BUILDING_GUIDES_INDEX",
            "detail": "Generated building guide index.",
            "required": false
          }
        ]
      }
    },
    {
      "id": "twilio",
      "name": "Twilio",
      "version": "0.1.0",
      "category": "Communication",
      "description": "Coordinate SMS, WhatsApp, voice, Verify, and webhook workflows through Twilio with explicit approvals, contact allowlists, and spend guardrails.",
      "status": "setup available",
      "trust": "manifest-only",
      "icon": "post",
      "docsUrl": "https://www.twilio.com/docs",
      "homepageUrl": "https://www.twilio.com/",
      "repo": {
        "url": "https://github.com/Clamepending/twilio-building",
        "owner": "Clamepending",
        "name": "twilio-building",
        "branch": "main",
        "manifestPath": "buildinghub/building.json",
        "readmePath": "README.md",
        "assetsPath": "assets"
      },
      "media": {
        "thumbnail": {
          "path": "assets/thumbnail.svg",
          "url": "https://raw.githubusercontent.com/Clamepending/twilio-building/main/assets/thumbnail.svg",
          "alt": "Twilio Building thumbnail"
        }
      },
      "keywords": [
        "twilio",
        "sms",
        "mms",
        "whatsapp",
        "voice",
        "calls",
        "verify",
        "otp",
        "webhooks",
        "communications",
        "approval required",
        "allowlist"
      ],
      "visual": {
        "shape": "post"
      },
      "footprint": {
        "width": 2,
        "height": 2,
        "shape": "post",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1
          }
        ]
      },
      "access": {
        "label": "Twilio account and reviewed connector",
        "detail": "Requires Twilio API credentials, an approved sender or service, webhook handling where needed, and human-reviewed agent rules outside BuildingHub."
      },
      "tools": [
        {
          "type": "api",
          "name": "twilio.messages.create",
          "endpoint": "twilio-messages-api",
          "detail": "Send SMS, MMS, WhatsApp, RCS, or channel messages after recipient, sender, content, approval, and spend checks pass.",
          "required": false
        },
        {
          "type": "api",
          "name": "twilio.calls.create",
          "endpoint": "twilio-calls-api",
          "detail": "Start outbound voice calls only through an approved workflow with caller ID, TwiML URL, contact, and cost guardrails.",
          "required": false
        },
        {
          "type": "api",
          "name": "twilio.verify.verifications.create",
          "endpoint": "twilio-verify-api",
          "detail": "Start verification challenges through a configured Verify Service.",
          "required": false
        },
        {
          "type": "webhook",
          "name": "twilio.messaging.webhook",
          "endpoint": "twilio-inbound-message-webhook",
          "detail": "Receive inbound message and status callback events through a connector or hosted callback service.",
          "required": false
        },
        {
          "type": "helper-command",
          "name": "twilio",
          "command": "twilio",
          "detail": "Optional Twilio CLI for profile inspection and manual setup tasks.",
          "required": false
        },
        {
          "type": "env",
          "name": "TWILIO_ACCOUNT_SID",
          "detail": "Twilio Account SID for the account or subaccount used by the connector.",
          "required": true
        }
      ],
      "endpoints": [
        {
          "type": "api",
          "name": "twilio-rest-api",
          "method": "POST",
          "urlTemplate": "https://api.twilio.com/2010-04-01/Accounts/{AccountSid}/{Resource}.json",
          "auth": "api-key",
          "detail": "Base Twilio REST API surface for account, messaging, voice, phone number, and related resources.",
          "required": true
        },
        {
          "type": "api",
          "name": "twilio-messages-api",
          "method": "POST",
          "urlTemplate": "https://api.twilio.com/2010-04-01/Accounts/{AccountSid}/Messages.json",
          "auth": "api-key",
          "detail": "Messages resource for outbound SMS, MMS, WhatsApp, RCS, and messaging-channel sends.",
          "required": false
        },
        {
          "type": "api",
          "name": "twilio-calls-api",
          "method": "POST",
          "urlTemplate": "https://api.twilio.com/2010-04-01/Accounts/{AccountSid}/Calls.json",
          "auth": "api-key",
          "detail": "Calls resource for outbound voice calls and status tracking.",
          "required": false
        },
        {
          "type": "api",
          "name": "twilio-verify-api",
          "method": "POST",
          "urlTemplate": "https://verify.twilio.com/v2/Services/{ServiceSid}/Verifications",
          "auth": "api-key",
          "detail": "Verify API surface for starting verification challenges through a configured service.",
          "required": false
        },
        {
          "type": "webhook",
          "name": "twilio-inbound-message-webhook",
          "auth": "custom",
          "detail": "HTTPS callback endpoint configured in Twilio for inbound messages, replies, and status callbacks.",
          "required": false
        },
        {
          "type": "docs",
          "name": "Twilio docs",
          "url": "https://www.twilio.com/docs",
          "auth": "none",
          "detail": "Official Twilio documentation.",
          "required": false
        }
      ],
      "capabilities": [
        {
          "type": "env",
          "name": "TWILIO_ACCOUNT_SID",
          "detail": "Twilio Account SID for the account or subaccount used by the connector.",
          "required": true
        },
        {
          "type": "env",
          "name": "TWILIO_API_KEY",
          "detail": "Preferred API Key SID for Twilio REST API access.",
          "required": true
        },
        {
          "type": "env",
          "name": "TWILIO_API_SECRET",
          "detail": "Preferred API Key secret for Twilio REST API access. Never print it.",
          "required": true
        },
        {
          "type": "env",
          "name": "TWILIO_AUTH_TOKEN",
          "detail": "Fallback account Auth Token only when API keys are not available. Keep this out of logs and durable notes.",
          "required": false
        },
        {
          "type": "env",
          "name": "TWILIO_MESSAGING_SERVICE_SID",
          "detail": "Optional Messaging Service SID for outbound messaging workflows.",
          "required": false
        },
        {
          "type": "env",
          "name": "TWILIO_VERIFY_SERVICE_SID",
          "detail": "Optional Verify Service SID for verification workflows.",
          "required": false
        },
        {
          "type": "env",
          "name": "TWILIO_ALLOWED_RECIPIENTS",
          "detail": "Contact allowlist enforced by the connector or agent runtime before outbound messages or calls.",
          "required": true
        },
        {
          "type": "env",
          "name": "TWILIO_SPEND_LIMIT",
          "detail": "Human-defined spend or rate limit enforced outside BuildingHub.",
          "required": true
        },
        {
          "type": "helper-command",
          "name": "twilio",
          "command": "twilio",
          "detail": "Optional Twilio CLI for profile inspection and setup checks.",
          "required": false
        }
      ],
      "onboarding": {
        "variables": [
          {
            "label": "Account SID",
            "value": "TWILIO_ACCOUNT_SID in agent environment or connector profile",
            "required": true
          },
          {
            "label": "API key SID",
            "value": "TWILIO_API_KEY in agent environment or connector profile",
            "required": true,
            "secret": true
          },
          {
            "label": "API key secret",
            "value": "TWILIO_API_SECRET in agent environment or connector profile",
            "required": true,
            "secret": true
          },
          {
            "label": "Fallback auth token",
            "value": "TWILIO_AUTH_TOKEN only when API keys are unavailable",
            "required": false,
            "secret": true
          },
          {
            "label": "Sender or service",
            "value": "Twilio phone number, Messaging Service SID, WhatsApp sender, or Verify Service SID",
            "required": true
          },
          {
            "label": "Webhook URL",
            "value": "HTTPS endpoint for inbound messages and status callbacks",
            "required": false
          },
          {
            "label": "Allowed recipients",
            "value": "TWILIO_ALLOWED_RECIPIENTS or connector-managed allowlist",
            "required": true
          },
          {
            "label": "Spend guardrail",
            "value": "TWILIO_SPEND_LIMIT plus rate/channel limits",
            "required": true
          },
          {
            "label": "Approval policy",
            "value": "Which outbound messages, calls, and verification attempts require human approval",
            "required": true
          }
        ],
        "steps": [
          {
            "title": "Create least-privilege access",
            "detail": "Create a Twilio API key or connector credential for the specific account, subaccount, and capabilities agents may use."
          },
          {
            "title": "Configure senders and services",
            "detail": "Set up the phone number, Messaging Service, WhatsApp sender, voice caller ID, or Verify Service needed by the workflow."
          },
          {
            "title": "Wire inbound events",
            "detail": "Point Twilio webhooks at the reviewed callback service when the workflow needs inbound replies or delivery status."
          },
          {
            "title": "Set guardrails",
            "detail": "Document allowed contacts, allowed channels, message/call approval rules, rate limits, and spend limits before agent access."
          },
          {
            "title": "Install the building",
            "detail": "Add Twilio to Agent Town after credentials, senders, webhook handling, and guardrails have been reviewed.",
            "completeWhen": {
              "type": "installed"
            }
          }
        ]
      },
      "agentGuide": {
        "summary": "Use Twilio when an agent needs to coordinate SMS, WhatsApp, voice, Verify, or webhook communication through a reviewed Twilio connector with explicit human guardrails.",
        "useCases": [
          "Check whether Twilio credentials, senders, services, or webhooks are ready for a communication workflow.",
          "Prepare outbound SMS, WhatsApp, voice, or Verify actions for human approval.",
          "Inspect inbound message or status callback setup without exposing phone numbers, transcripts, or secrets."
        ],
        "setup": [
          "Read the BuildingHub manifest and official Twilio docs before using any Twilio capability.",
          "Prefer API keys over the primary Auth Token for automated access.",
          "Confirm allowed recipients, allowed channels, rate limits, spend limits, and approval rules before sending messages or placing calls.",
          "Do not print Twilio secrets, phone numbers, message bodies, call recordings, or transcripts into durable logs or Library notes.",
          "Ask for human approval before any outbound communication unless a narrower workflow has already been approved."
        ],
        "commands": [
          {
            "label": "Check Twilio CLI",
            "command": "twilio",
            "detail": "Confirms the optional Twilio CLI is installed."
          }
        ],
        "docs": [
          {
            "label": "Twilio docs",
            "url": "https://www.twilio.com/docs"
          },
          {
            "label": "Twilio API basics",
            "url": "https://www.twilio.com/docs/iam/api/"
          },
          {
            "label": "Twilio API keys",
            "url": "https://www.twilio.com/docs/iam/api-keys"
          },
          {
            "label": "Messages resource",
            "url": "https://www.twilio.com/docs/messaging/api/message-resource"
          },
          {
            "label": "Call resource",
            "url": "https://www.twilio.com/docs/voice/api/call-resource"
          },
          {
            "label": "Verify API",
            "url": "https://www.twilio.com/docs/verify/api"
          },
          {
            "label": "Twilio CLI profiles",
            "url": "https://www.twilio.com/docs/twilio-cli/general-usage/profiles"
          }
        ],
        "env": [
          {
            "name": "TWILIO_ACCOUNT_SID",
            "detail": "Twilio Account SID for the account or subaccount used by the connector.",
            "required": true
          },
          {
            "name": "TWILIO_API_KEY",
            "detail": "Preferred API Key SID for Twilio REST API access.",
            "required": true
          },
          {
            "name": "TWILIO_API_SECRET",
            "detail": "Preferred API Key secret. Never print it.",
            "required": true
          },
          {
            "name": "TWILIO_AUTH_TOKEN",
            "detail": "Fallback account Auth Token only when API keys are unavailable. Never print it.",
            "required": false
          },
          {
            "name": "TWILIO_MESSAGING_SERVICE_SID",
            "detail": "Optional Messaging Service SID for outbound messaging.",
            "required": false
          },
          {
            "name": "TWILIO_VERIFY_SERVICE_SID",
            "detail": "Optional Verify Service SID for verification workflows.",
            "required": false
          },
          {
            "name": "TWILIO_ALLOWED_RECIPIENTS",
            "detail": "Required contact allowlist enforced by the connector or agent runtime.",
            "required": true
          },
          {
            "name": "TWILIO_SPEND_LIMIT",
            "detail": "Required spend or rate guardrail enforced outside BuildingHub.",
            "required": true
          }
        ]
      }
    },
    {
      "id": "twitter",
      "name": "Twitter / X",
      "version": "0.1.0",
      "category": "Social",
      "description": "Let agents monitor posts, draft replies, or manage social updates through a provider connector.",
      "status": "connector-ready",
      "trust": "mcp",
      "icon": "post",
      "repo": {
        "url": "https://github.com/Clamepending/twitter-building",
        "owner": "Clamepending",
        "name": "twitter-building",
        "branch": "main",
        "manifestPath": "buildinghub/building.json",
        "readmePath": "README.md",
        "assetsPath": "assets"
      },
      "media": {
        "thumbnail": {
          "path": "assets/thumbnail.svg",
          "url": "https://raw.githubusercontent.com/Clamepending/twitter-building/main/assets/thumbnail.svg",
          "alt": "Twitter / X Building thumbnail"
        }
      },
      "keywords": [
        "twitter",
        "external",
        "connector-ready",
        "Social",
        "post",
        "MCP",
        "API",
        "Twitter / X MCP",
        "Account",
        "Twitter/X account or app",
        "Permissions",
        "read, draft, or post",
        "Agent access",
        "provider MCP or API bridge",
        "Create API access",
        "Prepare the Twitter/X account, app, and scopes the agent should use.",
        "Connect the provider",
        "Configure the API or MCP in the agent host, not in a prompt.",
        "Install the building",
        "Add this building once the external connector is ready.",
        "installed"
      ],
      "visual": {
        "shape": "post"
      },
      "footprint": {
        "width": 2,
        "height": 2,
        "shape": "post",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1
          }
        ]
      },
      "access": {
        "label": "External connector",
        "detail": "Requires Twitter/X API access or an MCP connector configured in the agent provider. Local terminal agents do not receive social credentials from Vibe Research."
      },
      "capabilities": [
        {
          "type": "env",
          "name": "MCP",
          "detail": "Environment variable referenced by Twitter / X setup notes.",
          "required": false
        },
        {
          "type": "env",
          "name": "API",
          "detail": "Environment variable referenced by Twitter / X setup notes.",
          "required": false
        },
        {
          "type": "mcp",
          "name": "Twitter / X MCP",
          "detail": "Requires Twitter/X API access or an MCP connector configured in the agent provider. Local terminal agents do not receive social credentials from Vibe Research.",
          "required": false
        }
      ],
      "tools": [
        {
          "type": "env",
          "name": "MCP",
          "detail": "Environment variable referenced by Twitter / X setup notes.",
          "required": false
        },
        {
          "type": "env",
          "name": "API",
          "detail": "Environment variable referenced by Twitter / X setup notes.",
          "required": false
        },
        {
          "type": "mcp-tool",
          "name": "Twitter / X MCP",
          "detail": "Requires Twitter/X API access or an MCP connector configured in the agent provider. Local terminal agents do not receive social credentials from Vibe Research.",
          "required": false
        }
      ],
      "endpoints": [
        {
          "type": "mcp",
          "name": "Twitter / X MCP",
          "auth": "mcp",
          "detail": "Requires Twitter/X API access or an MCP connector configured in the agent provider. Local terminal agents do not receive social credentials from Vibe Research.",
          "required": false
        }
      ],
      "onboarding": {
        "variables": [
          {
            "label": "Account",
            "value": "Twitter/X account or app",
            "required": false
          },
          {
            "label": "Permissions",
            "value": "read, draft, or post",
            "required": false
          },
          {
            "label": "Agent access",
            "value": "provider MCP or API bridge",
            "required": false
          }
        ],
        "steps": [
          {
            "title": "Create API access",
            "detail": "Prepare the Twitter/X account, app, and scopes the agent should use."
          },
          {
            "title": "Connect the provider",
            "detail": "Configure the API or MCP in the agent host, not in a prompt."
          },
          {
            "title": "Install the building",
            "detail": "Add this building once the external connector is ready.",
            "completeWhen": {
              "type": "installed"
            }
          }
        ]
      }
    },
    {
      "id": "videomemory",
      "name": "VideoMemory",
      "version": "0.1.0",
      "category": "Vibe Research",
      "description": "Let coding agents create video monitors that wake their own Vibe Research sessions.",
      "status": "setup available",
      "trust": "helper-command",
      "icon": "camera",
      "repo": {
        "url": "https://github.com/Clamepending/videomemory-building",
        "owner": "Clamepending",
        "name": "videomemory-building",
        "branch": "main",
        "manifestPath": "buildinghub/building.json",
        "readmePath": "README.md",
        "assetsPath": "assets"
      },
      "media": {
        "thumbnail": {
          "path": "assets/thumbnail.svg",
          "url": "https://raw.githubusercontent.com/Clamepending/videomemory-building/main/assets/thumbnail.svg",
          "alt": "VideoMemory Building thumbnail"
        }
      },
      "keywords": [
        "videomemory",
        "vibe-research",
        "setup available",
        "Vibe Research",
        "camera",
        "VIBE_RESEARCH_VIDEOMEMORY_COMMAND",
        "URL",
        "vr-videomemory",
        ".videomemory-plugin-card",
        "VideoMemory URL",
        "videoMemoryBaseUrl",
        "Wake provider",
        "videoMemoryProviderId",
        "Camera permission",
        "browser permission",
        "Enable the building",
        "Turn on camera monitors.",
        "installed",
        "Save monitor variables",
        "Set the service URL and provider agents should wake.",
        "Grant camera access",
        "Start a monitor and allow camera access when the browser asks."
      ],
      "visual": {
        "shape": "camera"
      },
      "footprint": {
        "width": 2,
        "height": 2,
        "shape": "camera",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1
          }
        ]
      },
      "access": {
        "label": "vibe-research catalog",
        "detail": "VideoMemory is mirrored from the Vibe Research building catalog as manifest-only setup metadata."
      },
      "capabilities": [
        {
          "type": "env",
          "name": "VIBE_RESEARCH_VIDEOMEMORY_COMMAND",
          "detail": "Canonical helper command for local agents.",
          "required": false
        },
        {
          "type": "env",
          "name": "URL",
          "detail": "Environment variable referenced by VideoMemory setup notes.",
          "required": false
        },
        {
          "type": "helper-command",
          "name": "vr-videomemory",
          "command": "vr-videomemory",
          "detail": "Read helper options before creating a monitor.",
          "required": false
        }
      ],
      "tools": [
        {
          "type": "env",
          "name": "VIBE_RESEARCH_VIDEOMEMORY_COMMAND",
          "detail": "Canonical helper command for local agents.",
          "required": false
        },
        {
          "type": "env",
          "name": "URL",
          "detail": "Environment variable referenced by VideoMemory setup notes.",
          "required": false
        },
        {
          "type": "helper-command",
          "name": "vr-videomemory",
          "command": "vr-videomemory",
          "detail": "Read helper options before creating a monitor.",
          "required": false
        }
      ],
      "onboarding": {
        "variables": [
          {
            "label": "VideoMemory URL",
            "value": "Vibe Research setting: videoMemoryBaseUrl",
            "required": true
          },
          {
            "label": "Wake provider",
            "value": "Vibe Research setting: videoMemoryProviderId",
            "required": true
          },
          {
            "label": "Camera permission",
            "value": "browser permission",
            "required": true
          }
        ],
        "steps": [
          {
            "title": "Enable the building",
            "detail": "Turn on camera monitors.",
            "completeWhen": {
              "type": "installed"
            }
          },
          {
            "title": "Save monitor variables",
            "detail": "Set the service URL and provider agents should wake.",
            "completeWhen": {
              "allConfigured": [
                "videoMemoryBaseUrl",
                "videoMemoryProviderId"
              ]
            }
          },
          {
            "title": "Grant camera access",
            "detail": "Start a monitor and allow camera access when the browser asks."
          }
        ]
      },
      "agentGuide": {
        "summary": "Use VideoMemory when an agent needs a camera or video monitor that can wake a Vibe Research session later.",
        "useCases": [
          "Create a monitor that watches a browser/camera condition and wakes an agent.",
          "Check whether camera permission or service URL setup is blocking monitors.",
          "Record monitor IDs, task URLs, and artifact paths in the Library when they matter."
        ],
        "commands": [
          {
            "command": "vr-videomemory --help",
            "label": "Start a monitor",
            "detail": "Read helper options before creating a monitor."
          },
          {
            "command": "sed -n '1,220p' \"$VIBE_RESEARCH_BUILDING_GUIDES_DIR/videomemory.md\"",
            "label": "Read VideoMemory guide",
            "detail": "Review setup and camera permission expectations first."
          }
        ],
        "env": [
          {
            "name": "VIBE_RESEARCH_VIDEOMEMORY_COMMAND",
            "detail": "Canonical helper command for local agents.",
            "required": false
          }
        ]
      }
    },
    {
      "id": "wandb",
      "name": "W&B",
      "version": "0.1.0",
      "category": "Observability",
      "description": "Track training runs, sweeps, metrics, and artifacts from research-agent experiments.",
      "status": "connector-ready",
      "trust": "manifest-only",
      "icon": "studio",
      "repo": {
        "url": "https://github.com/Clamepending/wandb-building",
        "owner": "Clamepending",
        "name": "wandb-building",
        "branch": "main",
        "manifestPath": "buildinghub/building.json",
        "readmePath": "README.md",
        "assetsPath": "assets"
      },
      "media": {
        "thumbnail": {
          "path": "assets/thumbnail.svg",
          "url": "https://raw.githubusercontent.com/Clamepending/wandb-building/main/assets/thumbnail.svg",
          "alt": "W&B Building thumbnail"
        }
      },
      "keywords": [
        "wandb",
        "external",
        "connector-ready",
        "Observability",
        "studio",
        "API",
        "WANDB_API_KEY",
        "URL",
        "W&B API key",
        "WANDB_API_KEY in agent environment",
        "Entity / project",
        "wandb entity and project name",
        "Artifact policy",
        "run URLs, configs, checkpoints, tables, and plots",
        "Authenticate wandb",
        "Log in or provide WANDB_API_KEY in the environment used by the training agent.",
        "Declare the project",
        "Tell agents which entity/project to log to before long runs start.",
        "Install the building",
        "Add W&B to Agent Town once experiment logging is configured.",
        "installed"
      ],
      "visual": {
        "shape": "studio"
      },
      "footprint": {
        "width": 3,
        "height": 2,
        "shape": "studio",
        "snap": "grid",
        "entrances": [
          {
            "side": "south",
            "offset": 1.5
          }
        ]
      },
      "access": {
        "label": "Weights & Biases API",
        "detail": "Requires WANDB_API_KEY or an existing wandb login where the agent runs, plus explicit entity/project scope for experiment logging."
      },
      "capabilities": [
        {
          "type": "env",
          "name": "API",
          "detail": "Environment variable referenced by W&B setup notes.",
          "required": false
        },
        {
          "type": "env",
          "name": "WANDB_API_KEY",
          "detail": "Environment variable referenced by W&B setup notes.",
          "required": false
        },
        {
          "type": "env",
          "name": "URL",
          "detail": "Environment variable referenced by W&B setup notes.",
          "required": false
        }
      ],
      "tools": [
        {
          "type": "env",
          "name": "API",
          "detail": "Environment variable referenced by W&B setup notes.",
          "required": false
        },
        {
          "type": "env",
          "name": "WANDB_API_KEY",
          "detail": "Environment variable referenced by W&B setup notes.",
          "required": false
        },
        {
          "type": "env",
          "name": "URL",
          "detail": "Environment variable referenced by W&B setup notes.",
          "required": false
        }
      ],
      "onboarding": {
        "variables": [
          {
            "label": "W&B API key",
            "value": "WANDB_API_KEY in agent environment",
            "required": true
          },
          {
            "label": "Entity / project",
            "value": "wandb entity and project name",
            "required": true
          },
          {
            "label": "Artifact policy",
            "value": "run URLs, configs, checkpoints, tables, and plots",
            "required": false
          }
        ],
        "steps": [
          {
            "title": "Authenticate wandb",
            "detail": "Log in or provide WANDB_API_KEY in the environment used by the training agent."
          },
          {
            "title": "Declare the project",
            "detail": "Tell agents which entity/project to log to before long runs start."
          },
          {
            "title": "Install the building",
            "detail": "Add W&B to Agent Town once experiment logging is configured.",
            "completeWhen": {
              "type": "installed"
            }
          }
        ]
      }
    }
  ],
  "layouts": [
    {
      "id": "courtyard-hub",
      "name": "Courtyard Hub",
      "version": "0.1.0",
      "category": "Hub",
      "description": "A compact central loop for a town that should feel like a small shared base.",
      "tags": [
        "hub",
        "loop",
        "courtyard",
        "center",
        "roundabout",
        "balanced"
      ],
      "requiredBuildings": [],
      "layout": {
        "themeId": "default",
        "decorations": [
          {
            "id": "road-1",
            "itemId": "road-square",
            "x": 328,
            "y": 236
          },
          {
            "id": "road-2",
            "itemId": "road-square",
            "x": 356,
            "y": 236
          },
          {
            "id": "road-3",
            "itemId": "road-square",
            "x": 384,
            "y": 236
          },
          {
            "id": "road-4",
            "itemId": "road-square",
            "x": 328,
            "y": 264
          },
          {
            "id": "road-5",
            "itemId": "road-square",
            "x": 384,
            "y": 264
          },
          {
            "id": "road-6",
            "itemId": "road-square",
            "x": 328,
            "y": 292
          },
          {
            "id": "road-7",
            "itemId": "road-square",
            "x": 356,
            "y": 292
          },
          {
            "id": "road-8",
            "itemId": "road-square",
            "x": 384,
            "y": 292
          },
          {
            "id": "planter-1",
            "itemId": "planter",
            "x": 356,
            "y": 264
          },
          {
            "id": "fence-1",
            "itemId": "fence-horizontal",
            "x": 328,
            "y": 320
          },
          {
            "id": "fence-2",
            "itemId": "fence-horizontal",
            "x": 384,
            "y": 320
          },
          {
            "id": "shed-1",
            "itemId": "shed",
            "x": 424,
            "y": 264
          }
        ],
        "functional": {}
      }
    },
    {
      "id": "factory-cells",
      "name": "Factory Cells",
      "version": "0.1.0",
      "category": "Factory",
      "description": "Repeated cells and a central service spine for bottleneck-friendly scanning.",
      "tags": [
        "factory",
        "grid",
        "cells",
        "factorio",
        "modules",
        "scannable"
      ],
      "requiredBuildings": [],
      "layout": {
        "themeId": "default",
        "decorations": [
          {
            "id": "road-a1",
            "itemId": "road-square",
            "x": 300,
            "y": 236
          },
          {
            "id": "road-a2",
            "itemId": "road-square",
            "x": 328,
            "y": 236
          },
          {
            "id": "road-a3",
            "itemId": "road-square",
            "x": 356,
            "y": 236
          },
          {
            "id": "road-a4",
            "itemId": "road-square",
            "x": 384,
            "y": 236
          },
          {
            "id": "road-a5",
            "itemId": "road-square",
            "x": 412,
            "y": 236
          },
          {
            "id": "road-b1",
            "itemId": "road-square",
            "x": 356,
            "y": 264
          },
          {
            "id": "road-b2",
            "itemId": "road-square",
            "x": 356,
            "y": 292
          },
          {
            "id": "road-b3",
            "itemId": "road-square",
            "x": 356,
            "y": 320
          },
          {
            "id": "shed-1",
            "itemId": "shed",
            "x": 300,
            "y": 264
          },
          {
            "id": "shed-2",
            "itemId": "shed",
            "x": 384,
            "y": 264
          },
          {
            "id": "planter-1",
            "itemId": "planter",
            "x": 300,
            "y": 320
          },
          {
            "id": "planter-2",
            "itemId": "planter",
            "x": 412,
            "y": 320
          }
        ],
        "functional": {}
      }
    },
    {
      "id": "main-street",
      "name": "Main Street",
      "version": "0.1.0",
      "category": "Starter",
      "description": "A readable starter road with side accents and a tiny town anchor.",
      "tags": [
        "road",
        "street",
        "linear",
        "clear",
        "starter",
        "readable"
      ],
      "requiredBuildings": [],
      "layout": {
        "themeId": "default",
        "decorations": [
          {
            "id": "road-1",
            "itemId": "road-square",
            "x": 272,
            "y": 264
          },
          {
            "id": "road-2",
            "itemId": "road-square",
            "x": 300,
            "y": 264
          },
          {
            "id": "road-3",
            "itemId": "road-square",
            "x": 328,
            "y": 264
          },
          {
            "id": "road-4",
            "itemId": "road-square",
            "x": 356,
            "y": 264
          },
          {
            "id": "road-5",
            "itemId": "road-square",
            "x": 384,
            "y": 264
          },
          {
            "id": "road-6",
            "itemId": "road-square",
            "x": 412,
            "y": 264
          },
          {
            "id": "road-7",
            "itemId": "road-square",
            "x": 440,
            "y": 264
          },
          {
            "id": "planter-1",
            "itemId": "planter",
            "x": 300,
            "y": 292
          },
          {
            "id": "planter-2",
            "itemId": "planter",
            "x": 412,
            "y": 292
          },
          {
            "id": "shed-1",
            "itemId": "shed",
            "x": 356,
            "y": 292
          },
          {
            "id": "fence-1",
            "itemId": "fence-horizontal",
            "x": 272,
            "y": 236
          },
          {
            "id": "fence-2",
            "itemId": "fence-horizontal",
            "x": 440,
            "y": 236
          }
        ],
        "functional": {}
      }
    },
    {
      "id": "research-campus",
      "name": "Research Campus",
      "version": "0.1.0",
      "category": "Campus",
      "description": "Separated clusters for calm zones, gardens, and readable research stations.",
      "tags": [
        "research",
        "campus",
        "clusters",
        "quiet",
        "garden",
        "readable"
      ],
      "requiredBuildings": [],
      "layout": {
        "themeId": "default",
        "decorations": [
          {
            "id": "road-1",
            "itemId": "road-square",
            "x": 292,
            "y": 252
          },
          {
            "id": "road-2",
            "itemId": "road-square",
            "x": 320,
            "y": 252
          },
          {
            "id": "road-3",
            "itemId": "road-square",
            "x": 348,
            "y": 252
          },
          {
            "id": "road-4",
            "itemId": "road-square",
            "x": 376,
            "y": 280
          },
          {
            "id": "road-5",
            "itemId": "road-square",
            "x": 404,
            "y": 280
          },
          {
            "id": "road-6",
            "itemId": "road-square",
            "x": 432,
            "y": 280
          },
          {
            "id": "shed-1",
            "itemId": "shed",
            "x": 292,
            "y": 280
          },
          {
            "id": "shed-2",
            "itemId": "shed",
            "x": 404,
            "y": 308
          },
          {
            "id": "planter-1",
            "itemId": "planter",
            "x": 348,
            "y": 280
          },
          {
            "id": "planter-2",
            "itemId": "planter",
            "x": 432,
            "y": 252
          },
          {
            "id": "fence-1",
            "itemId": "fence-vertical",
            "x": 460,
            "y": 252
          },
          {
            "id": "fence-2",
            "itemId": "fence-vertical",
            "x": 460,
            "y": 280
          }
        ],
        "functional": {}
      }
    }
  ],
  "recipes": [
    {
      "schema": "vibe-research.scaffold.recipe.v1",
      "id": "ml-research-bench",
      "name": "ML Research Bench",
      "version": "0.1.0",
      "description": "A starter scaffold for benchmarking the normal Vibe Research research loop on ML tasks: Library ledger, BuildingHub catalog, Harbor/Modal-style sandbox assumptions, free-form auditable agent DMs, and a compact research-campus town layout.",
      "tags": [
        "ml",
        "benchmark",
        "research",
        "harbor",
        "modal"
      ],
      "compatibility": {
        "recipeSchema": "vibe-research.scaffold.recipe.v1",
        "vibeResearch": {
          "range": ">=0.2.18"
        }
      },
      "buildings": [
        {
          "id": "knowledge-base",
          "name": "Library",
          "category": "Knowledge",
          "source": "buildinghub",
          "version": "0.1.0",
          "enabled": true,
          "required": true
        },
        {
          "id": "occupations",
          "name": "Occupations",
          "category": "Vibe Research",
          "source": "buildinghub",
          "version": "0.1.0",
          "enabled": true,
          "required": true
        },
        {
          "id": "buildinghub",
          "name": "BuildingHub",
          "category": "Community",
          "source": "buildinghub",
          "version": "0.1.0",
          "enabled": true,
          "required": true
        },
        {
          "id": "scaffold-recipes",
          "name": "Scaffold Recipes",
          "category": "Research Ops",
          "source": "core",
          "version": "0.1.0",
          "enabled": true,
          "required": true
        },
        {
          "id": "harbor",
          "name": "Harbor",
          "category": "Compute",
          "source": "buildinghub",
          "version": "0.1.0",
          "enabled": true,
          "required": false
        },
        {
          "id": "modal",
          "name": "Modal",
          "category": "Compute",
          "source": "buildinghub",
          "version": "0.1.0",
          "enabled": false,
          "required": false
        },
        {
          "id": "wandb",
          "name": "W&B",
          "category": "Observability",
          "source": "buildinghub",
          "version": "0.1.0",
          "enabled": false,
          "required": false
        }
      ],
      "settings": {
        "portable": {
          "buildingHubEnabled": true,
          "browserUseEnabled": false,
          "preventSleepEnabled": true,
          "wikiGitBackupEnabled": true,
          "agentCommunicationDmEnabled": true,
          "agentCommunicationDmBody": "freeform",
          "agentCommunicationDmVisibility": "workspace",
          "agentCommunicationRequireRelatedObject": true,
          "agentCommunicationMaxThreadDepth": 8,
          "agentCommunicationMaxUnrepliedPerAgent": 1,
          "agentCommunicationGroupInboxes": "gpu-desk,review-hall",
          "agentCommunicationCaptureMessages": true,
          "agentCommunicationCaptureMessageReads": true
        },
        "localBindingsRequired": [
          {
            "key": "workspaceRootPath",
            "label": "Workspace root",
            "sensitivity": "local",
            "configured": false,
            "required": true
          },
          {
            "key": "wikiPath",
            "label": "Library folder",
            "sensitivity": "local",
            "configured": false,
            "required": true
          }
        ],
        "personal": [
          {
            "key": "wikiGitRemoteUrl",
            "label": "Private Library git remote",
            "sensitivity": "personal",
            "configured": false,
            "required": false
          }
        ],
        "secrets": [
          {
            "key": "agentOpenAiApiKey",
            "label": "OpenAI API key",
            "sensitivity": "secret",
            "configured": false,
            "required": false
          },
          {
            "key": "agentAnthropicApiKey",
            "label": "Anthropic API key",
            "sensitivity": "secret",
            "configured": false,
            "required": false
          }
        ]
      },
      "communication": {
        "dm": {
          "enabled": true,
          "body": "freeform",
          "visibility": "workspace",
          "requireRelatedObject": true,
          "maxThreadDepth": 8,
          "maxUnrepliedPerAgent": 1
        },
        "groupInboxes": [
          "gpu-desk",
          "review-hall"
        ],
        "logging": {
          "captureMessages": true,
          "captureMessageReads": true
        }
      },
      "agents": {
        "defaultProvider": "claude",
        "allowedProviders": [
          "claude",
          "codex",
          "shell"
        ],
        "defaultOccupation": "researcher",
        "canSpawnAgents": true,
        "canCreateSubagents": true,
        "maxConcurrentAgents": 6
      },
      "sandbox": {
        "provider": "harbor",
        "isolation": "workspace",
        "network": "default",
        "gpu": {
          "enabled": true,
          "provider": "local-or-modal",
          "count": 1
        },
        "config": {
          "artifactRoot": "results",
          "timeoutMinutes": 120,
          "benchmarkMode": "normal-system"
        },
        "localBindingsRequired": []
      },
      "permissions": {
        "requireApproval": [
          "uses-credentials",
          "spends-money",
          "publishes-code",
          "sends-messages-external"
        ],
        "deny": [
          "writes-outside-workspace"
        ]
      },
      "library": {
        "mode": "configured",
        "gitRemoteConfigured": false,
        "backupEnabled": true,
        "localBindingsRequired": [
          {
            "key": "wikiPath",
            "label": "Library folder",
            "sensitivity": "local",
            "configured": false,
            "required": true
          }
        ]
      },
      "occupation": {
        "selectedPromptId": "researcher",
        "label": "Vibe Research Researcher",
        "editable": false,
        "promptSha256": ""
      },
      "layout": {
        "decorations": [
          {
            "id": "road-1",
            "itemId": "road-square",
            "x": 240,
            "y": 280
          },
          {
            "id": "road-2",
            "itemId": "road-square",
            "x": 288,
            "y": 280
          },
          {
            "id": "planter-1",
            "itemId": "planter",
            "x": 336,
            "y": 224
          }
        ],
        "functional": {
          "knowledge-base": {
            "x": 160,
            "y": 176
          },
          "occupations": {
            "x": 248,
            "y": 168
          },
          "buildinghub": {
            "x": 344,
            "y": 168
          },
          "scaffold-recipes": {
            "x": 432,
            "y": 176
          },
          "harbor": {
            "x": 520,
            "y": 224
          }
        },
        "themeId": "green-field",
        "dogName": "Scout"
      },
      "localBindingsRequired": [
        {
          "key": "workspaceRootPath",
          "label": "Workspace root",
          "sensitivity": "local",
          "configured": false,
          "required": true
        },
        {
          "key": "wikiPath",
          "label": "Library folder",
          "sensitivity": "local",
          "configured": false,
          "required": true
        },
        {
          "key": "agentOpenAiApiKey",
          "label": "OpenAI API key",
          "sensitivity": "secret",
          "configured": false,
          "required": false
        },
        {
          "key": "agentAnthropicApiKey",
          "label": "Anthropic API key",
          "sensitivity": "secret",
          "configured": false,
          "required": false
        }
      ],
      "redactions": [
        "Local paths are supplied by the receiving Vibe Research install.",
        "Provider API keys are intentionally omitted.",
        "Private Library remotes are intentionally omitted."
      ],
      "source": {
        "kind": "buildinghub",
        "repositoryUrl": "https://github.com/Clamepending/buildinghub",
        "recipeUrl": "https://buildinghub.vibe-research.net/#/scaffolds/ml-research-bench"
      }
    }
  ]
}
