Skip to content

Latest commit

ย 

History

History
316 lines (207 loc) ยท 19.9 KB

File metadata and controls

316 lines (207 loc) ยท 19.9 KB

Open Design ๊ธฐ์—ฌ ๊ฐ€์ด๋“œ

๊ธฐ์—ฌ๋ฅผ ๊ณ ๋ฏผํ•˜๊ณ  ์žˆ๋‹ค๋‹ˆ ๊ณ ๋ง™์Šต๋‹ˆ๋‹ค. OD๋Š” ์ผ๋ถ€๋Ÿฌ ์ž‘๊ฒŒ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ฐ€์น˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ ์ฝ”๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ ํŒŒ์ผ(skill, design system, ํ”„๋กฌํ”„ํŠธ ์กฐ๊ฐ)์— ๋‹ด๊ฒจ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ฐ€์žฅ ํšจ๊ณผ๊ฐ€ ํฐ ๊ธฐ์—ฌ๋Š” ๋Œ€๊ฐœ ํด๋” ํ•˜๋‚˜, Markdown ํŒŒ์ผ ํ•˜๋‚˜, ๋˜๋Š” PR ํ•œ ๊ฑด ํฌ๊ธฐ์˜ adapter์ž…๋‹ˆ๋‹ค.

์ด ๋ฌธ์„œ๋Š” ์–ด๋–ค ์ข…๋ฅ˜์˜ ๊ธฐ์—ฌ๋ฅผ ์–ด๋””์„œ ์‹œ์ž‘ํ•ด์•ผ ํ•˜๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  PR์ด ๋จธ์ง€๋˜๋ ค๋ฉด ์–ด๋–ค ๊ธฐ์ค€์„ ๋„˜์–ด์•ผ ํ•˜๋Š”์ง€ ์ •ํ™•ํžˆ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.

English ยท Portuguรชs (Brasil) ยท Deutsch ยท Franรงais ยท ็ฎ€ไฝ“ไธญๆ–‡ ยท ๆ—ฅๆœฌ่ชž ยท ํ•œ๊ตญ์–ด


์˜คํ›„ ํ•œ๋‚˜์ ˆ์ด๋ฉด ๋๋‚˜๋Š” ์„ธ ๊ฐ€์ง€ ๊ธฐ์—ฌ

ํ•˜๊ณ  ์‹ถ์€ ์ผ ์‹ค์ œ๋กœ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ ์œ„์น˜ ๊ทœ๋ชจ
OD๊ฐ€ ์ƒˆ๋กœ์šด ์ข…๋ฅ˜์˜ artifact๋ฅผ ๋ Œ๋”๋งํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ (์ฒญ๊ตฌ์„œ, iOS ์„ค์ • ํ™”๋ฉด, ํ•œ ์žฅ์งœ๋ฆฌ ๋ฌธ์„œ ๋“ฑ) Skill skills/<your-skill>/ ํด๋” ํ•˜๋‚˜, ํŒŒ์ผ ์•ฝ 2๊ฐœ
OD๊ฐ€ ์ƒˆ ๋ธŒ๋žœ๋“œ์˜ ๋น„์ฃผ์–ผ ์–ธ์–ด๋ฅผ ๊ตฌ์‚ฌํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ Design System design-systems/<brand>/DESIGN.md Markdown ํŒŒ์ผ ํ•˜๋‚˜
์ƒˆ coding-agent CLI ์—ฐ๊ฒฐํ•˜๊ธฐ Agent adapter apps/daemon/src/agents.ts ๋ฐฐ์—ด ํ•˜๋‚˜์— ์•ฝ 10์ค„
๊ธฐ๋Šฅ ์ถ”๊ฐ€, ๋ฒ„๊ทธ ์ˆ˜์ •, open-codesign์—์„œ UX ํŒจํ„ด ๊ฐ€์ ธ์˜ค๊ธฐ ์ฝ”๋“œ apps/web/src/, apps/daemon/ ์ผ๋ฐ˜ PR
๋ฌธ์„œ ๊ฐœ์„ , ์ผ๋ถ€ ์„น์…˜์„ Franรงais / Deutsch / ไธญๆ–‡๋กœ ๋ฒˆ์—ญ, ์˜คํƒ€ ์ˆ˜์ • ๋ฌธ์„œ README.md, README.fr.md, README.de.md, README.zh-CN.md, docs/, QUICKSTART.md PR ํ•œ ๊ฑด

์–ด๋А ์ชฝ์— ํ•ด๋‹นํ•˜๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค๋ฉด ๋จผ์ € discussion์ด๋‚˜ issue๋ฅผ ์—ด์–ด์ฃผ์„ธ์š”. ์ ์ ˆํ•œ ์œ„์น˜๋ฅผ ์•ˆ๋‚ดํ•ด ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.


๋กœ์ปฌ ํ™˜๊ฒฝ ์„ค์ •

ํ•œ ํŽ˜์ด์ง€์งœ๋ฆฌ ์ „์ฒด ์„ค์ • ์•ˆ๋‚ด๋Š” QUICKSTART.ko.md์— ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์—ฌ์ž๋ฅผ ์œ„ํ•œ ์š”์•ฝ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

git clone https://github.com/nexu-io/open-design.git
cd open-design
corepack enable           # packageManager์— ๊ณ ์ •๋œ pnpm์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค
pnpm install
pnpm tools-dev run web    # daemon + web ํฌ๊ทธ๋ผ์šด๋“œ ๋ฃจํ”„
pnpm typecheck            # tsc -b --noEmit
pnpm --filter @open-design/web build  # ํ•„์š”ํ•  ๋•Œ web ํŒจํ‚ค์ง€ ๋นŒ๋“œ

Node ~24์™€ pnpm 10.33.x๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. nvm์ด๋‚˜ fnm์€ ์„ ํƒ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. Node๋ฅผ ๊ทธ๋ ‡๊ฒŒ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒŒ ํŽธํ•˜๋‹ค๋ฉด nvm install 24 && nvm use 24 ๋˜๋Š” fnm install 24 && fnm use 24๋ฅผ ์‹คํ–‰ํ•˜์„ธ์š”. macOS, Linux, WSL2๊ฐ€ ์ฃผ์š” ์ง€์› ํ™˜๊ฒฝ์ž…๋‹ˆ๋‹ค. Windows ๋„ค์ดํ‹ฐ๋ธŒ๋„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ํ”ํžˆ ๊ฒช๋Š” ์„ค์ • ๋ฌธ์ œ๋Š” docs/windows-troubleshooting.md๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

