virtual-insanity
← 리포트 목록

subinium workflow-config hook 통합 제안서

2026-04-21 workflow [hook, settings, workflow, subinium, 제안]

subinium workflow-config hook 통합 제안

배경

  • 출처: https://github.com/subinium/subinium-agentic-workflow-config
  • 해리 현재 hook 23개(~2082줄) 이미 매우 정교. 대부분 중복.
  • subinium 6개 훅 중 5개를 해리 환경과 비교 → 보완 가치 있는 것만 선별.

이미 커버된 것 (도입 불필요)

block-destructive-git.sh

  • 역할: git push --force, git reset --hard, rm -rf / 등 차단.
  • 해리 기존: tier-gate.py(Tier 4 경고 + Tier 5 차단 + 텔레그램 승인 요청).
  • 판정: 해리 것이 더 강력. 도입 안 함.

선별한 5개 hook 제안 (우선순위 순)

제안 1: session-guard.sh — 세션 타이머 + Plan Mode 권유 (★★★)

어떤 상황에 발동 - UserPromptSubmit(사용자가 프롬프트를 제출할 때마다). - 세션 시작 시각 저장, 60분 / 120분 경과 시 경고 출력. - 프롬프트에 build|implement|refactor|migrate|redesign 포함 시 Plan Mode 권유.

어떤 효과 - 2시간 넘는 마라톤 세션 자동 감지 → /session-wrap + /clear 권유. - 복잡 작업 시 Plan Mode(Shift+Tab) 사용 유도.

왜 필요 - 해리 기존 prompt-model-gate.py는 모델 선택만 담당, 세션 지속 시간 감시는 없음. - 해리 5원칙 중 "드리프트, 확신 오류" 자기 감시 강화.

어떻게 추가 - 새 파일: ~/.claude/hooks/session-guard.sh (58줄, Bash+Python). - settings.json hooks.UserPromptSubmit 블록에 추가.

"UserPromptSubmit": [
  {
    "hooks": [
      { "type": "command", "command": "python3 ~/.claude/hooks/prompt-model-gate.py", "timeout": 3000 },
      { "type": "command", "command": "~/.claude/hooks/session-guard.sh", "timeout": 5000 }
    ]
  }
]

참고: subinium은 /session-wrap 슬래시 명령 전제. 해리 환경에는 없으므로 안내 문구를 /close(이미 있음) 또는 메모리 저장으로 치환 필요.


제안 2: backup-before-compact.sh — 압축 직전 컨텍스트 백업 (★★★)

어떤 상황에 발동 - PreCompact 이벤트(Claude Code가 conversation을 compact하기 직전). - stdin으로 들어오는 JSON을 ~/.claude/compaction-backups/pre-compact_YYYYMMDD_HHMMSS.json에 저장. - 20개 초과 시 가장 오래된 것부터 자동 삭제.

어떤 효과 - Compaction 시 잘리는 대화 맥락을 디스크에 보존. - 나중에 "그때 어떻게 했지?" 추적 가능.

왜 필요 - 해리 기존 post-compact-context.sh는 compact 이후 상태 저장. - Compact 전 원본이 없어서, 무엇이 잘렸는지 확인 불가. - 장기 세션에서 특히 중요(해리는 1M 컨텍스트 Opus 자주 사용).

어떻게 추가 - 새 파일: ~/.claude/hooks/backup-before-compact.sh (22줄). - settings.jsonPreCompact 블록 신규 추가.

"PreCompact": [
  {
    "hooks": [
      { "type": "command", "command": "~/.claude/hooks/backup-before-compact.sh", "timeout": 10000 }
    ]
  }
]

제안 3: warn-large-files.sh — Write/Edit 시 파일 크기 경고 (★★)

어떤 상황에 발동 - PostToolUse (Write | Edit). - 수정된 파일이 300줄 초과 → 주의, 500줄 초과 → 경고. - .md/.json/.yaml/.lock/.css/.svg 등 설정·문서는 제외.

어떤 효과 - 단일 파일이 비대해지는 것을 조기 감지. - "파일 쪼개라" 권유.

