oh-my-customcode 0.140.0 → 0.142.0
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.
- package/README.md +5 -5
- package/dist/cli/index.js +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/templates/.claude/skills/instinct-extractor/SKILL.md +176 -0
- package/templates/.claude/skills/profile/SKILL.md +57 -0
- package/templates/.claude/skills/sec-agentshield-wrapper/SKILL.md +174 -0
- package/templates/.claude/skills/semble-integration/SKILL.md +169 -0
- package/templates/CLAUDE.md +13 -2
- package/templates/README.md +2 -2
- package/templates/guides/profiles/manifest-install.md +177 -0
- package/templates/guides/security/agentshield-pre-flight.md +196 -0
- package/templates/guides/skill-promotion/instinct-extraction.md +114 -0
- package/templates/guides/token-efficiency/semble.md +188 -0
- package/templates/manifest.json +109 -4
package/templates/CLAUDE.md
CHANGED
|
@@ -117,11 +117,11 @@ project/
|
|
|
117
117
|
+-- CLAUDE.md # 진입점
|
|
118
118
|
+-- .claude/
|
|
119
119
|
| +-- agents/ # 서브에이전트 정의 (49 파일)
|
|
120
|
-
| +-- skills/ # 스킬 (
|
|
120
|
+
| +-- skills/ # 스킬 (121 디렉토리)
|
|
121
121
|
| +-- rules/ # 전역 규칙 (R000-R023)
|
|
122
122
|
| +-- hooks/ # 훅 스크립트 (보안, 검증, HUD)
|
|
123
123
|
| +-- contexts/ # 컨텍스트 파일 (ecomode)
|
|
124
|
-
+-- guides/ # 레퍼런스 문서 (
|
|
124
|
+
+-- guides/ # 레퍼런스 문서 (57 토픽)
|
|
125
125
|
```
|
|
126
126
|
|
|
127
127
|
## 오케스트레이션
|
|
@@ -246,6 +246,8 @@ Claude Code의 Agent Teams 기능이 활성화되어 있으면 (`CLAUDE_CODE_EXP
|
|
|
246
246
|
| 서버 | 용도 |
|
|
247
247
|
|------|------|
|
|
248
248
|
| claude-mem | 세션 메모리 영속성 (Chroma 기반) |
|
|
249
|
+
| code-review-graph | Token-efficient AST 기반 context retrieval (8.2× 토큰 절감) — wrapper: `crg-integration` 스킬 (#1171) |
|
|
250
|
+
| semble | Semantic code search via embeddings (98% 토큰 절감, NDCG@10=0.854) — wrapper: `semble-integration` 스킬 (#1173) |
|
|
249
251
|
|
|
250
252
|
### 설치 명령어
|
|
251
253
|
|
|
@@ -261,6 +263,15 @@ Claude Code의 Agent Teams 기능이 활성화되어 있으면 (`CLAUDE_CODE_EXP
|
|
|
261
263
|
# MCP 설정 (claude-mem)
|
|
262
264
|
npm install -g claude-mem
|
|
263
265
|
claude-mem setup
|
|
266
|
+
|
|
267
|
+
# CRG MCP 설치 (token efficiency)
|
|
268
|
+
pipx install code-review-graph
|
|
269
|
+
# .mcp.json 에 code-review-graph 서버 수동 추가 (R001 auto-install 금지)
|
|
270
|
+
|
|
271
|
+
# Semble MCP 설치 (semantic code search)
|
|
272
|
+
uv tool install semble
|
|
273
|
+
claude mcp add semble -- semble mcp
|
|
274
|
+
# 또는 .mcp.json 수동 편집 (R001 auto-install 금지)
|
|
264
275
|
```
|
|
265
276
|
|
|
266
277
|
<!-- omcustom:git-workflow -->
|
package/templates/README.md
CHANGED
|
@@ -48,7 +48,7 @@ templates/
|
|
|
48
48
|
├── manifest.json # 배포 컴포넌트 카운트 및 메타데이터
|
|
49
49
|
├── .claude/
|
|
50
50
|
│ ├── agents/ # 에이전트 정의 파일 (*.md, 49개)
|
|
51
|
-
│ ├── skills/ # 스킬 모듈 (각 디렉토리에 SKILL.md,
|
|
51
|
+
│ ├── skills/ # 스킬 모듈 (각 디렉토리에 SKILL.md, 119개)
|
|
52
52
|
│ ├── rules/ # 전역 규칙 (R000–R023, 23개)
|
|
53
53
|
│ ├── hooks/
|
|
54
54
|
│ │ ├── hooks.json # 훅 이벤트 설정 (PreToolUse/PostToolUse 등)
|
|
@@ -86,7 +86,7 @@ CI의 `verify-template-sync.sh`가 소스와 templates/ 간 일치를 검증합
|
|
|
86
86
|
| Manager | 6 |
|
|
87
87
|
| System | 4 |
|
|
88
88
|
|
|
89
|
-
### Skills (
|
|
89
|
+
### Skills (121)
|
|
90
90
|
|
|
91
91
|
`.claude/skills/*/SKILL.md` — 재사용 가능한 스킬 모듈.
|
|
92
92
|
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
# Manifest Profiles — Install Guide
|
|
2
|
+
|
|
3
|
+
> **Source**: `templates/manifest.json#profiles`
|
|
4
|
+
> **Related skill**: `.claude/skills/profile/SKILL.md`
|
|
5
|
+
> **Issue**: #1177 (ECC manifest-install `--profile minimal/full` pattern)
|
|
6
|
+
|
|
7
|
+
`--profile` 플래그를 사용하면 설치 시 포함할 에이전트·스킬·가이드 범위를 지정할 수 있습니다. 사용자 진입 비용(deactivation cost)을 줄이고, 목적에 맞는 최소 자산 세트로 빠르게 시작할 수 있습니다.
|
|
8
|
+
|
|
9
|
+
## 사용 방법
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
# 기본 설치 (full — 전체 자산)
|
|
13
|
+
omcustom install
|
|
14
|
+
|
|
15
|
+
# 프로필 지정 설치
|
|
16
|
+
omcustom install --profile minimal
|
|
17
|
+
omcustom install --profile web-app
|
|
18
|
+
omcustom install --profile data-eng
|
|
19
|
+
omcustom install --profile harness-dev
|
|
20
|
+
omcustom install --profile full
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## 프로필 목록
|
|
24
|
+
|
|
25
|
+
| 프로필 | 설명 | 추천 대상 |
|
|
26
|
+
|--------|------|-----------|
|
|
27
|
+
| `minimal` | 필수 최소 자산 (코어 SW Engineer + Manager) | 학습·실험·경량 환경 |
|
|
28
|
+
| `full` | 전체 자산 (기본값) | 프로덕션, 다양한 도메인 |
|
|
29
|
+
| `web-app` | 풀스택 웹 앱 개발 자산 | TypeScript/Python 풀스택 팀 |
|
|
30
|
+
| `data-eng` | 데이터 엔지니어링 자산 | Airflow/Spark/dbt/Kafka/Snowflake |
|
|
31
|
+
| `harness-dev` | oh-my-customcode 하네스 개발 자산 | 에이전트·스킬·룰 작성자 |
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## 프로필별 포함 자산
|
|
36
|
+
|
|
37
|
+
### minimal
|
|
38
|
+
|
|
39
|
+
사용 시나리오: 첫 설치, 학습 환경, 토큰 비용 최소화.
|
|
40
|
+
|
|
41
|
+
| 카테고리 | 포함 자산 |
|
|
42
|
+
|----------|-----------|
|
|
43
|
+
| 에이전트 | `mgr-*` (6개), `lang-*-expert` (6개), `sys-memory-keeper` |
|
|
44
|
+
| 스킬 | scope: `core` + scope: `harness` 전체 |
|
|
45
|
+
| 가이드 | `agent-design`, `git-safety`, `claude-code` |
|
|
46
|
+
|
|
47
|
+
**배제**: 프레임워크 전문가(BE/FE/DE), QA 팀, 인프라, 보안, DB 전문가.
|
|
48
|
+
|
|
49
|
+
### full
|
|
50
|
+
|
|
51
|
+
사용 시나리오: 프로덕션 팀, 다양한 기술 스택, 기본 설치.
|
|
52
|
+
|
|
53
|
+
| 카테고리 | 포함 자산 |
|
|
54
|
+
|----------|-----------|
|
|
55
|
+
| 에이전트 | 전체 49개 |
|
|
56
|
+
| 스킬 | 전체 119개 |
|
|
57
|
+
| 가이드 | 전체 54개 |
|
|
58
|
+
|
|
59
|
+
`omcustom install` (profile 플래그 생략 시) 와 동일합니다.
|
|
60
|
+
|
|
61
|
+
### web-app
|
|
62
|
+
|
|
63
|
+
사용 시나리오: TypeScript/Python 풀스택 웹 앱 개발팀.
|
|
64
|
+
|
|
65
|
+
| 카테고리 | 포함 자산 |
|
|
66
|
+
|----------|-----------|
|
|
67
|
+
| 에이전트 | `lang-typescript-expert`, `lang-python-expert`, `fe-vercel-agent`, `fe-design-expert`, `be-fastapi-expert`, `be-express-expert`, `be-nestjs-expert`, `db-postgres-expert`, `db-supabase-expert`, `db-redis-expert`, `infra-docker-expert`, `mgr-*` |
|
|
68
|
+
| 스킬 | scope: `core` + `react-best-practices`, `typescript-best-practices`, `fastapi-best-practices`, `nextjs-best-practices` |
|
|
69
|
+
| 가이드 | `agent-design`, `git-safety`, `claude-code`, `drizzle-orm`, `docker`, `fastapi`, `nextjs`, `react` |
|
|
70
|
+
|
|
71
|
+
**배제**: 데이터 엔지니어링(DE), Java/Kotlin/Go/Rust 전문가, QA 팀, 보안.
|
|
72
|
+
|
|
73
|
+
### data-eng
|
|
74
|
+
|
|
75
|
+
사용 시나리오: 데이터 파이프라인 엔지니어링 팀.
|
|
76
|
+
|
|
77
|
+
| 카테고리 | 포함 자산 |
|
|
78
|
+
|----------|-----------|
|
|
79
|
+
| 에이전트 | `de-*` (6개), `db-postgres-expert`, `db-redis-expert`, `db-alembic-expert`, `lang-python-expert`, `mgr-*` |
|
|
80
|
+
| 스킬 | scope: `core` + `airflow-best-practices`, `dbt-best-practices` |
|
|
81
|
+
| 가이드 | `agent-design`, `git-safety`, `airflow`, `dbt`, `snowflake` |
|
|
82
|
+
|
|
83
|
+
**배제**: 프론트엔드, 백엔드 프레임워크, 인프라, QA.
|
|
84
|
+
|
|
85
|
+
### harness-dev
|
|
86
|
+
|
|
87
|
+
사용 시나리오: oh-my-customcode 시스템 자체 개발·유지보수.
|
|
88
|
+
|
|
89
|
+
| 카테고리 | 포함 자산 |
|
|
90
|
+
|----------|-----------|
|
|
91
|
+
| 에이전트 | `mgr-*` (6개), `arch-*` (2개), `sys-*` (4개 중 sys-naggy 포함), `wiki-curator`, `tracker-checkpoint` |
|
|
92
|
+
| 스킬 | scope: `harness` 전체 |
|
|
93
|
+
| 가이드 | `agent-design`, `git-safety`, `claude-code`, `skill-authoring`, `agent-workflow` |
|
|
94
|
+
|
|
95
|
+
**배제**: 언어/프레임워크/DE/QA/인프라 전문가.
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## include 패턴 레퍼런스
|
|
100
|
+
|
|
101
|
+
`manifest.json#profiles[].include` 필드에 사용 가능한 패턴:
|
|
102
|
+
|
|
103
|
+
```json
|
|
104
|
+
{
|
|
105
|
+
"include": "*"
|
|
106
|
+
}
|
|
107
|
+
```
|
|
108
|
+
전체 포함 (full 프로필과 동일).
|
|
109
|
+
|
|
110
|
+
```json
|
|
111
|
+
{
|
|
112
|
+
"include": {
|
|
113
|
+
"agents": ["mgr-*", "lang-typescript-expert"],
|
|
114
|
+
"skills": [{"scope": "core"}, "react-best-practices"],
|
|
115
|
+
"guides": ["agent-design", "git-safety"]
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
```
|
|
119
|
+
카테고리별 부분 포함.
|
|
120
|
+
|
|
121
|
+
| 표현식 | 의미 |
|
|
122
|
+
|--------|------|
|
|
123
|
+
| `"*"` | 카테고리 전체 포함 |
|
|
124
|
+
| `"mgr-*"` | 접두사 glob 매칭 |
|
|
125
|
+
| `"lang-*-expert"` | 와일드카드 glob 매칭 |
|
|
126
|
+
| `{"scope": "core"}` | SKILL.md `scope` 필드 기준 필터 |
|
|
127
|
+
| `"react-best-practices"` | 정확한 이름 매칭 |
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## Plugin Profile vs Manifest Profile
|
|
132
|
+
|
|
133
|
+
두 프로필 시스템은 **서로 독립**입니다.
|
|
134
|
+
|
|
135
|
+
| 구분 | 경로 | 역할 | 적용 시점 |
|
|
136
|
+
|------|------|------|-----------|
|
|
137
|
+
| **Plugin profiles** | `.claude/profiles/*.json` | `~/.claude/settings.json` plugin on/off | 세션 재시작 후 |
|
|
138
|
+
| **Manifest profiles** | `templates/manifest.json#profiles` | 설치 시 에이전트·스킬·가이드 범위 | `omcustom install --profile` |
|
|
139
|
+
|
|
140
|
+
동일한 이름(예: `web-app`)이 두 시스템에 모두 존재하면 각각 독립적으로 적용됩니다:
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
# Manifest profile: 설치 자산 범위
|
|
144
|
+
omcustom install --profile web-app
|
|
145
|
+
|
|
146
|
+
# Plugin profile: 플러그인 on/off
|
|
147
|
+
/profile load web-app
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## 커스텀 프로필 추가
|
|
153
|
+
|
|
154
|
+
`templates/manifest.json` 의 `profiles` 객체에 새 키를 추가합니다:
|
|
155
|
+
|
|
156
|
+
```json
|
|
157
|
+
"my-profile": {
|
|
158
|
+
"description": "My custom profile description",
|
|
159
|
+
"include": {
|
|
160
|
+
"agents": ["lang-golang-expert", "be-go-backend-expert", "mgr-*"],
|
|
161
|
+
"skills": [{"scope": "core"}],
|
|
162
|
+
"guides": ["agent-design", "git-safety"]
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
커스텀 프로필은 `omcustom install --profile my-profile` 로 즉시 사용 가능합니다.
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## 관련 자료
|
|
172
|
+
|
|
173
|
+
- `.claude/skills/profile/SKILL.md` — Plugin profile 전환 스킬
|
|
174
|
+
- `templates/manifest.json` — 전체 manifest 및 profiles 정의
|
|
175
|
+
- `guides/agent-design/` — 에이전트 설계 가이드
|
|
176
|
+
- Issue #1177 — ECC manifest-install 패턴 흡수
|
|
177
|
+
- Issue #1170 — ECC 4 패턴 흡수 epic
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
# 보안 사전 분석 패턴 (AgentShield Pre-flight)
|
|
2
|
+
|
|
3
|
+
코드 변경을 시작하기 전에 보안 위험을 식별하는 pre-flight 패턴에 대한 레퍼런스 가이드.
|
|
4
|
+
|
|
5
|
+
## 배경
|
|
6
|
+
|
|
7
|
+
전통적인 보안 검토는 코드가 작성된 후(post-write)에 이루어진다. 이 패턴은 작성 전(pre-write) 단계에서 보안 위험을 식별하여 설계 단계에서 방향을 잡는다.
|
|
8
|
+
|
|
9
|
+
**ECC(External Code Corpus) 출처**: `sec-agentshield-wrapper` 패턴은 ECC의 AgentShield 구현에서 흡수되었다. 원본은 코드 변경 전 보안 사전 분석 wrapper로 사용되었으며, oh-my-customcode의 기존 보안 자산(`sec-codeql-expert`, `adversarial-review`, `cve-triage`)과 통합된 형태로 재설계되었다.
|
|
10
|
+
|
|
11
|
+
## 보안 자산 전체 매트릭스
|
|
12
|
+
|
|
13
|
+
oh-my-customcode의 보안 관련 자산 전체를 시점과 역할 기준으로 정리한다:
|
|
14
|
+
|
|
15
|
+
| 자산 | 유형 | 실행 시점 | 주요 역할 | 인터페이스 |
|
|
16
|
+
|------|------|-----------|-----------|-----------|
|
|
17
|
+
| `sec-agentshield-wrapper` | skill | pre-write | 변경 의도 기반 위험 사전 식별 | `/sec-agentshield-wrapper "<설명>"` |
|
|
18
|
+
| `adversarial-review` | skill | post-write | 공격자 마인드 4단계 리뷰 | `/adversarial-review <파일>` |
|
|
19
|
+
| `sec-codeql-expert` | agent | post-write | CodeQL 정적 분석, CVE 매칭 | `@sec-codeql-expert` |
|
|
20
|
+
| `cve-triage` | skill | issue-triggered | CVE 평가, 재현 분석, 패치 검증 | (sec-codeql-expert 내부 호출) |
|
|
21
|
+
|
|
22
|
+
## Pre-flight 패턴의 필요성
|
|
23
|
+
|
|
24
|
+
### 기존 방식의 문제
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
기존 흐름:
|
|
28
|
+
요구사항 → 구현 시작 → (보안 문제 포함) 구현 완료 → 코드 리뷰 → 보안 결함 발견 → 재작업
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
재작업 비용이 크다. 특히 인증/인가 로직, 외부 API 연동, 파일 업로드 등 보안 민감 영역에서 설계 단계의 잘못된 방향은 구현 완료 후 전면 수정으로 이어질 수 있다.
|
|
32
|
+
|
|
33
|
+
### Pre-flight 방식
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
개선된 흐름:
|
|
37
|
+
요구사항 → sec-agentshield-wrapper 실행 → 위험 식별 + 체크리스트 수령 → 안전한 구현 → adversarial-review → sec-codeql-expert
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
변경 의도와 대상 파일만으로 트러스트 경계와 위험 패턴을 사전 식별한다.
|
|
41
|
+
|
|
42
|
+
## 사용 시나리오
|
|
43
|
+
|
|
44
|
+
### 시나리오 1: 인증 로직 변경
|
|
45
|
+
|
|
46
|
+
**상황**: refresh token 처리 로직 추가
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
/sec-agentshield-wrapper "auth-middleware.ts — refresh token rotation 추가"
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
**예상 Advisory**: CAUTION 또는 BLOCK
|
|
53
|
+
|
|
54
|
+
**식별 위험**:
|
|
55
|
+
- 토큰 재사용 공격 (token replay)
|
|
56
|
+
- 동시 요청 경쟁 조건 (refresh token race condition)
|
|
57
|
+
- 만료 처리 누락
|
|
58
|
+
|
|
59
|
+
**체크리스트**:
|
|
60
|
+
- [ ] refresh token은 1회 사용 후 무효화(rotation)
|
|
61
|
+
- [ ] 동시 refresh 요청에 대한 원자적 처리
|
|
62
|
+
- [ ] 이전 토큰 즉시 무효화
|
|
63
|
+
- [ ] refresh token 만료 시간 설정
|
|
64
|
+
|
|
65
|
+
### 시나리오 2: 파일 업로드 신규 구현
|
|
66
|
+
|
|
67
|
+
**상황**: 사용자 파일 업로드 기능 추가
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
/sec-agentshield-wrapper "upload.py — 사용자 이미지 업로드 엔드포인트 신규 구현"
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**예상 Advisory**: CAUTION
|
|
74
|
+
|
|
75
|
+
**식별 위험**:
|
|
76
|
+
- 파일 확장자 우회 (Content-Type 스푸핑)
|
|
77
|
+
- 경로 탐색 (path traversal)
|
|
78
|
+
- 파일 크기 미제한
|
|
79
|
+
|
|
80
|
+
**체크리스트**:
|
|
81
|
+
- [ ] MIME 타입 + 확장자 이중 검증 (allowlist 방식)
|
|
82
|
+
- [ ] 파일명 새니타이즈 (경로 문자 제거)
|
|
83
|
+
- [ ] 최대 파일 크기 제한
|
|
84
|
+
- [ ] 저장 경로를 웹 루트 외부로 설정
|
|
85
|
+
|
|
86
|
+
### 시나리오 3: 외부 API 연동 추가
|
|
87
|
+
|
|
88
|
+
**상황**: 외부 결제 API 연동
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
/sec-agentshield-wrapper "PaymentService.java — Stripe 웹훅 수신 처리 추가"
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
**예상 Advisory**: CAUTION
|
|
95
|
+
|
|
96
|
+
**식별 위험**:
|
|
97
|
+
- 웹훅 서명 검증 누락
|
|
98
|
+
- SSRF 가능성 (URL 파라미터화 시)
|
|
99
|
+
- 재시도 처리에서의 중복 결제
|
|
100
|
+
|
|
101
|
+
**체크리스트**:
|
|
102
|
+
- [ ] Stripe 서명 헤더(`Stripe-Signature`) 검증
|
|
103
|
+
- [ ] 이벤트 ID 기반 멱등성 처리
|
|
104
|
+
- [ ] 웹훅 페이로드 크기 제한
|
|
105
|
+
|
|
106
|
+
### 시나리오 4: 위험 없는 변경
|
|
107
|
+
|
|
108
|
+
**상황**: 로깅 포맷 변경
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
/sec-agentshield-wrapper "logger.ts — 로그 출력 포맷 JSON으로 변경"
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
**예상 Advisory**: PROCEED
|
|
115
|
+
|
|
116
|
+
패턴 매칭 결과 고위험 패턴 없음. 단, 로그에 민감 정보(토큰, PII) 포함 여부는 구현 시 주의.
|
|
117
|
+
|
|
118
|
+
## 다른 자산과의 조합 패턴
|
|
119
|
+
|
|
120
|
+
### 표준 보안 파이프라인
|
|
121
|
+
|
|
122
|
+
보안 민감 기능 개발 시 권장 순서:
|
|
123
|
+
|
|
124
|
+
```
|
|
125
|
+
1. sec-agentshield-wrapper ← 설계 전 위험 식별
|
|
126
|
+
2. 구현
|
|
127
|
+
3. adversarial-review ← 공격자 관점 코드 리뷰
|
|
128
|
+
4. sec-codeql-expert ← 정적 분석 (선택, CI에서도 가능)
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### CVE 대응 파이프라인
|
|
132
|
+
|
|
133
|
+
CVE 알림 수신 시:
|
|
134
|
+
|
|
135
|
+
```
|
|
136
|
+
1. cve-triage ← CVE 영향 평가
|
|
137
|
+
2. sec-codeql-expert ← 영향 범위 코드 분석
|
|
138
|
+
3. 패치 적용
|
|
139
|
+
4. adversarial-review ← 패치 후 회귀 검증
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### 긴급 핫픽스 시
|
|
143
|
+
|
|
144
|
+
시간이 제한된 긴급 수정 시:
|
|
145
|
+
|
|
146
|
+
```
|
|
147
|
+
1. sec-agentshield-wrapper ← 빠른 위험 체크 (5분)
|
|
148
|
+
2. 구현
|
|
149
|
+
3. adversarial-review --depth quick ← 빠른 리뷰
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
## 트리거 키워드 참고
|
|
153
|
+
|
|
154
|
+
다음 키워드가 변경 의도에 포함될 경우 반드시 pre-flight 실행:
|
|
155
|
+
|
|
156
|
+
**CRITICAL 트리거** (즉시 BLOCK 고려):
|
|
157
|
+
- `admin`, `superuser`, `root`, `privilege escalation`
|
|
158
|
+
- `bypass`, `skip auth`, `disable security`
|
|
159
|
+
- `eval(`, `exec(`, `system(`, `shell`
|
|
160
|
+
|
|
161
|
+
**HIGH 트리거** (CAUTION 이상 예상):
|
|
162
|
+
- `token`, `jwt`, `session`, `cookie`
|
|
163
|
+
- `password`, `credential`, `secret`, `key`
|
|
164
|
+
- `upload`, `file`, `multipart`
|
|
165
|
+
- `external`, `webhook`, `callback`, `redirect`
|
|
166
|
+
- `query`, `sql`, `filter`, `search`
|
|
167
|
+
- `permission`, `role`, `acl`
|
|
168
|
+
|
|
169
|
+
**MEDIUM 트리거** (상황에 따라 CAUTION):
|
|
170
|
+
- `serialize`, `deserialize`, `parse`
|
|
171
|
+
- `config`, `env`, `environment`
|
|
172
|
+
- `log`, `audit` (민감 정보 로깅 위험)
|
|
173
|
+
|
|
174
|
+
## 한계 및 향후 개선
|
|
175
|
+
|
|
176
|
+
### 현재 한계
|
|
177
|
+
|
|
178
|
+
1. **휴리스틱 기반**: 키워드와 영역 분류 기반이므로 100% recall 보장 불가
|
|
179
|
+
2. **구현 세부사항 부재**: 실제 코드가 없으므로 로직 플로우 분석 불가 — `adversarial-review` 로 보완 필요
|
|
180
|
+
3. **False positive**: 보안 관련 키워드 포함 코드가 실제로는 안전할 수 있음
|
|
181
|
+
4. **프레임워크 비인식**: Spring Security, Next.js Auth 등 프레임워크 레벨 보안 기능은 인식 못함
|
|
182
|
+
|
|
183
|
+
### 향후 개선 방향
|
|
184
|
+
|
|
185
|
+
1. **CRG 통합 강화**: `query_graph`로 caller 체인 자동 분석 → 트러스트 경계 도달 여부 자동 판단
|
|
186
|
+
2. **프로젝트별 패턴 학습**: `instinct-extractor` 연동으로 프로젝트 고유 위험 패턴 축적 (#1169)
|
|
187
|
+
3. **CI 통합**: PR 생성 시 변경 파일 기반 자동 pre-flight 실행
|
|
188
|
+
4. **severity calibration**: 프로젝트 히스토리 기반 false positive 감소
|
|
189
|
+
|
|
190
|
+
## 관련 자산
|
|
191
|
+
|
|
192
|
+
- `.claude/skills/sec-agentshield-wrapper/SKILL.md` — 스킬 정의 및 실행 워크플로우
|
|
193
|
+
- `.claude/skills/adversarial-review/SKILL.md` — post-write 공격자 관점 리뷰
|
|
194
|
+
- `.claude/skills/cve-triage/SKILL.md` — CVE 평가 워크플로우
|
|
195
|
+
- `.claude/agents/sec-codeql-expert.md` — CodeQL 정적 분석 에이전트
|
|
196
|
+
- `guides/security/agentshield-pre-flight.md` — 이 문서
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# Skill Promotion: Instinct Extraction 가이드
|
|
2
|
+
|
|
3
|
+
> **관련 자산**: `skill-extractor`, `instinct-extractor`, R016 (MUST-continuous-improvement.md)
|
|
4
|
+
|
|
5
|
+
## 개요
|
|
6
|
+
|
|
7
|
+
oh-my-customcode는 두 개의 보완적인 skill 채굴 도구를 제공한다.
|
|
8
|
+
두 스킬은 **동일한 목표** (실패 패턴 → 영구 구조 전환)를 **다른 범위와 트리거**로 달성한다.
|
|
9
|
+
|
|
10
|
+
## 두 스킬 비교
|
|
11
|
+
|
|
12
|
+
| 속성 | `skill-extractor --mode failure` | `instinct-extractor` |
|
|
13
|
+
|------|----------------------------------|----------------------|
|
|
14
|
+
| **scope** | 단일 세션 | 다중 세션 시계열 (N일) |
|
|
15
|
+
| **trigger** | 명시 호출 | 자동 / R016 3회 반복 트리거 |
|
|
16
|
+
| **input** | `.claude/agent-memory*/feedback_*.md` | `~/.claude/projects/*/session-*.jsonl` |
|
|
17
|
+
| **clustering** | feedback memory의 Why/How to apply 필드 | (domain, action_verb, error_class) 튜플 |
|
|
18
|
+
| **output** | 기존 skill 확장 / rule 강화 / 신규 SKILL.md | failure pattern 클러스터 + instinct 후보 → SKILL.md candidate |
|
|
19
|
+
| **사용자 승인** | 필수 | 필수 |
|
|
20
|
+
| **context fork** | 신규 skill 전 cap 확인 | 신규 skill 전 cap 확인 |
|
|
21
|
+
|
|
22
|
+
## 언제 어떤 스킬을 쓸까
|
|
23
|
+
|
|
24
|
+
### skill-extractor 사용 시나리오
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
/skill-extractor # 현재 세션 성공 패턴 추출
|
|
28
|
+
/skill-extractor --mode failure # 현재 세션 누적 실패 패턴 분석
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
- 오늘 세션에서 반복된 오류를 즉시 구조화하고 싶을 때
|
|
32
|
+
- 특정 feedback memory 항목이 skill로 전환될 준비가 됐다고 느낄 때
|
|
33
|
+
- 명시적·즉각적 분석이 필요할 때
|
|
34
|
+
|
|
35
|
+
### instinct-extractor 사용 시나리오
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
/instinct-extractor # 최근 14일 cross-session 채굴
|
|
39
|
+
/instinct-extractor --days 30 # 한 달 범위 확장
|
|
40
|
+
/instinct-extractor --dry-run # 후보 목록만 확인
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
- R016 트리거: 동일 패턴이 여러 세션에 걸쳐 3회 이상 반복된다고 판단될 때
|
|
44
|
+
- 주기적 시스템 점검 (예: 릴리즈 전, 스프린트 종료 시)
|
|
45
|
+
- `skill-extractor`가 탐지하지 못한 cross-session 패턴이 의심될 때
|
|
46
|
+
|
|
47
|
+
## R016 자동화 패턴
|
|
48
|
+
|
|
49
|
+
R016 Defect Response Matrix에서 **Skill Promotion** 조건:
|
|
50
|
+
> feedback memory가 동일 패턴으로 **3회 이상 반복** → skill candidate 분석
|
|
51
|
+
|
|
52
|
+
### 권장 실행 순서
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
1. skill-extractor --mode failure
|
|
56
|
+
→ 현재 세션 feedback memory 분석
|
|
57
|
+
→ 즉각적 후보 식별
|
|
58
|
+
|
|
59
|
+
2. instinct-extractor --days 14
|
|
60
|
+
→ cross-session 시계열 검증
|
|
61
|
+
→ skill-extractor 결과와 교차 검증
|
|
62
|
+
|
|
63
|
+
3. 교차 검증: 두 스킬이 동일 패턴 발견 시 → high confidence → mgr-creator 위임
|
|
64
|
+
4. 한쪽만 발견 시 → medium confidence → 추가 관찰 권장
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### 자동 트리거 조건
|
|
68
|
+
|
|
69
|
+
오케스트레이터는 다음 조건에서 `instinct-extractor` 자동 실행을 고려한다:
|
|
70
|
+
- R016 Defect Response Matrix 기록 시 동일 domain의 feedback memory가 3개 이상일 때
|
|
71
|
+
- 릴리즈 준비 단계 (`/release-plan` 실행 전)
|
|
72
|
+
- 스프린트 회고 (수동 트리거: `/instinct-extractor`)
|
|
73
|
+
|
|
74
|
+
## 호출 빈도 및 조건
|
|
75
|
+
|
|
76
|
+
| 시나리오 | 권장 스킬 | 주기 |
|
|
77
|
+
|----------|----------|------|
|
|
78
|
+
| 일상 개발 세션 종료 | `skill-extractor` | 세션마다 (Stop hook 알림 시) |
|
|
79
|
+
| 주간 점검 | `instinct-extractor --days 7` | 주 1회 |
|
|
80
|
+
| 릴리즈 전 | `instinct-extractor --days 30` | 릴리즈마다 |
|
|
81
|
+
| R016 트리거 감지 | 두 스킬 순차 실행 | 즉시 |
|
|
82
|
+
| 신규 에이전트 설계 전 | `instinct-extractor --cluster-only` | 필요 시 |
|
|
83
|
+
|
|
84
|
+
## Confidence 교차 검증 매트릭스
|
|
85
|
+
|
|
86
|
+
| skill-extractor 결과 | instinct-extractor 결과 | 종합 Confidence | 권장 행동 |
|
|
87
|
+
|---------------------|------------------------|----------------|----------|
|
|
88
|
+
| 후보 있음 | 동일 패턴 발견 | **high** | mgr-creator 즉시 위임 |
|
|
89
|
+
| 후보 있음 | 패턴 없음 | medium | 추가 세션 관찰 후 재분석 |
|
|
90
|
+
| 후보 없음 | 패턴 발견 | medium | skill-extractor --mode failure 재실행 |
|
|
91
|
+
| 후보 없음 | 패턴 없음 | low | 현재 구조 유지, 다음 주기에 재검토 |
|
|
92
|
+
|
|
93
|
+
## 아티팩트 경로
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
# skill-extractor 출력
|
|
97
|
+
.claude/outputs/sessions/{date}/skill-extractor-failure-{HH}.md
|
|
98
|
+
|
|
99
|
+
# instinct-extractor 출력
|
|
100
|
+
.claude/outputs/sessions/{date}/instinct-extractor-{HHmmss}.md
|
|
101
|
+
|
|
102
|
+
# 교차 검증 요약 (선택)
|
|
103
|
+
.claude/outputs/sessions/{date}/skill-promotion-summary-{HHmmss}.md
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## 관련 자료
|
|
107
|
+
|
|
108
|
+
- `.claude/skills/skill-extractor/SKILL.md` — 명시 호출 skill 채굴
|
|
109
|
+
- `.claude/skills/instinct-extractor/SKILL.md` — cross-session instinct 채굴
|
|
110
|
+
- `.claude/rules/MUST-continuous-improvement.md` — R016 Defect Response Matrix
|
|
111
|
+
- `.claude/rules/MUST-agent-design.md` — context fork cap (12/12)
|
|
112
|
+
- `guides/skill-bundle-design/README.md` — skill 설계 패턴
|
|
113
|
+
- Issue #1175 — instinct-extractor 흡수 결정 맥락
|
|
114
|
+
- Issue #1169 — AgentMemory 마이그레이션 (transcript format 안정화 전제)
|