Docker ์„ค์ •

Node.js๋‚˜ pnpm์„ ์„ค์น˜ํ•˜์ง€ ์•Š๊ณ ๋„ Open Design์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์ „ ์ค€๋น„

Compose v2๊ฐ€ ํฌํ•จ๋œ Docker Desktop์ด ์„ค์น˜๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.

docker compose version

Open Design ์‹คํ–‰

cd deploy
docker compose up -d

๋ธŒ๋ผ์šฐ์ €์—์„œ ๋‹ค์Œ ์ฃผ์†Œ๋ฅผ ์—ฝ๋‹ˆ๋‹ค.

http://localhost:7456

์ž์ฃผ ์“ฐ๋Š” ๋ช…๋ น์–ด

# ๋กœ๊ทธ ๋ณด๊ธฐ
docker compose logs -f

# ์ปจํ…Œ์ด๋„ˆ ์žฌ์‹œ์ž‘
docker compose restart

# ์ปจํ…Œ์ด๋„ˆ ์ค‘์ง€
docker compose down

# ์ตœ์‹  ์ด๋ฏธ์ง€ ๋ฐ›๊ธฐ
docker compose pull
docker compose up -d

์„ ํƒ์  ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์žฌ์ •์˜

deploy/.env ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

OPEN_DESIGN_PORT=7456
OPEN_DESIGN_MEM_LIMIT=384m
OPEN_DESIGN_ALLOWED_ORIGINS=https://yourdomain.com
OPEN_DESIGN_IMAGE=ghcr.io/nexu-io/od:latest

ํ”„๋กœ์ ํŠธ์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ์ดํ„ฐ๋Š” Docker ๋ณผ๋ฅจ์— ์ž๋™์œผ๋กœ ๋ณด์กด๋ฉ๋‹ˆ๋‹ค.

์ „์ฒด Docker ๊ฐ€์ด๋“œ์™€ ๊ณ ๊ธ‰ ์„ค์ •์€ QUICKSTART.ko.md๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.


์ƒˆ Skill ์ถ”๊ฐ€ํ•˜๊ธฐ

skill์€ skills/ ์•„๋ž˜์— ๋‘๋Š” ํด๋”๋กœ, ๋ฃจํŠธ์— SKILL.md๋ฅผ ๋‘๊ณ  Claude Code์˜ SKILL.md ๊ทœ์•ฝ์— ์šฐ๋ฆฌ์˜ ์„ ํƒ์  od: ํ™•์žฅ์„ ๋”ํ•œ ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค. ๋“ฑ๋ก ์ ˆ์ฐจ๋Š” ์—†์Šต๋‹ˆ๋‹ค. ํด๋”๋ฅผ ๋„ฃ๊ณ  daemon์„ ์žฌ์‹œ์ž‘ํ•˜๋ฉด picker์— ๋ฐ”๋กœ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

โ†’ ์ „์ฒด ๊ฐ€์ด๋“œ๋Š” docs/skills-contributing.md๋ฅผ ๋ณด์„ธ์š”

์ด ๋ฌธ์„œ๊ฐ€ ๋‹ค์Œ ๋‚ด์šฉ์„ ๋‹จ๊ณ„๋ณ„๋กœ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.

  • ๋น ๋ฅธ ์‹œ์ž‘ โ€” ์ €์žฅ์†Œ ํด๋ก  โ†’ ๊ฐ€์žฅ ๋น„์Šทํ•œ ๊ธฐ์กด skill ๋ณต์‚ฌ โ†’ pnpm tools-dev run web ์‹คํ–‰ โ†’ picker ํ™•์ธ โ†’ PR ์—ด๊ธฐ.
  • skill์ด๋ž€ ๋ฌด์—‡์ด๊ณ  ๋ฌด์—‡์ด ์•„๋‹Œ๊ฐ€ โ€” ๋‹น์‹ ์˜ ์•„์ด๋””์–ด๊ฐ€ ์‚ฌ์‹ค์€ ๊ธฐ๋Šฅ์ด๋‚˜ vendor ์—ฐ๋™์ด์—ˆ๋‹ค๋ฉด, ์ผ์ฃผ์ผ์„ ์•„๊ปด์ค๋‹ˆ๋‹ค.
  • skill ๊ตฌ์กฐ โ€” ์ตœ์†Œํ•œ์˜ ํด๋” ๊ตฌ์„ฑ๊ณผ SKILL.md frontmatter ์น˜ํŠธ์‹œํŠธ.
  • ๋กœ์ปฌ ์‹คํ–‰ โ€” ์‹ค์ œ๋กœ ์ค‘์š”ํ•œ ๋„ค ๊ฐ€์ง€ ๋ช…๋ น์–ด.
  • ๋จธ์ง€ ๊ธฐ์ค€ โ€” ๋ฆฌ๋ทฐ์–ด๊ฐ€ ํ™•์ธํ•  ํ•ญ๋ชฉ์„ ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌํ•ด ์“ธ ์ˆ˜ ์žˆ๋Š” ์ฒดํฌ๋ฆฌ์ŠคํŠธ.
  • PR ์„ค๋ช… ํ…œํ”Œ๋ฆฟ โ€” PR ๋ณธ๋ฌธ์— ๋ถ™์—ฌ๋„ฃ๊ณ  ์ฑ„์šฐ๋ฉด ๋ฉ๋‹ˆ๋‹ค.
  • ์ž์ฃผ ๊ฑฐ์ ˆ๋˜๋Š” ํŒจํ„ด โ€” ์ตœ๊ทผ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•œ ๊ฑฐ์ ˆ ์‚ฌ์œ ์™€ ๊ตฌ์ฒด์ ์ธ ์˜ˆ์‹œ.

ํ”„๋กœํ† ์ฝœ ๋ช…์„ธ(์ „์ฒด frontmatter ๋ฌธ๋ฒ• โ€” ํƒ€์ž…์ด ์ง€์ •๋œ ์ž…๋ ฅ, ์Šฌ๋ผ์ด๋” ํŒŒ๋ผ๋ฏธํ„ฐ, craft ์ฐธ์กฐ, ํ…Œ์ŠคํŠธ ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ)๋Š” docs/skills-protocol.md์— ๋ณ„๋„๋กœ ์ •๋ฆฌ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.


