Hooks
What nunchi runs automatically, and when. A hook is a command Claude Code fires at a fixed moment, without you asking for it.
> /plugin marketplace add seob717/nunchi > /plugin install nunchi@nunchi-marketplace
Ships with nunchi. Installing the plugin gets these hooks.
What fires, and when
PreToolUse
python3 "${CLAUDE_PLUGIN_ROOT}/hooks/pretooluse.py"
SessionStart
Fires once when a session begins, and again after a context compaction. It is where a plugin sets up its environment, or restores state the compaction dropped.
- Matches
compactpython3 "${CLAUDE_PLUGIN_ROOT}/hooks/sessionstart.py"
InstructionsLoaded
python3 "${CLAUDE_PLUGIN_ROOT}/hooks/instructionsloaded.py"
In the plugin's words
How nunchi describes its own hook set.
nunchi — JIT rule delivery
Where it lives
- hooks/instructionsloaded.pyRunsGitHub
Read the script
#!/usr/bin/env python3 """nunchi InstructionsLoaded 엔트리포인트 — 세션 관측 기록 (#10). CLAUDE.md/.claude/rules가 컨텍스트에 로드될 때마다 발화하므로 모든 세션을 잡는다. 세션당 1줄만 기록한다(record_session이 마커로 dedupe). 어떤 실패도 exit 0. stdout은 컨텍스트에 주입되므로 절대 아무것도 쓰지 않는다. """ import json import os import sys sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), "..")) try: from core.engine import record_session input_data = json.load(sys.stdin) project_dir = ( os.environ.get("CLAUDE_PROJECT_DIR") or input_data.get("cwd") or os.getcwd() ) record_session(input_data, project_dir) except Exception as e: print(f"nunchi: instructionsloaded hook error: {e}", file=sys.stderr) sys.exit(0) - hooks/pretooluse.pyRunsGitHub
Read the script
#!/usr/bin/env python3 """nunchi PreToolUse 엔트리포인트. 어떤 실패도 exit 0 + 무출력(allow).""" import json import os import sys sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), "..")) try: from core.engine import decide input_data = json.load(sys.stdin) project_dir = ( os.environ.get("CLAUDE_PROJECT_DIR") or input_data.get("cwd") or os.getcwd() ) result = decide(input_data, project_dir) if result: print(json.dumps(result, ensure_ascii=False)) except Exception as e: print(f"nunchi: hook error: {e}", file=sys.stderr) sys.exit(0) - hooks/sessionstart.pyRunsGitHub
Read the script
#!/usr/bin/env python3 """nunchi SessionStart(compact) 엔트리포인트 — 배달 마커 재무장. 어떤 실패도 exit 0. stdout은 컨텍스트에 주입되므로 절대 아무것도 쓰지 않는다. """ import json import os import sys sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), "..")) try: from core.engine import rearm input_data = json.load(sys.stdin) # hooks.json의 matcher("compact")가 1차 방어, 코드 가드가 2차 방어. if input_data.get("source") == "compact": project_dir = ( os.environ.get("CLAUDE_PROJECT_DIR") or input_data.get("cwd") or os.getcwd() ) rearm(input_data, project_dir) except Exception as e: print(f"nunchi: sessionstart hook error: {e}", file=sys.stderr) sys.exit(0)
Read the script before you install anything that runs on your machine. This is the one part of a plugin that acts without being asked.
"Rules with nunchi — delivered before you have to ask." nunchi is a Claude Code plugin that turns CLAUDE.md rules into event listeners.
Repo: seob717/nunchi

