Hook command definitions can now use an explicit args array for exec-style invocation. Claude Code validates the common mistake of putting both whitespace in command and also supplying args, and explains how to split executable and arguments correctly.
Usage
{
"command": "node",
"args": ["script.js"]
}Details
Evidence
Exec-form hook schema and validation (search for "Argument list for exec form", "Exec form treats \"command\" as a single executable name", "${CLAUDE_PROJECT_DIR}")
Strings lifted out of the shipped bundle, so the claim above can be checked against them.
One source agreesOne thing we can check says the same as this entry.
Anthropic's release notes agree
MCP stdio servers now receive CLAUDE_PROJECT_DIR in their environment, matching hooks. Plugin configs can reference ${CLAUDE_PROJECT_DIR} in…