import org.springaicommunity.claude.agent.sdk.hooks.HookRegistry;
import org.springaicommunity.claude.agent.sdk.types.control.HookInput;
import org.springaicommunity.claude.agent.sdk.types.control.HookOutput;
HookRegistry hooks = new HookRegistry();
// Hook for specific tool (matches only "Bash")
hooks.registerPreToolUse("Bash", input -> {
var preToolUse = (HookInput.PreToolUseInput) input;
String command = preToolUse.getArgument("command", String.class).orElse("");
System.out.println("[PreToolUse:Bash] Command: " + command);
if (command.contains("foo.sh")) {
return HookOutput.block("Script foo.sh is not allowed");
}
return HookOutput.allow();
});
// Hook for specific tool (matches only "Read")
hooks.registerPreToolUse("Read", input -> {
var preToolUse = (HookInput.PreToolUseInput) input;
String filePath = preToolUse.getArgument("file_path", String.class).orElse("");
System.out.println("[PreToolUse:Read] File: " + filePath);
return HookOutput.allow();
});
// Global hook (matches ALL tools)
hooks.registerPreToolUse(input -> {
var preToolUse = (HookInput.PreToolUseInput) input;
System.out.println("[PreToolUse:*] Tool invoked: " + preToolUse.toolName());
return HookOutput.allow();
});