write-gatelisted
Install: claude install-skill jx-hxxx/hi-vibe
# write-gate
> **답변 언어**: 이 지침은 한국어로 쓰였지만, **출력은 항상 사용자가 대화에서 쓰는 언어**를 따른다 (한국어→한국어, 영어→영어). 기존 문서·코드에 언어가 있으면 그쪽을 우선한다.
## 먼저: 안전벨트가 매여 있는지 (두 모드 공통, 세션당 한 번)
**훅은 조용히 실패한다**(fail-open) — 망가져도 에러조차 안 뜬다. 그래서
"훅이 죽었나"를 훅으로는 알 수 없다(자기가 안 도니까). 확인할 수 있는 건
**훅과 무관하게 도는 이 스킬 층뿐**이다. 이 스킬은 사용자 말("만들어줘",
"다 했어")에 걸리므로 훅이 전멸해도 살아 있다.
이 스킬이 이번 세션에서 처음 걸릴 때 한 번만:
`python3 "${CLAUDE_PLUGIN_ROOT}/scripts/doctor.py" --root <repo> --quick`
JSON `state` 하나로 갈린다. **`alive`면 아무 말도 하지 마라** — 정상을
보고하는 건 잔소리다.
- **`alive`** → 침묵. 그대로 아래 작업을 진행한다.
- **`stale` / `never-ran`** → 훅이 이 세션에서 안 돌았다. 한 줄로 알린다:
"hi-vibe 훅이 이 세션에서 안 돌고 있습니다(마지막 기록 N시간 전). 방금
플러그인을 업데이트했다면 Claude Code를 다시 시작하면 되고, 아니면
`/hi-vibe:doctor`로 확인하세요." **막지는 마라** — 훅 없이도 이 스킬은
동작하므로 하던 일은 그대로 진행한다.
- **`not-initialized`** → 이 폴더는 hi-vibe가 꺼져 있다. 한 번만 알린다:
"이 폴더는 hi-vibe가 꺼져 있습니다(자동 감지·기록 없음). 쓰시려면
`/hi-vibe:init`, 안 쓰실 거면 그렇다고 말씀만 주세요." 사용자가 "안
쓴다"고 하면 `.hi-vibe/optout` 파일을 만들어라(`mkdir -p .hi-vibe &&
touch .hi-vibe/optout`) — 그러면 훅은 계속 꺼진 채로, 다시 묻지 않는다.
**여기서 마음대로 init하지 마라.** opt-in은 사용자가 정한다.
- **`optout`** → 침묵. 이 폴더에서 다시는 묻지 않는다.
**`tracked_env`가 비어 있지 않으면** `state`와 별개로 **반드시 알린다**(세션당
한 번). 목록에 있는 `.env` 파일이 Git에 올라가 있다는 뜻이고, **비밀키 검사는
`.env`를 검사 대상에서 빼므로 이건 훅도 `check`도 못 잡는다.**
> `.env`가 Git에 올라가 있습니다(`<파일들>`). 비밀키 검사는 `.env`를 안 보기
> 때문에 이건 아무 검사에도 안 걸립니다. `git rm --cached <파일>` 후
> `.gitignore`에 넣으세요. **이미 push했다면 히스토리에 남아 있으니 그 키는
> 폐기(rotate)해야 합니다.**
파일을 열어 보지 마라 — 내용을 읽는 순간 대화창이 유출 통로가 된다.