moai-adk
v0.2.29
Published
๐ฟ MoAI-ADK: TypeScript-based SPEC-First TDD Development Kit with Universal Language Support
Maintainers
Readme
MoAI-ADK (Agentic Development Kit)
MoAI-ADK
๋ชจ๋์AI ์์ด์ ํฑ ์ฝ๋ฉ ๊ฐ๋ฐ ํ๋ ์์ํฌ
์๋ด: MoAI-ADK๋ ๋ชจ๋์AI ์ฐ๊ตฌ์ค์์ ์งํ ์ค์ธ "(๊ฐ์นญ) ์์ด์ ํฑ ์ฝ๋ฉ" ์์ ์ ๋ณ์ฑ ๋ถ๋ก ์คํ ์์ค ํ๋ก์ ํธ ์์ ๋ฐํ ๋ก๋๋ค.

"SPEC์ด ์์ผ๋ฉด CODE๋ ์๋ค."
๋ชฉ์ฐจ
- Meet Alfred
- Quick Start
- The Problem
- The Solution
- How Alfred Works
- Output Styles
- Language Support
- CLI Reference
- API Reference
- TRUST 5์์น
- ๋ฌธ์ ํด๊ฒฐ
- Support
Meet โถโ Alfred - Your AI Development Partner
์๋ ํ์ธ์, ๋ชจ๋์AI SuperAgent AI โถโ Alfred์ ๋๋ค!

