Skip to content

Latest commit

ย 

History

History
325 lines (212 loc) ยท 21.9 KB

File metadata and controls

325 lines (212 loc) ยท 21.9 KB

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

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

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

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


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

ํ•˜๊ณ  ์‹ถ์€ ์ผ ์‹ค์ œ๋กœ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ ์œ„์น˜ ๊ทœ๋ชจ
OD๊ฐ€ ์ƒˆ๋กœ์šด ์ข…๋ฅ˜์˜ artifact๋ฅผ ๋ Œ๋”๋งํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ (์ฒญ๊ตฌ์„œ, iOS ์„ค์ • ํ™”๋ฉด, ํ•œ ์žฅ์งœ๋ฆฌ ๋ฌธ์„œ ๋“ฑ) Design template design-templates/<your-template>/ SKILL.md์™€ ๋ Œ๋”๋ง asset์„ ๋‹ด์€ ํด๋” ํ•˜๋‚˜
์ž‘์—… ์ค‘ agent๊ฐ€ ํ˜ธ์ถœํ•˜๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€ํ•˜๊ธฐ Skill skills/<your-skill>/ SKILL.md์™€ ์„ ํƒ์  ๋ฆฌ์†Œ์Šค๋ฅผ ๋‹ด์€ ํด๋” ํ•˜๋‚˜
OD๊ฐ€ ์ƒˆ ๋ธŒ๋žœ๋“œ์˜ ๋น„์ฃผ์–ผ ์–ธ์–ด๋ฅผ ๊ตฌ์‚ฌํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ Design System design-systems/<brand>/ ํ•˜๋‚˜์˜ package: manifest.json, DESIGN.md, tokens.css
์ƒˆ coding-agent CLI ์—ฐ๊ฒฐํ•˜๊ธฐ Agent adapter apps/daemon/src/runtimes/defs/ ์ •์˜ ํ•˜๋‚˜์™€ registry entry ํ•˜๋‚˜
๊ธฐ๋Šฅ ์ถ”๊ฐ€, ๋ฒ„๊ทธ ์ˆ˜์ •, 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๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.


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

Design template์€ design-templates/ ์•„๋ž˜์— ๋‘๋Š” ํด๋”๋กœ, ๋ฃจํŠธ์— SKILL.md๋ฅผ ๋‘๊ณ  Claude Code์˜ SKILL.md ๊ทœ์•ฝ์— ์šฐ๋ฆฌ์˜ ์„ ํƒ์  od: ํ™•์žฅ์„ ๋”ํ•œ ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค. Templates gallery์— ํ‘œ์‹œํ•  artifact์˜ ํ˜•ํƒœ์™€ ๋ Œ๋”๋ง ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฌถ์Šต๋‹ˆ๋‹ค.

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

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

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

ํ”„๋กœํ† ์ฝœ ๋ช…์„ธ(์ „์ฒด active frontmatter ๋ฌธ๋ฒ•๊ณผ registry๊ฐ€ ์‹ค์ œ๋กœ ์ฝ๋Š” ํ•„๋“œ)๋Š” docs/skills-protocol.md์— ๋ณ„๋„๋กœ ์ •๋ฆฌ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. od.inputs, od.parameters, od.capabilities_required ๊ฐ™์€ ์˜ค๋ž˜๋œ portable ํ•„๋“œ๋Š” ์™ธ๋ถ€ ๋ฒˆ๋“ค์— ๋‚จ์•„ ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ, skill/template registry๋Š” ๋” ์ด์ƒ ์ด๋ฅผ ์†Œ๋น„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.


Functional Skill ์ถ”๊ฐ€ํ•˜๊ธฐ

Functional Skill์€ ์ž‘์—… ์ค‘ agent๊ฐ€ ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด ํ˜ธ์ถœํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์ฑ…์ž„ ๊ฒฝ๊ณ„๋Š” skills/README.md, ํด๋” ๊ณ„์•ฝ์€ skills/AGENTS.md, ๊ณตํ†ต SKILL.md ๋ฌธ๋ฒ•์€ docs/skills-protocol.md๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”. daemon์˜ lazy scanner๋Š” ๋‹ค์Œ /api/skills ์š”์ฒญ์—์„œ Skill root๋ฅผ ๋‹ค์‹œ ํ›‘์œผ๋ฏ€๋กœ, ๋กœ์ปฌ์—์„œ๋Š” rebuild๋„ daemon ์žฌ์‹œ์ž‘๋„ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.


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

