hestia · v1.0.0 · 2026-04-26 · sha256 6f23683d58cd77dd
hestia v1.0.0A
Immutable. This exact content is served forever at /api/v1/blob/6f23683d58cd77dd.
---
name: hestia
description: >
코드베이스 청소 + 위생 점검 (헤스티아 — 화로의 여신). Dead Code 탐지,
미사용 export/의존성/파일 제거, LOC 측정, 코드 건강도 보고.
"정리해줘", "dead code", "코드 위생", "쓸모없는 코드" 요청에 실행.
/hestia로 실행.
triggers:
- "hestia"
- "헤스티아"
- "코드 정리"
- "코드 줄여"
- "dead code"
- "쓸모없는 코드"
- "코드 위생"
- "code hygiene"
- "unused"
- "entropy"
- "정리해줘"
auto_apply: false
license: MIT
metadata:
version: "1.0.0"
---
# Hestia (헤스티아) — 화로의 여신, 코드 위생 관리자
> **헤스티아(Hestia)**: 올림포스 12신 중 하나, 화로와 가정의 여신.
> 화로를 깨끗이 유지하듯, 코드베이스에서 쓸모없는 것을 찾아 치운다.
> 조용하지만 빠지면 집이 무너진다.
>
> **argos가 "빠진 걸 찾고", hestia는 "남은 걸 치운다."**
## Quick Start
```
/hestia # 전체 스캔 + 정리
/hestia scan # 스캔만 (보고만, 삭제 안 함)
/hestia clean # 스캔 + 자동 삭제
/hestia src/ # 특정 디렉토리만
/hestia --dry-run # 삭제 대상 미리보기 (실행 안 함)
```
**공식 호출명:** `/hestia` (별칭: `헤스티아`, `코드 정리`, `dead code`)
## 파이프라인 위치
```
/agent-team → /argos → /minos → /hestia → /clio
구현 감리 QA 정리 기록
↑
"argos/minos 통과 후, clio 기록 전"
```
**또는 독립 실행** — 언제든 `/hestia`로 현재 코드베이스 점검 가능.
---
## Phase 1: 측정 (Before)
변경 전 현재 상태를 측정합니다. 측정 없는 정리는 감이지 사실이 아닙니다.
```bash
# 총 LOC (프로덕션 코드만, 테스트 제외)
find src/ app/ lib/ -name "*.ts" -o -name "*.tsx" -o -name "*.py" -o -name "*.java" -o -name "*.cs" \
| grep -v "__test__\|\.test\.\|\.spec\.\|_test\." \
| xargs wc -l 2>/dev/null | tail -1
# 파일 수
find src/ app/ lib/ -type f \( -name "*.ts" -o -name "*.tsx" -o -name "*.py" \) | wc -l
# 책임 분리 검토용 대형 파일
find src/ -type f \( -name "*.ts" -o -name "*.py" \) \
-exec awk 'END{print NR,FILENAME}' {} \; | sort -nr | head -20
```
```
📏 현재 상태:
LOC: {N}줄
파일: {M}개
책임 분리 검토 대상 파일: {K}개
```
---
## Phase 2: 스캔 (Dead Code 탐지)
### 2-1. 미사용 Export
```bash
# TypeScript/JavaScript
npx ts-prune 2>/dev/null | grep -v "used in module" | head -30
# 결과 예시:
# src/utils/format.ts:15 - formatCurrency (unused)
# src/services/legacy.ts:3 - OldService (unused)
```
### 2-2. 미사용 의존성
```bash
# package.json 기반
npx depcheck 2>/dev/null | head -20
# Python
pip-extra-reqs --ignore-requirement=dev src/ 2>/dev/null
# 결과 예시:
# Unused dependencies: lodash, moment, classnames
# Missing dependencies: (none)
```
### 2-3. 미사용 파일
```bash
# import 체인에 없는 파일
npx unimported 2>/dev/null | head -20
# 결과 예시:
# src/components/OldButton.tsx - not imported anywhere
# src/utils/deprecated.ts - not imported anywhere
```
### 2-4. Dead Code 마커
```bash
# 삭제 예고된 코드
grep -rn "@deprecated\|TODO.*remove\|TODO.*delete\|HACK\|FIXME\|XXX" \
--include="*.{ts,tsx,py,java,cs}" src/ app/ lib/ 2>/dev/null | head -20
# 호환성 코드
grep -rn "backwards.*compat\|legacy.*shim\|// old\|// deprecated" \
--include="*.{ts,tsx,py,java,cs}" src/ 2>/dev/null | head -20
```
### 2-5. 빈 파일/폴더
```bash
find src/ app/ lib/ -empty -type f 2>/dev/null
find src/ app/ lib/ -empty -type d 2>/dev/null
```
### 스캔 결과 보고
```
🔍 Hestia 스캔 결과
━━━━━━━━━━━━━━━━━━━
미사용 export: {N}개
미사용 의존성: {N}개
미사용 파일: {N}개
@deprecated 마커: {N}개
빈 파일/폴더: {N}개
──────────────────
총 정리 대상: {N}건
```
**`scan` 모드면 여기서 종료.** `clean` 모드면 Phase 3으로 진행.
---
## Phase 3: 정리 (Clean)
### 삭제 전 안전 체크
| 확인 | 방법 | 불합격 시 |
|------|------|----------|
| git 상태 깨끗한가? | `git status --porcelain` | 커밋 먼저 |
| 테스트 통과하나? | 프로젝트 테스트 명령 실행 | 테스트 먼저 수정 |
| 브랜치 분리? | 현재 브랜치 확인 | 정리용 브랜치 생성 권장 |
### 삭제 순서 (안전한 것부터)
```
1단계: 빈 파일/폴더 삭제 (위험도: 없음)
2단계: 미사용 의존성 제거 (위험도: 낮음, package.json만)
3단계: 미사용 파일 삭제 (위험도: 낮음, import 체인에 없음)
4단계: 미사용 export 삭제 (위험도: 중간, 동적 import 가능성)
5단계: @deprecated 코드 제거 (위험도: 중간, 외부 사용자 확인 필요)
```
### 각 삭제 후 검증
```bash
# 삭제할 때마다
# 1. 타입 체크
npx tsc --noEmit 2>&1 || echo "타입 에러 발생 — revert"
# 2. 테스트
npm test 2>&1 || echo "테스트 실패 — revert"
# 실패 시 즉시 revert
git checkout -- {삭제한 파일}
```
**원칙: 삭제 → 검증 → 실패 시 되돌리기.** 한꺼번에 삭제하지 않고, 단계별로 검증합니다.
---
## Phase 4: 측정 (After) + 보고
```bash
# 동일 명령 재실행
find src/ app/ lib/ -name "*.ts" -o -name "*.tsx" -o -name "*.py" -o -name "*.java" -o -name "*.cs" \
| grep -v "__test__\|\.test\.\|\.spec\.\|_test\." \
| xargs wc -l 2>/dev/null | tail -1
```
### 최종 보고
```
🏠 Hestia 정리 완료
━━━━━━━━━━━━━━━━━━━━━
Before: {N} LOC, {M} files
After: {N'} LOC, {M'} files
Delta: -{차이} LOC (-{퍼센트}%), -{파일} files
삭제 내역:
🗑️ 미사용 export {N}개 제거
🗑️ 미사용 의존성 {N}개 제거
🗑️ 미사용 파일 {N}개 삭제
🗑️ @deprecated 코드 {N}건 제거
⏭️ 건너뜀 {N}건 (동적 참조 가능성)
테스트: {PASS / 삭제 전으로 revert된 항목 N건}
다음 단계:
/commit → 정리 결과 커밋
/clio → 최종 기록
```
---
## 옵션
| 옵션 | 설명 | 기본값 |
|------|------|--------|
| `scan` | 스캔만 (삭제 안 함) | 기본 모드 |
| `clean` | 스캔 + 자동 삭제 | - |
| `--dry-run` | 삭제 대상 미리보기 | false |
| `--skip-deps` | 의존성 검사 건너뜀 | false |
| `--skip-tests` | 삭제 후 테스트 검증 건너뜀 (비권장) | false |
---
## 하지 않는 것
- **리팩토링 안 함** — 로직 변경, 함수 분리, 구조 개선은 범위 밖
- **마이그레이션 안 함** — 라이브러리 교체는 `/deprecate`
- **기능 추가 안 함** — 누락된 기능 구현은 `/argos` Healer
- **설계 판단 안 함** — "이 기능이 필요한가?"는 사용자 결정
**헤스티아는 오직 "아무도 안 쓰는 것을 치우는 것"만 합니다.**
---
## Related Files
| 파일 | 역할 |
|------|------|
| `skills/deprecation-and-migration/SKILL.md` | 라이브러리 교체/마이그레이션 (별도 스킬) |
| `skills/argos/SKILL.md` | 감리 — 누락 탐지 + Healer (채우기) |
| `skills/clio/SKILL.md` | 최종 기록 (정리 후 기록) |
| `skills/code-reviewer/SKILL.md` | 코드 품질 리뷰 |