์‹œ๋ฆฌ์ฆˆ: oh-my-claudecode ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ถ€ํ„ฐ ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ฐœ๋ฐœ๊นŒ์ง€

์ด ์‹œ๋ฆฌ์ฆˆ๋Š” Claude Code ํ”Œ๋Ÿฌ๊ทธ์ธ ์‹œ์Šคํ…œ์˜ ๋‚ด๋ถ€ ๋™์ž‘์„ ๋‹จ๊ณ„๋ณ„๋กœ ํ•ด๋ถ€ํ•˜๊ณ , ์ตœ์ข…์ ์œผ๋กœ ๋‚˜๋งŒ์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ง์ ‘ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ๊นŒ์ง€ ๋„๋‹ฌํ•˜๋Š” ๊ณผ์ •์ด๋‹ค.

ํŽธ๋‚ด์šฉํ•ต์‹ฌ
1ํŽธPlugin Anatomyplugin.json ํ•˜๋‚˜๋กœ ์‹œ์ž‘ํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ผˆ๋Œ€
2ํŽธHook System์ด๋ฒคํŠธ โ†’ stdin JSON โ†’ ์Šคํฌ๋ฆฝํŠธ โ†’ stdout JSON
3ํŽธSkill SystemSKILL.md๋กœ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•
4ํŽธ (๋ณธ๋ฌธ)Agent SystemTask tool๋กœ ์œ„์ž„๋˜๋Š” ์‹ค์ œ ์ž‘์—… ์ˆ˜ํ–‰์ž
5ํŽธMCP Tools BridgeLSP, AST ๋“ฑ ์ปค์Šคํ…€ ๋„๊ตฌ ์„œ๋ฒ„
6ํŽธState & Lifecycle.omc/ ์ƒํƒœ ๊ด€๋ฆฌ์™€ ๋ชจ๋“œ ์ง€์†
7ํŽธParallel OrchestrationUltrawork, Team, Autopilot, Ralph ํŒจํ„ด

  • OMC์˜ Agent๋Š” ํŠน์ • ์—ญํ• ์— ์ „๋ฌธํ™”๋œ ์„œ๋ธŒ์—์ด์ „ํŠธ ์ •์˜ ๋‹จ์œ„
  • Claude Code์˜ Task tool๋กœ ์ƒ์„ฑ๋˜๋ฉฐ, ๊ฐ ์—์ด์ „ํŠธ๋Š” ์ž์‹ ๋งŒ์˜ ํ”„๋กฌํ”„ํŠธ(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 CodeOMC ํ™•์žฅ
ํŒŒ์ผ ๊ตฌ์กฐ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 matching

YAML 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

์ „์ฒด ์—์ด์ „ํŠธ ๋ชฉ๋ก

์—์ด์ „ํŠธ๋ชจ๋ธ์—ญํ• ํ•ต์‹ฌ ํŠน์ง•
explorehaikuํŒŒ์ผ/์ฝ”๋“œ ํƒ์ƒ‰Read-only. Write, Edit ์‚ฌ์šฉ ๊ธˆ์ง€
executorsonnet์ฝ”๋“œ ๊ตฌํ˜„์„œ๋ธŒ์—์ด์ „ํŠธ ์ƒ์„ฑ ๊ธˆ์ง€
architectopus์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„์ „๋žต์  ํŒ๋‹จ, ๊ฒ€์ฆ
planneropus์ž‘์—… ๋ถ„ํ•ด/๊ณ„ํš๋‹จ๊ณ„๋ณ„ ๊ณ„ํš ์ˆ˜๋ฆฝ
analystopus๊นŠ์€ ๋ถ„์„๋‹ค๊ฐ๋„ ๋ถ„์„
criticopus๋น„ํŒ์  ๊ฒ€ํ† ์ฝ”๋“œ ๋ฆฌ๋ทฐ, ์•ฝ์  ๋ฐœ๊ฒฌ
debuggersonnet๋ฒ„๊ทธ ์ถ”์ ์—๋Ÿฌ ์›์ธ ๋ถ„์„
verifiersonnet๊ฒฐ๊ณผ ๊ฒ€์ฆํ…Œ์ŠคํŠธ ์‹คํ–‰, ์ฆ๊ฑฐ ์ˆ˜์ง‘
test-engineersonnetํ…Œ์ŠคํŠธ ์ž‘์„ฑTDD, ํ…Œ์ŠคํŠธ ์ „๋žต
designersonnetUI/ํ”„๋ก ํŠธ์—”๋“œํ”„๋ก ํŠธ์—”๋“œ ๊ตฌํ˜„
document-specialistsonnet๋ฌธ์„œ ์กฐ์‚ฌAPI ๋ฌธ์„œ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ ˆํผ๋Ÿฐ์Šค
writerhaiku๋ฌธ์„œ ์ž‘์„ฑ๋งˆํฌ๋‹ค์šด, README
git-mastersonnetGit ์ž‘์—…์ปค๋ฐ‹, PR, ๋ธŒ๋žœ์น˜ ๊ด€๋ฆฌ
security-reviewersonnet๋ณด์•ˆ ๊ฒ€ํ† OWASP, ์ทจ์•ฝ์  ๋ถ„์„
code-revieweropus์ฝ”๋“œ ๋ฆฌ๋ทฐ์ข…ํ•ฉ์  ๋ฆฌ๋ทฐ
code-simplifieropus์ฝ”๋“œ ๋‹จ์ˆœํ™”๋ณต์žก๋„ ๊ฐ์†Œ, ๋ฆฌํŒฉํ„ฐ
qa-testersonnetQA ํ…Œ์ŠคํŠธํ†ตํ•ฉ ํ…Œ์ŠคํŠธ, E2E
scientistsonnet์‹คํ—˜/๊ฒ€์ฆ๊ฐ€์„ค ๊ฒ€์ฆ, A/B ๋น„๊ต
tracersonnet์ถ”์ /๋””๋ฒ„๊ทธ์‹คํ–‰ ํ๋ฆ„ ์ถ”์ 

๋ชจ๋ธ ์„ ํƒ ๊ธฐ์ค€

ํ‹ฐ์–ด๋ชจ๋ธ์‚ฌ์šฉ ๊ธฐ์ค€๋น„์šฉ/์†๋„
HIGHopus์„ค๊ณ„, ๋ถ„์„, ๋น„ํŒ์  ํŒ๋‹จ ๋“ฑ ๊นŠ์€ ์‚ฌ๊ณ ๊ฐ€ ํ•„์š”ํ•œ ์ž‘์—…๋น„์šฉ ๋†’์Œ, ๋А๋ฆผ
MEDIUMsonnet๊ตฌํ˜„, ๋””๋ฒ„๊ทธ, ํ…Œ์ŠคํŠธ ๋“ฑ ํ‘œ์ค€ ์‹คํ–‰ ์ž‘์—…์ค‘๊ฐ„
LOWhaikuํƒ์ƒ‰, ๋ฌธ์„œ ์ž‘์„ฑ ๋“ฑ ๋น ๋ฅธ ์กฐํšŒ/์ถœ๋ ฅ ์ž‘์—…๋น„์šฉ ๋‚ฎ์Œ, ๋น ๋ฆ„

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๋กœ ์—ญํ•  ๋ฒ”์œ„๋ฅผ ๊ฐ•์ œํ•œ๋‹ค:

์—์ด์ „ํŠธ์ œํ•œ์ด์œ 
exploreWrite, Edit ์‚ฌ์šฉ ๊ธˆ์ง€ (YAML disallowedTools)์ฝ๊ธฐ ์ „์šฉ โ€” ํƒ์ƒ‰๋งŒ ์ˆ˜ํ–‰
architect, analyst, critic, code-reviewer, scientist, document-specialistWrite, 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, ๋„๊ตฌ ์ œํ•œ

์ฐธ๊ณ  ๋ฌธ์„œ


๋‹ค์Œ: 5ํŽธ MCP Tools Bridge โ€” ์—์ด์ „ํŠธ๊ฐ€ ์‹คํ–‰ ์ค‘์— ๊ธฐ๋ณธ ๋„๊ตฌ(Read, Write, Bash)๋กœ๋Š” ๋ถ€์กฑํ•œ ์ž‘์—…์ด ์žˆ๋‹ค. MCP ์„œ๋ฒ„๊ฐ€ ์–ด๋–ค ์ปค์Šคํ…€ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•˜๊ณ , ์–ด๋–ป๊ฒŒ ๋“ฑ๋ก๋˜๋Š”์ง€๋ฅผ ๋‹ค์Œ ํŒŒํŠธ์—์„œ ๋‹ค๋ฃฌ๋‹ค.