This isn't a centralized setting for all projects (which is available). You wouldn't want your Python app to be able to run Node.js commands.
Realistically, I don't care what language Claude runs commands in when working on a project. That doesn't have to match the language of the project. My preferences for what commands the tool is allowed to run have basically nothing to do with the project, with the exception of me expecting it to not access files outside a per-project sandbox, which should be just a list of directories that are part of the project.
Either way, the fact that a project can encompass multiple directories means that metadata about the project shouldn't live in that directory.
But even if we assume that for some reason, I care whether it tries to use the wrong git repo and the wrong password (which wouldn't make a lot of sense, given that the .git file should tell what repo to use), the list of allowed commands still does not belong as part of the project data, because what I as a developer am willing to tolerate is not necessarily the same as what someone else as a developer on that same project is wiling to tolerate. It is inherently a per-user choice, not a per-project choice, which means it doesn't belong within ten thousand miles of the project directory.
There are exactly two valid places to store it: the app's preferences or a separate per-project configuration file that lives outside the data container (e.g. $HOME/.claude/projects/project_name). And in an ideal world, you'd have multiple configurations that you can choose from, e.g. one permission set that grants it more access than others, depending on what you're working on. And when you create a new project, you'd choose which permission set to use, e.g. "Project directory only", "Team Drive and project", "YOLO", etc.
But either way, no matter where it lives, it should not there.
So then going with personal project specific settings are stored in the project with a .gitignore entry is an extremely common pattern for example JetBrains or local environment settings, like .env.local files.
Just because other questionably designed systems made the same mistake, that doesn't mean it isn't a mistake. For one thing, it's a security red flag the size of a planet in this context. If that file lives in the project directory, that means it's presumptively inside the writable part of the sandbox, which means nothing prevents Claude from rewriting that file to grant itself additional permissions. Compared with that, the potential for leaks is just the icing on the cake.
This isn't a grey area. That data has security implications at multiple levels, and it *absolutely* should *never* be anywhere *near* the project directory, period.
Just weird that people want to move to centralized Windows Registry style over local config files next to the thing it's configuring...
Next to is not inside. If it were up one level, right next to the git root, we wouldn't be having this discussion. It wouldn't end up in the repository, it wouldn't be inside Claude's sandbox, and it wouldn't be a security hole from h**l.
But I'd prefer it to be in the app's preferences, so that it gets nuked when the app settings get nuked.