์ƒˆ Design System ์ถ”๊ฐ€ํ•˜๊ธฐ

design system์€ design-systems/<slug>/ ์•„๋ž˜์— ๋‘๋Š” DESIGN.md ํŒŒ์ผ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ํŒŒ์ผ ํ•˜๋‚˜๋ฟ, ์ฝ”๋“œ๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๋„ฃ๊ณ  daemon์„ ์žฌ์‹œ์ž‘ํ•˜๋ฉด picker์— ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„๋กœ ๋ฌถ์—ฌ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

design system ํด๋” ๊ตฌ์„ฑ

design-systems/your-brand/
โ””โ”€โ”€ DESIGN.md

DESIGN.md ํ˜•์‹

# Design System Inspired by YourBrand

> Category: Developer Tools
> One-line summary that shows in the picker preview.

## 1. Visual Theme & Atmosphere
โ€ฆ

## 2. Color
- Primary: `#hex` / `oklch(...)`
- โ€ฆ

## 3. Typography
โ€ฆ

## 4. Spacing & Grid
## 5. Layout & Composition
## 6. Components
## 7. Motion & Interaction
## 8. Voice & Brand
## 9. Anti-patterns

9๊ฐœ ์„น์…˜ ๊ตฌ์กฐ๋Š” ๊ณ ์ •์ž…๋‹ˆ๋‹ค. skill ๋ณธ๋ฌธ์ด ์ด ๊ตฌ์กฐ๋ฅผ grep์œผ๋กœ ์ฐพ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ฒซ H1์ด picker ๋ผ๋ฒจ์ด ๋˜๊ณ (Design System Inspired by ์ ‘๋‘์‚ฌ๋Š” ์ž๋™์œผ๋กœ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค), > Category: โ€ฆ ์ค„์ด ์–ด๋А ๊ทธ๋ฃน์— ๋“ค์–ด๊ฐˆ์ง€ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด ์นดํ…Œ๊ณ ๋ฆฌ๋Š” design-systems/README.md์— ์ •๋ฆฌ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ธŒ๋žœ๋“œ๊ฐ€ ์ •๋ง ์–ด๋””์—๋„ ์•ˆ ๋งž์œผ๋ฉด ์ƒˆ ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€๋งŒ, ๋จผ์ € ๊ธฐ์กด ์นดํ…Œ๊ณ ๋ฆฌ๋ถ€ํ„ฐ ๊ฒ€ํ† ํ•˜์„ธ์š”.

์ƒˆ design system ๋จธ์ง€ ๊ธฐ์ค€

  1. 9๊ฐœ ์„น์…˜์ด ๋ชจ๋‘ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฐพ๊ธฐ ์–ด๋ ค์šด ๋ฐ์ดํ„ฐ(์˜ˆ: motion ํ† ํฐ)๋Š” ์„น์…˜ ๋ณธ๋ฌธ์ด ๋น„์–ด ์žˆ์–ด๋„ ๊ดœ์ฐฎ์ง€๋งŒ, ์ œ๋ชฉ์€ ๋ฐ˜๋“œ์‹œ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์—†์œผ๋ฉด ํ”„๋กฌํ”„ํŠธ์˜ grep์ด ๊นจ์ง‘๋‹ˆ๋‹ค.
  2. hex ์ฝ”๋“œ๋Š” ์‹ค์ œ ๊ฐ’์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์–ต์ด๋‚˜ AI ์ถ”์ธก์ด ์•„๋‹ˆ๋ผ ๋ธŒ๋žœ๋“œ์˜ ์‚ฌ์ดํŠธ๋‚˜ ์ œํ’ˆ์—์„œ ์ง์ ‘ ์ถ”์ถœํ•˜์„ธ์š”. README์˜ "brand-spec extraction" 5๋‹จ๊ณ„ ํ”„๋กœํ† ์ฝœ์€ maintainer์—๊ฒŒ๋„ ๋˜‘๊ฐ™์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.
  3. ๊ฐ•์กฐ ์ƒ‰์ƒ์˜ OKLch ๊ฐ’์€ ์žˆ์œผ๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค. ๋ผ์ดํŠธ/๋‹คํฌ ๋ชจ๋“œ์—์„œ ํŒ”๋ ˆํŠธ๊ฐ€ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋ณด๊ฐ„๋ฉ๋‹ˆ๋‹ค.
  4. ๋งˆ์ผ€ํŒ… ๋ฌธ๊ตฌ๋Š” ๋นผ์„ธ์š”. ๋ธŒ๋žœ๋“œ ์Šฌ๋กœ๊ฑด์€ design ํ† ํฐ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ž˜๋ผ๋‚ด์„ธ์š”.
  5. slug๋Š” ASCII๋กœ ์ž‘์„ฑํ•˜์„ธ์š”. linear.app์€ linear-app์ด ๋˜๊ณ  x.ai๋Š” x-ai๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ๊ฐ€์ ธ์˜จ 69๊ฐœ ์‹œ์Šคํ…œ์ด ์ด ๊ทœ์น™์„ ๋”ฐ๋ฅด๋‹ˆ ๊ทธ๋Œ€๋กœ ๋งž์ถ”์„ธ์š”.

์šฐ๋ฆฌ๊ฐ€ ์ œ๊ณตํ•˜๋Š” 69๊ฐœ ์ œํ’ˆ ์‹œ์Šคํ…œ์€ scripts/sync-design-systems.ts๋ฅผ ํ†ตํ•ด VoltAgent/awesome-design-md์—์„œ ๊ฐ€์ ธ์˜จ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ธŒ๋žœ๋“œ๊ฐ€ ๊ทธ upstream์— ์†ํ•œ๋‹ค๋ฉด ๊ทธ์ชฝ์— ๋จผ์ € PR์„ ๋ณด๋‚ด์„ธ์š”. ๋‹ค์Œ ๋™๊ธฐํ™” ๋•Œ ์ž๋™์œผ๋กœ ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค. design-systems/ ํด๋”๋Š” upstream์— ๋งž์ง€ ์•Š๋Š” ์‹œ์Šคํ…œ๊ณผ, ์šฐ๋ฆฌ๊ฐ€ ์ง์ ‘ ์ž‘์„ฑํ•œ ์Šคํƒ€ํ„ฐ 2๊ฐœ๋ฅผ ์œ„ํ•œ ๊ณณ์ž…๋‹ˆ๋‹ค.


