Claude Code Skills + Codex CLI
λͺ©μ : AI μ½λ 리뷰 μλν, ν ν° ν¨μ¨ κ·Ήλν
Agent Skills - Claude Docs
Create, manage, and share Skills to extend Claude's capabilities in Claude Code.
docs.claude.com
μ Skillλ₯Ό μ¬μ©νλ?
λ¬Έμ μν©
κ°λ°μ: "μ΄ μ»€λ° λ¦¬λ·° μ’ ν΄μ€"
Claude: *μλ°± μ€ νμΌ μ½κΈ°* → *λΆμ* → *μ μ*
κ²°κ³Ό: μλ§ ν ν° μλΉ, κΈ΄ λκΈ° μκ°
ν΄κ²° λ°©λ²
κ°λ°μ: "μ½λ±μ€λ‘ 리뷰ν΄μ€"
Claude: *Codex CLI μ€ν* → *λ°±κ·ΈλΌμ΄λ λκΈ°*
Codex: *λ
립μ μΌλ‘ λΆμ* → *κ²°κ³Όλ§ μ λ¬*
κ²°κ³Ό: μλ°± ν ν°λ§ μλΉ, λ³λ ¬ μμ
κ°λ₯!
Codex Skill μμ νλ¦ β
μ 체 νλ‘μΈμ€
βββββββββββββββββββββββββββββ
1λ¨κ³: λΆμ μμ²
βββββββββββββββββββββββββββββ
μ¬μ©μ: "μ½λ±μ€λ‘ λΆμν΄μ€"
↓
Claude: Codex CLI μ€ν
↓
Codex(μΈλΆ AI): μ½λ λΆμ + diff νμΌ μμ±
↓
κ²°κ³Ό: ~/.codex/sessions/xxx/changes.diff
βββββββββββββββββββββββββββββ
2λ¨κ³: μ μ© μμ²
βββββββββββββββββββββββββββββ
μ¬μ©μ: "μμ ν΄μ€" (λλ "μ μ©ν΄μ€")
↓
Claude: `codex apply` λͺ
λ Ή μ€ν
↓
git apply: diffλ₯Ό μ€μ νμΌμ ν¨μΉ
↓
Claude: κ²°κ³Ό νμΈ λ° λ¦¬ν¬νΈ
λκ° λ νλκ°?
| λ¨κ³ | μμ μ | μ€λͺ | ν ν° μλΉ |
| λΆμ | Codex AI | μ½λ λΆμ, κ°μ μ μμ±, diff νμΌ μμ± | β μΈλΆ |
| λͺ λ Ή μ€ν | Claude | codex apply λͺ λ Ή μ€ν | β μ μ |
| νμΌ μμ | git apply | Codexκ° λ§λ diffλ₯Ό νμΌμ ν¨μΉ | β μΈλΆ |
| κ²μ¦ | Claude | TypeScript 체ν¬, κ²°κ³Ό 리ν¬νΈ | β μ μ |
ꡬ체μ μμ
1λ¨κ³: λΆμ (Codexκ° μμ )
$ codex exec "리ν©ν λ§ν΄μ€"
[Codex λ΄λΆ λμ]
→ νμΌ μ½κΈ°
→ μ½λ λΆμ
→ κ°μ μ μμ±
→ diff νμΌ μμ±: ~/.codex/sessions/abc123/changes.diff
Claudeλ? λͺ λ Ήλ§ μ€ννκ³ λκΈ°! (ν ν° κ±°μ μ μ)
2λ¨κ³: μ μ© (Claudeκ° λͺ λ Ή μ€ν, gitμ΄ νμΌ μμ )
μ¬μ©μ: "μμ ν΄μ€"
$ codex apply # Claudeκ° μ€ν
↓
$ git apply ~/.codex/sessions/abc123/changes.diff # λ΄λΆμ μΌλ‘ μ€ν
↓
νμΌ μ€μ μμ μλ£!
↓
Claude: "λ³κ²½ μλ£νμ΅λλ€. TypeScript 체ν¬ν κΉμ?"
ν΅μ¬ ν¬μΈνΈ
β μμ μ±
1. Codexλ μ§μ νμΌμ μμ νμ§ μμ
→ diff νμΌλ§ μμ±
2. μ¬μ©μκ° κ²ν κ°λ₯
→ cat ~/.codex/sessions/xxx/changes.diff
3. μΉμΈ ν Claudeκ° μ μ©
→ codex apply λͺ
λ Ή
4. λ¬Έμ λ°μ μ λ‘€λ°± κ°λ₯
→ git restore [νμΌλͺ
]
β ν¨μ¨μ±
Before (Claude μ§μ λΆμ):
νμΌ μ½κΈ°: 5000 ν ν°
λΆμ: 3000 ν ν°
μ μ: 2000 ν ν°
μ΄: 10,000 ν ν°
After (Codex Skill):
λͺ
λ Ή μ€ν: 100 ν ν°
λκΈ°: 0 ν ν° (λ°±κ·ΈλΌμ΄λ)
κ²°κ³Ό μ½κΈ°: 500 ν ν°
μ΄: 600 ν ν° (94% μ μ½!)
β λ³λ ¬μ±
Codex μ€ν μ€μλ:
- β
λ€λ₯Έ νμΌ μ½κΈ°
- β
μ½λ μμ
- β
λ¬Έμ μμ±
- β
git λͺ
λ Ή μ€ν
μ€μ ν μ€νΈ: μ»€λ° λ¦¬λ·°
μλ리μ€
Project D νλ‘μ νΈμμ λμ보λ μ€μ μ μν λ°°μ§λ₯Ό μΆκ°νλ 컀λ°μ μμ±νμ΅λλ€.
컀λ°: 04d36da
λ³κ²½ νμΌ:
- src/configs/pages/dashboard/dashboardConfig.ts
- src/hooks/pages/dashboard/useDashboardData.ts
μ€ν κ³Όμ
Step 1: 리뷰 μμ²
π¬ μ¬μ©μ: "04d36da 컀λ°μ λΆμν΄μ codexλ‘ μ½λ리뷰 ν΄μ€"
Step 2: Claudeμ μ²λ¦¬
# 1. μ»€λ° diff μΆμΆ
git show 04d36da > /tmp/codex_review_commit.diff
# 2. Codex μ€ν (λ°±κ·ΈλΌμ΄λ)
codex exec "λ€μ 컀λ°μ Project D νλ‘μ νΈ κ°μ΄λλΌμΈ(CLAUDE.md)μ λ°λΌ μ½λ 리뷰ν΄μ€.
νΉν λ€μ μ¬νλ€μ νμΈ:
1. νμ
μμ μ± (TypeScript)
2. λ€μ΄λ° 컨벀μ
(camelCase, PascalCase)
3. μ½λ ꡬ쑰 λ° μΌκ΄μ±
4. μ μ¬μ λ²κ·Έλ κ°μ μ
5. Project D νλ‘μ νΈ κ·μΉ μ€μ μ¬λΆ
$(cat /tmp/codex_review_commit.diff)"
Step 3: λ³λ ¬ μμ
Codexκ° λΆμνλ λμ Claudeλ:
β
λ€λ₯Έ μ§λ¬Έμ λ΅λ³
β
νμΌ μμ μμ
β
λ¬Έμ μ
λ°μ΄νΈ
β
ν ν° κ±°μ μ μ!
μ€μ ν ν° μ¬μ©λ:
- λͺ λ Ή μ€ν: ~200 ν ν°
- λκΈ° μ€: 0 ν ν°
- κ²°κ³Ό μ½κΈ°: ~500 ν ν°
- μ΄: ~700 ν ν° (μ§μ λΆμ μ 10,000+ ν ν°κ³Ό λΉκ΅)
Step 4: Codex κ²°κ³Ό
π μ½λ 리뷰 κ²°κ³Ό
β
κΈμ μ μΈ μ :
- κΈ°μ‘΄ ν¨ν΄(useMemberInfo.ts) μΌκ΄μ± μ μ§ β¨
- pageProps ꡬ쑰νλ‘ props μ λ¬ λͺ
ν π
- colorScheme νμ
μ μ©μΌλ‘ νμ
μμ μ± ν보 π―
β οΈ λ°κ²¬λ λ¬Έμ :
- μ»€λ° λ©μμ§ μ€ν: 'λ°°μ°' → 'λ°°μ§'
π‘ κ°μ μ μ:
1. dashboardConfig.ts: colorSchemeμ as const μΆκ° (νμ
κ°ν)
2. dashboardTypes.ts: props.colorScheme νμ
λͺ
μ
3. useDashboardData.ts: cellProps μΈν°νμ΄μ€ μ μ
4. TypeScript μ»΄νμΌ μ²΄ν¬ νμ
5. UI λμ ν
μ€νΈ νμ
μ’
ν© μ μ: 9.25/10
κ°μ μ¬ν μ μ©
Todo 리μ€νΈ μμ±
π¬ μ¬μ©μ: "κ°μ μ¬νμ todoWrite"
π Todo List:
β
dashboardConfig.ts colorScheme νμ
κ°ν (as const μΆκ°)
β
ColumnConfig μΈν°νμ΄μ€μ props.colorScheme νμ
μ μ μΆκ°
β
useDashboardData.ts cellProps νμ
μΈν°νμ΄μ€ μ μ
β
TypeScript μ»΄νμΌ μ²΄ν¬ (npx tsc --noEmit)
β³ μ»€λ° λ©μμ§ μ€ν μμ
β³ UI λμ ν
μ€νΈ
μμ°¨μ ꡬν
κ°μ 1: dashboardConfig.ts
// Before
props: {
colorScheme: 'default' // string νμ
}
// After
props: {
colorScheme: 'default' as const // 'default' 리ν°λ΄ νμ
β
}
ν¨κ³Ό: νμ μΆλ‘ κ°ν, μλͺ»λ κ° ν λΉ λ°©μ§
κ°μ 2: dashboardTypes.ts
// Before
props?: Record<string, any>; // λ무 λμ¨ν¨ β οΈ
// After
props?: {
colorScheme?: 'default' | 'gray'; // λͺ
μμ νμ
β
[key: string]: any;
};
ν¨κ³Ό: IDE μλμμ±, νμ μ²΄ν¬ κ°ν
κ°μ 3: useDashboardData.ts
// Before
const cellProps = useMemo(() => ({ // νμ
μΆλ‘ μ μμ‘΄ β οΈ
statusBadge: {
onToggle: canWrite ? handleStatusBadgeToggle : undefined
}
}), [handleStatusBadgeToggle, canWrite]);
// After
// 1. μΈν°νμ΄μ€ μ μ μΆκ°
interface DashboardCellProps {
statusBadge: {
onToggle?: (row: DashboardData, newValue: boolean) => Promise<void>;
};
}
// 2. λͺ
μμ νμ
μ μ©
const cellProps: DashboardCellProps = useMemo(() => ({
statusBadge: {
onToggle: canWrite ? handleStatusBadgeToggle : undefined
}
}), [handleStatusBadgeToggle, canWrite]);
ν¨κ³Ό:
- νμ λͺ νμ± μ¦κ°
- 리ν©ν λ§ μμ μ± ν₯μ
- λ€λ₯Έ κ°λ°μκ° μ΄ν΄νκΈ° μ¬μ
μ₯μ
1. μν λΆλ΄
Codex = λΆμ μ λ¬Έκ°
- μ½λ ν¨ν΄ νμ
- κ°μ μ μ μ
- diff μμ±
β οΈ νμΌ μ§μ μμ μ ν¨!
Claude = μ€ν κ΄λ¦¬μ
- λͺ
λ Ή μ€ν
- κ²°κ³Ό ν΄μ
- μ¬μ©μμ μν΅
β οΈ λΆμμ Codexμκ² μμ!
git apply = μ€μ μμ
μ
- diff νμΌ μ μ©
- μμ ν ν¨μΉ
2. μμ μ₯μΉ 3λ¨κ³
1λ¨κ³: Codexλ μ μλ§
→ diff νμΌ μμ±
→ μ¬μ©μ κ²ν κ°λ₯
2λ¨κ³: λͺ
μμ μΉμΈ
→ "μ μ©ν΄μ€" λͺ
λ Ή νμ
→ μλ μ μ© μ λ¨
3λ¨κ³: λ‘€λ°± κ°λ₯
→ git restore μ¬μ©
→ μΈμ λ λλ리기
3. ν ν° ν¨μ¨ κ·Ήλν
Traditional:
ββββββββββββββββ
β Claude λΆμ β → 10,000 ν ν°
β (μμ°¨ μ²λ¦¬) β
ββββββββββββββββ
With Skill:
ββββββββββββββββ ββββββββββββββββ
β Codex λΆμ β + β Claude μμ
β
β (λ°±κ·ΈλΌμ΄λ) β β (λ³λ ¬ μ²λ¦¬) β
ββββββββββββββββ ββββββββββββββββ
μΈλΆ ν ν° ~700 ν ν°
μ μ½λ₯ : 94%!
4. μ€μ μν¬νλ‘μ°
μΌμμ μΈ μ½λ 리뷰
# 1. κ°λ° μλ£
$ git add .
$ git commit -m "feat: μ κΈ°λ₯ μΆκ°"
# 2. Claude Codeμμ
π¬ "μ΅κ·Ό μ»€λ° μ½λ±μ€λ‘ 리뷰ν΄μ€"
# 3. Codex λΆμ μ€ λ€λ₯Έ μμ
π¬ "μ΄ νμΌ μ½μ΄μ€"
π¬ "μ λΆλΆ μμ ν΄μ€"
# 4. κ²°κ³Ό λ°κ³ κ°μ
π¬ "μ μ μ¬ν μ μ©ν΄μ€"
# 5. κ²μ¦
$ npx tsc --noEmit
# 6. μ¬μ»€λ°
$ git add .
$ git commit -m "refactor: νμ
μμ μ± κ°μ "
λκ·λͺ¨ 리ν©ν λ§
# 1. ν΄λ μ 체 λΆμ
π¬ "src/components/dashboard/ ν΄λ μ½λ±μ€λ‘ λΆμν΄μ€"
# 2. Codexκ° λΆμνλ λμ
π¬ "λ€λ₯Έ μ»΄ν¬λνΈ μμ λ¨Όμ ν κ²"
# 3. κ²°κ³Ό νμΈ
π¬ "λΆμ κ²°κ³Ό 보μ¬μ€"
# 4. μ°μ μμ μ 리
π¬ "todo 리μ€νΈ λ§λ€μ΄μ€"
# 5. λ¨κ³λ³ μ μ©
π¬ "todo 1λ²λΆν° μμ"
π¬ "λ€μ todo"
π¬ "λ€μ todo"
5. Skill κ°μ ν
Before (μ΄κΈ° λ²μ )
---
name: codex
description: "μ½λ±μ€ μ€ν"
allowed-tools: Bash
---
After (κ°μ λ²μ )
---
name: codex
description: |
μ¬μ©μκ° λ€μμ μμ²ν λ μ¬μ©:
- "μ½λ±μ€λ‘ λΆμ", "codex μ€ν"
- "μ½λ 리뷰", "λ²κ·Έ μ°ΎκΈ°"
μ£Όμ λͺ
λ Ήμ΄: codex exec, codex apply, codex resume
allowed-tools: Bash, Read, Write, AskUserQuestion
---
## Running a Task
1. λͺ¨λΈ μ ν: gpt-5 / gpt-5-codex
2. Effort μ ν: low / medium / high
3. μ€ν λ° κ²°κ³Ό 보κ³
## λͺ¨λΈ μ ν κ°μ΄λ
| μμ
| λͺ¨λΈ | Effort |
|-----|-----|--------|
| μ½λ 리뷰 | gpt-5-codex | medium-high |
| λ²κ·Έ μμ | gpt-5-codex | high |
| 리ν©ν λ§ | gpt-5 | low-medium |
κ°μ ν¨κ³Ό:
- μμ°μ΄ νΈλ¦¬κ±° λ€μν
- μμ μ νλ³ κ°μ΄λ
- μ¬μ©μ μ νκΆ μ 곡
κ²°λ‘
1. λμ ν¨κ³Ό μμ½
| νλͺ© | Before | After | κ°μ μ¨ |
|---|---|---|---|
| μ½λ 리뷰 μκ° | ~30λΆ | ~5λΆ | 83% ↓ |
| ν ν° μ¬μ© | ~10,000 | ~700 | 94% ↓ |
| λ³λ ¬ μμ | λΆκ° | κ°λ₯ | ∞ |
| μμ μ± | μ§μ μμ | diff κ²ν | ↑↑ |
2. μ΄μ
- μν λΆλ΄: κ°μ μνλ κ²μ μ§μ€
- Codex → λΆμ
- Claude → μ€ν
- git → μ μ©
- μμ μ°μ : 3λ¨κ³ μμ μ₯μΉ
- μ μ → κ²ν → μ μ©
- ν¨μ¨μ±: ν ν° μ μ½
- μΈλΆ νλ‘μΈμ€ νμ©
- λ°±κ·ΈλΌμ΄λ μ€ν
- νμ₯μ±: Skillμ μ§ννλ€
- μλλ¦¬μ€ μΆκ°
- κ°μ΄λ 보κ°
- νλ‘μ νΈλ³ 컀μ€ν°λ§μ΄μ§
3. μ€μ¬μ© νκΈ°
- Claudeλ‘ Codexλ₯Ό μ€ννλ μ€ μμ
μ΄ κΈΈμ΄μ§κ±°λ νΉμ μνμμ κ³μ μ§ν ν μ§ νμΈ λ°κ±°λ λ©μΆκ³ μμ.
μ¬κΈ°μ λ³λ ¬μ μ΄μ μ μμ€. - ν둬ννΈ μ€μμΉ λΉμ©μ΄ λ€μ΄κ°λ λλ
FAQ
Q1: Codexκ° νμΌμ μ§μ μμ νλμ?
A: μλμ! Codexλ diff νμΌλ§ μμ±ν©λλ€.
Codex: μ μλ§ ν¨ (diff νμΌ)
↓
μ¬μ©μ: κ²ν κ°λ₯
↓
Claude: codex apply μ€ν
↓
git apply: μ€μ νμΌ μμ
Q2: μ€μλ‘ μλͺ» μ μ©νλ©΄?
A: git restoreλ‘ μ¦μ λλ릴 μ μμ΅λλ€.
$ git restore src/νμΌλͺ
.ts
# λλ
$ git restore . # λͺ¨λ λ³κ²½ λλ리기
Q3: ν ν°μ΄ μ λ§ 94% μ μ½λλμ?
A: μ! μ€μ μΈ‘μ κ²°κ³Ό:
μ§μ λΆμ: νμΌ μ½κΈ°(5000) + λΆμ(3000) + μ μ(2000) = 10,000
Codex Skill: λͺ
λ Ή(100) + κ²°κ³Ό(500) + κ²μ¦(100) = 700
μ μ½λ₯ : (10000-700)/10000 = 93% ≈ 94%
Q4: Codex μ€ν μ€ λ€λ₯Έ μμ μ΄ κ°λ₯νκ°μ?
A: κ°λ₯ν©λλ€! λ°±κ·ΈλΌμ΄λ μ€νμ΄ ν΅μ¬μ λλ€.
Codex (λ°±κ·ΈλΌμ΄λ) | Claude (ν¬κ·ΈλΌμ΄λ)
βββββββββββββββββββββββββββββββββββββ
λΆμ μ€... | β
νμΌ μ½κΈ°
λΆμ μ€... | β
μ½λ μμ
λΆμ μ€... | β
λ¬Έμ μμ±
μλ£! | β
κ²°κ³Ό νμΈ
Q5: λͺ¨λ 컀λ°μ Codexλ‘ λ¦¬λ·°ν΄μΌ νλμ?
A: μλμ, μ νμ μΌλ‘ μ¬μ©νμΈμ.
| μν© | κΆμ₯ λ°©λ² |
|---|---|
| κ°λ¨ν μμ | Claude μ§μ 리뷰 |
| 볡μ‘ν λ‘μ§ | Codex νμ© |
| λκ·λͺ¨ 리ν©ν λ§ | Codex + high effort |
| κΈ΄κΈ ν«ν½μ€ | Claude λΉ λ₯Έ μ²΄ν¬ |
μ°Έκ³ μλ£
- Claude Code λ¬Έμ: https://docs.claude.com/en/docs/claude-code
λκΈ