์ €์žฅ์†Œ์— ์ถ”๊ฐ€ํ•˜๋Š” ์ƒˆ design system์€ design-systems/<slug>/ ์•„๋ž˜์˜ package์ด๋ฉฐ, Markdown ํŒŒ์ผ ํ•˜๋‚˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ํ˜„์žฌ ๋ฒˆ๋“ค๋œ 151๊ฐœ system์€ ๋ชจ๋‘ ์•„๋ž˜ package contract๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Daemon์€ ์˜ˆ์ „ ์ฝ˜ํ…์ธ ๋‚˜ ์‚ฌ์šฉ์ž๊ฐ€ ์„ค์น˜ํ•œ ์ฝ˜ํ…์ธ ์™€์˜ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด DESIGN.md๋งŒ ์žˆ๋Š” ํด๋”๋„ ๊ณ„์† ํ—ˆ์šฉํ•˜์ง€๋งŒ, ์ƒˆ ๋ฒˆ๋“ค system์€ ์ด legacy ํ˜•ํƒœ๋กœ ์ž‘์„ฑํ•˜๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค. Catalog๋Š” /api/design-systems ์š”์ฒญ๋งˆ๋‹ค ๋‹ค์‹œ ์Šค์บ”๋˜๋ฏ€๋กœ ํŽธ์ง‘ ํ›„ Design System surface๋ฅผ ์ƒˆ๋กœ ๊ณ ์น˜๋ฉด ๋˜๋ฉฐ daemon ์žฌ์‹œ์ž‘์€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ตœ์†Œ package ๊ตฌ์„ฑ

design-systems/your-brand/
โ”œโ”€โ”€ manifest.json
โ”œโ”€โ”€ DESIGN.md
โ””โ”€โ”€ tokens.css

manifest.json์€ ์•ˆ์ •์ ์ธ id, ํ‘œ์‹œ ์ด๋ฆ„, category, description, provenance์™€ ์„ ์–ธ๋œ package path๋ฅผ ๋ณด์œ ํ•ฉ๋‹ˆ๋‹ค. DESIGN.md๋Š” agent์—๊ฒŒ design intent๋ฅผ ์„ค๋ช…ํ•˜๊ณ , tokens.css๋Š” canonical compiled semantic-token stylesheet์ž…๋‹ˆ๋‹ค. ์ „์ฒด contract๋Š” docs/design-systems.md์™€ design-systems/_schema/AGENTS.md๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

DESIGN.md ํ˜•์‹

# YourBrand Design System

## Visual Theme
โ€ฆ

## Color Roles
โ€ฆ

## Typography
โ€ฆ

## Layout and Spacing
## Components and States
## Motion and Interaction
## Accessibility
## Anti-patterns

๊ณ ์ •๋œ 9๊ฐœ section schema๋Š” ์—†์Šต๋‹ˆ๋‹ค. Package quality guard๋Š” ๋‚ด์šฉ์ด ์žˆ๋Š” H2 section์„ 7๊ฐœ ์ด์ƒ ์š”๊ตฌํ•˜์ง€๋งŒ ์ด๋ฆ„, ์ˆœ์„œ, ๋ฒˆํ˜ธ๋Š” ์ง€์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‹ค์ œ system์— ๋งž๋Š” ์ œ๋ชฉ์„ ์‚ฌ์šฉํ•˜์„ธ์š”.

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

  1. ํ•„์ˆ˜ ํŒŒ์ผ 3๊ฐœ๋ฅผ ๋ชจ๋‘ ํฌํ•จํ•˜์„ธ์š”. Folder slug์™€ manifest.id๋ฅผ ์ผ์น˜์‹œํ‚ค๊ณ  ์ •๊ทœํ™”๋œ ASCII๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค(linear.app โ†’ linear-app, x.ai โ†’ x-ai).
  2. ๋‚ด์šฉ์ด ์žˆ๋Š” H2 section์„ 7๊ฐœ ์ด์ƒ ์ž‘์„ฑํ•˜์„ธ์š”. ๊ฐœ์ˆ˜๋งŒ ์ฑ„์šฐ๋Š” ๋นˆ ์ œ๋ชฉ์€ ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  3. Prose์™€ token์„ ์ผ์น˜์‹œํ‚ค์„ธ์š”. DESIGN.md์˜ color, type, spacing, motion ๊ฒฐ์ •์€ tokens.css์™€ ๊ฐ™์•„์•ผ ํ•˜๊ณ  ๊ณต์šฉ token guard๋ฅผ ํ†ต๊ณผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  4. ์‹ค์ œ evidence์™€ ๋ช…ํ™•ํ•œ provenance๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. Source product๋‚˜ site์—์„œ ์ง์ ‘ ์ถ”์ถœํ•˜๊ณ  manifest/package evidence์— ์ถœ์ฒ˜๋ฅผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.
  5. ์œ ์šฉํ•œ catalog copy๋ฅผ ์ž‘์„ฑํ•˜์„ธ์š”. manifest.name, category, description์ด picker์˜ ๊ธฐ๋ณธ metadata์ž…๋‹ˆ๋‹ค. Marketing fluff๋Š” ๋„ฃ์ง€ ๋งˆ์„ธ์š”.

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


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