์ƒˆ coding-agent CLI ์ถ”๊ฐ€ํ•˜๊ธฐ

์ƒˆ agent(์˜ˆ: ์–ด๋А ์‹ ์ƒ ์—…์ฒด์˜ foo-coder CLI)๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์ผ์€ apps/daemon/src/agents.ts์— ํ•ญ๋ชฉ ํ•˜๋‚˜๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

{
  id: 'foo',
  name: 'Foo Coder',
  bin: 'foo',
  versionArgs: ['--version'],
  buildArgs: (prompt) => ['exec', '-p', prompt],
  streamFormat: 'plain',           // ๋˜๋Š” ํ•ด๋‹น ํ˜•์‹์„ ์ง€์›ํ•˜๋ฉด 'claude-stream-json'
}

์ด๊ฒŒ ์ „๋ถ€์ž…๋‹ˆ๋‹ค. daemon์ด PATH์—์„œ ๊ฐ์ง€ํ•˜๊ณ , picker์— ๋‚˜ํƒ€๋‚˜๋ฉฐ, ์ฑ„ํŒ… ๊ฒฝ๋กœ๊ฐ€ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. CLI๊ฐ€ (Claude Code์˜ --output-format stream-json์ฒ˜๋Ÿผ) ํƒ€์ž…์ด ์ง€์ •๋œ ์ด๋ฒคํŠธ๋ฅผ ๋‚ด๋ณด๋‚ธ๋‹ค๋ฉด apps/daemon/src/claude-stream.ts์— ํŒŒ์„œ๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ  streamFormat: 'claude-stream-json'์œผ๋กœ ์„ค์ •ํ•˜์„ธ์š”.

๋จธ์ง€ ๊ธฐ์ค€:

  1. ์ƒˆ agent๋กœ ์‹ค์ œ ์„ธ์…˜์ด ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋™์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. artifact๊ฐ€ ์ŠคํŠธ๋ฆฌ๋ฐ์œผ๋กœ ํ†ต๊ณผํ•œ ๊ฒƒ์„ ๋ณด์—ฌ์ฃผ๋Š” daemon ๋กœ๊ทธ๋ฅผ PR ์„ค๋ช…์— ๋ถ™์—ฌ๋„ฃ์œผ์„ธ์š”.
  2. CLI์˜ ํŠน์ด์‚ฌํ•ญ์„ **docs/agent-adapters.md**์— ์ •๋ฆฌํ•˜์„ธ์š”(ํ‚ค ํŒŒ์ผ์ด ํ•„์š”ํ•œ๊ฐ€? ์ด๋ฏธ์ง€ ์ž…๋ ฅ์„ ์ง€์›ํ•˜๋Š”๊ฐ€? ๋น„๋Œ€ํ™”ํ˜• ํ”Œ๋ž˜๊ทธ๋Š” ๋ฌด์—‡์ธ๊ฐ€?).
  3. README์˜ "Supported coding agents" ํ‘œ์— ํ•œ ์ค„์„ ์ถ”๊ฐ€ํ•˜์„ธ์š”.

๋ชจ๋ธ max_tokens ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๊ฐฑ์‹ ํ•˜๊ธฐ

API ๋ชจ๋“œ ์ฑ„ํŒ…์€ ๋งค ์š”์ฒญ๋งˆ๋‹ค upstream provider์— max_tokens๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค. web ํด๋ผ์ด์–ธํŠธ๋Š” apps/web/src/state/maxTokens.ts์˜ 3๋‹จ๊ณ„ ์กฐํšŒ๋กœ ์ด ๊ฐ’์„ ์ •ํ•ฉ๋‹ˆ๋‹ค.

  1. ์„ค์ •์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ง€์ •ํ•œ ๊ฐ’(์žˆ๋Š” ๊ฒฝ์šฐ).
  2. ์—†์œผ๋ฉด apps/web/src/state/litellm-models.json์˜ ๋ชจ๋ธ๋ณ„ ๊ธฐ๋ณธ๊ฐ’. ์ด๋Š” BerriAI/litellm์˜ model_prices_and_context_window.json(MIT)์—์„œ ์ž˜๋ผ์˜จ vendored ๋ฐ์ดํ„ฐ๋กœ, Anthropic, OpenAI, DeepSeek, Groq, Together, Mistral, Gemini, Bedrock, Vertex, OpenRouter ๋“ฑ ์•ฝ 2์ฒœ ๊ฐœ์˜ ์ฑ„ํŒ… ๋ชจ๋ธ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
  3. ๊ทธ๋ž˜๋„ ์—†์œผ๋ฉด FALLBACK_MAX_TOKENS = 8192.

์ƒˆ๋กœ ์ถœ์‹œ๋œ ๋ชจ๋ธ์„ ๋ฐ˜์˜ํ•˜๋ ค๋ฉด vendored JSON์„ ๋‹ค์‹œ ์ƒ์„ฑํ•˜์„ธ์š”.

node --experimental-strip-types scripts/sync-litellm-models.ts

์ด ์Šคํฌ๋ฆฝํŠธ๋Š” LiteLLM์˜ ์นดํƒˆ๋กœ๊ทธ๋ฅผ ๊ฐ€์ ธ์™€ mode: 'chat' ํ•ญ๋ชฉ๋งŒ ๊ฑธ๋Ÿฌ๋‚ด๊ณ , ๊ฐ ํ•ญ๋ชฉ์„ max_output_tokens(์—†์œผ๋ฉด max_tokens)๋กœ ๋งคํ•‘ํ•œ ๋’ค ์ •๋ ฌ๋œ ์Šค๋ƒ…์ƒท์„ ์”๋‹ˆ๋‹ค. ๊ฐฑ์‹ ์„ ์œ ๋ฐœํ•œ PR๊ณผ ํ•จ๊ป˜ ๋‹ค์‹œ ์ƒ์„ฑ๋œ litellm-models.json์„ ์ปค๋ฐ‹ํ•˜์„ธ์š”.

