μ‹œλ¦¬μ¦ˆ: oh-my-codex μ•„ν‚€ν…μ²˜ ν•΄λΆ€

이 μ‹œλ¦¬μ¦ˆλŠ” OpenAI Codex CLI ν™•μž₯ λŸ°νƒ€μž„μΈ oh-my-codex(OMX)의 λ‚΄λΆ€ ꡬ쑰λ₯Ό λ‹¨κ³„λ³„λ‘œ ν•΄λΆ€ν•˜λŠ” 과정이닀.

νŽΈλ‚΄μš©ν•΅μ‹¬
0편Overview3-Plane μ•„ν‚€ν…μ²˜, OMCμ™€μ˜ 차이, 전체 흐름
1편Codex CLI FoundationCodex CLI 자체의 ꡬ쑰와 ν™•μž₯ 포인트
2편OMX IntegrationOMXκ°€ Codex에 μ–΄λ–»κ²Œ μ—°κ²°λ˜λ‚˜
3편Skill Systemμ›Œν¬ν”Œλ‘œμš°λ₯Ό μ–΄λ–»κ²Œ μ •μ˜ν•˜λ‚˜
4편Prompt & Agent Systemμ—μ΄μ „νŠΈλŠ” 뭐고 μ–΄λ–»κ²Œ μ„ νƒλ˜λ‚˜
5편 (λ³Έλ¬Έ)MCP Serversμ–΄λ–€ MCP 도ꡬλ₯Ό μ“Έ 수 μžˆλ‚˜
6편State & Lifecycleμƒνƒœλ₯Ό μ–΄λ–»κ²Œ μœ μ§€ν•˜λ‚˜
7편Team OrchestrationTeam λͺ¨λ“œλŠ” μ–΄λ–»κ²Œ λ™μž‘ν•˜λ‚˜
8편Native & SparkRust λ„€μ΄ν‹°λΈŒ λ„κ΅¬λŠ” λ­”κ°€

  • OMX MCP ServersλŠ” μ—μ΄μ „νŠΈμ—κ²Œ μƒνƒœ μ €μž₯Β·λ©”λͺ¨λ¦¬Β·μ½”λ“œ μΈν…”λ¦¬μ „μŠ€Β·μ‹€ν–‰ μΆ”μ Β·νŒ€ 쑰율 κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” 5개 λΆ„λ¦¬λœ MCP μ„œλ²„ μ„ΈνŠΈ
  • config.toml의 [mcp_servers] μ„Ήμ…˜μœΌλ‘œ λ“±λ‘λ˜λ©°, μ„Έμ…˜ μ‹œμž‘ μ‹œ stdio 기반으둜 μžλ™ μ‹œμž‘λ˜λŠ” Node.js ν”„λ‘œμ„ΈμŠ€
  • OMC의 1개 톡합 μ„œλ²„(β€œt”, 30+ 도ꡬ)와 달리, κ΄€μ‹¬μ‚¬λ³„λ‘œ 5개 μ„œλ²„λ₯Ό λΆ„λ¦¬ν•˜μ—¬ λ…λ¦½μ μœΌλ‘œ ν™œμ„±ν™”/λΉ„ν™œμ„±ν™”ν•  수 μžˆλŠ” ꡬ쑰

ν•΄λ‹Ή κ°œλ…μ΄ ν•„μš”ν•œ 이유

  • 4νŽΈμ—μ„œ μ—μ΄μ „νŠΈμ˜ μ •μ˜μ™€ λΌμš°νŒ…μ„ μ΄ν•΄ν–ˆμŒ
  • ν•˜μ§€λ§Œ μ—μ΄μ „νŠΈκ°€ μž‘μ—… 쀑에 μƒνƒœ μ €μž₯, λ©”λͺ¨λ¦¬ 관리, μ½”λ“œ 뢄석, μ‹€ν–‰ 좔적이 ν•„μš”ν•˜λ©°, Codex CLI κΈ°λ³Έ λ„κ΅¬λ‘œλŠ” 이런 μž‘μ—…μ΄ λΉ„νš¨μœ¨μ μ΄κ±°λ‚˜ λΆˆκ°€λŠ₯
  • OMXλŠ” 5개 MCP μ„œλ²„λ₯Ό μ œκ³΅ν•˜μ—¬ 이 간극을 메움 β€” 3-Plane μ•„ν‚€ν…μ²˜μ˜ State Plane에 ν•΄λ‹Ή