왜 필요 - 해리 기존 large-file-guard.shRead 시 2000줄 이상 경고(토큰 절약 목적). - 반대 방향 — 쓰는 쪽 거대화 방지 훅은 없음. - 해리 pipeline 스크립트 일부(예: analyst_daily_brief.py ~500줄+) 쪼갤 후보 자동 발굴.

어떻게 추가 - 새 파일: ~/.claude/hooks/write-size-guard.sh (45줄, 이름 충돌 피하기). - settings.json PostToolUse Edit|Write 기존 블록에 추가.

{ "matcher": "Edit|Write",
  "hooks": [
    // ...기존...
    { "type": "command", "command": "~/.claude/hooks/write-size-guard.sh", "timeout": 5 }
  ]
}

제안 4: format-on-save.sh — 자동 포매터 (★★)

어떤 상황에 발동 - PostToolUse (Write | Edit). - .py → black, .ts/.tsx/.js/.json/.md → prettier(프로젝트 설정 있을 때).

어떤 효과 - 커밋 전 수동 black/prettier 실행 불필요. - 일관된 포맷 자동 유지.

왜 필요 - 해리 투자 분석 스크립트 다수. 수동 포맷 종종 누락. - 파이프라인 유지보수 시 diff 잡음 감소.

주의점 - black이 없으면 아무 동작 안 함(안전). - 웹앱의 경우 .prettierrc 있는 프로젝트만 포맷.

어떻게 추가 - ~/.claude/hooks/format-on-save.sh (81줄). - PostToolUse Edit|Write 블록.

판단 포인트: 자동 포매팅이 해리 의도와 충돌할 수 있음(예: 한글 주석 포함 파일 스타일 변경). 도입 전 black 설정(line-length, skip-string-normalization) 맞추는 작업 필요.


제안 5: typecheck-on-edit.sh — TypeScript 타입체크 (★)

어떤 상황에 발동 - PostToolUse (Write | Edit) + .ts/.tsx 파일. - tsconfig.json을 프로젝트 루트까지 상향 탐색. - npx tsc --noEmit --project ... 10초 타임아웃. - 첫 5개 에러만 출력.

어떤 효과 - 웹앱 TS 수정 후 실시간 타입 에러 발견.

왜 필요 - 해리 웹앱(briefing, PM 등)에 TS 다수. - 지금은 Edit 후 별도 실행 필요.

주의점 - tsc가 프로젝트 전체 스캔 → 큰 프로젝트는 10초 넘김(timeout으로 끊음). - CI에서 이미 돌고 있다면 중복일 수 있음.

어떻게 추가 - ~/.claude/hooks/typecheck-on-edit.sh (59줄). - PostToolUse Edit|Write 블록.


추천 도입 순서

  1. session-guard (제안 1) — 세션 관리, 즉시 효과, 파일 독립.
  2. backup-before-compact (제안 2) — 데이터 손실 방지, 부작용 없음.
  3. write-size-guard (제안 3) — 파일 비대화 감지, 코드 리팩터 트리거.
  4. format-on-save (제안 4) — 선택사항. black/prettier 사전 설정 필요.
  5. typecheck-on-edit (제안 5) — TS 프로젝트 위주, 선택사항.

위험 요소

  • 기존 23개 hook에 5개 더 추가 시 프롬프트 1회당 훅 실행 시간 누적.
  • session-guard: ~50ms
  • backup-before-compact: ~10ms (PreCompact만이라 프롬프트마다 안 돌음)
  • write-size-guard: ~20ms
  • format-on-save: 2~10초 (파일 크기에 따라)
  • typecheck-on-edit: 1~10초 (tsc 실행)
  • 실질 걸림돌은 format/typecheck. 처음엔 1~3번만 도입 권장.

해리 결정 포인트

  1. session-guard + backup-before-compact 먼저 도입? (즉시 가치, 부작용 없음)
  2. write-size-guard 같이 도입? (리팩터 트리거 얻음)
  3. format/typecheck는 보류? (설정 맞춤 필요)

승인 시 hook 파일 복사 + ~/.claude/settings.json 편집까지 진행. 미승인/보류 시 이 제안서만 볼트에 남겨두고 종료.