maxTokens.ts์˜ OVERRIDES ํ‘œ๋Š” ์‹ค์ œ๋กœ ์“ฐ๋Š” ๋ชจ๋ธ id์— ๋Œ€ํ•ด LiteLLM์— ๊ฐ’์ด ์—†๊ฑฐ๋‚˜ ํ‹€๋ฆฐ ๋“œ๋ฌธ ๊ฒฝ์šฐ๋ฅผ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด mimo-v2.5-pro๊ฐ€ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค(LiteLLM์€ MiMo๋ฅผ openrouter/xiaomi/...์™€ novita/xiaomimimo/... ๋ณ„์นญ์œผ๋กœ๋งŒ ์ œ๊ณตํ•˜๋Š”๋ฐ, ๋‘˜ ๋‹ค Xiaomi ์ง์ ‘ API๊ฐ€ ์“ฐ๋Š” ์ •์‹ id์™€ ๋งž์ง€ ์•Š์Šต๋‹ˆ๋‹ค). ์ด ํ‘œ๋Š” ์ž‘๊ฒŒ ์œ ์ง€ํ•˜์„ธ์š”. LiteLLM์ด ์ œ๋Œ€๋กœ ๋‹ค๋ฃจ๋Š” ๊ฒƒ์€ ๋ชจ๋‘ upstream์— ๋‘๋Š” ๊ฒŒ ๋งž์Šต๋‹ˆ๋‹ค.


ํ˜„์ง€ํ™” ์œ ์ง€๋ณด์ˆ˜

๋…์ผ์–ด๋Š” ๊ฒฉ์‹ ์žˆ๋Š” Sie๋ฅผ ์”๋‹ˆ๋‹ค. OD๋Š” 1์ธ ์ฐฝ์ž‘์ž, ์—์ด์ „์‹œ, ์—”์ง€๋‹ˆ์–ด๋ง ํŒ€์ด ๋’ค์„ž์ธ ์‚ฌ์šฉ์ž์ธต์— ๋ง์„ ๊ฑธ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋น„๊ฒฉ์‹ du ์–ด์กฐ๊ฐ€ ๋” ์ž˜ ๋งž๋Š”๋‹ค๋Š” ํ”„๋กœ์ ํŠธ ํ”ผ๋“œ๋ฐฑ์ด ๋‚˜์˜ค๊ธฐ ์ „๊นŒ์ง€๋Š”, ๊ฒฉ์‹ ๋…์ผ์–ด๊ฐ€ ๊ฐ€์žฅ ๋ฌด๋‚œํ•œ ๊ธฐ๋ณธ๊ฐ’์ž…๋‹ˆ๋‹ค. ๋กœ์ผ€์ผ PR์€ UI ์š”์†Œ, ํ•ต์‹ฌ ๋ฌธ์„œ, ๊ทธ๋ฆฌ๊ณ  apps/web/src/i18n/content.ts์˜ ํ‘œ์‹œ ์ „์šฉ ๊ฐค๋Ÿฌ๋ฆฌ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๋ฒˆ์—ญํ•ด์•ผ ํ•˜์ง€๋งŒ, skills/๋‚˜ design-systems/, ๋˜๋Š” agent๊ฐ€ ์‹คํ–‰ํ•˜๋Š” ํ”„๋กฌํ”„ํŠธ ๋ณธ๋ฌธ์€ ๋ฒˆ์—ญํ•˜๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์›๋ณธ ํ”„๋กฌํ”„ํŠธ๋Š” ์›Œํฌํ”Œ๋กœ์šฐ ์ž…๋ ฅ์œผ๋กœ ๊ด€๋ฆฌ๋˜๋ฉฐ, ์›๋ณธ ์–ธ์–ด๋ฅผ ํ•˜๋‚˜๋กœ ์œ ์ง€ํ•ด์•ผ ๋กœ์ผ€์ผ๋งˆ๋‹ค ํ”„๋กฌํ”„ํŠธ QA๊ฐ€ ๋Š˜์–ด๋‚˜๋Š” ์ผ์„ ๋ง‰์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. skill, design system, ํ”„๋กฌํ”„ํŠธ ํ…œํ”Œ๋ฆฟ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ด๋ฆ„์„ ๋ฐ”๊ฟ€ ๋•Œ๋Š” ๋…์ผ์–ด ํ‘œ์‹œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๊ฐฑ์‹ ํ•˜๊ณ  pnpm --filter @open-design/web test๋ฅผ ์‹คํ–‰ํ•˜์„ธ์š”. ๋…์ผ์–ด ํ‘œ์‹œ ํ•ญ๋ชฉ์ด ๋ˆ„๋ฝ๋˜๋ฉด content.test.ts๊ฐ€ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. daemon ์˜ค๋ฅ˜, export ํŒŒ์ผ๋ช…, agent๊ฐ€ ์ƒ์„ฑํ•œ artifact ํ…์ŠคํŠธ๋Š” PR์ด ๋ช…์‹œ์ ์œผ๋กœ ๋ฒ”์œ„์— ๋„ฃ์ง€ ์•Š๋Š” ํ•œ ์•Œ๋ ค์ง„ ํ•œ๊ณ„๋กœ ๋‘ก๋‹ˆ๋‹ค.

์ƒˆ ๋กœ์ผ€์ผ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋‹จ๊ณ„๋ณ„ ์•ˆ๋‚ด(UI ์‚ฌ์ „, README, ์–ธ์–ด ์ „ํ™˜๊ธฐ, ์ง€์—ญ๋ณ„ ์šฉ์–ด)๋Š” TRANSLATIONS.md๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.


์ฝ”๋“œ ์Šคํƒ€์ผ

