Why your AI assistant hallucinates Roblox APIs — and how a project knowledge vault fixes it A developer outlined a project knowledge vault approach for stopping AI assistants like Claude and ChatGPT from hallucinating Roblox Luau APIs, arguing that chat windows lack persistent project memory. The method stores an index, stable notes, a tested code library, and a per-game status.md outside the chat, with a fixed loop of reading relevant notes before a task and logging lessons, error fixes, and decisions afterward. The developer notes Claude Desktop can connect to Roblox Studio through Roblox's official Studio MCP interface to build, playtest, and read console output, though copy-paste workflows with ChatGPT or Gemini also work. If you have ever asked Claude or ChatGPT to write Luau for Roblox Studio, you have probably watched it invent an API. A service method that does not exist. A property with the wrong name. A “standard” pattern copied from five-year-old Lua tutorials that Studio will reject the moment you press Play. This is not mainly because the model is “bad at coding.” It is because a chat window is a terrible place to keep a Roblox project. A general assistant has three gaps at once. First, Roblox is not generic Lua. The language is Luau, the APIs live in Studio services, and the official documentation changes. Training data mixes old forum posts, deprecated patterns, and generic Lua. When the model is unsure, it completes the sentence anyway. Second, each new chat starts almost empty. It does not remember that you already decided to store data in one DataService , that a RemoteEvent failed last night with a specific message, or that your game must work on touch, mouse, and gamepad. So it cheerfully opens a second shop, a second currency, or a second save path. Third, nothing in a default chat forces the model to mark uncertainty. A confident paragraph about MarketplaceService:PromptSomething looks the same as a verified one. The result is familiar: you paste the script, Studio errors, you paste the error back, the model apologizes and invents a slightly different API. A typical twin of that failure is architectural: the next session forgets that a DataStore wrapper already exists and generates a second one “just to be safe.” Both bugs come from missing memory, not from a lack of adjectives in the prompt. A vault, in this sense, is not a pile of bookmarks. It is a source of truth outside the chat, in three layers: status.md with open tasks and decisions, an index of modules you already tested. Without layer 3, you repeat yesterday’s bug. Without layer 2, the model hallucinates. Without layer 1, every session has a different standard of “finished.” A practical folder looks like this: an index the model reads first, a copy-paste master prompt for the project instructions, a 01-Wissen folder for stable notes, a code library with a short index, and 05-Projekte/