Skip to content
Back to skills

Ac Hooks Manager

ASecurity

Hook installation and management for autonomous coding. Use when setting up Stop hooks, managing pre/post tool hooks, or configuring autonomous continuation.

  • 3 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added February 8, 2026
businesspythongobashsecurity

Works with

  • claude code

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned February 12, 2026

npx -y skills add adaptationio/Skrillz --skill ac-hooks-manager --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Ac Hooks Manager?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Ac Hooks Manager
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/adaptationio-ac-hooks-manager/badge)](https://www.skillsdirectory.com/skills/adaptationio-ac-hooks-manager)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: ac-hooks-manager
description: Hook installation and management for autonomous coding. Use when setting up Stop hooks, managing pre/post tool hooks, or configuring autonomous continuation.
version: 1.0.0
layer: foundation
category: auto-claude-replication
triggers:
  - "install hooks"
  - "setup stop hook"
  - "configure hooks"
  - "hook status"
---

# AC Hooks Manager

Hook installation and management for enabling autonomous operation.

## Overview

Manages all Claude Code hooks for autonomous operation:
- **Stop Hook**: Enables autonomous continuation
- **PreToolUse Hook**: Security validation
- **PostToolUse Hook**: Result processing
- **SessionStart/End Hooks**: State management

## Quick Start

### Install Autonomous Hooks
```python
from scripts.hooks_manager import HooksManager

hooks = HooksManager(project_dir)
await hooks.install_autonomous_hooks()
# Installs Stop hook for autonomous continuation
```

### Check Hook Status
```python
status = await hooks.get_status()
print(f"Stop hook: {'installed' if status.stop_hook else 'missing'}")
```

## The Stop Hook (Core Innovation)

The Stop hook enables autonomous continuation by intercepting Claude Code's stop event:

```
Claude Code completes response
    │
    ▼ (Stop event fires)

Stop Hook Script
    ├─ Read transcript
    ├─ Check safety limits
    ├─ Call Opus analyzer
    └─ Return decision
    │
    ├─ CONTINUE: block stop, inject next task
    └─ COMPLETE: allow stop, terminate
```

### How It Works

1. **Claude Code finishes** a response
2. **Stop event fires** (hook receives JSON input)
3. **Hook script executes**:
   - Checks `stop_hook_active` (prevents infinite loops)
   - Checks iteration/cost limits
   - Calls Opus analyzer for decision
4. **Decision returned**:
   - `CONTINUE`: Exit code 2 + reason → Claude continues
   - `COMPLETE`: Exit code 0 → Claude stops

### Stop Hook Input

```json
{
  "session_id": "abc123",
  "transcript_path": "/path/to/conversation.jsonl",
  "cwd": "/current/working/directory",
  "permission_mode": "default",
  "hook_event_name": "Stop",
  "stop_hook_active": false
}
```

**Critical Field**: `stop_hook_active`
- `false`: First time hook firing (proceed with analysis)
- `true`: Hook already blocked once (allow stop to prevent doom loop)

### Stop Hook Output

**To Continue**:
```json
{
  "decision": "block",
  "reason": "Next task: implement the login endpoint"
}
```
Exit code: `2`

**To Stop**:
```json
{
  "decision": "approve"
}
```
Exit code: `0`

## Hook Configuration

### .claude/settings.json

```json
{
  "hooks": {
    "Stop": [{
      "matcher": {},
      "hooks": [{
        "type": "command",
        "command": ".claude/skills/ac-hooks-manager/scripts/autonomous-loop.sh"
      }],
      "timeout": 120
    }],
    "PreToolUse": [{
      "tools": ["Bash"],
      "hooks": [{
        "type": "command",
        "command": ".claude/skills/ac-security-sandbox/scripts/validate.sh"
      }]
    }],
    "PostToolUse": [{
      "tools": ["Write", "Edit"],
      "hooks": [{
        "type": "command",
        "command": "npx prettier --write \"$FILE\""
      }]
    }]
  }
}
```

## Hook Types

### 1. Stop Hook (Autonomous Continuation)

```python
await hooks.install_stop_hook(
    script_path=".claude/skills/ac-hooks-manager/scripts/autonomous-loop.sh",
    timeout=120
)
```

### 2. PreToolUse Hook (Security)

```python
await hooks.install_pre_tool_hook(
    tools=["Bash"],
    script_path=".claude/skills/ac-security-sandbox/scripts/validate.sh"
)
```

### 3. PostToolUse Hook (Formatting)

```python
await hooks.install_post_tool_hook(
    tools=["Write", "Edit"],
    command="npx prettier --write \"$FILE\""
)
```

### 4. Session Hooks

```python
await hooks.install_session_hooks(
    on_start=".claude/hooks/load-memory.sh",
    on_end=".claude/hooks/save-memory.sh"
)
```

## Operations

### 1. Install All Autonomous Hooks

```python
await hooks.install_autonomous_hooks()
# Installs:
#   - Stop hook (continuation)
#   - PreToolUse hook (security)
#   - Session hooks (memory)
```

### 2. Install Specific Hook

```python
await hooks.install_hook(
    event="Stop",
    config={
        "type": "command",
        "command": "path/to/script.sh"
    },
    timeout=120
)
```

### 3. Remove Hook

```python
await hooks.remove_hook(event="Stop")
```

### 4. Check Status

```python
status = await hooks.get_status()
# Returns:
#   stop_hook: bool
#   pre_tool_hooks: list
#   post_tool_hooks: list
#   session_hooks: dict
```

### 5. Validate Hooks

```python
errors = await hooks.validate()
if errors:
    for error in errors:
        print(f"Hook error: {error}")
```

## Autonomous Loop Script

### scripts/autonomous-loop.sh

```bash
#!/bin/bash

# Read input from stdin
INPUT=$(cat)

# Extract fields
STOP_ACTIVE=$(echo "$INPUT" | jq -r '.stop_hook_active')
TRANSCRIPT=$(echo "$INPUT" | jq -r '.transcript_path')
CWD=$(echo "$INPUT" | jq -r '.cwd')

# Safety check: prevent doom loops
if [ "$STOP_ACTIVE" == "true" ]; then
    echo '{"decision": "approve"}'
    exit 0
fi

# Load state
STATE_FILE="$CWD/.claude/autonomous-state.json"
if [ -f "$STATE_FILE" ]; then
    ITERATION=$(jq -r '.iteration' "$STATE_FILE")
    COST=$(jq -r '.estimated_cost' "$STATE_FILE")
else
    ITERATION=0
    COST=0
fi

# Check limits
MAX_ITERATIONS=50
MAX_COST=20.00

if [ "$ITERATION" -ge "$MAX_ITERATIONS" ]; then
    echo '{"decision": "approve"}'
    exit 0
fi

if (( $(echo "$COST > $MAX_COST" | bc -l) )); then
    echo '{"decision": "approve"}'
    exit 0
fi

# Call Opus analyzer (see ac-opus-analyzer skill)
DECISION=$(python3 "$CWD/.claude/skills/ac-hooks-manager/scripts/analyze.py" \
    --transcript "$TRANSCRIPT" \
    --iteration "$ITERATION")

# Return decision
echo "$DECISION"
exit $(echo "$DECISION" | jq -r 'if .decision == "block" then 2 else 0 end')
```

## Safety Mechanisms

### 1. Doom Loop Prevention

```bash
if [ "$STOP_ACTIVE" == "true" ]; then
    exit 0  # Allow stop
fi
```

### 2. Iteration Limits

```bash
if [ "$ITERATION" -ge "$MAX_ITERATIONS" ]; then
    exit 0  # Allow stop
fi
```

### 3. Cost Limits

```bash
if (( $(echo "$COST > $MAX_COST" | bc -l) )); then
    exit 0  # Allow stop
fi
```

### 4. Failure Detection

```bash
FAILURES=$(jq -r '.consecutive_failures' "$STATE_FILE")
if [ "$FAILURES" -ge 3 ]; then
    exit 0  # Allow stop, escalate
fi
```

## Integration Points

- **ac-session-manager**: Triggers hooks
- **ac-security-sandbox**: PreToolUse validation
- **ac-opus-analyzer**: Decision making
- **ac-state-tracker**: State persistence
- **ac-config-manager**: Hook configuration

## References

- `references/HOOK-MECHANICS.md` - Detailed hook behavior
- `references/STOP-HOOK.md` - Stop hook deep dive
- `references/SAFETY.md` - Safety mechanisms

## Scripts

- `scripts/hooks_manager.py` - Core HooksManager
- `scripts/autonomous-loop.sh` - Stop hook handler
- `scripts/analyze.py` - Opus analyzer wrapper
- `scripts/hook_installer.py` - Hook installation

Files in this skill

  • SKILL.md6.8 KB
  • scripts/hooks_manager.py11.5 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.