ํฌ๋งคํŒ…์— ๊นŒ๋‹ค๋กญ๊ฒŒ ๊ตด์ง€๋Š” ์•Š์ง€๋งŒ(์ €์žฅ ์‹œ Prettier๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค), ๋‘ ๊ฐ€์ง€ ๊ทœ์น™์€ ์–‘๋ณดํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํ”„๋กฌํ”„ํŠธ ์Šคํƒ๊ณผ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋…ธ์ถœ๋˜๋Š” API์— ๊ทธ๋Œ€๋กœ ๋“œ๋Ÿฌ๋‚˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

  1. JS/TS๋Š” ์ž‘์€๋”ฐ์˜ดํ‘œ. escape ๋•Œ๋ฌธ์— ๋ณด๊ธฐ ํ‰ํ•ด์ง€๋Š” ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ๋ฌธ์ž์—ด์€ ์ž‘์€๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์Œ‰๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฒ ์ด์Šค๋Š” ์ด๋ฏธ ์ผ๊ด€๋˜๋‹ˆ ๋งž์ถฐ์ฃผ์„ธ์š”.
  2. ์ฃผ์„์€ ์˜์–ด๋กœ. PR์ด Deutsch๋‚˜ ไธญๆ–‡๋กœ ๋ฒˆ์—ญํ•˜๋Š” ์ž‘์—…์ด๋”๋ผ๋„ ์ฝ”๋“œ ์ฃผ์„์€ ์˜์–ด๋กœ ๋‘ก๋‹ˆ๋‹ค. grep์œผ๋กœ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ์ฐธ์กฐ๋ฅผ ํ•œ ๋ฒŒ๋กœ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ์ž…๋‹ˆ๋‹ค.

๊ทธ ์™ธ์—:

  • ์„ค๋ช…์กฐ ์ฃผ์„์€ ์“ฐ์ง€ ๋งˆ์„ธ์š”. // import the module์ด๋‚˜ // loop through items ๊ฐ™์€ ๊ฒƒ ๋ง์ž…๋‹ˆ๋‹ค. ์ฝ”๋“œ๋งŒ ๋ด๋„ ๋ช…๋ฐฑํ•˜๋‹ค๋ฉด ๊ทธ ์ฃผ์„์€ ์žก์Œ์ž…๋‹ˆ๋‹ค. ์ฃผ์„์€ ์ฝ”๋“œ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์—†๋Š” ์˜๋„๋‚˜ ์ œ์•ฝ์—๋งŒ ์“ฐ์„ธ์š”.
  • apps/web/src/๋Š” TypeScript๋ฅผ ์”๋‹ˆ๋‹ค. daemon(apps/daemon/)์€ ํƒ€์ž…์ด ์ค‘์š”ํ•œ ๊ณณ์— JSDoc์„ ๋ถ™์ธ ์ˆœ์ˆ˜ ESM JavaScript์ž…๋‹ˆ๋‹ค. ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜์„ธ์š”.
  • ์ƒˆ ์ตœ์ƒ์œ„ ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ•˜์ง€ ๋งˆ์„ธ์š”. ์ถ”๊ฐ€ํ•œ๋‹ค๋ฉด ์–ป๋Š” ๊ฒƒ๊ณผ ๋Š˜์–ด๋‚˜๋Š” ๋ฒˆ๋“ค ํฌ๊ธฐ๋ฅผ PR ์„ค๋ช…์— ํ•œ ๋‹จ๋ฝ์œผ๋กœ ์ ์œผ์„ธ์š”. package.json์˜ ์˜์กด์„ฑ ๋ชฉ๋ก์€ ์ผ๋ถ€๋Ÿฌ ์ž‘๊ฒŒ ๋‘ก๋‹ˆ๋‹ค.
  • ํ‘ธ์‹œ ์ „์— pnpm typecheck๋ฅผ ์‹คํ–‰ํ•˜์„ธ์š”. CI์—์„œ๋„ ๋Œ๋ฆฝ๋‹ˆ๋‹ค. ์‹คํŒจํ•˜๋ฉด "๊ณ ์ณ์ฃผ์„ธ์š”" ์ฝ”๋ฉ˜ํŠธ๋ฅผ ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ปค๋ฐ‹๊ณผ pull request

  • PR ํ•˜๋‚˜์— ๊ด€์‹ฌ์‚ฌ ํ•˜๋‚˜. skill ์ถ”๊ฐ€ + ํŒŒ์„œ ๋ฆฌํŒฉํ„ฐ๋ง + ์˜์กด์„ฑ ๋ฒ„์ „ ์—…์€ PR ์„ธ ๊ฐœ์ž…๋‹ˆ๋‹ค.
  • ์ œ๋ชฉ์€ ๋ช…๋ นํ˜• + ๋ฒ”์œ„. add dating-web skill, fix daemon SSE backpressure when CLI hangs, docs: clarify storage contract์ฒ˜๋Ÿผ ์”๋‹ˆ๋‹ค.
  • PR ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•˜์„ธ์š”. .github/pull_request_template.md์˜ ๋ชจ๋“  ์„น์…˜(Why, What users will see, Surface area, Screenshots(UI์ธ ๊ฒฝ์šฐ), Bug fix verification(๋ฒ„๊ทธ ์ˆ˜์ •์ธ ๊ฒฝ์šฐ), Validation)์„ ์ฑ„์šฐ์„ธ์š”. ๋นˆ ์„น์…˜์—๋Š” "์ฑ„์›Œ์ฃผ์„ธ์š”" ๋‹ต๋ณ€์ด ๋‹ฌ๋ฆฝ๋‹ˆ๋‹ค.
  • ๋ณธ๋ฌธ์—๋Š” ์ด์œ ๋ฅผ ์ ์œผ์„ธ์š”. "์ด๊ฒŒ ๋ญ˜ ํ•˜๋Š”์ง€"๋Š” ๋ณดํ†ต diff๋งŒ ๋ด๋„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ •์ž‘ ๋“œ๋Ÿฌ๋‚˜์ง€ ์•Š๋Š” ๊ฒƒ์€ "์ด๊ฒŒ ์™œ ์žˆ์–ด์•ผ ํ•˜๋Š”์ง€"์ž…๋‹ˆ๋‹ค.
  • issue๊ฐ€ ์žˆ๋‹ค๋ฉด ์—ฐ๊ฒฐํ•˜์„ธ์š”. issue๊ฐ€ ์—†๊ณ  PR์ด ์‚ฌ์†Œํ•˜์ง€ ์•Š๋‹ค๋ฉด ๋จผ์ € issue๋ฅผ ์—ด์–ด์ฃผ์„ธ์š”. ์‹œ๊ฐ„์„ ์Ÿ๊ธฐ ์ „์— ๊ทธ ๋ณ€๊ฒฝ์„ ์›ํ•˜๋Š”์ง€ ํ•ฉ์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฆฌ๋ทฐ ์ค‘์—๋Š” squashํ•˜์ง€ ๋งˆ์„ธ์š”. fixup ์ปค๋ฐ‹์„ ํ‘ธ์‹œํ•˜๋ฉด ๋จธ์ง€ํ•  ๋•Œ ์šฐ๋ฆฌ๊ฐ€ squashํ•ฉ๋‹ˆ๋‹ค.
  • ๊ณต์œ  ๋ธŒ๋žœ์น˜์— force-pushํ•˜์ง€ ๋งˆ์„ธ์š”. ๋ฆฌ๋ทฐ์–ด๊ฐ€ ์š”์ฒญํ•œ ๊ฒฝ์šฐ๋Š” ์˜ˆ์™ธ์ž…๋‹ˆ๋‹ค.