AS-IS (OMC β€” 1개 톡합 MCP μ„œλ²„)

sequenceDiagram
    autonumber
    participant CC as Claude Code
    participant T as MCP μ„œλ²„ "t" (톡합)
    participant FS as νŒŒμΌμ‹œμŠ€ν…œ

    CC->>T: mcp__t__state_write(...)
    CC->>T: mcp__t__lsp_diagnostics(...)
    CC->>T: mcp__t__notepad_write(...)
    T->>FS: λͺ¨λ“  도ꡬ가 1개 ν”„λ‘œμ„ΈμŠ€μ—μ„œ 처리
    Note over T: 30+ 도ꡬ, 단일 ν”„λ‘œμ„ΈμŠ€<br/>esbuild β†’ bridge/mcp-server.cjs

TO-BE (OMX β€” 5개 뢄리 MCP μ„œλ²„)

sequenceDiagram
    autonumber
    participant CX as Codex CLI (LLM)
    participant ST as omx_state
    participant MM as omx_memory
    participant CI as omx_code_intel
    participant TR as omx_trace
    participant TM as omx_team_run

    CX->>ST: state_write(mode: "ralph", ...)
    CX->>MM: project_memory_read(section: "techStack")
    CX->>CI: lsp_diagnostics(file: "src/main.ts")
    CX->>TR: trace_timeline(last: 10)
    CX->>TM: omx_run_team_start(...)
    Note over ST,TM: 관심사별 뢄리, κ°œλ³„ λΉ„ν™œμ„±ν™” κ°€λŠ₯<br/>tsc β†’ dist/mcp/*.js (stdio)

MCP μ„œλ²„ 등둝과 λΆ€νŠΈμŠ€νŠΈλž˜ν•‘

config.toml 등둝 (μ†ŒμŠ€: src/config/generator.ts)

omx setup μ‹œ buildMergedConfig()κ°€ 5개 μ„œλ²„λ₯Ό config.toml에 λ“±λ‘ν•œλ‹€.

[mcp_servers.omx_state]
command = "node"
args = ["/path/to/dist/mcp/state-server.js"]
enabled = true
startup_timeout_sec = 5
 
[mcp_servers.omx_code_intel]
command = "node"
args = ["/path/to/dist/mcp/code-intel-server.js"]
enabled = true
startup_timeout_sec = 10   # κ°€μž₯ κΈ΄ timeout
μ„œλ²„λ“±λ‘ μ΄λ¦„μ†ŒμŠ€startup timeout
Stateomx_statedist/mcp/state-server.js5초
Memoryomx_memorydist/mcp/memory-server.js5초
Code Intelomx_code_inteldist/mcp/code-intel-server.js10초
Traceomx_tracedist/mcp/trace-server.js5초
Teamomx_team_rundist/mcp/team-server.js5초

μžλ™ μ‹œμž‘κ³Ό λΉ„ν™œμ„±ν™” (μ†ŒμŠ€: src/mcp/bootstrap.ts)

각 μ„œλ²„λŠ” autoStartStdioMcpServer()둜 stdio 기반 λΆ€νŠΈμŠ€νŠΈλž˜ν•‘λœλ‹€. ν™˜κ²½λ³€μˆ˜λ‘œ κ°œλ³„ λ˜λŠ” 전체 λΉ„ν™œμ„±ν™” κ°€λŠ₯ν•˜λ‹€.

ν™˜κ²½λ³€μˆ˜λŒ€μƒ
OMX_MCP_SERVER_DISABLE_AUTO_START=1전체 5개 μ„œλ²„ λΉ„ν™œμ„±ν™”
OMX_STATE_SERVER_DISABLE_AUTO_START=1state μ„œλ²„λ§Œ
OMX_MEMORY_SERVER_DISABLE_AUTO_START=1memory μ„œλ²„λ§Œ
OMX_CODE_INTEL_SERVER_DISABLE_AUTO_START=1code-intel μ„œλ²„λ§Œ
OMX_TRACE_SERVER_DISABLE_AUTO_START=1trace μ„œλ²„λ§Œ
OMX_TEAM_SERVER_DISABLE_AUTO_START=1team μ„œλ²„λ§Œ

λΉŒλ“œ ν”„λ‘œμ„ΈμŠ€

src/mcp/*.ts  β†’  tsc (TypeScript 컴파일)  β†’  dist/mcp/*.js

OMCλŠ” esbuild β†’ bridge/mcp-server.cjs 단일 λ²ˆλ“€μ΄μ—ˆμ§€λ§Œ, OMXλŠ” tsc둜 각 μ„œλ²„λ₯Ό κ°œλ³„ JS 파일둜 μ»΄νŒŒμΌν•œλ‹€. μ„œλ²„λ³„ 독립 싀행이 κ°€λŠ₯ν•œ ꡬ쑰닀.

omx_state β€” μ›Œν¬ν”Œλ‘œμš° μƒνƒœ 관리 (5개 도ꡬ)

도ꡬ λͺ©λ‘

λ„κ΅¬μ—­ν• ν•„μˆ˜ νŒŒλΌλ―Έν„°
state_readλͺ¨λ“œλ³„ μƒνƒœ 읽기mode
state_writeλͺ¨λ“œλ³„ μƒνƒœ μ“°κΈ°/μ—…λ°μ΄νŠΈmode
state_clearλͺ¨λ“œλ³„ μƒνƒœ μ‚­μ œmode
state_list_activeν˜„μž¬ ν™œμ„± λͺ¨λ“œ λͺ©λ‘(μ—†μŒ)
state_get_statusλͺ¨λ“œλ³„ 상세 μƒνƒœ 쑰회(μ—†μŒ, modeλŠ” 선택)

지원 λͺ¨λ“œ (6개)

const SUPPORTED_MODES = [
  "autopilot", "team", "ralph", "ultrawork", "ultraqa", "ralplan"
] as const;

state_write 상세 β€” 핡심 도ꡬ

state_write({
  mode: "ralph",           // ν•„μˆ˜: 6개 λͺ¨λ“œ 쀑 ν•˜λ‚˜
  active: true,            // ν™œμ„± μƒνƒœ
  iteration: 1,            // ν˜„μž¬ 반볡 횟수
  max_iterations: 10,      // μ΅œλŒ€ 반볡
  current_phase: "executing",  // ν˜„μž¬ 단계
  task_description: "refactor API",
  started_at: "2026-03-19T...",
  state: { ... }           // μΆ”κ°€ μ»€μŠ€ν…€ ν•„λ“œ
})

λ™μž‘ 방식:

  • κΈ°μ‘΄ μƒνƒœμ™€ deep merge (κΈ°μ‘΄ ν•„λ“œ 보쑴)
  • Atomic write: μž„μ‹œ 파일 생성 β†’ rename (데이터 손싀 λ°©μ§€)
  • Write-lock queue: 동일 νŒŒμΌμ— λŒ€ν•œ λ™μ‹œ μ“°κΈ°λ₯Ό Promise 체인으둜 직렬화
  • Ralph λͺ¨λ“œλŠ” validateAndNormalizeRalphState()둜 phaseλ₯Ό μΆ”κ°€ 검증

μƒνƒœ 파일 μ €μž₯ ꡬ쑰

.omx/state/
β”œβ”€β”€ {mode}-state.json              # Root scope (κΈ€λ‘œλ²Œ)
β”œβ”€β”€ session.json                   # ν˜„μž¬ μ„Έμ…˜ 마컀
└── sessions/
    β”œβ”€β”€ {sessionId1}/
    β”‚   └── {mode}-state.json      # μ„Έμ…˜ μŠ€μ½”ν”„
    └── {sessionId2}/
        └── {mode}-state.json

μŠ€μ½”ν”„ μš°μ„ μˆœμœ„ (μ†ŒμŠ€: src/mcp/state-paths.ts)

읽기 μ‹œ (state_read):

  1. λͺ…μ‹œμ  session_id 제곡 β†’ ν•΄λ‹Ή μ„Έμ…˜ 경둜만
  2. ν˜„μž¬ μ„Έμ…˜ 쑴재 (session.json) β†’ μ„Έμ…˜ μš°μ„ , root 폴백
  3. μ„Έμ…˜ μ—†μŒ β†’ root만

μ“°κΈ° μ‹œ (state_write):

  • 항상 effective scope에 기둝 (λͺ…μ‹œ > ν˜„μž¬ μ„Έμ…˜ > root)

omx_memory β€” ν”„λ‘œμ νŠΈ λ©”λͺ¨λ¦¬μ™€ λ…ΈνŠΈνŒ¨λ“œ (8개 도ꡬ)

Project Memory (4개 도ꡬ) β€” .omx/project-memory.json

도ꡬ역할
project_memory_read전체 λ˜λŠ” μ„Ήμ…˜λ³„ 읽기 (techStack, build, conventions, structure, notes, directives)
project_memory_write전체 ꡐ체 λ˜λŠ” deep merge
project_memory_add_noteνƒ€μž„μŠ€νƒ¬ν”„ λ©”λͺ¨ μΆ”κ°€ (μΉ΄ν…Œκ³ λ¦¬: build/test/deploy/env/architecture)
project_memory_add_directiveμš°μ„ μˆœμœ„ μ§€μ‹œ μΆ”κ°€ (high/normal)

크둜슀 μ„Έμ…˜ λ™μž‘: ν”„λ‘œμ νŠΈλ‹Ή 1개 파일, μ„Έμ…˜ μŠ€μ½”ν•‘ μ—†μŒ β€” λͺ¨λ“  μ„Έμ…˜μ΄ 같은 λ©”λͺ¨λ¦¬λ₯Ό κ³΅μœ ν•œλ‹€.

interface ProjectMemory {
  techStack?: string;
  build?: string;
  conventions?: string;
  structure?: string;
  notes?: Array<{ category: string; content: string; timestamp: string }>;
  directives?: Array<{ directive: string; priority: string; timestamp: string }>;
}

Notepad (4개 도ꡬ) β€” .omx/notepad.md

λ§ˆν¬λ‹€μš΄ 기반 μ„Έμ…˜ λ…ΈνŠΈλ‘œ, 3개 μ„Ήμ…˜μœΌλ‘œ κ΅¬λΆ„λœλ‹€.

λ„κ΅¬λŒ€μƒ μ„Ήμ…˜λ™μž‘
notepad_read전체 λ˜λŠ” μ„Ήμ…˜λ³„μ½κΈ°
notepad_write_priority## PRIORITYꡐ체 (단일 μ»¨ν…μŠ€νŠΈ 블둝, μ΅œλŒ€ 500자)
notepad_write_working## WORKING MEMORYμΆ”κ°€ (νƒ€μž„μŠ€νƒ¬ν”„ μ—”νŠΈλ¦¬, μžλ™ 정리 λŒ€μƒ)
notepad_write_manual## MANUALμΆ”κ°€ (영ꡬ 보쑴, μžλ™ 정리 μ•ˆ 됨)

μΆ”κ°€ μœ ν‹Έλ¦¬ν‹°: notepad_prune (N일 이전 WORKING MEMORY 정리, κΈ°λ³Έ 7일), notepad_stats (톡계)

## PRIORITY
ν˜„μž¬ μ΅œμš°μ„  μ»¨ν…μŠ€νŠΈ (μ„Έμ…˜λ§ˆλ‹€ ꡐ체됨)
 
## WORKING MEMORY
[2026-03-19T10:00:00Z] API λ¦¬νŒ©ν„° μ§„ν–‰ 쀑
[2026-03-19T11:30:00Z] ν…ŒμŠ€νŠΈ 톡과 확인
 
## MANUAL
ν”„λ‘œμ νŠΈλ³„ 영ꡬ λ©”λͺ¨ (μžλ™ 정리 μ•ˆ 됨)

omx_code_intel β€” μ½”λ“œ μΈν…”λ¦¬μ „μŠ€ (9개 도ꡬ)

Codex CLIμ—λŠ” Claude Code 같은 빌트인 LSP 도ꡬ가 μ—†λ‹€. OMXλŠ” CLI 도ꡬ(tsc, ast-grep, grep)λ₯Ό λž˜ν•‘ν•˜μ—¬ μ‹€μš©μ  μ½”λ“œ μΈν…”λ¦¬μ „μŠ€λ₯Ό μ œκ³΅ν•œλ‹€.

도ꡬ λΆ„λ₯˜

μΉ΄ν…Œκ³ λ¦¬λ„κ΅¬κ΅¬ν˜„ 방식
진단lsp_diagnosticstsc --noEmit μ‹€ν–‰ β†’ νŒŒμΌλ³„ 필터링
진단lsp_diagnostics_directoryν”„λ‘œμ νŠΈ 전체 νƒ€μž… 체크 β†’ νŒŒμΌλ³„ κ·Έλ£Ήν•‘
심볼 검색lsp_document_symbolsRegex 기반 μΆ”μΆœ (15+ μ–Έμ–΄ 지원)
심볼 검색lsp_workspace_symbolsμ›Œν¬μŠ€νŽ˜μ΄μŠ€ 전체 심볼 검색 (6단계 깊이, μ΅œλŒ€ 50개)
심볼 검색lsp_hoverμœ„μΉ˜ 기반 단어 μΆ”μΆœ + 둜컬 μ •μ˜ μ°ΎκΈ°
μ°Έμ‘°lsp_find_referencesgrep -rn -w둜 심볼 μ°Έμ‘° μ°ΎκΈ°
μ„œλ²„ μƒνƒœlsp_serverstsc, ast-grep, grep κ°€μš©μ„± 확인
ASTast_grep_searchast-grep CLI νŒ¨ν„΄ λ§€μΉ­ ($NAME, $$$ARGS λ©”νƒ€λ³€μˆ˜)
ASTast_grep_replaceAST 기반 μ½”λ“œ μΉ˜ν™˜ (κΈ°λ³Έ dry-run)

OMC LSP λ„κ΅¬μ™€μ˜ 비ꡐ

ν•­λͺ©OMCOMX
κ΅¬ν˜„ 방식Claude Code 빌트인 LSP 도ꡬCLI 도ꡬ λž˜ν•‘ (tsc, ast-grep, grep)
LSP ν”„λ‘œν† μ½œμ§„μ •ν•œ LSP ν”„λ‘œν† μ½œ μ‚¬μš©λ―Έμ‚¬μš© β€” CLI 좜λ ₯ νŒŒμ‹±
진단lsp_diagnostics (빌트인)tsc --noEmit β†’ JSON νŒŒμ‹±
심볼lsp_document_symbols (LSP)Regex 기반 μΆ”μΆœ
hoverlsp_hover (LSP)Regex 기반 κ·Όμ‚¬μΉ˜
ASTast_grep_search/replace (빌트인)ast-grep CLI λž˜ν•‘
μ–Έμ–΄ 지원LSP μ„œλ²„ 의쑴TS, Python, Go, Rust λ“± 15+ (regex νŒ¨ν„΄)

omx_trace β€” μ‹€ν–‰ 좔적 (2개 도ꡬ)

도ꡬ

λ„κ΅¬μ—­ν• μ£Όμš” νŒŒλΌλ―Έν„°
trace_timelineμ‹œκ°„μˆœ μ—μ΄μ „νŠΈ ν™œλ™ νƒ€μž„λΌμΈlast (졜근 N개), filter (all/turns/modes)
trace_summary집계 톡계 (ν„΄ 수, λͺ¨λ“œ μ‚¬μš©λŸ‰, 토큰 μ†ŒλΉ„)(μ—†μŒ)

데이터 μ†ŒμŠ€

graph LR
    subgraph ν˜„μž¬μ„Έμ…˜["ν˜„μž¬ μ„Έμ…˜ 데이터"]
        TL[".omx/logs/turns-*.jsonl"]
        MS[".omx/state/{mode}-state.json"]
        MT[".omx/metrics.json"]
    end

    subgraph νžˆμŠ€ν† λ¦¬["μ„Έμ…˜ νžˆμŠ€ν† λ¦¬ (별도 λͺ¨λ“ˆ)"]
        RL[".codex/sessions/rollout-*.jsonl"]
    end

    TL --> TT["trace_timeline"]
    MS --> TT
    MT --> TS["trace_summary"]
    TL --> TS

    RL --> SH["session-history/search.ts<br/>(searchSessionHistory)"]

    style TT fill:#e8f0fe
    style TS fill:#e8f0fe
    style SH fill:#fef7e0
  • trace_timeline/summary: ν˜„μž¬ μ„Έμ…˜μ˜ .omx/logs/ 둜그 + λͺ¨λ“œ μƒνƒœ + λ©”νŠΈλ¦­μŠ€
  • session-history: κ³Όκ±° μ„Έμ…˜μ˜ .codex/sessions/rollout-*.jsonl 검색 (trace μ„œλ²„μ™€ 독립)

omx_team_run β€” Team 쑰율 (4개 도ꡬ + deprecated)

ν˜„μ‘΄ 도ꡬ (4개)

도ꡬ역할
omx_run_team_starttmux worker 슀폰 (codex/claude/gemini), jobId μ¦‰μ‹œ λ°˜ν™˜
omx_run_team_statusλ…ΌλΈ”λ‘œν‚Ή μƒνƒœ 확인
omx_run_team_waitλΈ”λ‘œν‚Ή 폴링 + μžλ™ nudge + 이벀트 λͺ¨λ“œ
omx_run_team_cleanupworker pane 정리 (leader/HUD 보쑴)

Deprecated 도ꡬ β€” CLI μ„ ν˜Έ 이유

20+ νŒ€ μ‘°μž‘ 도ꡬ(team_send_message, team_broadcast, team_create_task λ“±)κ°€ hard-deprecated λ˜μ—ˆλ‹€. 호좜 μ‹œ code: "deprecated_cli_only" μ—λŸ¬μ™€ ν•¨κ»˜ CLI λŒ€μ•ˆ 힌트λ₯Ό λ°˜ν™˜ν•œλ‹€.

Deprecation 이유:

  • MCP ν”„λ‘œν† μ½œμ˜ μƒνƒœλΉ„μ €μž₯ νŠΉμ„± β€” team의 tmux μ„Έμ…˜/λŸ°νƒ€μž„ 생λͺ…주기와 ν˜Έν™˜ λΆˆκ°€
  • CLI μΈν„°μ˜΅ ν•„μš” β€” tmux μ„Έμ…˜ 관리, λŸ°νƒ€μž„ μƒνƒœ μ—…λ°μ΄νŠΈμ— CLI μ»¨ν…μŠ€νŠΈ ν•„μˆ˜
  • λŒ€μ•ˆ: omx team api ... CLI λͺ…λ ΉμœΌλ‘œ 동일 κΈ°λŠ₯ μˆ˜ν–‰

MCP workingDirectory Hardening β€” λ³΄μ•ˆ

경둜 검증 닀계측 (μ†ŒμŠ€: src/mcp/state-paths.ts)

계측검증 λ‚΄μš©
NUL λ°”μ΄νŠΈ\0 포함 μ‹œ κ±°λΆ€
Path Traversal.. μ‹œν€€μŠ€ 차단
Mode Segment^[A-Za-z0-9_-]{1,64}$ νŒ¨ν„΄ κ°•μ œ (경둜 κ΅¬λΆ„μž λΆˆν—ˆ)
Session ID^[A-Za-z0-9_-]{1,64}$ νŒ¨ν„΄ κ°•μ œ
AllowlistOMX_MCP_WORKDIR_ROOTS μ„€μ • μ‹œ ν—ˆμš© 루트 μ™Έ κ±°λΆ€

OMX_MCP_WORKDIR_ROOTS β€” 디렉토리 μƒŒλ“œλ°•μ‹±

# Unix: 콜둠 ꡬ뢄
export OMX_MCP_WORKDIR_ROOTS="/home/user/projects:/tmp/sandbox"
 
# Windows: μ„Έλ―Έμ½œλ‘  ꡬ뢄
set OMX_MCP_WORKDIR_ROOTS="C:\projects;D:\sandbox"

μ„€μ • μ‹œ MCP μ„œλ²„κ°€ ν—ˆμš©λœ 루트 ν•˜μœ„ λ””λ ‰ν† λ¦¬μ—μ„œλ§Œ λ™μž‘ν•œλ‹€. isWithinRoot() ν•¨μˆ˜κ°€ μƒλŒ€ 경둜 κ³„μ‚°μœΌλ‘œ νƒˆμΆœ μ—¬λΆ€λ₯Ό κ²€μ¦ν•œλ‹€.

OMC MCPμ™€μ˜ 전체 비ꡐ

ν•­λͺ©OMCOMX
μ„œλ²„ 수1개 β€œt” (톡합)5개 (관심사 뢄리)
등둝 방식.mcp.jsonconfig.toml
λΉŒλ“œ 방식esbuild β†’ 단일 .cjstsc β†’ κ°œλ³„ .js
총 도ꡬ 수30+28개 (state 5 + memory 8 + code-intel 9 + trace 2 + team 4)
λΉ„ν™œμ„±ν™”λΆˆκ°€ (μ„œλ²„ 톡합)κ°œλ³„/전체 ν™˜κ²½λ³€μˆ˜
LSP κ΅¬ν˜„Claude Code 빌트인CLI λž˜ν•‘ (tsc, ast-grep, grep)
μƒνƒœ μŠ€μ½”ν•‘λ‹¨μΌ scopeμ„Έμ…˜ μŠ€μ½”ν”„ (session.json 기반)
크둜슀 μ„Έμ…˜notepad + project-memoryproject-memory.json + notepad.md (ꡬ쑰 동일)
λ³΄μ•ˆμ—†μŒworkdir allowlist + path validation

μ°Έκ³  λ¬Έμ„œ