What a Claude Code plugin runs before you type: we read 2,688 public plugins An analysis of 2,688 public Claude Code plugins across 1,961 active repositories found that nearly a third run code automatically when a session starts, and that most MCP servers launched via npx or bunx pin no version. The review reports that 30.4% of repos include a SessionStart or Setup hook, local MCP server, or monitor, and that 112 of 171 npx/bunx-launched servers (65%) specify no version, allowing new package releases to reach users without any change to the reviewed plugin. Before you install a Claude Code plugin, open three things in its folder: hooks/hooks.json , .mcp.json and bin/ . Look for SessionStart hooks, and for MCP servers started with npx or uvx but no version number. The reason is simple. A plugin can run code before you type anything. The docs say it directly: "A Claude Code plugin you install can execute arbitrary code on your machine with your user privileges." Four parts of a plugin start on their own: bin/ PATH of the shell Claude runs commands in. Claude Code runs all of these outside the sandbox, and installing a plugin also enables it. So how many public plugins do this? We read every plugin in 1,961 active public repos. hooks/hooks.json , starting with SessionStart and Setup . .mcp.json . command is a process on your machine. If it runs npx some-package or uvx some-package with no version, the package manager resolves a version at start. A new release can then reach your machine without any change to the plugin you reviewed. Pinned means a version after the name: @1.4.2 for npx, as in npx -y some-package plus ==1.4.2 for uvx, as in some-package==1.4.2 . claude --plugin-dir