CLA๋Š” ์š”๊ตฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Apache-2.0์œผ๋กœ ์ถฉ๋ถ„ํ•˜๋ฉฐ, ๋‹น์‹ ์˜ ๊ธฐ์—ฌ๋„ ๊ฐ™์€ ๋ผ์ด์„ ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.


๋ฒ„๊ทธ ์‹ ๊ณ ํ•˜๊ธฐ

๋‹ค์Œ ๋‚ด์šฉ์„ ๋‹ด์•„ issue๋ฅผ ์—ด์–ด์ฃผ์„ธ์š”.

  • ๋ฌด์—‡์„ ์‹คํ–‰ํ–ˆ๋Š”์ง€(์ •ํ™•ํ•œ pnpm tools-dev ... ํ˜ธ์ถœ).
  • ์–ด๋–ค agent CLI๋ฅผ ์„ ํƒํ–ˆ๋Š”์ง€(๋˜๋Š” BYOK ๊ฒฝ๋กœ์˜€๋Š”์ง€).
  • ์ด๋ฅผ ์œ ๋ฐœํ•œ skill + design system ์กฐํ•ฉ.
  • ๊ด€๋ จ๋œ daemon stderr ๋๋ถ€๋ถ„. "artifact๊ฐ€ ๋ Œ๋”๋ง๋˜์ง€ ์•Š์•˜๋‹ค"๋Š” ์‹ ๊ณ  ๋Œ€๋ถ€๋ถ„์€ spawn ENOENT๋‚˜ CLI์˜ ์‹ค์ œ ์˜ค๋ฅ˜๊ฐ€ ๋ณด์ด๋ฉด 30์ดˆ ๋งŒ์— ์›์ธ์ด ์žกํž™๋‹ˆ๋‹ค.
  • UI ๋ฌธ์ œ๋ผ๋ฉด ์Šคํฌ๋ฆฐ์ƒท.

ํ”„๋กฌํ”„ํŠธ ์Šคํƒ ๋ฒ„๊ทธ("agent๊ฐ€ ๋ณด๋ผ์ƒ‰ ๊ทธ๋ผ๋ฐ์ด์…˜ hero๋ฅผ ๋‚ด๋ณด๋ƒˆ๋Š”๋ฐ, slop ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ๊ฐ€ ๊ทธ๊ฑธ ๋ง‰์•˜์–ด์•ผ ํ–ˆ๋‹ค")๋ผ๋ฉด assistant ๋ฉ”์‹œ์ง€ ์ „๋ฌธ์„ ํ•จ๊ป˜ ๋„ฃ์–ด์ฃผ์„ธ์š”. ์œ„๋ฐ˜์ด ๋ชจ๋ธ ํƒ“์ธ์ง€ ํ”„๋กฌํ”„ํŠธ ํƒ“์ธ์ง€ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์งˆ๋ฌธํ•˜๊ธฐ

  • ์•„ํ‚คํ…์ฒ˜ ์งˆ๋ฌธ, ์„ค๊ณ„ ์งˆ๋ฌธ, "์ด๊ฒŒ ๋ฒ„๊ทธ์ธ์ง€ ์˜ค์šฉ์ธ์ง€" โ†’ GitHub Discussions (๊ถŒ์žฅ โ€” ๋‹ค์Œ ์‚ฌ๋žŒ์ด ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค).
  • "X๋ฅผ ํ•˜๋Š” skill์„ ์–ด๋–ป๊ฒŒ ์ž‘์„ฑํ•˜๋‚˜์š”" โ†’ discussion์„ ์—ด์–ด์ฃผ์„ธ์š”. ๋‹ตํ•ด๋“œ๋ฆฌ๊ณ , ๋น ์ ธ ์žˆ๋˜ ํŒจํ„ด์ด๋ผ๋ฉด ๊ทธ ๋‹ต์„ docs/skills-protocol.md์— ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๋ฐ›์ง€ ์•Š๋Š” ๊ฒƒ

ํ”„๋กœ์ ํŠธ์˜ ์ดˆ์ ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ PR์€ ์—ด์ง€ ๋ง์•„์ฃผ์„ธ์š”.

  • ๋ชจ๋ธ ๋Ÿฐํƒ€์ž„์„ vendor๋กœ ํฌํ•จ. OD์˜ ํ•ต์‹ฌ ๋ฒ ํŒ…์€ "์ด๋ฏธ ์“ฐ๊ณ  ์žˆ๋Š” CLI๋ฉด ์ถฉ๋ถ„ํ•˜๋‹ค"์ž…๋‹ˆ๋‹ค. pi-ai๋‚˜ OpenAI ํ‚ค, ๋ชจ๋ธ ๋กœ๋”๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์‚ฌ์ „ ๋…ผ์˜ ์—†์ด ํ˜„์žฌ ์Šคํƒ์—์„œ ๋ฒ—์–ด๋‚˜๋Š” ํ”„๋ก ํŠธ์—”๋“œ ์žฌ์ž‘์„ฑ. Next.js 16 App Router + React 18 + TS๊ฐ€ ๊ธฐ์ค€์„ ์ž…๋‹ˆ๋‹ค. maintainer๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ ๊ทธ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์›ํ•˜์ง€ ์•Š๋Š” ํ•œ Astro, Solid, Svelte ๊ฐ™์€ ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ์˜ ์žฌ์ž‘์„ฑ์€ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • daemon์„ serverless ํ•จ์ˆ˜๋กœ ๋Œ€์ฒด. daemon์˜ ์กด์žฌ ์ด์œ ๋Š” ์‹ค์ œ cwd๋ฅผ ์†Œ์œ ํ•˜๊ณ  ์‹ค์ œ CLI๋ฅผ spawnํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. SPA๋ฅผ Vercel์— ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์€ ๊ดœ์ฐฎ์ง€๋งŒ, daemon์€ daemon์œผ๋กœ ๋‚จ์Šต๋‹ˆ๋‹ค.
  • ํ…”๋ ˆ๋ฉ”ํŠธ๋ฆฌ / ๋ถ„์„ / phone-home ์ถ”๊ฐ€. OD๋Š” local-first์ž…๋‹ˆ๋‹ค. ์™ธ๋ถ€๋กœ ๋‚˜๊ฐ€๋Š” ํ˜ธ์ถœ์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ ์„ค์ •ํ•œ provider๋กœ ํ–ฅํ•˜๋Š” ๊ฒƒ๋ฟ์ž…๋‹ˆ๋‹ค.
  • ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฒˆ๋“ค๋ง ์‹œ ๋ผ์ด์„ ์Šค ํŒŒ์ผ๊ณผ ์ €์ž‘์ž ํ‘œ๊ธฐ๋ฅผ ์˜†์— ๋‘์ง€ ์•Š๋Š” ๊ฒฝ์šฐ.

