gitsentry 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- gitsentry-0.1.0/.claude/agents/git-analyst.md +18 -0
- gitsentry-0.1.0/.claude/agents/security-reviewer.md +17 -0
- gitsentry-0.1.0/.claude/settings.local.json +11 -0
- gitsentry-0.1.0/.claude/skills/pre-push-audit/SKILL.md +57 -0
- gitsentry-0.1.0/.env.example +2 -0
- gitsentry-0.1.0/.gitignore +16 -0
- gitsentry-0.1.0/CLAUDE.md +97 -0
- gitsentry-0.1.0/PKG-INFO +98 -0
- gitsentry-0.1.0/README.md +65 -0
- gitsentry-0.1.0/docs/SECURITY.md +44 -0
- gitsentry-0.1.0/docs/decisions/ADR-0001-cli-architecture.md +19 -0
- gitsentry-0.1.0/docs/decisions/ADR-0002-llm-integration.md +19 -0
- gitsentry-0.1.0/pyproject.toml +62 -0
- gitsentry-0.1.0/scripts/install-hook.sh +22 -0
- gitsentry-0.1.0/src/gitsentry/__init__.py +1 -0
- gitsentry-0.1.0/src/gitsentry/cli/__init__.py +0 -0
- gitsentry-0.1.0/src/gitsentry/cli/main.py +275 -0
- gitsentry-0.1.0/src/gitsentry/core/__init__.py +0 -0
- gitsentry-0.1.0/src/gitsentry/core/auditor.py +64 -0
- gitsentry-0.1.0/src/gitsentry/core/history.py +55 -0
- gitsentry-0.1.0/src/gitsentry/core/patterns.py +63 -0
- gitsentry-0.1.0/src/gitsentry/core/preview.py +39 -0
- gitsentry-0.1.0/src/gitsentry/core/scanner.py +68 -0
- gitsentry-0.1.0/src/gitsentry/llm/__init__.py +0 -0
- gitsentry-0.1.0/src/gitsentry/llm/client.py +38 -0
- gitsentry-0.1.0/src/gitsentry/llm/skill_gen.py +89 -0
- gitsentry-0.1.0/src/gitsentry/utils/__init__.py +0 -0
- gitsentry-0.1.0/src/gitsentry/utils/git.py +65 -0
- gitsentry-0.1.0/src/gitsentry/utils/github_api.py +60 -0
- gitsentry-0.1.0/tests/__init__.py +0 -0
- gitsentry-0.1.0/tests/integration/__init__.py +0 -0
- gitsentry-0.1.0/tests/unit/__init__.py +0 -0
- gitsentry-0.1.0/tests/unit/test_patterns.py +52 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Git Analyst Agent
|
|
2
|
+
|
|
3
|
+
당신은 Git 히스토리 분석 전문가입니다. 커밋 히스토리에서 과거에 노출된 민감 정보를 추적합니다.
|
|
4
|
+
|
|
5
|
+
## 역할
|
|
6
|
+
- `git log`, `git show`, `git diff` 명령으로 커밋 히스토리 분석
|
|
7
|
+
- 삭제되었지만 과거 커밋에 노출된 민감 정보 탐지
|
|
8
|
+
- `.gitignore`에 추가되었지만 이미 커밋된 파일 확인
|
|
9
|
+
|
|
10
|
+
## 분석 절차
|
|
11
|
+
1. `git log --oneline` 으로 커밋 목록 확인
|
|
12
|
+
2. 의심 커밋에서 `git show <hash>` 로 diff 확인
|
|
13
|
+
3. 민감 정보 패턴 매칭
|
|
14
|
+
4. 발견 시 커밋 해시와 파일명 기록
|
|
15
|
+
|
|
16
|
+
## 히스토리 정리 방법 (DANGER 발견 시)
|
|
17
|
+
- `git filter-repo --path <file> --invert-paths` — 파일 히스토리 완전 삭제
|
|
18
|
+
- orphan branch로 새 히스토리 시작 (가장 확실)
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Security Reviewer Agent
|
|
2
|
+
|
|
3
|
+
당신은 Git 저장소 보안 전문가입니다. 파일 내용에서 민감 정보를 탐지하고 리스크를 평가합니다.
|
|
4
|
+
|
|
5
|
+
## 역할
|
|
6
|
+
- 파일 내용에서 API 키, 비밀번호, 내부 문서 참조 등 민감 정보 탐지
|
|
7
|
+
- 각 발견 항목의 실제 리스크 수준 평가 (DANGER / WARNING / INFO)
|
|
8
|
+
- 즉시 조치가 필요한 항목과 그 이유 설명
|
|
9
|
+
|
|
10
|
+
## 탐지 패턴
|
|
11
|
+
- API 키: `sk-`, `ghp_`, `AKIA`, Bearer 토큰
|
|
12
|
+
- 내부 문서: CLAUDE.md, LESSONS_LEARNED.md, DEVELOPMENT.md
|
|
13
|
+
- 환경 파일: .env, .env.local 등
|
|
14
|
+
- 비밀번호/시크릿 할당
|
|
15
|
+
|
|
16
|
+
## 출력 형식
|
|
17
|
+
발견 항목을 표로 정리하고, DANGER 항목에는 즉시 조치 방법을 제시합니다.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Pre-push Security Audit Skill
|
|
2
|
+
|
|
3
|
+
당신은 Git push 전 보안 감사 에이전트입니다.
|
|
4
|
+
|
|
5
|
+
## 트리거
|
|
6
|
+
사용자가 `/pre-push-audit` 를 호출하거나 "push 전 보안 검사", "보안 감사해줘" 등을 요청할 때.
|
|
7
|
+
|
|
8
|
+
## 감사 절차
|
|
9
|
+
|
|
10
|
+
### Step 1: Push 대상 파일 확인
|
|
11
|
+
```bash
|
|
12
|
+
git ls-files
|
|
13
|
+
git diff --name-only HEAD origin/main 2>/dev/null
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
### Step 2: DANGER 패턴 검사 (발견 즉시 차단)
|
|
17
|
+
- `sk-[A-Za-z0-9]{20,}` — Anthropic/OpenAI API Key
|
|
18
|
+
- `ghp_[A-Za-z0-9]{36}` — GitHub Personal Access Token
|
|
19
|
+
- `AKIA[A-Z0-9]{16}` — AWS Access Key
|
|
20
|
+
- `password\s*=\s*\S{4,}` — 비밀번호 할당
|
|
21
|
+
- `.env` 파일
|
|
22
|
+
|
|
23
|
+
### Step 3: WARNING 패턴 확인 (사용자 확인 후 진행)
|
|
24
|
+
- `CLAUDE.md` — Claude Code 내부 문서
|
|
25
|
+
- `LESSONS_LEARNED.md` — 내부 개발 기록
|
|
26
|
+
- `DEVELOPMENT.md` — 내부 개발 문서
|
|
27
|
+
- `RESEARCH_*.md` — 내부 연구 문서
|
|
28
|
+
|
|
29
|
+
### Step 4: .gitignore 검증
|
|
30
|
+
다음이 .gitignore에 포함되어 있는지 확인:
|
|
31
|
+
```
|
|
32
|
+
CLAUDE.md
|
|
33
|
+
**/CLAUDE.md
|
|
34
|
+
LESSONS_LEARNED.md
|
|
35
|
+
DEVELOPMENT.md
|
|
36
|
+
.env
|
|
37
|
+
.env.*
|
|
38
|
+
.claude/
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Step 5: 결과 보고
|
|
42
|
+
|
|
43
|
+
| 파일 | 유형 | 위험도 | 조치 |
|
|
44
|
+
|------|------|--------|------|
|
|
45
|
+
|
|
46
|
+
- **DANGER**: push 중단 권고 + 즉시 조치 방법 제시
|
|
47
|
+
- **WARNING**: 사용자 확인 요청
|
|
48
|
+
- **클린**: "보안 검사 통과 ✓" 출력
|
|
49
|
+
|
|
50
|
+
## gitvault CLI로 실행
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
gitvault audit . # 현재 저장소 감사
|
|
54
|
+
gitvault pre-push # pre-push 전체 감사
|
|
55
|
+
gitvault history . -n 50 # 최근 50개 커밋 감사
|
|
56
|
+
gitvault preview . # push 대상 미리보기
|
|
57
|
+
```
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# GitSentry — CLAUDE.md
|
|
2
|
+
|
|
3
|
+
## 프로젝트 정체성
|
|
4
|
+
|
|
5
|
+
LLM 개발 환경(Claude Code, Codex 등)에서 사람과 AI가 함께 작업할 때 발생하는 GitHub 보안 위험을 자동으로 감사하는 CLI + Claude Code 연동 도구.
|
|
6
|
+
|
|
7
|
+
**동기**: macTR 개발 중 `git add -A`로 내부 문서(CLAUDE.md, LESSONS_LEARNED.md)가 GitHub에 노출되고, `.gitignore`가 push되어 내부 파일 이름이 공개된 사고에서 출발.
|
|
8
|
+
|
|
9
|
+
## 기술 스택
|
|
10
|
+
|
|
11
|
+
| 레이어 | 기술 |
|
|
12
|
+
|--------|------|
|
|
13
|
+
| CLI | Typer + Rich |
|
|
14
|
+
| 패키지 | hatchling + pyproject.toml |
|
|
15
|
+
| GitHub API | PyGithub |
|
|
16
|
+
| Git 분석 | GitPython + subprocess |
|
|
17
|
+
| LLM | Anthropic SDK (선택적) |
|
|
18
|
+
| 테스트 | pytest |
|
|
19
|
+
|
|
20
|
+
## 세션 시작 시 필독 순서
|
|
21
|
+
|
|
22
|
+
1. 이 파일 (CLAUDE.md)
|
|
23
|
+
2. `docs/SECURITY.md` — 감사 규칙 정의
|
|
24
|
+
3. `docs/decisions/` — ADR 목록
|
|
25
|
+
|
|
26
|
+
## 절대 원칙
|
|
27
|
+
|
|
28
|
+
1. **LLM 없이도 기본 감사(F1-F4)는 완전히 동작** — `--llm` 플래그는 opt-in
|
|
29
|
+
2. **감사 결과에 실제 비밀 값 포함 금지** — 항상 마스킹 처리
|
|
30
|
+
3. **`gitsentry audit .`로 자가 검증 통과** — 본 프로젝트도 감사 대상
|
|
31
|
+
4. **GitHub push는 사용자 명시 요청 시에만**
|
|
32
|
+
|
|
33
|
+
## 개발 규칙
|
|
34
|
+
|
|
35
|
+
- 추측 금지 → WebSearch로 공식 문서 확인
|
|
36
|
+
- 공식 문서 → 명세 → 구현 순서
|
|
37
|
+
- 기존 동작 코드 보호
|
|
38
|
+
|
|
39
|
+
## 디렉토리 구조
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
src/gitsentry/
|
|
43
|
+
├── cli/main.py # typer 진입점 — 6개 명령
|
|
44
|
+
├── core/
|
|
45
|
+
│ ├── patterns.py # 민감 정보 패턴 정의
|
|
46
|
+
│ ├── auditor.py # F1: 현재 감사
|
|
47
|
+
│ ├── history.py # F2: 히스토리 감사
|
|
48
|
+
│ ├── scanner.py # F3: 전체 저장소
|
|
49
|
+
│ └── preview.py # F4: push 미리보기
|
|
50
|
+
├── llm/
|
|
51
|
+
│ ├── client.py # F5: Claude API 연동
|
|
52
|
+
│ └── skill_gen.py # F6: 메타 스킬 생성
|
|
53
|
+
└── utils/
|
|
54
|
+
├── git.py # git 명령 래퍼
|
|
55
|
+
└── github_api.py # GitHub API 래퍼
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## 앱 실행 방법
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
cd /Users/beret21/Library/CloudStorage/Dropbox/Codes/Projects/GitSentry
|
|
62
|
+
|
|
63
|
+
# 가상환경 설정 (최초 1회)
|
|
64
|
+
python -m venv .venv
|
|
65
|
+
source .venv/bin/activate
|
|
66
|
+
pip install -e ".[dev]"
|
|
67
|
+
|
|
68
|
+
# 사용
|
|
69
|
+
gitsentry --help
|
|
70
|
+
gitsentry audit .
|
|
71
|
+
gitsentry preview .
|
|
72
|
+
gitsentry history . -n 50
|
|
73
|
+
gitsentry pre-push
|
|
74
|
+
gitsentry generate-skill .claude/skills/pre-push-audit/
|
|
75
|
+
|
|
76
|
+
# 테스트
|
|
77
|
+
pytest tests/unit/
|
|
78
|
+
|
|
79
|
+
# 다른 프로젝트에 pre-push 훅 설치
|
|
80
|
+
./scripts/install-hook.sh /path/to/other/repo
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## 로그 / 진단
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
# 감사 + Claude 분석
|
|
87
|
+
gitsentry audit . --llm
|
|
88
|
+
|
|
89
|
+
# 전체 저장소 스캔
|
|
90
|
+
gitsentry scan --all
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## 변경 이력
|
|
94
|
+
|
|
95
|
+
| 날짜 | 내용 |
|
|
96
|
+
|------|------|
|
|
97
|
+
| 2026-06-22 | 초기 프로젝트 구조 생성, 6개 기능 구현 완료 (Phase 1-4) |
|
gitsentry-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: gitsentry
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: GitHub security audit CLI for LLM-assisted development environments
|
|
5
|
+
Project-URL: Homepage, https://github.com/beret21/GitSentry
|
|
6
|
+
Project-URL: Repository, https://github.com/beret21/GitSentry
|
|
7
|
+
Project-URL: Issues, https://github.com/beret21/GitSentry/issues
|
|
8
|
+
Author-email: Yoonseok Jang <beret21@gmail.com>
|
|
9
|
+
License: MIT
|
|
10
|
+
Keywords: audit,claude,cli,github,llm,security
|
|
11
|
+
Classifier: Development Status :: 3 - Alpha
|
|
12
|
+
Classifier: Environment :: Console
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
18
|
+
Classifier: Topic :: Security
|
|
19
|
+
Requires-Python: >=3.11
|
|
20
|
+
Requires-Dist: anthropic>=0.40.0
|
|
21
|
+
Requires-Dist: gitpython>=3.1
|
|
22
|
+
Requires-Dist: pydantic>=2.0
|
|
23
|
+
Requires-Dist: pygithub>=2.0
|
|
24
|
+
Requires-Dist: python-dotenv>=1.0
|
|
25
|
+
Requires-Dist: rich>=13.0
|
|
26
|
+
Requires-Dist: typer>=0.12
|
|
27
|
+
Provides-Extra: dev
|
|
28
|
+
Requires-Dist: mypy>=1.10; extra == 'dev'
|
|
29
|
+
Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
|
|
30
|
+
Requires-Dist: pytest>=8.0; extra == 'dev'
|
|
31
|
+
Requires-Dist: ruff>=0.4; extra == 'dev'
|
|
32
|
+
Description-Content-Type: text/markdown
|
|
33
|
+
|
|
34
|
+
# GitSentry
|
|
35
|
+
|
|
36
|
+
LLM 개발 환경(Claude Code, Codex 등)에서 GitHub push 전 보안 감사 CLI 도구.
|
|
37
|
+
|
|
38
|
+
## 기능
|
|
39
|
+
|
|
40
|
+
| 명령 | 설명 |
|
|
41
|
+
|------|------|
|
|
42
|
+
| `gitsentry audit .` | 현재 저장소 공개 파일 보안 감사 |
|
|
43
|
+
| `gitsentry history .` | Git 커밋 히스토리 보안 감사 |
|
|
44
|
+
| `gitsentry scan --all` | 계정 전체 GitHub 저장소 감사 |
|
|
45
|
+
| `gitsentry preview .` | Push 대상 vs 제외 파일 시각화 |
|
|
46
|
+
| `gitsentry pre-push` | Pre-push 훅 수동 실행 |
|
|
47
|
+
| `gitsentry generate-skill` | Claude Code 보안 감사 스킬 생성 |
|
|
48
|
+
|
|
49
|
+
## 설치
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
# pipx 권장 (전역 설치, 가상환경 불필요)
|
|
53
|
+
pipx install git+https://github.com/beret21/GitSentry.git
|
|
54
|
+
|
|
55
|
+
# 업데이트
|
|
56
|
+
pipx upgrade gitsentry
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
pipx가 없다면:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
brew install pipx
|
|
63
|
+
pipx ensurepath
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
개발용 설치:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
git clone https://github.com/beret21/GitSentry.git
|
|
70
|
+
cd GitSentry
|
|
71
|
+
pip install -e ".[dev]"
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## 빠른 시작
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
# 현재 저장소 감사
|
|
78
|
+
gitsentry audit .
|
|
79
|
+
|
|
80
|
+
# Push 전 미리보기
|
|
81
|
+
gitsentry preview .
|
|
82
|
+
|
|
83
|
+
# pre-push 훅 설치
|
|
84
|
+
./scripts/install-hook.sh .
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## 환경 변수 (.env)
|
|
88
|
+
|
|
89
|
+
```
|
|
90
|
+
GITHUB_TOKEN=ghp_your_token # 원격 저장소 감사에 필요
|
|
91
|
+
ANTHROPIC_API_KEY=sk-ant-... # --llm 옵션 사용 시 필요
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## 탐지 패턴
|
|
95
|
+
|
|
96
|
+
**DANGER (push 차단):** API 키(`sk-`, `ghp_`, `AKIA`), 비밀번호, Bearer 토큰
|
|
97
|
+
|
|
98
|
+
**WARNING (주의):** LLM 내부 문서 (CLAUDE.md, LESSONS_LEARNED.md, DEVELOPMENT.md)
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# GitSentry
|
|
2
|
+
|
|
3
|
+
LLM 개발 환경(Claude Code, Codex 등)에서 GitHub push 전 보안 감사 CLI 도구.
|
|
4
|
+
|
|
5
|
+
## 기능
|
|
6
|
+
|
|
7
|
+
| 명령 | 설명 |
|
|
8
|
+
|------|------|
|
|
9
|
+
| `gitsentry audit .` | 현재 저장소 공개 파일 보안 감사 |
|
|
10
|
+
| `gitsentry history .` | Git 커밋 히스토리 보안 감사 |
|
|
11
|
+
| `gitsentry scan --all` | 계정 전체 GitHub 저장소 감사 |
|
|
12
|
+
| `gitsentry preview .` | Push 대상 vs 제외 파일 시각화 |
|
|
13
|
+
| `gitsentry pre-push` | Pre-push 훅 수동 실행 |
|
|
14
|
+
| `gitsentry generate-skill` | Claude Code 보안 감사 스킬 생성 |
|
|
15
|
+
|
|
16
|
+
## 설치
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
# pipx 권장 (전역 설치, 가상환경 불필요)
|
|
20
|
+
pipx install git+https://github.com/beret21/GitSentry.git
|
|
21
|
+
|
|
22
|
+
# 업데이트
|
|
23
|
+
pipx upgrade gitsentry
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
pipx가 없다면:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
brew install pipx
|
|
30
|
+
pipx ensurepath
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
개발용 설치:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
git clone https://github.com/beret21/GitSentry.git
|
|
37
|
+
cd GitSentry
|
|
38
|
+
pip install -e ".[dev]"
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## 빠른 시작
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
# 현재 저장소 감사
|
|
45
|
+
gitsentry audit .
|
|
46
|
+
|
|
47
|
+
# Push 전 미리보기
|
|
48
|
+
gitsentry preview .
|
|
49
|
+
|
|
50
|
+
# pre-push 훅 설치
|
|
51
|
+
./scripts/install-hook.sh .
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## 환경 변수 (.env)
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
GITHUB_TOKEN=ghp_your_token # 원격 저장소 감사에 필요
|
|
58
|
+
ANTHROPIC_API_KEY=sk-ant-... # --llm 옵션 사용 시 필요
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## 탐지 패턴
|
|
62
|
+
|
|
63
|
+
**DANGER (push 차단):** API 키(`sk-`, `ghp_`, `AKIA`), 비밀번호, Bearer 토큰
|
|
64
|
+
|
|
65
|
+
**WARNING (주의):** LLM 내부 문서 (CLAUDE.md, LESSONS_LEARNED.md, DEVELOPMENT.md)
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# GitVault — 보안 감사 규칙
|
|
2
|
+
|
|
3
|
+
## 민감 정보 분류
|
|
4
|
+
|
|
5
|
+
### DANGER (즉시 차단)
|
|
6
|
+
| 유형 | 설명 |
|
|
7
|
+
|------|------|
|
|
8
|
+
| API Key | Anthropic(`sk-`), OpenAI(`sk-`), GitHub(`ghp_`), AWS(`AKIA`) |
|
|
9
|
+
| Bearer Token | Authorization 헤더 토큰 |
|
|
10
|
+
| 비밀번호/시크릿 | `password =`, `secret =` 패턴 |
|
|
11
|
+
| 환경 파일 | `.env`, `.env.local` 등 |
|
|
12
|
+
|
|
13
|
+
### WARNING (주의 필요)
|
|
14
|
+
| 유형 | 설명 |
|
|
15
|
+
|------|------|
|
|
16
|
+
| LLM 내부 문서 | CLAUDE.md, LESSONS_LEARNED.md, DEVELOPMENT.md |
|
|
17
|
+
| 연구 문서 | RESEARCH_*.md |
|
|
18
|
+
|
|
19
|
+
### INFO (참고)
|
|
20
|
+
| 유형 | 설명 |
|
|
21
|
+
|------|------|
|
|
22
|
+
| 로컬 경로 | `/Users/username/` 패턴 |
|
|
23
|
+
| localhost | `localhost:포트` 참조 |
|
|
24
|
+
|
|
25
|
+
## 대응 절차
|
|
26
|
+
|
|
27
|
+
### DANGER 발견 시
|
|
28
|
+
1. push 즉시 중단
|
|
29
|
+
2. 해당 파일을 .gitignore에 추가
|
|
30
|
+
3. 이미 커밋된 경우: `git filter-repo` 또는 orphan branch로 히스토리 정리
|
|
31
|
+
4. 노출된 키/비밀번호는 즉시 만료 처리
|
|
32
|
+
|
|
33
|
+
### WARNING 발견 시
|
|
34
|
+
1. 파일이 내부 전용인지 확인
|
|
35
|
+
2. .gitignore에 추가 (`git rm --cached <file>`)
|
|
36
|
+
3. GitHub에 이미 push된 경우 히스토리 검토
|
|
37
|
+
|
|
38
|
+
## LLM 개발 환경 특수 규칙
|
|
39
|
+
|
|
40
|
+
Claude Code + Git 사용 시:
|
|
41
|
+
- `CLAUDE.md`, `**/CLAUDE.md` 반드시 .gitignore에 포함
|
|
42
|
+
- `.claude/` 디렉토리 전체 제외 (또는 공개 OK인 항목만 선별)
|
|
43
|
+
- `git add -A` 사용 금지 — 파일 명시 지정
|
|
44
|
+
- push 전 `gitvault pre-push` 실행 권장
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# ADR-0001: CLI 아키텍처 — Typer + Rich
|
|
2
|
+
|
|
3
|
+
**날짜:** 2026-06-22
|
|
4
|
+
**상태:** 결정됨
|
|
5
|
+
|
|
6
|
+
## 배경
|
|
7
|
+
GitVault는 터미널에서 사용하는 보안 감사 도구이므로 CLI 인터페이스가 필수다.
|
|
8
|
+
|
|
9
|
+
## 결정
|
|
10
|
+
Typer + Rich 조합을 사용한다.
|
|
11
|
+
|
|
12
|
+
## 이유
|
|
13
|
+
- 기존 Projects 폴더의 Python CLI 프로젝트(FleetLens_CLI)와 동일한 스택
|
|
14
|
+
- Typer: Click 기반, 타입 힌트로 자동 파라미터 파싱
|
|
15
|
+
- Rich: 터미널 컬러 테이블, Progress bar — 보안 감사 결과 시각화에 최적
|
|
16
|
+
|
|
17
|
+
## 대안
|
|
18
|
+
- argparse: 너무 저수준
|
|
19
|
+
- Click 직접: Typer가 더 적은 코드로 동일 기능
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# ADR-0002: LLM 통합 — Claude API (선택적)
|
|
2
|
+
|
|
3
|
+
**날짜:** 2026-06-22
|
|
4
|
+
**상태:** 결정됨
|
|
5
|
+
|
|
6
|
+
## 배경
|
|
7
|
+
F5(pre-push 훅)와 F6(메타 스킬)에서 Claude와 연동이 필요하다.
|
|
8
|
+
|
|
9
|
+
## 결정
|
|
10
|
+
LLM 연동은 선택적(`--llm` 플래그)으로만 동작하며, 기본 감사는 로컬 패턴 매칭만 사용한다.
|
|
11
|
+
|
|
12
|
+
## 이유
|
|
13
|
+
- LLM 없이도 핵심 기능(F1-F4)이 완전히 동작해야 함
|
|
14
|
+
- API 키 없는 환경에서도 기본 감사 가능
|
|
15
|
+
- `--llm` 플래그로 opt-in — 사용자 선택
|
|
16
|
+
|
|
17
|
+
## 모델
|
|
18
|
+
- `claude-sonnet-4-6` (현재 세션 기본 모델)
|
|
19
|
+
- 감사 결과 분석, 권장 조치 생성에 사용
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "gitsentry"
|
|
3
|
+
version = "0.1.0"
|
|
4
|
+
description = "GitHub security audit CLI for LLM-assisted development environments"
|
|
5
|
+
readme = "README.md"
|
|
6
|
+
license = { text = "MIT" }
|
|
7
|
+
authors = [{ name = "Yoonseok Jang", email = "beret21@gmail.com" }]
|
|
8
|
+
keywords = ["security", "github", "cli", "llm", "claude", "audit"]
|
|
9
|
+
classifiers = [
|
|
10
|
+
"Development Status :: 3 - Alpha",
|
|
11
|
+
"Environment :: Console",
|
|
12
|
+
"Intended Audience :: Developers",
|
|
13
|
+
"License :: OSI Approved :: MIT License",
|
|
14
|
+
"Programming Language :: Python :: 3.11",
|
|
15
|
+
"Programming Language :: Python :: 3.12",
|
|
16
|
+
"Programming Language :: Python :: 3.13",
|
|
17
|
+
"Topic :: Security",
|
|
18
|
+
]
|
|
19
|
+
requires-python = ">=3.11"
|
|
20
|
+
dependencies = [
|
|
21
|
+
"anthropic>=0.40.0",
|
|
22
|
+
"pydantic>=2.0",
|
|
23
|
+
"python-dotenv>=1.0",
|
|
24
|
+
"typer>=0.12",
|
|
25
|
+
"rich>=13.0",
|
|
26
|
+
"PyGithub>=2.0",
|
|
27
|
+
"GitPython>=3.1",
|
|
28
|
+
]
|
|
29
|
+
|
|
30
|
+
[project.optional-dependencies]
|
|
31
|
+
dev = [
|
|
32
|
+
"pytest>=8.0",
|
|
33
|
+
"pytest-asyncio>=0.23",
|
|
34
|
+
"ruff>=0.4",
|
|
35
|
+
"mypy>=1.10",
|
|
36
|
+
]
|
|
37
|
+
|
|
38
|
+
[project.scripts]
|
|
39
|
+
gitsentry = "gitsentry.cli.main:app"
|
|
40
|
+
|
|
41
|
+
[project.urls]
|
|
42
|
+
Homepage = "https://github.com/beret21/GitSentry"
|
|
43
|
+
Repository = "https://github.com/beret21/GitSentry"
|
|
44
|
+
Issues = "https://github.com/beret21/GitSentry/issues"
|
|
45
|
+
|
|
46
|
+
[build-system]
|
|
47
|
+
requires = ["hatchling"]
|
|
48
|
+
build-backend = "hatchling.build"
|
|
49
|
+
|
|
50
|
+
[tool.hatch.build.targets.wheel]
|
|
51
|
+
packages = ["src/gitsentry"]
|
|
52
|
+
|
|
53
|
+
[tool.ruff]
|
|
54
|
+
line-length = 100
|
|
55
|
+
target-version = "py311"
|
|
56
|
+
|
|
57
|
+
[tool.ruff.lint]
|
|
58
|
+
select = ["E", "F", "W", "I", "N", "UP", "B", "SIM", "RUF"]
|
|
59
|
+
|
|
60
|
+
[tool.pytest.ini_options]
|
|
61
|
+
testpaths = ["tests"]
|
|
62
|
+
asyncio_mode = "auto"
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# GitSentry pre-push 훅 설치 스크립트
|
|
3
|
+
# 사용법: ./scripts/install-hook.sh [저장소 경로]
|
|
4
|
+
|
|
5
|
+
REPO_PATH="${1:-.}"
|
|
6
|
+
HOOK_PATH="$REPO_PATH/.git/hooks/pre-push"
|
|
7
|
+
|
|
8
|
+
if [ ! -d "$REPO_PATH/.git" ]; then
|
|
9
|
+
echo "Error: $REPO_PATH 는 git 저장소가 아닙니다."
|
|
10
|
+
exit 1
|
|
11
|
+
fi
|
|
12
|
+
|
|
13
|
+
cat > "$HOOK_PATH" << 'EOF'
|
|
14
|
+
#!/bin/bash
|
|
15
|
+
# GitSentry pre-push security hook
|
|
16
|
+
gitsentry pre-push .
|
|
17
|
+
exit $?
|
|
18
|
+
EOF
|
|
19
|
+
|
|
20
|
+
chmod +x "$HOOK_PATH"
|
|
21
|
+
echo "pre-push 훅 설치 완료: $HOOK_PATH"
|
|
22
|
+
echo "이제 git push 전에 자동으로 보안 감사가 실행됩니다."
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.1.0"
|
|
File without changes
|