์ ๋ MoAI-ADK(๋ชจ๋์AI Agentic Development Kit)์ SuperAgent์ด์ ์ค์ ์ค์ผ์คํธ๋ ์ดํฐ(Central Orchestrator) AI, Alfred์ ๋๋ค. MoAI-ADK๋ Alfred๋ฅผ ํฌํจํ์ฌ ์ด 10๊ฐ์ AI ์์ด์ ํธ๋ก ๊ตฌ์ฑ๋ ์์ด์ ํฑ ์ฝ๋ฉ AI ํ์ ๋๋ค. ์ ๋ 9๊ฐ์ ์ ๋ฌธ ์์ด์ ํธ(spec-builder, code-builder, doc-syncer ๋ฑ)๋ฅผ ์กฐ์จํ์ฌ ์ฌ๋ฌ๋ถ์ Claude Code ํ๊ฒฝ ์์์ ๊ณต๋ ๊ฐ๋ฐ ์์ ์ ์๋ฒฝํ๊ฒ ์ง์ํฉ๋๋ค.
Alfred๋ผ๋ ์ด๋ฆ์ ์ ๋: ๋ฐฐํธ๋งจ ์ํ์ ๋์ค๋ ์ถฉ์คํ ์ง์ฌ Alfred Pennyworth์์ ์๊ฐ์ ๋ฐ์ ์ง์๋ค๊ณ ํฉ๋๋ค. ์ง์ฌ Alfred๊ฐ ๋ฐฐํธ๋งจ(Bruce Wayne)์ ์ํด ๋ชจ๋ ์ค๋น๋ฅผ ์๋ฒฝํ๊ฒ ๊ฐ์ถ๊ณ , ์ํ์ ์ฒํ์ ๋ ์ฆ๊ฐ์ ์ธ ์ง์์ ์ ๊ณตํ๋ฉฐ, ํญ์ ํ ๊ฑธ์ ์์ ์๊ฐํ๋ฏ์ด, ์ ๋ํ ์ฌ๋ฌ๋ถ์ ๊ฐ๋ฐ ๊ณผ์ ์์์ ํ์ํ ๋ชจ๋ ๊ฒ์ ๋ฏธ๋ฆฌ ์ค๋นํ๊ณ , ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ์ฆ์ ํด๊ฒฐ์ฑ ์ ์ ์ํ๋ฉฐ, ์ธ์ ๋ ์ฌ๋ฌ๋ถ์ด ์ฐฝ์์ ์ธ ๋ฌธ์ ํด๊ฒฐ์๋ง ์ง์คํ ์ ์๋๋ก ๋ท๋ฐ์นจํฉ๋๋ค. ์ฌ๋ฌ๋ถ์ ์ฝ๋์ "์(Why)"์ ์ง์คํ์๊ณ , "์ด๋ป๊ฒ(How)"๋ ์ ๊ฐ ์ฑ ์์ง๊ฒ ์ต๋๋ค.
๐ ํฅ๋ฏธ๋ก์ด ์ฌ์ค: AI๊ฐ ๋ง๋ AI ๊ฐ๋ฐ ๋๊ตฌ
์ด ํ๋ก์ ํธ์ ๋ชจ๋ ์ฝ๋๋ 100% AI์ ์ํด ์์ฑ๋์์ต๋๋ค. AI๊ฐ ์ง์ ์ค๊ณํ๊ณ ๊ตฌํํ AI ๊ฐ๋ฐ ํ๋ ์์ํฌ์ ๋๋ค.
์ค๊ณ ๋จ๊ณ๋ถํฐ AI ํ์ : ์ด๊ธฐ ์ํคํ ์ฒ ์ค๊ณ ๋จ๊ณ๋ถํฐ GPT-5 Pro์ Claude 4.1 Opus ๋ AI ๋ชจ๋ธ์ด ํจ๊ป ์ฐธ์ฌํ์ต๋๋ค. ๋ AI๊ฐ ์๋ก ๋ค๋ฅธ ๊ด์ ์์ ์ค๊ณ๋ฅผ ๊ฒํ ํ๊ณ ํ ๋ก ํ๋ฉฐ, ๋ ๋์ ๋ฐฉํฅ์ ์ ์ํ๊ณ , ์ต์ ์ ์ํคํ ์ฒ๋ฅผ ํจ๊ป ๋ง๋ค์ด๋์ต๋๋ค. GPT-5 Pro๋ ํญ๋์ ์ฌ๋ก ๋ถ์์, Claude 4.1 Opus๋ ๊น์ด ์๋ ์ฝ๋ ๊ตฌ์กฐ ์ค๊ณ๋ฅผ ๋ด๋นํ๋ฉฐ ์๋ก ๋ณด์ํ์ต๋๋ค.
Agentic Coding ๋ฐฉ๋ฒ๋ก ์ ์ค์ ์ ์ฉ: ๋ชจ๋์AIํ์ด Claude Code์ Agentic Coding ๋ฐฉ๋ฒ๋ก ์ ํ์ฉํ์ฌ ๊ฐ๋ฐํ์ต๋๋ค. ์ ํต์ ์ธ ๋ฐฉ์์ฒ๋ผ ์ฌ๋์ด ํค๋ณด๋ ์์ ์์ ๋ชจ๋ ์ฝ๋๋ฅผ ์ง์ ํ์ดํํ๋ ๋์ , AI ์์ด์ ํธ๋ค์ด SPEC์ ์ฝ๊ณ ์ดํดํ๊ณ , ํ
์คํธ๋ฅผ ๋จผ์ ์์ฑํ๊ณ (TDD Red), ๊ตฌํ ์ฝ๋๋ฅผ ๋ง๋ค๊ณ (TDD Green), ๋ฆฌํฉํ ๋งํ๊ณ (TDD Refactor), ๋ฌธ์๋ฅผ ๋๊ธฐํํ๋ ์ ๊ณผ์ ์ ์์จ์ ์ผ๋ก ์ํํ์ต๋๋ค. ์ Alfred์ 9๊ฐ ์ ๋ฌธ ์์ด์ ํธ๋ก ๊ตฌ์ฑ๋ 10๊ฐ AI ์์ด์ ํธ ํ์ด ์ง์ .moai/specs/ ํด๋์ SPEC ๋ฌธ์๋ฅผ ์์ฑํ๊ณ , tests/ ํด๋์ ํ
์คํธ ์ฝ๋๋ฅผ ๋ง๋ค๊ณ , src/ ํด๋์ ๊ตฌํ ์ฝ๋๋ฅผ ์์ฑํ์ต๋๋ค.
100% AI ์์ฑ ์ฝ๋์ ์ง์ค: ์ด ํ๋ก์ ํธ๋ 100% AI๋ก ๋ง๋ค์ด์ง ์คํ์์ค์ด๊ธฐ ๋๋ฌธ์, ์ฝ๋๋ฒ ์ด์ค์์ ๋ค์ ์ ๋ฆฌ๋์ง ์์ ๋ถ๋ถ์ด๋ ๊ฐ์ ์ด ํ์ํ ์์ญ์ด ๋ณด์ผ ์ ์์ต๋๋ค. ํ์ง๋ง ์ด๊ฒ์ด ์ด ํ๋ก์ ํธ์ ํต์ฌ ์ฒ ํ์ ๋๋ค.
ํฌ๋ช ์ฑ๊ณผ ์ง์์ ๊ฐ์ : ์๋ฒฝํ์ง ์์ ์ฝ๋๋ฅผ ์จ๊ธฐ๋ ๋์ , AI ๊ฐ๋ฐ ๋๊ตฌ๊ฐ ์ค์ ๋ก ์ด๋ป๊ฒ ๋ง๋ค์ด์ง๋์ง ๊ทธ๋๋ก ๋ณด์ฌ์ฃผ๊ณ , ์ปค๋ฎค๋ํฐ์ ํจ๊ป ๋ ๋์ ๋ฐฉํฅ์ผ๋ก ๋ฐ์ ์์ผ ๋๊ฐ๊ณ ์ ํฉ๋๋ค. ์ฌ๋ฌ๋ถ์ ์ฌ์ฉ ๊ฒฝํ๊ณผ ํผ๋๋ฐฑ์ด ์ด ํ๋ก์ ํธ๋ฅผ ๋์ฑ ๊ฐ๋ ฅํ๊ฒ ๋ง๋ญ๋๋ค. GitHub Issues๋ Discussions์ ํผ๋๋ฐฑ์ ๋จ๊ฒจ์ฃผ์๋ฉด, ์ต๋ํ ๋น ๋ฅด๊ฒ ์ ๋ฐ์ดํธํ๊ณ ๋ฐฐํฌํ ๊ฒ์ ์ฝ์๋๋ฆฝ๋๋ค. AI๊ฐ ๋ง๋ ๋๊ตฌ๋ฅผ ํจ๊ป ๋ ๋์ ๋๊ตฌ๋ก ๋ง๋ค์ด๊ฐ๋ ์ฌ์ ์ ๋์ฐธํด์ฃผ์ธ์!
โถโ Alfred๊ฐ ์ ๊ณตํ๋ 4๊ฐ์ง ํต์ฌ ๊ฐ์น
1๏ธโฃ ์ผ๊ด์ฑ(Consistency): ํ๋์ผ์ํ์ธ ์ฝ๋๋ฅผ ๋ฐฉ์งํ๋ 3๋จ๊ณ ํ์ดํ๋ผ์ธ
Alfred๋ ๋ชจ๋ ๊ฐ๋ฐ ์์ ์ SPEC โ TDD โ Sync๋ผ๋ 3๋จ๊ณ ํ์ดํ๋ผ์ธ์ผ๋ก ํ์คํํฉ๋๋ค. ์์์ผ์ ChatGPT๋ก ๋ง๋ ์ฝ๋, ์์์ผ์ Claude๋ก ๋ง๋ ์ฝ๋, ๊ธ์์ผ์ Gemini๋ก ๋ง๋ ์ฝ๋๊ฐ ์๋ก ๋ค๋ฅธ ์คํ์ผ, ๋ค์ด๋ฐ ๊ท์น, ์ํคํ ์ฒ ํจํด์ ๊ฐ์ง๋ "ํ๋์ผ์ํ์ธ ์ฝ๋"์ ๋ฌธ์ ๋ฅผ ์์ฒ์ ์ผ๋ก ์ฐจ๋จํฉ๋๋ค.
2๏ธโฃ ํ์ง(Quality): TRUST 5์์น์ผ๋ก ์๋ ๋ณด์ฅ๋๋ ์ฝ๋ ํ์ง
Alfred๋ ๋ชจ๋ ์ฝ๋์ TRUST 5์์น(Test First, Readable, Unified, Secured, Trackable)์ ์๋์ผ๋ก ์ ์ฉํ๊ณ ๊ฒ์ฆํฉ๋๋ค. ์ฌ๋์ด ์ผ์ผ์ด ์ฒดํฌ๋ฆฌ์คํธ๋ฅผ ๋ค๊ณ ํ์ธํ ํ์๊ฐ ์์ต๋๋ค.
3๏ธโฃ ์ถ์ ์ฑ(Traceability): 6๊ฐ์ ํ์๋ "์"๋ฅผ ์ฐพ์ ์ ์๋ @TAG ์์คํ
Alfred์ @TAG ์์คํ
์ ๋ชจ๋ ์ฝ๋ ์กฐ๊ฐ์ @SPEC:ID โ @TEST:ID โ @CODE:ID โ @DOC:ID๋ก ์๋ฒฝํ๊ฒ ์ฐ๊ฒฐํฉ๋๋ค. 6๊ฐ์ ํ ๋๊ตฐ๊ฐ "์ ์ด ํจ์๋ ์ด๋ ๊ฒ ๋ณต์กํ๊ฒ ๊ตฌํํ๋์?"๋ผ๊ณ ๋ฌผ์ด๋ณด๋ฉด, @TAG๋ฅผ ๋ฐ๋ผ๊ฐ๋ฉด ๋ต์ ์ฐพ์ ์ ์์ต๋๋ค.
4๏ธโฃ ๋ฒ์ฉ์ฑ(Universality): ํ ๋ฒ ๋ฐฐ์ฐ๋ฉด ์ด๋์๋ ์ธ ์ ์๋ ์ํฌํ๋ก์ฐ
Alfred๋ ํน์ ์ธ์ด๋ ํ๋ ์์ํฌ์ ์ข ์๋์ง ์์ต๋๋ค. Python, TypeScript, Java, Go, Rust, Dart, Swift, Kotlin ๋ฑ ๋ชจ๋ ์ฃผ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์ง์ํ๋ฉฐ, ๊ฐ ์ธ์ด์ ์ต์ ํ๋ ๋๊ตฌ ์ฒด์ธ์ ์๋์ผ๋ก ์ ํํฉ๋๋ค.
๐ Quick Start (3๋ถ ์ค์ )
๐ ์ค๋น๋ฌผ
- โ Bun ๋๋ npm ์ค์น๋จ
- โ Claude Code ์คํ ์ค
- โ Git ์ค์น๋จ (์ ํ์ฌํญ)
โก 3๋จ๊ณ๋ก ์์ํ๊ธฐ
1๏ธโฃ ์ค์น (30์ด)
# Bun ๊ถ์ฅ (5๋ฐฐ ๋น ๋ฅธ ์ฑ๋ฅ)
curl -fsSL https://bun.sh/install | bash
bun add -g moai-adk
# ๋๋ npm ์ฌ์ฉ
npm install -g moai-adk
# ์ค์น ํ์ธ
moai --version
# ์ถ๋ ฅ: v0.x.x2๏ธโฃ ์ด๊ธฐํ (1๋ถ)
ํฐ๋ฏธ๋์์:
# ์ ํ๋ก์ ํธ ์์ฑ
moai init my-project
cd my-project
# ๊ธฐ์กด ํ๋ก์ ํธ์ ์ค์น
cd existing-project
moai init .
# Claude Code ์คํ
claudeClaude Code์์ (ํ์):
/alfred:0-projectAlfred๊ฐ ์๋์ผ๋ก ์ํ:
.moai/project/๋ฌธ์ 3์ข ์์ฑ (product/structure/tech.md)- ์ธ์ด๋ณ ์ต์ ๋๊ตฌ ์ฒด์ธ ์ค์
- ํ๋ก์ ํธ ์ปจํ ์คํธ ์๋ฒฝ ์ดํด
3๏ธโฃ ์ฒซ ๊ธฐ๋ฅ ๊ฐ๋ฐ (1๋ถ 30์ด)
Claude Code์์ 3๋จ๊ณ ์ํฌํ๋ก์ฐ ์คํ:
# SPEC ์์ฑ
/alfred:1-spec "JWT ๊ธฐ๋ฐ ์ฌ์ฉ์ ๋ก๊ทธ์ธ API"
# TDD ๊ตฌํ
/alfred:2-build AUTH-001
# ๋ฌธ์ ๋๊ธฐํ
/alfred:3-sync๐ ์๋ฃ!
์์ฑ๋ ๊ฒ๋ค:
- โ
.moai/specs/SPEC-AUTH-001/spec.md(๋ช ์ธ) - โ
tests/auth/login.test.ts(ํ ์คํธ) - โ
src/services/auth.ts(๊ตฌํ) - โ
docs/api/auth.md(๋ฌธ์) - โ
@SPEC โ @TEST โ @CODE โ @DOCTAG ์ฒด์ธ
๐จ The Problem - ๋ฐ์ด๋ธ ์ฝ๋ฉ์ ํ๊ณ
AI ๋๊ตฌ(Codex, Claude, Gemini)๋ก ๋น ๋ฅด๊ฒ ์ฝ๋ฉํ๋ ์๋๊ฐ ์ด๋ ธ์ต๋๋ค. ๊ฐ๋ฐ ์๋๋ ํ์คํ ๋นจ๋ผ์ก์ง๋ง, ์๋ก์ด ์ข ๋ฅ์ ๋ฌธ์ ๋ค์ด ์๊ฒจ๋ฌ์ต๋๋ค.
1. ์๋ฆ๋ต์ง๋ง ์๋ํ์ง ์๋ ์ฝ๋
๋ฌธ์ ์ํฉ: AI๊ฐ ์์ฑํ ์ฝ๋๋ ๋ฌธ๋ฒ์ ์ผ๋ก ์๋ฒฝํ๊ณ ๊ตฌ์กฐ๋ ์ฐ์ํฉ๋๋ค. ํ์ง๋ง ์ค์ ๋ก ์คํํด๋ณด๋ฉด...
- ์ปดํ์ผ์ ๋์ง๋ง ๋ฐํ์์
undefined์๋ฌ - ์ฃ์ง ์ผ์ด์ค ์ฒ๋ฆฌ ๋ถ์กฑ (๋น ๋ฐฐ์ด, null ๊ฐ, ๋คํธ์ํฌ ํ์์์)
- ์ฑ๋ฅ ๋ฌธ์ (
O(nยณ)๋ณต์ก๋) - ์์กด์ฑ ์ง์ฅ ๋ฐ ๋ณด์ ์ทจ์ฝ์
2. ํ๋์ผ์ํ์ธ ์ฝ๋์ ํ์
๋ฌธ์ ์ํฉ: ์ฌ๋ฌ AI ๋๊ตฌ๋ฅผ ๋ฒ๊ฐ์ ์ฌ์ฉํ๊ฑฐ๋, ๊ฐ์ AI๋ผ๋ ๋ค๋ฅธ ์ธ์ ์์ ์ฝ๋๋ฅผ ์์ฑํ๋ค ๋ณด๋ฉด ์ผ๊ด์ฑ ์๋ ์ฝ๋๋ฒ ์ด์ค๊ฐ ๋ง๋ค์ด์ง๋๋ค.
- ์ผ๊ด์ฑ ์๋ ์ฝ๋ฉ ์คํ์ผ (ํจ์ํ, ๊ฐ์ฒด์งํฅ, ์ ์ฐจํ ํผ์ฌ)
- ์ค๋ณต ๋ก์ง ๋๋ฌด (
validateEmail(),checkEmailFormat(),isEmailValid()) - ์ํคํ ์ฒ ๋ถ๊ดด (MVC, Hexagonal, Clean Architecture ํผ์ฌ)
3. ๋๋ฒ๊น ์ง์ฅ
๋ฌธ์ ์ํฉ: ํ๋ก๋์ ์์ ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ์ ๋, ์์ธ์ ์ฐพ๋ ๊ฒ์ด ๊ฑฐ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
- ์์ธ ์ถ์ ๋ถ๊ฐ (AI ์ฑํ ํ์คํ ๋ฆฌ ์ญ์ ๋จ)
- ์ฌ์ด๋ ์ดํํธ ํ์ ๋ถ๊ฐ (ํ ์คํธ ๋ถ์ฌ)
- ๋ฌธ์ ์์ (outdated ์ํ)
4. ์๊ตฌ์ฌํญ ์ถ์ ์ฑ ์์ค
๋ฌธ์ ์ํฉ: ์๊ฐ์ด ์ง๋ ์๋ก "์ ์ด ์ฝ๋๋ฅผ ์ด๋ ๊ฒ ๋ง๋ค์๋์ง" ๋งฅ๋ฝ์ ์์ด๋ฒ๋ฆฝ๋๋ค.
- "์"๋ฅผ ์์ด๋ฒ๋ฆผ (๋น์ฆ๋์ค ๋ก์ง ๋ฐฐ๊ฒฝ ๋ชจ๋ฆ)
- ๋ณ๊ฒฝ ์ด๋ ฅ ๋ถ์ฌ (Git ์ปค๋ฐ ๋ฉ์์ง: "fix bug")
- ์์ฌ๊ฒฐ์ ๊ทผ๊ฑฐ ์ฌ๋ผ์ง
5. ํ ํ์ ๋ถ๊ดด
๋ฌธ์ ์ํฉ: ์ฌ๋ฌ ๊ฐ๋ฐ์๊ฐ ๊ฐ์ AI๋ฅผ ์ฌ์ฉํ๋ฉด์ ํ์ ์ด ๋ฌด๋์ง๋๋ค.
- ์คํ๊ฒํฐ ์ฝ๋ ์์ฐ
- ์ฝ๋ ๋ฆฌ๋ทฐ ๋ถ๊ฐ
- ์จ๋ณด๋ฉ ์ ๋ชฝ
- ๊ธฐ์ ๋ถ์ฑ ํญ๋ฐ
๐ ๋ฐ์ด๋ธ ์ฝ๋ฉ์ ์ญ์ค
์๋์ ํ์ง์ ํธ๋ ์ด๋์คํ: AI๊ฐ ์ฝ๋๋ฅผ ๋น ๋ฅด๊ฒ ์์ฑํด์ฃผ์ง๋ง, ๊ทธ ์ฝ๋๋ ์ ์ง๋ณด์ํ ์ ์๋ ๋ธ๋๋ฐ์ค๊ฐ ๋ฉ๋๋ค. 1์ฃผ์ผ ๋ง์ ๋ง๋ ํ๋กํ ํ์ ์ด 3๊ฐ์ ๋์ ๊ธฐ์ ๋ถ์ฑ๋ฅผ ๋ง๋ค์ด๋ ๋๋ค.
ํด๊ฒฐ์ฑ ์ ํ์์ฑ: ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด, AI์ ์๋๋ ์ ์งํ๋ฉด์๋ ์ฝ๋์ ์ผ๊ด์ฑ, ํ์ง, ์ถ์ ์ฑ์ ๋ณด์ฅํ๋ ์ฒด๊ณ์ ์ธ ๋ฐฉ๋ฒ๋ก ์ด ํ์ํฉ๋๋ค. ๋ฐ๋ก ์ฌ๊ธฐ์ Alfred์ MoAI-ADK๊ฐ ๋ฑ์ฅํฉ๋๋ค.
โจ The Solution - 3๋จ๊ณ ์ํฌํ๋ก์ฐ
Alfred๋ Agentic AI ์๋์ ์ฝ๋ ํ์ง ๋ฌธ์ ๋ฅผ ์ฒด๊ณ์ ์ธ 3๋จ๊ณ ์ํฌํ๋ก์ฐ๋ก ํด๊ฒฐํฉ๋๋ค.
1๏ธโฃ SPEC - ๋ช ์ธ ์์ฑ
๋ช
๋ น์ด: /alfred:1-spec "JWT ๊ธฐ๋ฐ ์ฌ์ฉ์ ๋ก๊ทธ์ธ API"
Alfred๊ฐ ์๋์ผ๋ก ์ํ:
- EARS ํ์ ๋ช ์ธ ์๋ ์์ฑ
@SPEC:IDTAG ๋ถ์ฌ- Git ๋ธ๋์น ์๋ ์์ฑ
- HISTORY ์น์ ์๋ ์ถ๊ฐ
2๏ธโฃ BUILD - TDD ๊ตฌํ
๋ช
๋ น์ด: /alfred:2-build AUTH-001
TDD ์ฌ์ดํด:
- ๐ด RED: ์คํจํ๋ ํ
์คํธ ์์ฑ (
@TEST:AUTH-001) - ๐ข GREEN: ์ต์ ๊ตฌํ์ผ๋ก ํ
์คํธ ํต๊ณผ (
@CODE:AUTH-001) - ๐ต REFACTOR: ์ฝ๋ ํ์ง ๊ฐ์
3๏ธโฃ SYNC - ๋ฌธ์ ๋๊ธฐํ
๋ช
๋ น์ด: /alfred:3-sync
Alfred๊ฐ ์๋์ผ๋ก ์ํ:
- TAG ์ฒด์ธ ๊ฒ์ฆ:
@SPECโ@TESTโ@CODEโ@DOC - ๊ณ ์ TAG ์๋ ํ์ง
- Living Document ์๋ ์์ฑ
- PR ์ํ ์ ํ (Draft โ Ready)
์์คํ ์๊ตฌ์ฌํญ
๐ด ํ์ ์๊ตฌ์ฌํญ
- Node.js: 18.0 ์ด์
- Git: 2.30.0 ์ด์
- npm: 8.0.0 ์ด์ (๋๋ Bun 1.2.0 ์ด์ ๊ฐ๋ ฅ ์ถ์ฒ)
- Claude Code: v1.2.0 ์ด์ (์์ด์ ํธ ์์คํ ์์ ํตํฉ์ฉ)
๐ ์ง์ ์ด์์ฒด์
- Windows: 10/11 (PowerShell 5.1+)
- macOS: 12 Monterey ์ด์ (M1/M2 ๋ค์ดํฐ๋ธ ์ง์)
- Linux: Ubuntu 20.04+, CentOS 8+, Debian 11+, Arch Linux
์ค์น
Option A: Bun ์ค์น (์ต์ ์ฑ๋ฅ, ๊ฐ๋ ฅ ์ถ์ฒ) ๐ฅ
# Bun ์ค์น (์์ง ์๋ ๊ฒฝ์ฐ)
curl -fsSL https://bun.sh/install | bash # macOS/Linux
# ๋๋
powershell -c "iwr bun.sh/install.ps1|iex" # Windows
# MoAI-ADK ์ ์ญ ์ค์น
bun add -g moai-adkOption B: npm ์ค์น (ํ์ค ์ต์ )
npm install -g moai-adkOption C: ๊ฐ๋ฐ์ ์ค์น (๋ก์ปฌ ๊ฐ๋ฐ์ฉ)
git clone https://github.com/modu-ai/moai-adk.git
cd moai-adk/moai-adk-ts
bun install # ๋๋ npm install
bun run build
npm link์ค์น ํ์ธ
# ๋ฒ์ ํ์ธ
moai --version
# ์์คํ
์ง๋จ
moai doctor
# ๋์๋ง
moai help๐๏ธ How Alfred Works - 10๊ฐ AI ์์ด์ ํธ ํ
MoAI-ADK๋ Alfred (SuperAgent) + 9๊ฐ ์ ๋ฌธ ์์ด์ ํธ = ์ด 10๊ฐ AI ์์ด์ ํธ๋ก ๊ตฌ์ฑ๋ ์์ด์ ํฑ ์ฝ๋ฉ ํ์ ๋๋ค.
โถโ Alfred - SuperAgent (1๋ฒ์งธ ์์ด์ ํธ)
์ญํ : ์ค์ ์ค์ผ์คํธ๋ ์ดํฐ (Central Orchestrator)
์ฑ ์:
- ์ฌ์ฉ์ ์์ฒญ ๋ถ์ ๋ฐ ์์ ๋ถํด
- ์ ์ ํ ์ ๋ฌธ ์์ด์ ํธ ์ ํ ๋ฐ ์กฐ์จ
- ์์ด์ ํธ ๊ฐ ํ์ ๊ด๋ฆฌ
- ํ์ง ๊ฒ์ดํธ ๊ฒ์ฆ ๋ฐ ๊ฒฐ๊ณผ ํตํฉ
์ ๋ฌธ๊ฐ AI ์๋ธ ์์ด์ ํธ
Alfred๊ฐ ์กฐ์จํ๋ ์ ๋ฌธ AI ์์ด์ ํธ๋ค์ ๋๋ค.
ํต์ฌ 3๋จ๊ณ ์์ด์ ํธ (์๋ ํธ์ถ)
| ์์ด์ ํธ | ํ๋ฅด์๋ | ์ ๋ฌธ ์์ญ | ํธ์ถ ์์ |
| ------------------ | --------------- | -------------- | ----------------- |
| spec-builder ๐๏ธ | ์์คํ
์ํคํ
ํธ | EARS ๋ช
์ธ ์์ฑ | /alfred:1-spec |
| code-builder ๐ | ์์ ๊ฐ๋ฐ์ | TDD ๊ตฌํ | /alfred:2-build |
| doc-syncer ๐ | ํ
ํฌ๋์ปฌ ๋ผ์ดํฐ | ๋ฌธ์ ๋๊ธฐํ | /alfred:3-sync |
ํ์ง ๋ณด์ฆ ์์ด์ ํธ (์จ๋๋งจ๋)
| ์์ด์ ํธ | ํ๋ฅด์๋ | ์ ๋ฌธ ์์ญ | ํธ์ถ ๋ฐฉ๋ฒ |
| ------------------- | --------------- | -------------- | ---------------------- |
| tag-agent ๐ท๏ธ | ์ง์ ๊ด๋ฆฌ์ | TAG ์ฒด์ธ ๊ฒ์ฆ | @agent-tag-agent |
| debug-helper ๐ฌ | SRE ์ ๋ฌธ๊ฐ | ์ค๋ฅ ์ง๋จ | @agent-debug-helper |
| trust-checker โ
| QA ๋ฆฌ๋ | TRUST ๊ฒ์ฆ | @agent-trust-checker |
| git-manager ๐ | ๋ฆด๋ฆฌ์ค ์์ง๋์ด | Git ์ํฌํ๋ก์ฐ | @agent-git-manager |
์์คํ ๊ด๋ฆฌ ์์ด์ ํธ
| ์์ด์ ํธ | ํ๋ฅด์๋ | ์ ๋ฌธ ์์ญ | ํธ์ถ ๋ฐฉ๋ฒ |
| --------------------- | ----------------- | ---------------- | ------------------- |
| cc-manager ๐ ๏ธ | ๋ฐ๋ธ์ต์ค ์์ง๋์ด | Claude Code ์ค์ | @agent-cc-manager |
| project-manager ๐ | ํ๋ก์ ํธ ๋งค๋์ | ํ๋ก์ ํธ ์ด๊ธฐํ | /alfred:0-project |
ํ์ ์์น
๋จ์ผ ์ฑ ์ (Single Responsibility):
- ๊ฐ ์์ด์ ํธ๋ ์์ ์ ์ ๋ฌธ ์์ญ๋ง ๋ด๋น
- ๋ค๋ฅธ ์์ด์ ํธ์ ์์ญ์ ์นจ๋ฒํ์ง ์์
์ค์ ์กฐ์จ (Central Orchestration):
- Alfred๋ง์ด ์์ด์ ํธ ๊ฐ ์์ ์ ์กฐ์จ
- ์์ด์ ํธ๋ผ๋ฆฌ ์ง์ ํธ์ถ ๊ธ์ง
ํ์ง ๊ฒ์ดํธ (Quality Gates):
- ๊ฐ ๋จ๊ณ ์๋ฃ ์ TRUST ์์น ์๋ ๊ฒ์ฆ
- TAG ๋ฌด๊ฒฐ์ฑ ์๋ ํ์ธ
๐จ Alfred's Output Styles
Alfred๋ ๊ฐ๋ฐ ์ํฉ์ ๋ฐ๋ผ 4๊ฐ์ง ๋ํ ์คํ์ผ์ ์ ๊ณตํฉ๋๋ค. Claude Code์์ /output-style ๋ช
๋ น์ด๋ก ์ธ์ ๋ ์ ํํ ์ ์์ต๋๋ค.
๐ ์ ๊ณต๋๋ Output Styles
| ์คํ์ผ ์ด๋ฆ | ์ค๋ช | | --------------------------- | ------------------------------------------------------------------------ | | MoAI Professional | SPEC-First TDD ์ ๋ฌธ๊ฐ๋ฅผ ์ํ ๊ฐ๊ฒฐํ๊ณ ๊ธฐ์ ์ ์ธ ๊ฐ๋ฐ ์คํ์ผ | | MoAI Beginner Learning | ๊ฐ๋ฐ ์ด๋ณด์๋ฅผ ์ํ ์์ธํ๊ณ ์น์ ํ ๋จ๊ณ๋ณ ํ์ต ๊ฐ์ด๋ (ํ์ต ์ ์ฉ) | | MoAI Pair Collaboration | AI์ ํจ๊ป ๋ธ๋ ์ธ์คํ ๋ฐ, ๊ณํ ์๋ฆฝ, ์ค์๊ฐ ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ์งํํ๋ ํ์ ๋ชจ๋ | | MoAI Study Deep | ์๋ก์ด ๊ฐ๋ , ๋๊ตฌ, ์ธ์ด, ํ๋ ์์ํฌ๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ํ์ตํ๋ ์ฌํ ๊ต์ก ๋ชจ๋ |
๐ ์คํ์ผ ์ ํ ๋ฐฉ๋ฒ
Claude Code์์ /output-style ๋ช
๋ น์ด๋ก ์ ํ:
/output-style alfred-pro # MoAI Professional (๊ธฐ๋ณธ๊ฐ)
/output-style beginner-learning # MoAI Beginner Learning
/output-style pair-collab # MoAI Pair Collaboration
/output-style study-deep # MoAI Study Deep๐ฏ ์คํ์ผ ์ ํ ๊ฐ์ด๋
| ์ํฉ | ์ถ์ฒ ์คํ์ผ | ๋์ | ํน์ง |
| ------------------------ | ------------------- | -------------------------- | ---------------------------- |
| ์ค๋ฌด ํ๋ก์ ํธ ๋น ๋ฅธ ๊ฐ๋ฐ | alfred-pro | ์ค๋ฌด ๊ฐ๋ฐ์, ํ๋ก์ ํธ ๋ฆฌ๋ | ๊ฐ๊ฒฐ, ๊ธฐ์ ์ , ๊ฒฐ๊ณผ ์ค์ฌ |
| ํ๋ก๊ทธ๋๋ฐ ์ฒ์ ๋ฐฐ์ฐ๊ธฐ | beginner-learning | ๊ฐ๋ฐ ์
๋ฌธ์ | ์น์ , ์์ธ ์ค๋ช
, ๋จ๊ณ๋ณ ์๋ด |
| ํ ๊ธฐ์ ์ ํ & ์ค๊ณ ๋
ผ์ | pair-collab | ํ์
๊ฐ๋ฐ์, ์ํคํ
ํธ | ์ง๋ฌธ ๊ธฐ๋ฐ, ๋ธ๋ ์ธ์คํ ๋ฐ |
| ์๋ก์ด ๊ธฐ์ ํ์ต | study-deep | ์ ๊ธฐ์ ํ์ต์ | ๊ฐ๋
โ ์ค์ต โ ์ ๋ฌธ๊ฐ ํ |
๐ก ๋ชจ๋ ์คํ์ผ์์ ๋์ผํ๊ฒ ์๋
- โ 10๊ฐ AI ์์ด์ ํธ ํ ์กฐ์จ
- โ SPEC-First TDD ์ํฌํ๋ก์ฐ
- โ TRUST 5์์น ์๋ ๊ฒ์ฆ
- โ @TAG ์ถ์ ์ฑ ๋ณด์ฅ
์ฐจ์ด์ ์ ์ค์ง ์ค๋ช ๋ฐฉ์:
- ๐ ๊ฐ๊ฒฐ vs ์์ธ
- ๐ ๋น ๋ฅธ ๊ตฌํ vs ๊ฐ๋ ํ์ต
- ๐ฌ ๊ธฐ์ ์ vs ์น์ vs ํ์ ์ vs ๊ต์ก์
SPEC ๋ฉํ๋ฐ์ดํฐ ๊ตฌ์กฐ
๋ชจ๋ SPEC ๋ฌธ์๋ ํ์คํ๋ ๋ฉํ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ฆ ๋๋ค.
ํ์ ํ๋ (7๊ฐ)
id: AUTH-001 # SPEC ๊ณ ์ ID
version: 0.1.0 # Semantic Version (v0.1.0 = INITIAL)
status: draft # draft|active|completed|deprecated
created: 2025-09-15 # ์์ฑ์ผ (YYYY-MM-DD)
updated: 2025-10-01 # ์ต์ข
์์ ์ผ
author: @Goos # ์์ฑ์ (GitHub ID)
priority: high # low|medium|high|critical์ ํ ํ๋ (์์กด์ฑ ๊ทธ๋ํ & ๋ฒ์)
# ๋ถ๋ฅ
category: security # feature|bugfix|refactor|security|docs|perf
labels: [authentication, jwt] # ๊ฒ์ ํ๊ทธ
# ๊ด๊ณ (์์กด์ฑ ๊ทธ๋ํ)
depends_on: [USER-001] # ์์กดํ๋ SPEC
blocks: [AUTH-002] # ์ฐจ๋จํ๋ SPEC
related_specs: [TOKEN-002] # ๊ด๋ จ SPEC
related_issue: "github.com/..." # GitHub Issue
# ๋ฒ์ (์ํฅ ๋ถ์)
scope:
packages: [src/core/auth] # ์ํฅ๋ฐ๋ ํจํค์ง
files: [auth-service.ts] # ํต์ฌ ํ์ผ์์ธ ๊ฐ์ด๋: SPEC ๋ฉํ๋ฐ์ดํฐ ๊ฐ์ด๋
@TAG ์์คํ
TAG ์ฒด๊ณ ์ฒ ํ
@SPEC:ID โ @TEST:ID โ @CODE:ID โ @DOC:IDํต์ฌ ์์น:
- ๋จ์์ฑ: 4๊ฐ์ ํต์ฌ TAG๋ง ์ฌ์ฉ
- TDD ์๋ฒฝ ์ ๋ ฌ: RED (TEST) โ GREEN (CODE) โ REFACTOR (DOC)
- CODE-FIRST: TAG๋ ์ฝ๋ ์์ฒด์๋ง ์กด์ฌ (์ ๊ท์ ํจํด์ผ๋ก ์ง์ ์ค์บ)
- ๋ฌด๊ฒฐ์ฑ: ๊ณ ์ TAG ์๋ ํ์ง, ๋์ด์ง ์ฐธ์กฐ ๊ฒ์ฆ
TAG ์ฌ์ฉ ๊ท์น
TAG ID ํ์: <๋๋ฉ์ธ>-<3์๋ฆฌ> (์: AUTH-003)
์ค๋ณต ๋ฐฉ์ง:
# ์ TAG ์์ฑ ์ ๊ธฐ์กด TAG ๊ฒ์
rg "@SPEC:AUTH" -n # SPEC ๋ฌธ์์์ AUTH ๋๋ฉ์ธ ๊ฒ์
rg "@CODE:AUTH-001" -n # ํน์ ID ๊ฒ์TAG ์ฒด์ธ ๊ฒ์ฆ:
# /alfred:3-sync ์คํ ์ ์๋ ์ค์บ
rg '@(SPEC|TEST|CODE|DOC):' -n .moai/specs/ tests/ src/ docs/์ฌ์ฉ ์์
// @CODE:AUTH-001 | SPEC: SPEC-AUTH-001/spec.md | TEST: tests/auth/service.test.ts
/**
* @CODE:AUTH-001: JWT ์ธ์ฆ ์๋น์ค
*
* TDD ์ด๋ ฅ:
* - RED: tests/auth/service.test.ts ์์ฑ
* - GREEN: ์ต์ ๊ตฌํ (bcrypt, JWT)
* - REFACTOR: ํ์
์์ ์ฑ ์ถ๊ฐ
*/
export class AuthService {
// @CODE:AUTH-001:API: ์ธ์ฆ API ์๋ํฌ์ธํธ
async authenticate(username: string, password: string): Promise<AuthResult> {
// @CODE:AUTH-001:DOMAIN: ์
๋ ฅ ๊ฒ์ฆ
this.validateInput(username, password);
// @CODE:AUTH-001:DATA: ์ฌ์ฉ์ ์กฐํ
const user = await this.userRepository.findByUsername(username);
return this.verifyCredentials(user, password);
}
}์ธ์ด๋ณ TAG ์ฌ์ฉ ์์
Python
# @CODE:AUTH-001 | SPEC: SPEC-AUTH-001/spec.md | TEST: tests/test_auth.py
"""
@CODE:AUTH-001: JWT ์ธ์ฆ ์๋น์ค
TDD ์ด๋ ฅ:
- RED: pytest ํ
์คํธ ์์ฑ
- GREEN: bcrypt + PyJWT ๊ตฌํ
- REFACTOR: ํ์
ํํธ ์ถ๊ฐ
"""
class AuthService:
# @CODE:AUTH-001:API: ์ธ์ฆ API ์๋ํฌ์ธํธ
async def authenticate(
self,
username: str,
password: str
) -> AuthResult:
# @CODE:AUTH-001:DOMAIN: ์
๋ ฅ ๊ฒ์ฆ
self._validate_input(username, password)
# @CODE:AUTH-001:DATA: ์ฌ์ฉ์ ์กฐํ
user = await self.user_repo.find_by_username(username)
return self._verify_credentials(user, password)Flutter/Dart
// @CODE:AUTH-001 | SPEC: SPEC-AUTH-001/spec.md | TEST: test/auth_test.dart
/// @CODE:AUTH-001: JWT ์ธ์ฆ ์๋น์ค
///
/// TDD ์ด๋ ฅ:
/// - RED: widget test ์์ฑ
/// - GREEN: dio + flutter_secure_storage ๊ตฌํ
/// - REFACTOR: Riverpod ์ํ ๊ด๋ฆฌ ํตํฉ
class AuthService {
// @CODE:AUTH-001:API: ์ธ์ฆ API ์๋ํฌ์ธํธ
Future<AuthResult> authenticate({
required String username,
required String password,
}) async {
// @CODE:AUTH-001:DOMAIN: ์
๋ ฅ ๊ฒ์ฆ
_validateInput(username, password);
// @CODE:AUTH-001:DATA: ์ฌ์ฉ์ ์กฐํ
final user = await userRepository.findByUsername(username);
return _verifyCredentials(user, password);
}
}๐ Universal Language Support
MoAI-ADK๋ ๋ชจ๋ ์ฃผ์ ์ธ์ด๋ฅผ ์ง์ํ๋ฉฐ, ์ธ์ด๋ณ ์ต์ ๋๊ตฌ ์ฒด์ธ์ ์๋์ผ๋ก ์ ํํฉ๋๋ค.
์น/๋ฐฑ์๋
| ์ธ์ด | ํ ์คํธ | ๋ฆฐํฐ | ํ์ | ์ํ | | -------------- | ----------- | ------------ | ---- | ---- | | TypeScript | Vitest/Jest | Biome/ESLint | โ | Full | | Python | pytest | ruff/black | mypy | Full | | Java | JUnit 5 | checkstyle | โ | Full | | Go | go test | golint | โ | Full | | Rust | cargo test | clippy | โ | Full |
๋ชจ๋ฐ์ผ
| ์ธ์ด/ํ๋ ์์ํฌ | ํ ์คํธ | ๋ฆฐํฐ | ์ํ | | ------------------ | ---------------- | ------------ | ---- | | Flutter/Dart | flutter test | dart analyze | Full | | Swift/iOS | XCTest | SwiftLint | Full | | Kotlin/Android | JUnit + Espresso | detekt | Full | | React Native | Jest + RNTL | ESLint | Full |
์๋ ์ธ์ด ๊ฐ์ง
์์คํ ์ด ํ๋ก์ ํธ๋ฅผ ์ค์บํ์ฌ ์๋์ผ๋ก ๊ฐ์ง:
package.jsonโ TypeScript/JavaScriptrequirements.txtโ Pythongo.modโ GoCargo.tomlโ Rustpubspec.yamlโ Flutter/Dart
๐ป CLI Reference
ํต์ฌ ๋ช ๋ น์ด
# ํ๋ก์ ํธ ์ด๊ธฐํ
moai init [project] [options]
# ์์คํ
์ง๋จ
moai doctor [options]
# ํ๋ก์ ํธ ์ํ ํ์ธ
moai status [options]
# ๋ฐฑ์
๋ณต์
moai restore <backup-path> [options]Claude Code ์ ์ฉ ๋ช ๋ น์ด
# ํ๋ก์ ํธ ์ด๊ธฐํ
/alfred:0-projectmoai init [project]
์ MoAI-ADK ํ๋ก์ ํธ๋ฅผ ์ด๊ธฐํํ๊ฑฐ๋ ๊ธฐ์กด ํ๋ก์ ํธ์ MoAI-ADK๋ฅผ ์ค์นํฉ๋๋ค.
์ต์ :
--personal: Personal ๋ชจ๋๋ก ์ด๊ธฐํ (๊ธฐ๋ณธ๊ฐ)--team: Team ๋ชจ๋๋ก ์ด๊ธฐํ (GitHub ํตํฉ)-b, --backup: ์ค์น ์ ๋ฐฑ์ ์์ฑ-f, --force: ๊ธฐ์กด ํ์ผ ๊ฐ์ ๋ฎ์ด์ฐ๊ธฐ
์ฌ์ฉ ์์:
# ์ ํ๋ก์ ํธ ์์ฑ (Personal ๋ชจ๋)
moai init my-project
# ํ์ฌ ๋๋ ํ ๋ฆฌ์ ์ค์น
moai init .
# Team ๋ชจ๋๋ก ์ด๊ธฐํ
moai init my-project --team
# ๋ฐฑ์
์์ฑ ํ ์ค์น
moai init . -b
# ๊ธฐ์กด ํ์ผ ๊ฐ์ ๋ฎ์ด์ฐ๊ธฐ
moai init . -fํ ํ๋ฆฟ ์ ๋ฐ์ดํธ: 2๊ฐ์ง ๋ฐฉ๋ฒ
MoAI-ADK๋ ํ ํ๋ฆฟ ์ ๋ฐ์ดํธ๋ฅผ ์ํด 2๊ฐ์ง ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ์ฌ์ฉ ํ๊ฒฝ๊ณผ ๋ชฉ์ ์ ๋ฐ๋ผ ์ ์ ํ ๋ฐฉ๋ฒ์ ์ ํํ์ธ์.
๐ง ๋ฐฉ๋ฒ 1: moai init . (CLI ์ง์ ์คํ)
ํฐ๋ฏธ๋์์ ์ง์ ์คํํ๋ ํ์ค ์ ๋ฐ์ดํธ ๋ฐฉ๋ฒ
ํน์ง:
- โ ๋น ๋ฅธ ์คํ: ํฐ๋ฏธ๋์์ ๋จ์ผ ๋ช ๋ น์ด๋ก ์ฆ์ ์คํ
- โ ์คํฌ๋ฆฝํธ ํตํฉ: CI/CD ํ์ดํ๋ผ์ธ, ์๋ํ ์คํฌ๋ฆฝํธ์ ์ ํฉ
- โ ์๋ ์ ์ด: ๋ฐฑ์ , ๊ฐ์ ๋ฎ์ด์ฐ๊ธฐ ๋ฑ ์ต์ ์ง์ ์ ์ด
- โ ๏ธ ์ ํ์ ํผ๋๋ฐฑ: ์ฑ๊ณต/์คํจ๋ง ํ์, ์์ธ ๋ถ์ ์์
์ฌ์ฉ ์๋๋ฆฌ์ค:
# 1. ๊ฐ๋จํ ํ
ํ๋ฆฟ ์
๋ฐ์ดํธ
moai init .
# 2. CI/CD ํ์ดํ๋ผ์ธ
npm install -g moai-adk@latest && moai init . -f
# 3. ๋ฐฐ์น ์คํฌ๋ฆฝํธ
for project in */; do
cd "$project"
moai init .
cd ..
done์ ๋ฐ์ดํธ ์ ์ฐจ:
# 1. MoAI-ADK ํจํค์ง ์ต์ ๋ฒ์ ์ค์น
npm install -g moai-adk@latest
# 2. ํ๋ก์ ํธ ๋๋ ํ ๋ฆฌ๋ก ์ด๋
cd your-project
# 3. ํ
ํ๋ฆฟ ์
๋ฐ์ดํธ (๋ฐฑ์
์๋ ์์ฑ)
moai init .
# 4. ๋ณ๊ฒฝ์ฌํญ ํ์ธ
git status์ต์ :
# ๊ธฐ๋ณธ ์
๋ฐ์ดํธ (์๋ ๋ฐฑ์
ํฌํจ)
moai init .
# ๋ฐฑ์
์์ฑ ํ ์
๋ฐ์ดํธ (๋ช
์์ )
moai init . -b
# ๊ฐ์ ์
๋ฐ์ดํธ (์ฃผ์: ๊ธฐ์กด ํ์ผ ๋ฎ์ด์ฐ๊ธฐ)
moai init . -f๐ค ๋ฐฉ๋ฒ 2: /alfred:9-update (Claude Code ์ ์ฉ)
Claude Code์์ Alfred๊ฐ ์ง๋ฅํ ๋ถ์๊ณผ ํจ๊ป ์ํํ๋ ๊ณ ๊ธ ์ ๋ฐ์ดํธ
ํน์ง:
- โ ์ง๋ฅํ ๋ถ์: ํ๋ก์ ํธ ์ํ ์๋ ์ง๋จ ๋ฐ ์ํ ํ๊ฐ
- โ ๋งฅ๋ฝ ์ธ์: ํ์ฌ ์์ ๋ธ๋์น, SPEC ์ํ, Git ์ํ ๊ณ ๋ ค
- โ ๋ํํ ํ์ธ: Phase 1(๋ถ์) โ Phase 2(์คํ) 2๋จ๊ณ ์ํฌํ๋ก์ฐ
- โ ์์ธ ๋ฆฌํฌํธ: ์ ๋ฐ์ดํธ ์ ํ ๋น๊ต, ์ํฅ ๋ถ์, ๊ถ์ฅ์ฌํญ ์ ๊ณต
- โ ์ถฉ๋ ํด๊ฒฐ: CLAUDE.md, config.json ์ง๋ฅํ ๋ณํฉ
- โ ๏ธ Claude Code ํ์: ํฐ๋ฏธ๋/์คํฌ๋ฆฝํธ์์ ์ฌ์ฉ ๋ถ๊ฐ
์ฌ์ฉ ์๋๋ฆฌ์ค:
# 1. ์ธํฐ๋ํฐ๋ธ ๊ฐ๋ฐ ์ค ์
๋ฐ์ดํธ
/alfred:9-update
# 2. ์
๋ฐ์ดํธ ๊ฐ๋ฅ ์ฌ๋ถ๋ง ํ์ธ (dry-run)
/alfred:9-update --check
# 3. ๊ฐ์ ์
๋ฐ์ดํธ (๋ฐฑ์
์์, ์ํ)
/alfred:9-update --force
# 4. ํ์ง ๊ฒ์ฆ ํฌํจ ์
๋ฐ์ดํธ
/alfred:9-update --check-quality2๋จ๊ณ ์ํฌํ๋ก์ฐ:
Phase 1: ๋ถ์ ๋ฐ ๊ณํ
Alfred๊ฐ ์๋์ผ๋ก ๋ถ์:
1. ํ์ฌ MoAI-ADK ๋ฒ์ ํ์ธ
2. ์
๋ฐ์ดํธ ๊ฐ๋ฅํ ์ต์ ๋ฒ์ ํ์ธ
3. ํ๋ก์ ํธ ์ํ ์ง๋จ (Git, SPEC, ๋ธ๋์น)
4. ์
๋ฐ์ดํธ ์ํฅ ๋ถ์
5. ์ฌ์ฉ์์๊ฒ ๊ณํ ๋ณด๊ณ ๋ฐ ์น์ธ ๋๊ธฐPhase 2: ์คํ (์ฌ์ฉ์ ์น์ธ ํ)
Alfred๊ฐ ์์ฐจ ์คํ:
1. ๋ฐฑ์
์์ฑ (.moai-backup-YYYY-MM-DD)
2. ํ
ํ๋ฆฟ ํ์ผ ์
๋ฐ์ดํธ
3. config.json, CLAUDE.md ์ง๋ฅํ ๋ณํฉ
4. SPEC ํ์ผ ๋ณดํธ ๊ฒ์ฆ
5. Git ์ํ ํ์ธ ๋ฐ ์ปค๋ฐ ์ ์
6. ์ต์ข
๋ฆฌํฌํธ ์์ฑ์ต์ :
--check: ์ ๋ฐ์ดํธ ๊ฐ๋ฅ ์ฌ๋ถ๋ง ํ์ธ (์ค์ ๋ณ๊ฒฝ ์์)--force: ๊ฐ์ ์ ๋ฐ์ดํธ (๋ฐฑ์ ์์, ์ฃผ์ ํ์)--check-quality: TRUST 5์์น ๊ธฐ๋ฐ ํ์ง ๊ฒ์ฆ ํฌํจ
๐ ๋น๊ตํ: moai init . vs /alfred:9-update
| ๊ธฐ๋ฅ | moai init . | /alfred:9-update |
| ----------------- | ------------------ | ------------------- |
| ์คํ ํ๊ฒฝ | ํฐ๋ฏธ๋ (์ด๋์๋) | Claude Code ์ ์ฉ |
| ์คํ ์๋ | โก ๋น ๋ฆ (1-2์ด) | ๐ข ๋๋ฆผ (10-30์ด) |
| ์ฌ์ ๋ถ์ | โ ์์ | โ
์๋ ์ง๋จ |
| ์ํ ํ๊ฐ | โ ์์ | โ
์ํฅ ๋ถ์ |
| ์ฌ์ฉ์ ํ์ธ | โ ์์ (์ฆ์ ์คํ) | โ
2๋จ๊ณ ์น์ธ |
| ๋ฐฑ์
์์ฑ | โ
์๋ | โ
์๋ |
| ์ถฉ๋ ํด๊ฒฐ | โ ๏ธ ์๋ | โ
์ง๋ฅํ ๋ณํฉ |
| Git ํตํฉ | โ ์์ | โ
์ปค๋ฐ ์ ์ |
| ๋ฆฌํฌํธ ์์ฑ | โ ์์ | โ
์์ธ ๋ฆฌํฌํธ |
| CI/CD ์ฌ์ฉ | โ
๊ฐ๋ฅ | โ ๋ถ๊ฐ๋ฅ |
| ์คํฌ๋ฆฝํธ ํตํฉ | โ
๊ฐ๋ฅ | โ ๋ถ๊ฐ๋ฅ |
| ํ์ง ๊ฒ์ฆ | โ ์์ | โ
TRUST ๊ฒ์ฆ (์ต์
) |
๐ฏ ๊ถ์ฅ ์ฌ์ฉ ์ผ์ด์ค
moai init . ์ฌ์ฉ ์ถ์ฒ:
- โ ๋น ๋ฅธ ํ ํ๋ฆฟ ์ ๋ฐ์ดํธ๊ฐ ํ์ํ ๋
- โ CI/CD ํ์ดํ๋ผ์ธ์ ํตํฉํ ๋
- โ ์ฌ๋ฌ ํ๋ก์ ํธ๋ฅผ ๋ฐฐ์น๋ก ์ ๋ฐ์ดํธํ ๋
- โ ์๋ํ ์คํฌ๋ฆฝํธ์์ ์ฌ์ฉํ ๋
- โ Claude Code ์์ด ์์ ํ ๋
/alfred:9-update ์ฌ์ฉ ์ถ์ฒ:
- โ Claude Code์์ ๊ฐ๋ฐ ์ค์ผ ๋
- โ ์ ๋ฐ์ดํธ ์ํฅ์ ๋ฏธ๋ฆฌ ํ์ ํ๊ณ ์ถ์ ๋
- โ CLAUDE.md, config.json ์ถฉ๋์ด ์์๋ ๋
- โ Git ์ปค๋ฐ๊ณผ ํจ๊ป ์ ๋ฐ์ดํธํ๊ณ ์ถ์ ๋
- โ ์์ธํ ๋ฆฌํฌํธ๊ฐ ํ์ํ ๋
- โ TRUST 5์์น ๊ธฐ๋ฐ ํ์ง ๊ฒ์ฆ์ด ํ์ํ ๋
๐ ๊ณตํต ์์ ๊ธฐ๋ฅ
๋ ๋ฐฉ๋ฒ ๋ชจ๋ ๋ค์ ์ฌํญ์ ๋ณด์ฅํฉ๋๋ค:
- ๐
.moai/specs/- ์ฌ์ฉ์ SPEC ํ์ผ ์ ๋ ๊ฑด๋๋ฆฌ์ง ์์ - ๐
.moai/reports/- ๋๊ธฐํ ๋ฆฌํฌํธ ๋ณด์กด - ๐ ๋ฐฑ์
์๋ ์์ฑ (
.moai-backup-YYYY-MM-DD) - โ ์์คํ ํ์ผ๋ง ์์ ํ๊ฒ ์ ๋ฐ์ดํธ
- โ
์ง๋ฅํ ๋ณํฉ (
config.json,CLAUDE.md)
moai doctor
์์คํ ์ง๋จ์ ์คํํ์ฌ MoAI-ADK๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ค์น๋์๋์ง ํ์ธํฉ๋๋ค.
์ต์ :
-l, --list-backups: ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฐฑ์ ๋ชฉ๋ก ํ์
์ฌ์ฉ ์์:
# ์์คํ
์ง๋จ ์คํ
moai doctor
# ๋ฐฑ์
๋ชฉ๋ก ํ์ธ
moai doctor -lmoai status
MoAI-ADK ํ๋ก์ ํธ ์ํ๋ฅผ ํ์ํฉ๋๋ค.
์ต์ :
-v, --verbose: ์์ธ ์ํ ์ ๋ณด ํ์-p, --project-path <path>: ํ๋ก์ ํธ ๋๋ ํ ๋ฆฌ ๊ฒฝ๋ก ์ง์ (๊ฒฝ๋ก ํ์)
์ฌ์ฉ ์์:
# ํ์ฌ ๋๋ ํ ๋ฆฌ ์ํ ํ์ธ
moai status
# ์์ธ ์ ๋ณด ํฌํจ
moai status -v
# ํน์ ๊ฒฝ๋ก ํ๋ก์ ํธ ์ํ ํ์ธ
moai status -p /path/to/project
# ์์ธ ์ ๋ณด + ํน์ ๊ฒฝ๋ก
moai status -v -p /path/to/projectmoai restore
๋ฐฑ์ ๋๋ ํ ๋ฆฌ์์ MoAI-ADK๋ฅผ ๋ณต์ํฉ๋๋ค.
์ธ์:
<backup-path>: ๋ณต์ํ ๋ฐฑ์ ๋๋ ํ ๋ฆฌ ๊ฒฝ๋ก (ํ์)
์ต์ :
--dry-run: ๋ณ๊ฒฝ ์์ด ๋ณต์ํ ๋ด์ฉ ๋ฏธ๋ฆฌ๋ณด๊ธฐ--force: ๊ธฐ์กด ํ์ผ ๊ฐ์ ๋ฎ์ด์ฐ๊ธฐ
์ฌ์ฉ ์์:
# ๋ฐฑ์
์์ ๋ณต์ (๋ฏธ๋ฆฌ๋ณด๊ธฐ)
moai restore .moai-backup-2025-10-02 --dry-run
# ์ค์ ๋ณต์ ์คํ
moai restore .moai-backup-2025-10-02
# ๊ฐ์ ๋ณต์ (๊ธฐ์กด ํ์ผ ๋ฎ์ด์ฐ๊ธฐ)
moai restore .moai-backup-2025-10-02 --force์ฐธ๊ณ : MoAI-ADK ํ
ํ๋ฆฟ ์
๋ฐ์ดํธ๋ ํฐ๋ฏธ๋์์ moai init . ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ธ์.
ํ๋ก๊ทธ๋๋งคํฑ API
๊ธฐ๋ณธ ์ฌ์ฉ
import { CLIApp, SystemChecker, TemplateManager } from 'moai-adk';
// CLI ์ฑ ์ด๊ธฐํ
const app = new CLIApp();
await app.run();
// ์์คํ
์ฒดํฌ
const checker = new SystemChecker();
const result = await checker.checkSystem();
// ํ
ํ๋ฆฟ ๊ด๋ฆฌ
const templateManager = new TemplateManager();
await templateManager.copyTemplates(projectPath);์ค์ ํ์ผ (.moai/config.json)
{
"project": {
"name": "my-project",
"mode": "personal",
"language": "typescript"
},
"workflow": {
"enableAutoSync": true,
"gitIntegration": true
}
}TRUST 5์์น
๋ชจ๋ ๊ฐ๋ฐ ๊ณผ์ ์์ TRUST ์์น์ ์ค์ํฉ๋๋ค:
T - Test First (ํ ์คํธ ์ฐ์ )
SPEC โ Test โ Code ์ฌ์ดํด:
- @SPEC: EARS ํ์ ๋ช ์ธ์ ์ฐ์ ์์ฑ
- RED:
@TESTTAG - ์คํจํ๋ ํ ์คํธ ์์ฑ - GREEN:
@CODETAG - ์ต์ ๊ตฌํ์ผ๋ก ํ ์คํธ ํต๊ณผ - REFACTOR:
@CODETAG - ์ฝ๋ ํ์ง ๊ฐ์
R - Readable (๊ฐ๋ ์ฑ)
์ฝ๋ ์ ์ฝ:
- ํ์ผ๋น โค300 LOC
- ํจ์๋น โค50 LOC
- ๋งค๊ฐ๋ณ์ โค5๊ฐ
- ๋ณต์ก๋ โค10
U - Unified (ํตํฉ์ฑ)
SPEC ๊ธฐ๋ฐ ์ํคํ ์ฒ:
- ๋ชจ๋ ๊ฐ ๋ช ํํ ์ฑ ์ ๋ถ๋ฆฌ
- ํ์ ์์ ์ฑ ๋ณด์ฅ
- ์ธ์ด๋ณ ๊ฒฝ๊ณ๋ฅผ SPEC์ด ์ ์
S - Secured (๋ณด์์ฑ)
์ ๋ ฅ ๊ฒ์ฆ:
- ๋ชจ๋ ์ฌ์ฉ์ ์ ๋ ฅ ๊ฒ์ฆ (์ ๊ท์, ํ์ดํธ๋ฆฌ์คํธ)
- ํ์ผ ์ ๋ก๋ ์ ํ (ํ์ฅ์, ํฌ๊ธฐ, MIME ํ์ )
์ฃผ์ ์ทจ์ฝ์ ๋ฐฉ์ด:
- SQL Injection: Prepared Statement, ORM ์ฌ์ฉ
- XSS: HTML ์ด์ค์ผ์ดํ, CSP ํค๋
- CSRF: CSRF ํ ํฐ, SameSite ์ฟ ํค
- ๋น๋ฐ๋ฒํธ: bcrypt/argon2 ํด์ฑ (์ต์ 10 ๋ผ์ด๋)
๋ณด์ ์ค์บ๋:
- ์ ์ ๋ถ์ ๋๊ตฌ (Snyk, OWASP Dependency-Check)
- ํ๊ฒฝ ๋ณ์ ๋ณด์ (
.envGit ์ ์ธ)
T - Trackable (์ถ์ ์ฑ)
@TAG ์์คํ ์ผ๋ก ์์ ํ ์ถ์ ์ฑ:
@SPECโ@TESTโ@CODEโ@DOC์ฒด์ธ- ์ฝ๋ ์ง์ ์ค์บ์ผ๋ก ๋ฌด๊ฒฐ์ฑ ๊ฒ์ฆ
- ๊ณ ์ TAG ์๋ ํ์ง
๋ฌธ์ ํด๊ฒฐ
์์ฃผ ๋ฐ์ํ๋ ๋ฌธ์
1. /alfred:2-build ์คํ ์ "SPEC not found" ์๋ฌ
์ฆ์: TDD ๊ตฌํ ์ค SPEC ํ์ผ์ ์ฐพ์ ์ ์๋ค๋ ์๋ฌ ๋ฐ์
์์ธ: /alfred:1-spec ๋จ๊ณ๋ฅผ ๊ฑด๋๋ฐ์๊ฑฐ๋, SPEC ํ์ผ ๊ฒฝ๋ก๊ฐ ์๋ชป๋จ
ํด๊ฒฐ ๋ฐฉ๋ฒ:
# 1. SPEC ํ์ผ ์กด์ฌ ์ฌ๋ถ ํ์ธ
ls .moai/specs/SPEC-*.md
# 2. SPEC์ด ์๋ค๋ฉด ๋จผ์ ์์ฑ
/alfred:1-spec "๊ธฐ๋ฅ ์ค๋ช
"
# 3. SPEC ID ํ์ธ ํ ์ฌ์คํ
/alfred:2-build SPEC-ID2. ํ ์คํธ ์คํจ ์ ๋ณต๊ตฌ
์ฆ์: /alfred:2-build ์คํ ํ ํ
์คํธ๊ฐ ๊ณ์ ์คํจ
์์ธ: ์ฃ์ง ์ผ์ด์ค ๋๋ฝ, ์์กด์ฑ ๋ฌธ์ , ํ๊ฒฝ ๋ณ์ ๋ฏธ์ค์
ํด๊ฒฐ ๋ฐฉ๋ฒ:
# 1. ํ
์คํธ ์๋ ์คํ์ผ๋ก ์ ํํ ์๋ฌ ํ์ธ
npm test # ๋๋ bun test, pytest ๋ฑ
# 2. debug-helper ์์ด์ ํธ ํธ์ถ
@agent-debug-helper "ํ
์คํธ ์คํจ ์๋ฌ ๋ฉ์์ง"
# 3. ํ๊ฒฝ ๋ณ์ ํ์ธ
cat .env.example # ํ์ํ ํ๊ฒฝ ๋ณ์ ํ์ธ
cp .env.example .env # ํ๊ฒฝ ๋ณ์ ํ์ผ ์์ฑ
# 4. ์์กด์ฑ ์ฌ์ค์น
rm -rf node_modules && npm install3. TAG ์ฒด์ธ ๋์ด์ง ๊ฒฝ๊ณ
์ฆ์: /alfred:3-sync ์คํ ์ "๊ณ ์ TAG ๋ฐ๊ฒฌ" ๊ฒฝ๊ณ
์์ธ: SPEC ์์ด CODE๋ง ์์ฑํ๊ฑฐ๋, TAG ID ๋ถ์ผ์น
ํด๊ฒฐ ๋ฐฉ๋ฒ:
# 1. ๊ณ ์ TAG ์ฐพ๊ธฐ
rg '@CODE:' -n src/ # CODE TAG ๋ชฉ๋ก
rg '@SPEC:' -n .moai/specs/ # SPEC TAG ๋ชฉ๋ก
# 2. ๋๋ฝ๋ SPEC ์์ฑ
/alfred:1-spec "ํด๋น ๊ธฐ๋ฅ ์ค๋ช
"
# 3. TAG ID ์ผ์น์ํค๊ธฐ
# CODE์ SPEC์ ID๊ฐ ๋์ผํ์ง ํ์ธ (์: AUTH-001)
# 4. ์ฌ๊ฒ์ฆ
/alfred:3-sync4. Git ๋ธ๋์น ์ถฉ๋
์ฆ์: SPEC ์์ฑ ์ ๋ธ๋์น ์์ฑ ์คํจ
์์ธ: ๋์ผํ ์ด๋ฆ์ ๋ธ๋์น๊ฐ ์ด๋ฏธ ์กด์ฌ
ํด๊ฒฐ ๋ฐฉ๋ฒ:
# 1. ๊ธฐ์กด ๋ธ๋์น ํ์ธ
git branch -a
# 2. ๊ธฐ์กด ๋ธ๋์น๋ก ์ ํ (๊ณ์ ์์
ํ๋ ค๋ฉด)
git checkout feature/SPEC-XXX-YYY
# 3. ๋๋ ์ ๋ธ๋์น ๊ฐ์ ์์ฑ (์ฒ์๋ถํฐ ๋ค์ ์์)
git branch -D feature/SPEC-XXX-YYY
/alfred:1-spec "๊ธฐ๋ฅ ์ค๋ช
"5. ๊ถํ ์๋ฌ (Permission Denied)
์ฆ์: moai init ์คํ ์ ๊ถํ ์๋ฌ
์์ธ: ํ์ผ ์คํ ๊ถํ ๋ถ์กฑ
ํด๊ฒฐ ๋ฐฉ๋ฒ:
# 1. .moai/ ๋๋ ํ ๋ฆฌ ๊ถํ ํ์ธ
ls -la .moai/
# 2. ์คํ ๊ถํ ์ถ๊ฐ
chmod -R 755 .moai/
# 3. ์ฌ์๋
moai init .6. ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง 85% ๋ฏธ๋ง
์ฆ์: TRUST ๊ฒ์ฆ ์คํจ - ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง ๋ถ์กฑ
์์ธ: ์ฃ์ง ์ผ์ด์ค ํ ์คํธ ๋๋ฝ
ํด๊ฒฐ ๋ฐฉ๋ฒ:
# 1. ์ปค๋ฒ๋ฆฌ์ง ๋ฆฌํฌํธ ํ์ธ
npm test -- --coverage # ๋๋ bun test --coverage
# 2. ๋๋ฝ๋ ๋ธ๋์น ํ์ธ
# ์ปค๋ฒ๋ฆฌ์ง ๋ฆฌํฌํธ์์ ๋นจ๊ฐ์(๋ฏธํ
์คํธ) ๋ผ์ธ ํ์ธ
# 3. ์ฃ์ง ์ผ์ด์ค ํ
์คํธ ์ถ๊ฐ
# - null/undefined ์
๋ ฅ
# - ๋น ๋ฐฐ์ด/๊ฐ์ฒด
# - ๊ฒฝ๊ณ๊ฐ (0, -1, ์ต๋๊ฐ)
# - ์๋ฌ ์ผ์ด์ค
# 4. ์ฌ์คํ
/alfred:2-build SPEC-ID7. ์ค์น ์คํจ
๊ถํ ๋ฌธ์ :
sudo npm install -g moai-adk์บ์ ๋ฌธ์ :
npm cache clean --force
npm install -g moai-adk8. ๋ช ๋ น์ด ์ธ์ ์ ๋จ
PATH ํ์ธ:
echo $PATH
npm list -g --depth=0์ ธ ์ฌ์์:
source ~/.bashrc # bash
source ~/.zshrc # zsh9. Claude Code ์ฐ๋ ๋ฌธ์
.claude/settings.jsonํ์ผ ํ์ธ- Claude Code ์ต์ ๋ฒ์ ์ฌ์ฉ ํ์ธ
- ์์ด์ ํธ ํ์ผ ๊ถํ ํ์ธ
๋ก๊ทธ ํ์ธ
๋ฌธ์ ์์ธ ํ์ ์ ์ํ ๋ก๊ทธ ์์น:
# MoAI-ADK ์์คํ
๋ก๊ทธ
~/.moai/logs/moai.log
# ์๋ฌ ๋ก๊ทธ
~/.moai/logs/error.log
# ํ๋ก์ ํธ๋ณ ๋ก๊ทธ
.moai/logs/
# Claude Code ๋ก๊ทธ
~/.claude/logs/๊ธด๊ธ ๋ณต๊ตฌ
์ฌ๊ฐํ ๋ฌธ์ ๋ฐ์ ์ ๋ฐฑ์ ์์ ๋ณต์:
# 1. ๋ฐฑ์
๋ชฉ๋ก ํ์ธ
moai doctor -l
# 2. ์ต์ ๋ฐฑ์
์ผ๋ก ๋ณต์ (๋ฏธ๋ฆฌ๋ณด๊ธฐ)
moai restore .moai-backup-YYYY-MM-DD --dry-run
# 3. ์ค์ ๋ณต์
moai restore .moai-backup-YYYY-MM-DD๊ฐ๋ฐ ์ฐธ์ฌ
๊ธฐ์ฌ ๋ฐฉ๋ฒ
- Repository Fork
- ๊ธฐ๋ฅ ๋ธ๋์น ์์ฑ (
git checkout -b feature/new-feature) - ๋ณ๊ฒฝ์ฌํญ ์ปค๋ฐ (
git commit -am 'Add new feature') - ๋ธ๋์น ํธ์ (
git push origin feature/new-feature) - Pull Request ์์ฑ
๊ฐ๋ฐ ํ๊ฒฝ ์ค์
# ์ ์ฅ์ ํด๋ก
git clone https://github.com/modu-ai/moai-adk.git
cd moai-adk/moai-adk-ts
# ์์กด์ฑ ์ค์น (Bun ๊ถ์ฅ)
bun install
# ๊ฐ๋ฐ ๋ชจ๋ ์คํ
bun run dev
# ๋น๋
bun run build
# ํ
์คํธ
bun test
# ์ฝ๋ ํ์ง ๊ฒ์ฌ
bun run check์ฝ๋ฉ ๊ท์น
- TRUST 5์์น ์ค์
- @TAG ์์คํ ์ ์ฉ
- TypeScript strict ๋ชจ๋ ์ฌ์ฉ
- โค50 LOC per function
- Test coverage โฅ85%
๐ Contributors
MoAI-ADK ํ๋ก์ ํธ์ ๊ธฐ์ฌํด์ฃผ์ ๋ถ๋ค๊ป ๊ฐ์ฌ๋๋ฆฝ๋๋ค:
- @Workuul - ์ฌ๋ณผ๋ฆญ ๋งํฌ ์คํ ๋ฌธ์ ์์ (PR #1)
realpathSync()์ ์ฉ์ผ๋ก ๊ธ๋ก๋ฒ ์ค์น ์ด์ ํด๊ฒฐ- REPL/eval ํ๊ฒฝ ๋ฐฉ์ด ๋ก์ง ์ถ๊ฐ
- JSDoc ๋ฌธ์ํ ๊ฐ์
๋ฌธ์ ๋ฐ ์ง์
- ๐ Issues: GitHub Issues
- ๐ฌ Discussions: GitHub Discussions
- ๐ฆ npm Package: moai-adk
Made with MoAI's ๐ชฟ
๋ผ์ด์ ์ค
์ด ํ๋ก์ ํธ๋ MIT License๋ฅผ ๋ฐ๋ฆ ๋๋ค.
