Track Idle-Prompt Notifications for an Unattended-Session Log

A session sitting idle, waiting on a permission prompt no one is there to answer, is both a cost signal (if usage billing includes idle wall-clock in any way) and a security hygiene signal (an unattended session with a pending privileged decision). This tracks the pattern over time.

Cost & Usage Controls Event: Notification Claude Code Open source · Free

1. Save this as the hook script

#!/usr/bin/env python3
"""Notification hook — logs idle-prompt notifications.
Wire with matcher "idle_prompt"."""
import json, sys, datetime
from pathlib import Path

data = json.load(sys.stdin)
log_path = Path(data.get("cwd", ".")) / ".claude" / "idle_prompt_log.jsonl"
log_path.parent.mkdir(parents=True, exist_ok=True)

entry = {"ts": datetime.datetime.utcnow().isoformat() + "Z",
         "session_id": data.get("session_id")}
with open(log_path, "a") as f:
    f.write(json.dumps(entry) + "\n")

sys.exit(0)

Save to a path inside your project, e.g. .claude/hooks/track-idle-prompt-notifications.sh, then chmod +x it.

2. Wire it into .claude/settings.json

{
  "hooks": {
    "Notification": [
      {
        "matcher": "idle_prompt",
        "hooks": [
          {"type": "command", "command": "python3 .claude/hooks/track-idle-prompt-notifications.py"}
        ]
      }
    ]
  }
}

Before you use this

A hook runs with your local shell's permissions — review the script above before adding it, the same way you'd review any script you didn't write yourself. See our guide on hook security risks for the specific CVEs this category of feature has already produced.

Related hooks

← All hooks
FEEDBACK