์•„์ด๋””์–ด๊ฐ€ ์ ํ•ฉํ•œ์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค๋ฉด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์ „์— discussion์„ ์—ด์–ด์ฃผ์„ธ์š”.


Maintainer ๋˜๊ธฐ

๊พธ์ค€ํžˆ ๊ธฐ์—ฌํ•ด ์™”๊ณ  Maintainer๊ฐ€ ๋˜๋Š” ๊ธธ์ด ๊ถ๊ธˆํ•˜๋‹ค๋ฉด, ๊ทœ์น™์€ **MAINTAINERS.ko.md**์— ์žˆ์Šต๋‹ˆ๋‹ค. ์š”์•ฝํ•˜๋ฉด ์ด๋ ‡์Šต๋‹ˆ๋‹ค.

  • Maintainer๋Š” issue๋ฅผ ๋ฆฌ๋ทฐํ•˜๊ณ  ์Šน์ธํ•˜๊ณ  ๋‹ซ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋จธ์ง€ ๋ฒ„ํŠผ์€ Core Team์ด ์ฅ๊ณ  ์žˆ์ง€๋งŒ, ๋‹น์‹ ์˜ ์Šน์ธ์€ ๋จธ์ง€์— ํ•„์š”ํ•œ ์Šน์ธ์œผ๋กœ ๊ทธ๋Œ€๋กœ ์ธ์ •๋ฉ๋‹ˆ๋‹ค.
  • ๊ธฐ์ค€์€ ๋จธ์ง€๋œ PR 20๊ฑด ์ด์ƒ์— ๋”ํ•ด, ๊ณต๊ฐœ๋œ ๊ณ„์ • ํ’ˆ์งˆ ๊ฒ€์ฆ(๋ด‡ ๋ฐฉ์ง€, sock-puppet ๋ฐฉ์ง€)๊ณผ ๊ธฐ์—ฌ ํ’ˆ์งˆ์— ๋Œ€ํ•œ Core Team์˜ ํŒ๋‹จ์ž…๋‹ˆ๋‹ค. ์ง€์›์„œ ์–‘์‹์€ ์—†์Šต๋‹ˆ๋‹ค. Core Team์ด ๋‚ด๋ถ€์ ์œผ๋กœ ํ›„๋ณด๋ฅผ ์˜ฌ๋ฆฌ๊ณ  ์ง์ ‘ ์—ฐ๋ฝํ•ฉ๋‹ˆ๋‹ค.
  • ํ• ๋‹น๋Ÿ‰๋„, SLA๋„, ์ •ํ•ด์ง„ ์ž„๊ธฐ๋„ ์—†์Šต๋‹ˆ๋‹ค. ๋ฌผ๋Ÿฌ๋‚˜๋Š” ์ผ์€ ์‰ฝ๊ณ  ๋˜๋Œ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(Emeritus โ†’ ์—ฌ์œ ๊ฐ€ ์ƒ๊ธฐ๋ฉด ๋ณต๊ท€).
  • ๋ชจ๋“  ๊ธฐ์ค€, ์ถ”์ฒœ ์ ˆ์ฐจ, ๋ฌผ๋Ÿฌ๋‚˜๋Š” ๊ทœ์น™, ์ดˆ๊ธฐ ํ”„๋กœ์ ํŠธ ๋ฉด์ œ ์กฐํ•ญ์€ MAINTAINERS.ko.md์— ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„ ๋‚ด์šฉ ์ค‘ ๊ด€์‹ฌ ๊ฐ€๋Š” ๊ฒŒ ์žˆ๋‹ค๋ฉด ๊ทธ ๋ฌธ์„œ๋ฅผ ์ฝ์–ด๋ณด์„ธ์š”.

์š”์ปจ๋Œ€ ์ข‹์€ PR์„ ๋‚ด๊ณ , ์‚ฌ๋ ค ๊นŠ๊ฒŒ ๋ฆฌ๋ทฐํ•˜๊ณ , Discussions์™€ Discord์—์„œ ์–ด์šธ๋ฆฌ๋‹ค ๋ณด๋ฉด ๋‚˜๋จธ์ง€๋Š” ์•Œ์•„์„œ ๋”ฐ๋ผ์˜ต๋‹ˆ๋‹ค.


๋ผ์ด์„ ์Šค

๊ธฐ์—ฌํ•˜๋ฉด, ๋‹น์‹ ์˜ ๊ธฐ์—ฌ๊ฐ€ ์ด ์ €์žฅ์†Œ์˜ Apache-2.0 License๋ฅผ ๋”ฐ๋ฅธ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹จ design-templates/guizang-ppt/ ์•ˆ์˜ ํŒŒ์ผ์€ ์˜ˆ์™ธ๋กœ, ์›๋ž˜์˜ MIT ๋ผ์ด์„ ์Šค์™€ op7418์— ๋Œ€ํ•œ ์ €์ž‘์ž ํ‘œ๊ธฐ๋ฅผ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.