์๋ฆฌ์ฆ: 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 ํจํด |
- Claude Code Plugin์ Claude Code์ ๊ธฐ๋ฅ์ ํ์ฅํ๋ ์๊ธฐ์๊ฒฐ์ ๋๋ ํ ๋ฆฌ ๋จ์ ํจํค์ง
.claude-plugin/plugin.json๋งค๋ํ์คํธ ํ๋๋ก ์๋ณ๋๋ฉฐ, ๋๋จธ์ง ์ปดํฌ๋ํธ๋ ์ ๋ถ ์ ํ- Hook, MCP, Skill, Agent, LSP 5๊ฐ์ง ํ์ฅ ์ฑ๋์ ํ์ํ ๊ฒ๋ง ๊ณจ๋ผ ์กฐํฉํ๋ ๊ตฌ์กฐ
ํด๋น ๊ฐ๋ ์ด ํ์ํ ์ด์
- Claude Code๋ ๊ธฐ๋ณธ ๋๊ตฌ(Read, Write, Edit, Bash ๋ฑ)๋ง ์ ๊ณต
- ์ ๋ฌธ ์์ด์ ํธ ์ค์ผ์คํธ๋ ์ด์ , ์ํฌํ๋ก์ฐ ์๋ํ, IDE๊ธ ๋๊ตฌ ๊ฐ์ ํ์ฅ ๊ธฐ๋ฅ์ ์ฐ๊ฒฐํ๋ ค๋ฉด ํ๋ฌ๊ทธ์ธ ๊ตฌ์กฐ๋ฅผ ์ดํดํด์ผ ํจ
- oh-my-claudecode(OMC)๊ฐ ์ด ํ๋ฌ๊ทธ์ธ ์์คํ ์ ํ์ฉํ๋ฏ๋ก, OMC ๊ธฐ๋ฐ ํ๋ฌ๊ทธ์ธ ๊ฐ๋ฐ์ ์ฒซ ๋จ์ถ
AS-IS
sequenceDiagram autonumber participant U as User participant CC as Claude Code U->>CC: "API ๋ฆฌํฉํฐํด์ค" CC->>CC: ๊ธฐ๋ณธ ๋๊ตฌ๋ง ์ฌ์ฉ (Read, Edit, Bash) CC-->>U: ๋จ์ ์๋ต Note over CC: ํ์ฅ ๊ธฐ๋ฅ ์์, ์ปค์คํ ๋๊ตฌ ์์
TO-BE
sequenceDiagram autonumber participant U as User participant CC as Claude Code participant PJ as plugin.json participant H as Hook Scripts participant M as MCP Server participant S as Skills U->>CC: "ultrawork refactor the API" CC->>PJ: ํ๋ฌ๊ทธ์ธ ๋ก๋ PJ->>H: hooks.json ์ฐธ์กฐ PJ->>M: .mcp.json ์ฐธ์กฐ PJ->>S: skills/ ์ฐธ์กฐ H-->>CC: ํค์๋ ๊ฐ์ง, ๋ชจ๋ ์ง์ S-->>CC: ์ํฌํ๋ก์ฐ ์ง์นจ ์ฃผ์ M-->>CC: LSP, AST ๋ฑ ์ปค์คํ ๋๊ตฌ ์ ๊ณต CC-->>U: ๋ฉํฐ์์ด์ ํธ ์ค์ผ์คํธ๋ ์ด์ ์๋ต
plugin.json โ ์ ์ผํ ํ์ ํ์ผ
๊ณต์ ๋ฌธ์ ๊ธฐ์ค, ๋งค๋ํ์คํธ(plugin.json)์กฐ์ฐจ ์ ํ์ด๋ค. ์์ผ๋ฉด Claude Code๊ฐ ๋๋ ํ ๋ฆฌ ์ด๋ฆ์์ ํ๋ฌ๊ทธ์ธ ์ด๋ฆ์ ์ถ๋ก ํ๊ณ , ๊ธฐ๋ณธ ์์น์ ์ปดํฌ๋ํธ๋ฅผ ์๋ ๋ฐ๊ฒฌํ๋ค.
๋งค๋ํ์คํธ๋ฅผ ํฌํจํ ๊ฒฝ์ฐ name์ด ์ ์ผํ ํ์ ํ๋:
// .claude-plugin/plugin.json โ ์ต์ ํํ
{
"name": "my-plugin"
}| ํ๋ | ํ์ ์ฌ๋ถ | ์ญํ |
|---|---|---|
name | ํ์ | ํ๋ฌ๊ทธ์ธ ์๋ณ์, skill ๋ค์์คํ์ด์ค ์ ๋์ฌ |
version | ์ ํ | ์๋งจํฑ ๋ฒ์ ๋. ์บ์ ๊ฐฑ์ ํ๋จ ๊ธฐ์ค |
description | ์ ํ | ํ๋ฌ๊ทธ์ธ ๋งค๋์ ์ ํ์ |
skills | ์ ํ | skills ๋๋ ํ ๋ฆฌ ์ปค์คํ
๊ฒฝ๋ก (๊ธฐ๋ณธ: ./skills/) |
mcpServers | ์ ํ | MCP ์ค์ ๊ฒฝ๋ก (๊ธฐ๋ณธ: ./.mcp.json) |
hooks | ์ ํ | Hook ์ค์ ๊ฒฝ๋ก (๊ธฐ๋ณธ: ./hooks/hooks.json) |
agents | ์ ํ | Agent ํ์ผ ๊ฒฝ๋ก (๊ธฐ๋ณธ: ./agents/) |
lspServers | ์ ํ | LSP ์ค์ ๊ฒฝ๋ก (๊ธฐ๋ณธ: ./.lsp.json) |
Q) โSkill์ ํ์์ธ๊ฐ? 3์ฑ๋ ์ค ํ์์ธ ๊ฒ์ด ์๋?โ
- ๊ณต์ ๋ฌธ์ ๊ธฐ์ค ์ ๋ถ ์ ํ. plugin.json๋ง์ ์ ํ์ด๋ค
- ์ปดํฌ๋ํธ๊ฐ ํ๋๋ ์์ผ๋ฉด ์ ์ฉํ์ง ์์ ๋ฟ, ๋์ ์์ฒด๋ ๊ฐ๋ฅํ๋ค
- ์ต์ํ์ ํ๋ฌ๊ทธ์ธ:
plugin.json์name๋ง ๋ฃ๊ณ Hook ํ๋ ๋ฑ๋กํ๋ฉด ์ถฉ๋ถํ๋ค
5๊ฐ์ง ํ์ฅ ์ฑ๋๊ณผ ํต์ ๋ฐฉ์
| ์ฑ๋ | ๋ฑ๋ก ํ์ผ | ํต์ ๋ฐฉ์ | ๊ธฐ๋ณธ ์์น |
|---|---|---|---|
| Hook | hooks/hooks.json | ์ด๋ฒคํธ โ stdin JSON โ ์คํฌ๋ฆฝํธ โ stdout JSON | hooks/hooks.json |
| MCP | .mcp.json | JSON-RPC โ MCP ์๋ฒ ํ๋ก์ธ์ค โ ๋๊ตฌ ์๋ต | .mcp.json |
| Skill | skills/ | Skill tool ํธ์ถ โ SKILL.md ํ ์คํธ๋ฅผ context์ ์ฃผ์ | skills/ |
| Agent | agents/ | Task tool โ ์์ด์ ํธ ๋งํฌ๋ค์ด ๋ก๋ โ subagent ์คํ | agents/ |
| LSP | .lsp.json | Language Server Protocol โ ์ฝ๋ ์ธํ ๋ฆฌ์ ์ค | .lsp.json |
์ปค์คํ
๊ฒฝ๋ก๋ฅผ plugin.json์ ์ง์ ํ๋ฉด ๊ธฐ๋ณธ ์์น์ ์ถ๊ฐ๋๋ ๊ฒ์ด์ง, ๋์ฒดํ๋ ๊ฒ์ด ์๋๋ค.
$CLAUDE_PLUGIN_ROOT ํ๊ฒฝ๋ณ์
โ๋ด ํ๋ฌ๊ทธ์ธ์ด ์ด๋์ ์ค์น๋์ด ์๋์งโ๋ฅผ Claude Code๊ฐ ์๋ ค์ฃผ๋ ๋ณ์.
| ํญ๋ชฉ | ๋ด์ฉ |
|---|---|
| ๋๊ฐ ์ค์ ? | Claude Code๊ฐ ์๋์ผ๋ก |
| ์ธ์ ? | ํ๋ฌ๊ทธ์ธ ๋ก๋ ์์ |
| ์ค์ฝํ | ํ๋ฌ๊ทธ์ธ๋ณ (๊ธ๋ก๋ฒ ์๋) |
| ๊ฐ | ํ๋ฌ๊ทธ์ธ ๋ฃจํธ ๋๋ ํ ๋ฆฌ์ ์ ๋ ๊ฒฝ๋ก |
// hooks.json์์ ์ฌ์ฉ
"command": "${CLAUDE_PLUGIN_ROOT}/scripts/format-code.sh"
// .mcp.json์์ ์ฌ์ฉ
"args": ["${CLAUDE_PLUGIN_ROOT}/bridge/mcp-server.cjs"]OMC ์์ค์์๋ ์ด ๋ณ์๋ก โํ๋ฌ๊ทธ์ธ์ผ๋ก ์คํ ์ค์ธ๊ฐ?โ๋ฅผ ํ๋จํ๋ค:
// src/installer/index.ts
export function isRunningAsPlugin(): boolean {
return !!process.env.CLAUDE_PLUGIN_ROOT;
}MCP ์๋ฒ ์ด๋ฆ "t" โ 64๊ธ์ ์ ํ ๋ฌธ์
OMC์ .mcp.json์์ MCP ์๋ฒ ์ด๋ฆ์ด "t" ํ ๊ธ์์ธ ์ด์ :
๋ณ๊ฒฝ ์ : mcp__omc-tools__lsp_diagnostics (์ ๋์ฌ 15์)
๋ณ๊ฒฝ ํ: mcp__t__lsp_diagnostics (์ ๋์ฌ 6์)
- Claude Code์ MCP ๋๊ตฌ ์ด๋ฆ 64๊ธ์ ์ ํ์ด ์กด์ฌ
omc-tools๋ก ๋ฑ๋กํ๋ฉด ๋๊ตฌ ์ด๋ฆ์ด ์ด ์ ํ์ ์ด๊ณผ- PR #252 / Issue 241์์ ์์ : ์ ๋์ฌ๋ฅผ 15์ โ 6์๋ก ์ค์ฌ ํด๊ฒฐ
- ํ ํฐ ์ ์ฝ์ด ์๋ ํ๋ ๋ฆฌ๋ฐ ๋ฌธ์
์ค์น ํ๋ฆ๊ณผ ํ์ผ ๋ฐฐ์น
sequenceDiagram autonumber participant U as User participant NPM as npm participant GP as Global Path<br/>/usr/local/lib/node_modules/omc/ participant CC as Claude Code participant PC as Plugin Cache<br/>~/.claude/plugins/cache/ U->>NPM: npm install -g oh-my-claudecode NPM->>GP: ํจํค์ง ํ์ผ ์ ์ฒด ์ค์น<br/>(scripts/, bridge/, skills/, agents/ ๋ฑ) Note over GP: scripts/run.cjs, bridge/mcp-server.cjs<br/>์ด๋ฏธ ๋น๋๋์ด ํจํค์ง์ ํฌํจ U->>GP: omc setup GP->>CC: ~/.claude/settings.json ์ ๋ฐ์ดํธ Note over CC: ๋ค์ ์ธ์ ์์ ์ CC->>PC: ํ๋ฌ๊ทธ์ธ ํ์ผ์ ์บ์๋ก ๋ณต์ฌ CC->>CC: CLAUDE_PLUGIN_ROOT = ์บ์ ๊ฒฝ๋ก ์ค์ CC->>GP: ${CLAUDE_PLUGIN_ROOT}/scripts/run.cjs ์คํ
Q) โ
scripts/run.cjs๋ ์ธ์ ์ค์น๋๋ ๊ฑฐ์ผ?โ
npm install์์ ์ npm ๊ธ๋ก๋ฒ ๊ฒฝ๋ก์ ์ค์น๋จ (๋น๋๋ ๋ฒ๋ค์ด ํจํค์ง์ ์ด๋ฏธ ํฌํจ)- ๋ณ๋ ๋ณต์ฌ๊ฐ ์๋๋ผ,
$CLAUDE_PLUGIN_ROOT๊ฐ ๊ทธ ๊ฒฝ๋ก๋ฅผ ๊ฐ๋ฆฌํค๋ ๊ตฌ์กฐ - ๋ง์ผํ๋ ์ด์ค ์ค์น ์์๋
~/.claude/plugins/cache/๋ก ๋ณต์ฌ๋จ
๋๋ง์ ํ๋ฌ๊ทธ์ธ ์ต์ ๊ตฌ์กฐ
my-plugin/
โโโ .claude-plugin/
โ โโโ plugin.json โ name๋ง ์์ผ๋ฉด ํ๋ฌ๊ทธ์ธ ์ธ์
โโโ hooks/
โ โโโ hooks.json โ ์ํ๋ ์ด๋ฒคํธ๋ง ๋ฑ๋ก
โโโ scripts/
โโโ my-hook.mjs โ stdin JSON ์ฝ๊ณ stdout JSON ์ถ๋ ฅ
Q) โ
.mjs๋ ๋ฌด์จ ํ์ฅ์์ผ?โ
- ES Module JavaScript ํ์ฅ์ (
import/export๋ฌธ๋ฒ ์ฌ์ฉ) .cjs๋ CommonJS (require/module.exports).mjs๋ก ๋ช ์ํ๋ฉดpackage.json์ค์ ๊ณผ ๋ฌด๊ดํ๊ฒ ํญ์ ES Module๋ก ๋์ ๋ณด์ฅ
OMC์ plugin.json ์ค์ ๋ด์ฉ
{
"name": "oh-my-claudecode",
"version": "4.8.0",
"description": "Multi-agent orchestration system for Claude Code",
"author": { "name": "oh-my-claudecode contributors" },
"repository": "https://github.com/Yeachan-Heo/oh-my-claudecode",
"license": "MIT",
"keywords": ["claude-code", "plugin", "multi-agent", "orchestration"],
"skills": "./skills/",
"mcpServers": "./.mcp.json"
}Hook์ plugin.json์ ๋ช
์ํ์ง ์์์ง๋ง ๊ธฐ๋ณธ ์์น(hooks/hooks.json)์์ ์๋ ๋ฐ๊ฒฌ๋๋ค.