tikeytaka:scan — 파편화된 .env 키를 볼트로 통합
코어 CLI: bash "${CLAUDE_PLUGIN_ROOT}/bin/tkt" (이하 tkt)
절차
탐색: 홈 디렉토리에서
.env/.env.local파일을 찾는다.node_modules,Library,.Trash, 백업/Downloads류는 제외한다. shell rc 파일도 반드시 포함:~/.zshrc,~/.zprofile,~/.bashrc,~/.bash_profile에서export *_KEY/*_TOKEN/*_SECRET=평문 노출을 찾는다 — rc 파일은 키 유출의 고전 경로인데 .env만 보면 놓친다(2026-08-24 실사례: 죽은 Perplexity 키가 .zshrc에 잔존). rc에서 발견한 키는 볼트 등록 후 rc에서 라인 삭제를 권한다(rc는 전파 대상이 아니라 제거 대상 — 전 셸에 상시 노출되므로).인벤토리: 각 파일의 변수 이름만(값 제외) 추출해 보여준다. 키 값은 절대 채팅에 출력하지 않는다 — 값 비교가 필요하면 sha256 앞 8자리 지문으로만 다룬다.
분류: 변수를 세 종류로 나눈다.
- 공유 시크릿(같은 키가 여러 프로젝트에서 쓰임 / API 키·토큰류) → 볼트 등록 대상
- 프로젝트 전용 설정(URL, 모델명, 플래그, 포트) → 제외
- 자동 갱신형 토큰(스크립트가 주기적으로 rewrite하는 것) → 제외하고 사유 고지
충돌 검증: 같은 이름의 키가 파일마다 다른 값이면, verify 스킬 레시피(무과금 엔드포인트·코드 해석 규칙 포함)로 유효성을 실측해 살아있는 값을 정본으로 고른다(예: Gemini
GET /v1beta/models?key=, OpenAIGET /v1/models, TelegramgetMe). 실측 불가하면 최근 수정 파일의 값을 쓰되 사용자에게 고지한다.등록·연결 (파일 수정 전 반드시 원본 백업 — 백업 자체가 평문 시크릿이므로:
umask 077상태에서~/.config/tikeytaka/backup-<날짜>/에 복사, 디렉토리 700·파일 600 확인, sync 검증 후 삭제 권장을 사용자에게 고지):printf '%s' "$값" | tkt set-stdin <service> # argv·히스토리 미노출 경로만 사용 (set <svc> <값> 금지) tkt map-add '<파일>' <변수> <service> tkt sync --check # 드라이런 확인 후 tkt sync서비스명은
<provider>-api-key케밥케이스로 통일한다.보고: 등록 수 / 교체된 죽은 키 수 / 살아있는 잉여 키(콘솔에서 폐기 권장) / 제외 항목을 요약한다.