์ƒˆ agent(์˜ˆ: ์–ด๋А ์‹ ์ƒ ์—…์ฒด์˜ foo-coder CLI)๋ฅผ ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด apps/daemon/src/runtimes/defs/์— ์ •์˜๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  runtimes/registry.ts์— ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.

import type { RuntimeAgentDef } from '../types.js';

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

์ •์˜๋ฅผ runtimes/registry.ts๋กœ importํ•ด BASE_AGENT_DEFS์— ์ถ”๊ฐ€ํ•˜๋ฉด, ๊ณต์šฉ ์—”์ง„์ด PATH์—์„œ ๊ฐ์ง€ํ•˜๊ณ  picker์— ํ‘œ์‹œํ•˜๋ฉฐ invocation์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. wire shape๊ฐ€ ๊ฐ™๋‹ค๋ฉด ๊ธฐ์กด streamFormat์„ ์žฌ์‚ฌ์šฉํ•˜์„ธ์š”. ์™„์ „ํžˆ ์ƒˆ๋กœ์šด wire format์ด๋ผ๋ฉด apps/daemon/src/runtimes/ ๋˜๋Š” apps/daemon/src/agent-protocol/ ์•„๋ž˜์˜ parser, parser test, ๊ทธ๋ฆฌ๊ณ  server.ts์˜ ํ•ด๋‹น dispatch branch๋„ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

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

  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์œผ๋กœ ๋‚จ์Šต๋‹ˆ๋‹ค.
  • ๊ฐœ์ธ์ •๋ณด ๋ณดํ˜ธ ๊ณ„์•ฝ ๋ฐ–์˜ ํ…”๋ ˆ๋ฉ”ํŠธ๋ฆฌ ๋˜๋Š” ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ ์ถ”๊ฐ€. ์ œํ’ˆ ๋ถ„์„๊ณผ ๋งˆ์Šคํ‚น๋œ ์„ธ์…˜ ๋ฆฌํ”Œ๋ ˆ์ด๋Š” ๋™์˜๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ, ๊ตฌ์„ฑ๋œ ๋นŒ๋“œ์—์„œ๋Š” ์Šคํฌ๋Ÿฌ๋น™๋œ ์•ˆ์ „์„ฑ/์‹ ๋ขฐ์„ฑ ํ…”๋ ˆ๋ฉ”ํŠธ๋ฆฌ๊ฐ€ ํ•ญ์ƒ ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค. ์ƒˆ ์ด๋ฒคํŠธ, ํ•„๋“œ, ์ „์†ก ๋Œ€์ƒ์€ PRIVACY.md์˜ ๋™์˜ยท์ตœ์†Œํ™”ยท์Šคํฌ๋Ÿฌ๋น™ ๊ฒฝ๊ณ„๋ฅผ ์ง€์ผœ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฒˆ๋“ค๋ง ์‹œ ๋ผ์ด์„ ์Šค ํŒŒ์ผ๊ณผ ์ €์ž‘์ž ํ‘œ๊ธฐ๋ฅผ ์˜†์— ๋‘์ง€ ์•Š๋Š” ๊ฒฝ์šฐ.

์•„์ด๋””์–ด๊ฐ€ ์ ํ•ฉํ•œ์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค๋ฉด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์ „์— 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์— ๋Œ€ํ•œ ์ €์ž‘์ž ํ‘œ๊ธฐ๋ฅผ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.