์๋ฆฌ์ฆ: oh-my-claudecode ๋ด๋ถ ๊ตฌ์กฐ๋ถํฐ ํ๋ฌ๊ทธ์ธ ๊ฐ๋ฐ๊น์ง
์ด ์๋ฆฌ์ฆ๋ Claude Code ํ๋ฌ๊ทธ์ธ ์์คํ ์ ๋ด๋ถ ๋์์ ๋จ๊ณ๋ณ๋ก ํด๋ถํ๊ณ , ์ต์ข ์ ์ผ๋ก ๋๋ง์ ํ๋ฌ๊ทธ์ธ์ ์ง์ ๊ฐ๋ฐํ๋ ๊ฒ๊น์ง ๋๋ฌํ๋ ๊ณผ์ ์ด๋ค.
| ํธ | ๋ด์ฉ | ํต์ฌ |
|---|---|---|
| 1ํธ | Plugin Anatomy | plugin.json ํ๋๋ก ์์ํ๋ ํ๋ฌ๊ทธ์ธ ๋ผ๋ |
| 2ํธ | Hook System | ์ด๋ฒคํธ โ stdin JSON โ ์คํฌ๋ฆฝํธ โ stdout JSON |
| 3ํธ | Skill System | SKILL.md๋ก ์ํฌํ๋ก์ฐ๋ฅผ ์ ์ํ๋ ๋ฐฉ๋ฒ |
| 4ํธ (๋ณธ๋ฌธ) | Agent System | Task tool๋ก ์์๋๋ ์ค์ ์์ ์ํ์ |
| 5ํธ | MCP Tools Bridge | LSP, AST ๋ฑ ์ปค์คํ ๋๊ตฌ ์๋ฒ |
| 6ํธ | State & Lifecycle | .omc/ ์ํ ๊ด๋ฆฌ์ ๋ชจ๋ ์ง์ |
| 7ํธ | Parallel Orchestration | Ultrawork, Team, Autopilot, Ralph ํจํด |
- OMC์ Agent๋ ํน์ ์ญํ ์ ์ ๋ฌธํ๋ ์๋ธ์์ด์ ํธ ์ ์ ๋จ์
- Claude Code์
Tasktool๋ก ์์ฑ๋๋ฉฐ, ๊ฐ ์์ด์ ํธ๋ ์์ ๋ง์ ํ๋กฌํํธ(agents/*.md), ๋ชจ๋ธ, ๋๊ตฌ ์ ํ์ ๊ฐ์ง๋ ๊ตฌ์กฐ - ๊ณต์ Agent ์์คํ (YAML frontmatter + ๋งํฌ๋ค์ด ๋ณธ๋ฌธ) ์์ OMC๊ฐ 19๊ฐ ์ ๋ฌธ ์์ด์ ํธ์ 3-Tier ๋ชจ๋ธ ๋ผ์ฐํ ์ ์น์ ํ์ฅ ํจํด
ํด๋น ๊ฐ๋ ์ด ํ์ํ ์ด์
- 3ํธ(Skill System)์์ Skill์ด โ๋ณ๋ ฌ๋ก ์์ด์ ํธ๋ฅผ ํ์ฉํ๋ผโ๊ณ Claude์๊ฒ ์ง์ํ๋ ๊ฒ๊น์ง ํ์ต
- ํ์ง๋ง **โ์ด๋ค ์์ด์ ํธ๊ฐ ์๊ณ , ๊ฐ๊ฐ ๋ญ ํ ์ ์๊ณ , ์ด๋ค ๋ชจ๋ธ์ ์ฐ๋์งโ**๊ฐ ๋น ์ ธ ์์
- Agent System์ด ์ด ๋น ์นธ์ ์ฑ์ โ Skill์ด ์ง์นจ์๋ผ๋ฉด Agent๋ ์ ๋ฌธํ๋ ์คํ์
AS-IS
sequenceDiagram autonumber participant SK as Skill (ultrawork) participant CC as Claude Code SK-->>CC: "๋ ๋ฆฝ ์์ ์ ๋ณ๋ ฌ๋ก ์์ด์ ํธ๋ฅผ ํ์ฉํ๋ผ" CC->>CC: "์์ด์ ํธ๊ฐ ๋ญ๋ฐ? ์ด๋ค ๊ฑธ ๊ณจ๋ผ์ผ ํ์ง?" Note over CC: ์์ด์ ํธ ์ ์๊ฐ ์์ผ๋ฏ๋ก<br/>๊ธฐ๋ณธ Claude ํ๋๋ก ๋ชจ๋ ์์ ์ฒ๋ฆฌ
TO-BE
sequenceDiagram autonumber participant SK as Skill (ultrawork) participant CC as Claude (Orchestrator) participant TT as Task Tool participant AG as executor Agent SK-->>CC: "๋ ๋ฆฝ ์์ ์ ๋ณ๋ ฌ๋ก ์์ด์ ํธ๋ฅผ ํ์ฉํ๋ผ" CC->>CC: ์์ ๋ถ์ โ executor ์์ด์ ํธ ์ ํ CC->>TT: Task(subagent_type="oh-my-claudecode:executor", model="sonnet") TT->>AG: agents/executor.md ํ๋กฌํํธ + ๋๊ตฌ ์ ํ ์ฃผ์ AG->>AG: ๋ ๋ฆฝ์ ์ผ๋ก ์์ ์ํ AG-->>CC: ๊ฒฐ๊ณผ ๋ฐํ Note over CC: ์ฌ๋ฌ ์์ด์ ํธ๋ฅผ ๋ณ๋ ฌ๋ก ์คํํ์ฌ<br/>์ฒ๋ฆฌ ์๊ฐ ๋จ์ถ
๊ณต์ Agent ์์คํ vs OMC ํ์ฅ
OMC์ Agent๋ ๊ณต์ Agent ์์คํ ์์ ๊ตฌ์ถ๋๋ค. ๊ณต์ ๊ธฐ๋ฅ๊ณผ OMC ๊ณ ์ ๊ธฐ๋ฅ์ ๊ตฌ๋ถํ๋ ๊ฒ์ด ์ค์ํ๋ค.
| ๊ตฌ๋ถ | ๊ณต์ Claude Code | OMC ํ์ฅ |
|---|---|---|
| ํ์ผ ๊ตฌ์กฐ | YAML frontmatter + ๋งํฌ๋ค์ด ๋ณธ๋ฌธ (agents/*.md) | ๋์ผ ๊ตฌ์กฐ์ ์ญํ ๋ณ 19๊ฐ ์์ด์ ํธ ์ฌ์ ์ ์ |
| ํธ์ถ ๋ฐฉ์ | Task(subagent_type="plugin:agent-name") | ๋์ผ (Skill์ด ์๋์ผ๋ก ์ ์ ํ ์์ด์ ํธ ์ ํ ์ง์) |
| ๋ชจ๋ธ ์ง์ | frontmatter model ํ๋ | 3-Tier ๋ผ์ฐํ (opus/sonnet/haiku) |
| ๋๊ตฌ ์ ํ | disallowedTools | ์์ด์ ํธ๋ณ ์ญํ ๊ธฐ๋ฐ ์ ํ (explore๋ Read-only ๋ฑ) |
| ๋ฉํ๋ฐ์ดํฐ | ์์ | src/agents/definitions.ts์ TypeScript ์ ์ |
Agent ์ ์ ๊ตฌ์กฐ โ 2๊ฐ์ง ๋ ์ด์ด
๊ฐ ์์ด์ ํธ๋ ๋งํฌ๋ค์ด ํ๋กฌํํธ์ TypeScript ๋ฉํ๋ฐ์ดํฐ ๋ ๋ ์ด์ด๋ก ์ ์๋๋ค.
๋ ์ด์ด 1: agents/*.md โ ํ๋กฌํํธ ํ์ผ
---
name: executor
model: claude-sonnet-4-6
description: "Focused task executor for implementation work (Sonnet)"
---
## Role
Implement code changes precisely.
## Success Criteria
- Minimal viable diffs
- Zero LSP errors
- Passing tests
- Code pattern matchingYAML frontmatter์ name, model, description์ด ์๊ณ , ๋ณธ๋ฌธ์ด ์์ด์ ํธ์ ํ๋ ์ง์นจ์ด ๋๋ค. ๊ณต์ Skill์ frontmatter ๊ตฌ์กฐ์ ๋์ผํ ํจํด.
๋ ์ด์ด 2: src/agents/definitions.ts โ ๋ฉํ๋ฐ์ดํฐ
const executorAgent = {
name: 'executor',
model: 'claude-sonnet-4-6',
description: 'Focused task executor for implementation work',
prompt: loadAgentPrompt('executor'), // agents/executor.md ๋ก๋
disallowedTools: [], // ์ฌ์ฉ ๋ถ๊ฐ ๋๊ตฌ
};๋งํฌ๋ค์ด๋ง์ผ๋ก๋ ํํํ๊ธฐ ์ด๋ ค์ด disallowedTools ๊ฐ์ ๋ฐํ์ ์ ์ฝ์ TypeScript๋ก ๊ด๋ฆฌํ๋ค.
19๊ฐ ์์ด์ ํธ์ 3-Tier ๋ชจ๋ธ ๋ผ์ฐํ
OMC๋ ์์ ๋ณต์ก๋์ ๋ฐ๋ผ 3๊ฐ ๋ชจ๋ธ ํฐ์ด๋ก ์์ด์ ํธ๋ฅผ ๋ถ๋ฅํ๋ค:
graph LR subgraph HIGH["HIGH (opus) โ ๊น์ ๋ถ์"] A1["architect"] A2["analyst"] A3["planner"] A4["critic"] A5["code-reviewer"] A6["code-simplifier"] end subgraph MEDIUM["MEDIUM (sonnet) โ ํ์ค ์์ "] B1["executor"] B2["debugger"] B3["verifier"] B4["tracer"] B5["security-reviewer"] B6["test-engineer"] B7["designer"] B8["qa-tester"] B9["scientist"] B10["document-specialist"] B11["git-master"] end subgraph LOW["LOW (haiku) โ ๋น ๋ฅธ ์กฐํ"] C1["explore"] C2["writer"] end
์ ์ฒด ์์ด์ ํธ ๋ชฉ๋ก
| ์์ด์ ํธ | ๋ชจ๋ธ | ์ญํ | ํต์ฌ ํน์ง |
|---|---|---|---|
| explore | haiku | ํ์ผ/์ฝ๋ ํ์ | Read-only. Write, Edit ์ฌ์ฉ ๊ธ์ง |
| executor | sonnet | ์ฝ๋ ๊ตฌํ | ์๋ธ์์ด์ ํธ ์์ฑ ๊ธ์ง |
| architect | opus | ์ํคํ ์ฒ ์ค๊ณ | ์ ๋ต์ ํ๋จ, ๊ฒ์ฆ |
| planner | opus | ์์ ๋ถํด/๊ณํ | ๋จ๊ณ๋ณ ๊ณํ ์๋ฆฝ |
| analyst | opus | ๊น์ ๋ถ์ | ๋ค๊ฐ๋ ๋ถ์ |
| critic | opus | ๋นํ์ ๊ฒํ | ์ฝ๋ ๋ฆฌ๋ทฐ, ์ฝ์ ๋ฐ๊ฒฌ |
| debugger | sonnet | ๋ฒ๊ทธ ์ถ์ | ์๋ฌ ์์ธ ๋ถ์ |
| verifier | sonnet | ๊ฒฐ๊ณผ ๊ฒ์ฆ | ํ ์คํธ ์คํ, ์ฆ๊ฑฐ ์์ง |
| test-engineer | sonnet | ํ ์คํธ ์์ฑ | TDD, ํ ์คํธ ์ ๋ต |
| designer | sonnet | UI/ํ๋ก ํธ์๋ | ํ๋ก ํธ์๋ ๊ตฌํ |
| document-specialist | sonnet | ๋ฌธ์ ์กฐ์ฌ | API ๋ฌธ์, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ ํผ๋ฐ์ค |
| writer | haiku | ๋ฌธ์ ์์ฑ | ๋งํฌ๋ค์ด, README |
| git-master | sonnet | Git ์์ | ์ปค๋ฐ, PR, ๋ธ๋์น ๊ด๋ฆฌ |
| security-reviewer | sonnet | ๋ณด์ ๊ฒํ | OWASP, ์ทจ์ฝ์ ๋ถ์ |
| code-reviewer | opus | ์ฝ๋ ๋ฆฌ๋ทฐ | ์ข ํฉ์ ๋ฆฌ๋ทฐ |
| code-simplifier | opus | ์ฝ๋ ๋จ์ํ | ๋ณต์ก๋ ๊ฐ์, ๋ฆฌํฉํฐ |
| qa-tester | sonnet | QA ํ ์คํธ | ํตํฉ ํ ์คํธ, E2E |
| scientist | sonnet | ์คํ/๊ฒ์ฆ | ๊ฐ์ค ๊ฒ์ฆ, A/B ๋น๊ต |
| tracer | sonnet | ์ถ์ /๋๋ฒ๊ทธ | ์คํ ํ๋ฆ ์ถ์ |
๋ชจ๋ธ ์ ํ ๊ธฐ์ค
| ํฐ์ด | ๋ชจ๋ธ | ์ฌ์ฉ ๊ธฐ์ค | ๋น์ฉ/์๋ |
|---|---|---|---|
| HIGH | opus | ์ค๊ณ, ๋ถ์, ๋นํ์ ํ๋จ ๋ฑ ๊น์ ์ฌ๊ณ ๊ฐ ํ์ํ ์์ | ๋น์ฉ ๋์, ๋๋ฆผ |
| MEDIUM | sonnet | ๊ตฌํ, ๋๋ฒ๊ทธ, ํ ์คํธ ๋ฑ ํ์ค ์คํ ์์ | ์ค๊ฐ |
| LOW | haiku | ํ์, ๋ฌธ์ ์์ฑ ๋ฑ ๋น ๋ฅธ ์กฐํ/์ถ๋ ฅ ์์ | ๋น์ฉ ๋ฎ์, ๋น ๋ฆ |
Delegation Protocol โ ์์ ํ๋กํ ์ฝ
Orchestrator(Claude)๊ฐ ์์ด์ ํธ์๊ฒ ์์ ์ ์์ํ๋ ํ๋ฆ:
sequenceDiagram autonumber participant O as Orchestrator (Claude) participant T as Task Tool participant A as Agent O->>O: 1. ์์ ๋ถ์: ์ด๋ค ์์ด์ ํธ๊ฐ ์ ํฉํ๊ฐ? Note over O: explore=ํ์, executor=๊ตฌํ,<br/>architect=์ค๊ณ, planner=๊ณํ O->>O: 2. ๋ชจ๋ธ ์ ํ: ์์ ๋ณต์ก๋์ ๋ฐ๋ผ Note over O: haiku=๋น ๋ฅธ์กฐํ, sonnet=ํ์ค, opus=๊น์๋ถ์ O->>T: 3. Task(subagent_type, model, prompt, run_in_background?) T->>A: agents/*.md ํ๋กฌํํธ ์ฃผ์ + ๋๊ตฌ ์ ํ ์ ์ฉ A->>A: 4. ๋ ๋ฆฝ์ ์ผ๋ก ์์ ์ํ A-->>O: 5. ๊ฒฐ๊ณผ ๋ฐํ
๋๊ตฌ ์ ํ (disallowedTools)
์์ด์ ํธ๋ง๋ค ์ฌ์ฉ ๊ฐ๋ฅํ ๋๊ตฌ๊ฐ ๋ค๋ฅด๋ค. disallowedTools๋ก ์ญํ ๋ฒ์๋ฅผ ๊ฐ์ ํ๋ค:
| ์์ด์ ํธ | ์ ํ | ์ด์ |
|---|---|---|
| explore | Write, Edit ์ฌ์ฉ ๊ธ์ง (YAML disallowedTools) | ์ฝ๊ธฐ ์ ์ฉ โ ํ์๋ง ์ํ |
| architect, analyst, critic, code-reviewer, scientist, document-specialist | Write, Edit ์ฌ์ฉ ๊ธ์ง (YAML disallowedTools) | ๋ถ์/๋ฆฌ๋ทฐ ์ ์ฉ โ ์ฝ๋ ๋ณ๊ฒฝ ์ฐจ๋จ |
| executor | ํ๋กฌํํธ ์ง์นจ: โWork ALONEโ | ์ง์ ์คํ๋ง โ ์ฌ์์ ์์ (์ํํธ ์ ํ) |
YAML disallowedTools๋ ํ๋ ์ ํ(๋๊ตฌ ์์ฒด๊ฐ ์ฐจ๋จ), ํ๋กฌํํธ ์ง์นจ์ ์ํํธ ์ ํ(LLM์ด ๋ฐ๋ฅด๋๋ก ์ ๋)์ด๋ค. ๋ ๋ฐฉ์์ ์กฐํฉํ์ฌ ์์ด์ ํธ ์ญํ ์ ๊ฐ์ ํ๋ค.
๋๋ง์ ํ๋ฌ๊ทธ์ธ์ ๋ง๋ ๋ค๋ฉด
์ปค์คํ ์์ด์ ํธ ์ ์:
my-plugin/
โโโ agents/
โโโ my-agent.md
---
name: my-agent
model: claude-sonnet-4-6
description: My custom agent for code review automation
---
## Role
๋๋ ์ฝ๋ ๋ฆฌ๋ทฐ์ ์ ๋ฌธํ๋ ์์ด์ ํธ๋ค.
## Rules
- ํญ์ ๋ณ๊ฒฝ๋ ํ์ผ์ diff๋ฅผ ๋จผ์ ๋ถ์ํ๋ผ
- ๋ณด์ ์ด์๋ ๋ฐ๋์ ๊ฒฝ๊ณ ํ๋ผ
- ๋ณ๊ฒฝ ์ฌํญ์ ์ต์ํํ๋ผClaude๊ฐ Task(subagent_type="my-plugin:my-agent")๋ก ํธ์ถํ๋ค. (OMC์ ๊ฒฝ์ฐ ์ ๋์ฌ๊ฐ oh-my-claudecode:) plugin.json์ "agents": "./agents/" ์ค์ ์ด ์์ผ๋ฉด ์๋ ์ธ์.
Deep Dive ํ ํฝ
-
Agent Definition & Configโ agents/*.md ๊ตฌ์กฐ, YAML frontmatter, AgentConfig ํ์ -
Agent Tieringโ 3-Tier ๋ชจ๋ธ ๋ผ์ฐํ , ๋น์ฉ/ํ์ง ํธ๋ ์ด๋์คํ -
Delegation Protocolโ Task tool, subagent_type, run_in_background, ๋๊ตฌ ์ ํ
์ฐธ๊ณ ๋ฌธ์
- Claude Code Agents ๊ณต์ ๋ฌธ์
- OMC - Skill System โ Skill์ด Agent๋ฅผ ํธ์ถํ๋ ํ๋ฆ (3ํธ)
- OMC - Parallel Orchestration โ ์ฌ๋ฌ Agent๋ฅผ ๋ณ๋ ฌ ์คํํ๋ ํจํด (7ํธ)
๋ค์: 5ํธ MCP Tools Bridge โ ์์ด์ ํธ๊ฐ ์คํ ์ค์ ๊ธฐ๋ณธ ๋๊ตฌ(Read, Write, Bash)๋ก๋ ๋ถ์กฑํ ์์ ์ด ์๋ค. MCP ์๋ฒ๊ฐ ์ด๋ค ์ปค์คํ ๋๊ตฌ๋ฅผ ์ ๊ณตํ๊ณ , ์ด๋ป๊ฒ ๋ฑ๋ก๋๋์ง๋ฅผ ๋ค์ ํํธ์์ ๋ค๋ฃฌ๋ค.