claude-hooks 0.1.2

Programmatic management of Claude Code hooks
Documentation

claude-hooks

Programmatic management of Claude Code hooks.

Features

  • install — Add hooks to ~/.claude/settings.json with atomic writes
  • uninstall — Remove only hooks installed by this crate (ownership tracking)
  • list — Show all hooks with managed/unmanaged status

Usage

use claude_hooks::{HookEvent, HookHandler, install, uninstall, list};

// Install a hook
let handler = HookHandler {
    r#type: "command".to_string(),
    command: "/path/to/hook.sh $SESSION_ID".to_string(),
    matcher: String::new(),
    timeout: Some(600),
    r#async: None,
};
install(HookEvent::Stop, handler, "my-app")?;

// List all hooks
for entry in list()? {
    println!("{:?}: {} (managed: {})",
        entry.event,
        entry.handler.command,
        entry.managed
    );
}

// Uninstall (only works for hooks we installed)
uninstall(HookEvent::Stop, "/path/to/hook.sh $SESSION_ID")?;

Design

  • Atomic writes: Uses temp-file-then-rename to prevent corruption
  • Ownership tracking: Local registry in XDG data dir tracks which hooks we installed
  • Non-destructive: Never modifies hooks installed by other tools or manually

Hook Events

Supports all Claude Code hook events:

  • Start, Stop
  • BeforePrompt, AfterPrompt
  • BeforeToolUse, AfterToolUse
  • BeforeEdit, AfterEdit
  • BeforeRevert, AfterRevert
  • BeforeRun, AfterRun

License

MIT OR Apache-2.0