๊ธฐ์ฌ๋ฅผ ๊ณ ๋ฏผํ๊ณ ์๋ค๋ ๊ณ ๋ง์ต๋๋ค. 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๋ฅผ ์ฐธ๊ณ ํ์ธ์.
Node.js๋ pnpm์ ์ค์นํ์ง ์๊ณ ๋ Open Design์ ์คํํ ์ ์์ต๋๋ค.
Compose v2๊ฐ ํฌํจ๋ Docker Desktop์ด ์ค์น๋์ด ์๋์ง ํ์ธํ์ธ์.
docker compose versioncd deploy
docker compose up -d๋ธ๋ผ์ฐ์ ์์ ๋ค์ ์ฃผ์๋ฅผ ์ฝ๋๋ค.
http://localhost:7456
# ๋ก๊ทธ ๋ณด๊ธฐ
docker compose logs -f
# ์ปจํ
์ด๋ ์ฌ์์
docker compose restart
# ์ปจํ
์ด๋ ์ค์ง
docker compose down
# ์ต์ ์ด๋ฏธ์ง ๋ฐ๊ธฐ
docker compose pull
docker compose up -ddeploy/.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-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.mdfrontmatter ์นํธ์ํธ. - ๋ก์ปฌ ์คํ โ ์ค์ ๋ก ์ค์ํ ๋ค ๊ฐ์ง ๋ช ๋ น์ด.
- ๋จธ์ง ๊ธฐ์ค โ ๋ฆฌ๋ทฐ์ด๊ฐ ํ์ธํ ํญ๋ชฉ์ ๊ทธ๋๋ก ๋ณต์ฌํด ์ธ ์ ์๋ ์ฒดํฌ๋ฆฌ์คํธ.
- PR ์ค๋ช ํ ํ๋ฆฟ โ PR ๋ณธ๋ฌธ์ ๋ถ์ฌ๋ฃ๊ณ ์ฑ์ฐ๋ฉด ๋ฉ๋๋ค.
- ์์ฃผ ๊ฑฐ์ ๋๋ ํจํด โ ์ต๊ทผ ์ค์ ๋ก ์ฌ์ฉํ ๊ฑฐ์ ์ฌ์ ์ ๊ตฌ์ฒด์ ์ธ ์์.
ํ๋กํ ์ฝ ๋ช
์ธ(์ ์ฒด active frontmatter ๋ฌธ๋ฒ๊ณผ registry๊ฐ ์ค์ ๋ก ์ฝ๋ ํ๋)๋ docs/skills-protocol.md์ ๋ณ๋๋ก ์ ๋ฆฌ๋์ด ์์ต๋๋ค. od.inputs, od.parameters, od.capabilities_required ๊ฐ์ ์ค๋๋ portable ํ๋๋ ์ธ๋ถ ๋ฒ๋ค์ ๋จ์ ์์ ์ ์์ง๋ง, skill/template registry๋ ๋ ์ด์ ์ด๋ฅผ ์๋นํ์ง ์์ต๋๋ค.
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-systems/<slug>/ ์๋์ package์ด๋ฉฐ, Markdown ํ์ผ ํ๋๊ฐ ์๋๋๋ค. ํ์ฌ ๋ฒ๋ค๋ 151๊ฐ system์ ๋ชจ๋ ์๋ package contract๋ก ๋ง์ด๊ทธ๋ ์ด์
๋์์ต๋๋ค. Daemon์ ์์ ์ฝํ
์ธ ๋ ์ฌ์ฉ์๊ฐ ์ค์นํ ์ฝํ
์ธ ์์ ํธํ์ฑ์ ์ํด DESIGN.md๋ง ์๋ ํด๋๋ ๊ณ์ ํ์ฉํ์ง๋ง, ์ ๋ฒ๋ค system์ ์ด legacy ํํ๋ก ์์ฑํ๋ฉด ์ ๋ฉ๋๋ค. Catalog๋ /api/design-systems ์์ฒญ๋ง๋ค ๋ค์ ์ค์บ๋๋ฏ๋ก ํธ์ง ํ Design System surface๋ฅผ ์๋ก ๊ณ ์น๋ฉด ๋๋ฉฐ daemon ์ฌ์์์ ํ์ํ์ง ์์ต๋๋ค.
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๋ฅผ ์ฐธ๊ณ ํ์ธ์.
# 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์ ๋ง๋ ์ ๋ชฉ์ ์ฌ์ฉํ์ธ์.
- ํ์ ํ์ผ 3๊ฐ๋ฅผ ๋ชจ๋ ํฌํจํ์ธ์. Folder slug์
manifest.id๋ฅผ ์ผ์น์ํค๊ณ ์ ๊ทํ๋ ASCII๋ฅผ ์ฌ์ฉํฉ๋๋ค(linear.appโlinear-app,x.aiโx-ai). - ๋ด์ฉ์ด ์๋ H2 section์ 7๊ฐ ์ด์ ์์ฑํ์ธ์. ๊ฐ์๋ง ์ฑ์ฐ๋ ๋น ์ ๋ชฉ์ ํ์ฉ๋์ง ์์ต๋๋ค.
- Prose์ token์ ์ผ์น์ํค์ธ์.
DESIGN.md์ color, type, spacing, motion ๊ฒฐ์ ์tokens.css์ ๊ฐ์์ผ ํ๊ณ ๊ณต์ฉ token guard๋ฅผ ํต๊ณผํด์ผ ํฉ๋๋ค. - ์ค์ evidence์ ๋ช ํํ provenance๋ฅผ ์ฌ์ฉํ์ธ์. Source product๋ site์์ ์ง์ ์ถ์ถํ๊ณ manifest/package evidence์ ์ถ์ฒ๋ฅผ ๊ธฐ๋กํฉ๋๋ค.
- ์ ์ฉํ 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์ ๋ง์ง ์๋ ํ๋ก์ ํธ ์์ ์ ์ถ๊ฐ ์์คํ
๋ ๋ค์ด ์์ต๋๋ค.
์ 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๋ ํ์ํฉ๋๋ค.
๋จธ์ง ๊ธฐ์ค:
- ์ agent๋ก ์ค์ ์ธ์ ์ด ์ฒ์๋ถํฐ ๋๊น์ง ๋์ํด์ผ ํฉ๋๋ค. artifact๊ฐ ์คํธ๋ฆฌ๋ฐ์ผ๋ก ํต๊ณผํ ๊ฒ์ ๋ณด์ฌ์ฃผ๋ daemon ๋ก๊ทธ๋ฅผ PR ์ค๋ช ์ ๋ถ์ฌ๋ฃ์ผ์ธ์.
- CLI์ ํน์ด์ฌํญ์ **
docs/agent-adapters.md**์ ์ ๋ฆฌํ์ธ์(ํค ํ์ผ์ด ํ์ํ๊ฐ? ์ด๋ฏธ์ง ์ ๋ ฅ์ ์ง์ํ๋๊ฐ? ๋น๋ํํ ํ๋๊ทธ๋ ๋ฌด์์ธ๊ฐ?). - README์ "Supported coding agents" ํ์ ํ ์ค์ ์ถ๊ฐํ์ธ์.
API ๋ชจ๋ ์ฑํ
์ ๋งค ์์ฒญ๋ง๋ค upstream provider์ max_tokens๋ฅผ ๋ณด๋
๋๋ค. web ํด๋ผ์ด์ธํธ๋ apps/web/src/state/maxTokens.ts์ 3๋จ๊ณ ์กฐํ๋ก ์ด ๊ฐ์ ์ ํฉ๋๋ค.
- ์ค์ ์์ ์ฌ์ฉ์๊ฐ ์ง์ ์ง์ ํ ๊ฐ(์๋ ๊ฒฝ์ฐ).
- ์์ผ๋ฉด
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์ฒ ๊ฐ์ ์ฑํ ๋ชจ๋ธ์ ํฌํจํฉ๋๋ค. - ๊ทธ๋๋ ์์ผ๋ฉด
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์ ๊ทธ๋๋ก ๋๋ฌ๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
- JS/TS๋ ์์๋ฐ์ดํ. escape ๋๋ฌธ์ ๋ณด๊ธฐ ํํด์ง๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉด ๋ฌธ์์ด์ ์์๋ฐ์ดํ๋ก ๊ฐ์๋๋ค. ์ฝ๋๋ฒ ์ด์ค๋ ์ด๋ฏธ ์ผ๊ด๋๋ ๋ง์ถฐ์ฃผ์ธ์.
- ์ฃผ์์ ์์ด๋ก. 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์์๋ ๋๋ฆฝ๋๋ค. ์คํจํ๋ฉด "๊ณ ์ณ์ฃผ์ธ์" ์ฝ๋ฉํธ๋ฅผ ๋ฐ๊ฒ ๋ฉ๋๋ค.
- 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๊ฐ ๋๋ ๊ธธ์ด ๊ถ๊ธํ๋ค๋ฉด, ๊ท์น์ **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์ ๋ํ ์ ์์ ํ๊ธฐ๋ฅผ ๊ทธ๋๋ก ์ ์งํฉ๋๋ค.