Three real causes cover almost every case — the exact command, the environment it runs in, and how the request itself was phrased.
Without a documented command, it has to guess — npm test, pytest, a custom script — and a wrong guess looks like "it won't run tests" when really it just ran the wrong thing or nothing at all.
Tests that pass on your machine can fail or not run at all in a different working directory, without a required environment variable, or with a dependency that's installed globally on your machine but undocumented in the project.
Standard test commands are typically pre-approved, but a test runner that shells out to something unusual can trigger a real permission check that looks like a refusal to run tests at all.
The free guide covers the permission model and a first real workflow — good CLAUDE.md habits from the start.
Get the Free Guide →No — document it once in CLAUDE.md instead. Repeating it every session is a sign the command belongs in project configuration, not in the prompt.
Usually an environment difference — a different working directory, a missing environment variable, or a dependency installed globally on your machine but not documented anywhere in the project.
Sometimes — running a test suite is often pre-approved, but a test runner that shells out to something unusual can trigger a real permission check. Worth ruling out separately from a command or environment problem.