i’ve been messing around with claude for quite a while now
yesterday i was using it and telling it to make a script that opens my shop gui, for some reason it refused and said that something is blocking its tool from creating any new script anywhere in the whole game right now and says its blocked in ServerScriptService.
Only affects creating new Script/LocalScript instances — editing existing scripts’ code works fine, and non-script instances (Parts, GUIs, Values) can still be created normally.
your better off using a plugin that uses the api for scripts, you can also run llms on your own machine and connect via plugin as well using something like jan and connecting thro one of its services which means you can make your own ai for scripting quite easily
If your workflow relies heavily on Claude you should consider moving your code to a local folder and syncing it with studio, there are various tools out there to do that. There you can simply open Claude code, OpenAI Codex or any harness of your choice and let it work in that folder directly. You will only need to get a bit creative on how to let it run the code it makes and test things so it knows what it does, since you can’t rely on its own intuition for obvious reasons.
That’s not Claude refusing anything — it’s Studio’s per-plugin Script Injection permission, and the exact symptom split you described is the giveaway.
The permission fires when a Script, LocalScript or ModuleScript gets parented into the DataModel (confirmed here). Creating a Part, a GUI or a Value never touches it — which is precisely what you’re seeing: only new script instances fail, everything else goes through. It’s also per-plugin rather than per-service, so ServerScriptService isn’t special; that’s just where the attempt happened to land.
Once the prompt is denied or dismissed, Studio remembers the answer. You’ll have a line sitting in Output like:
Plugin "SomeName" was denied script injection permission. The user has been prompted for future attempts.
To turn it back on: Plugins tab → Manage Plugins → find the plugin that’s doing the inserting. Under its description it will read “Script Injection Denied”, with a small edit box next to it — enable Script Injection there. Step-by-step with screenshots. The wording has shifted a little between Studio versions, but it’s the per-plugin permission row in Manage Plugins.
Two things that catch people right after:
Grant it on the plugin that actually parents the script. If your setup is a bridge/companion plugin plus something else, it’s that one — not necessarily the one you think of as “the AI”.
Cloning an object that has a script inside it trips the same permission, even when nothing calls Instance.new("Script") directly. That one is well documented and very easy to miss.
And if you’d rather it failed loudly than silently, this is the usual probe:
local probe = Instance.new("Script")
probe.Name = "InjectionProbe"
local ok = pcall(function()
probe.Parent = game:GetService("ServerScriptService")
end)
probe:Destroy()
if not ok then
warn("Script injection is denied for this plugin — enable it in Manage Plugins.")
end
Worth ruling this out before rebuilding your whole workflow around file sync — it’s a toggle, not something you have to design around.