- Add QUICKSTART.zh-TW.md (Traditional Chinese) based on the latest QUICKSTART.zh-CN.md, with regional terminology for zh-TW locale. - Update the language nav in all 6 existing QUICKSTART translations to include the çčé«äžæ entry. - Fix CONTRIBUTING.zh-CN.md: point QUICKSTART references to the Chinese translation (QUICKSTART.zh-CN.md) instead of the English original, closing the follow-up promised in PR #578.
15 KiB
Quickstart
English · PortuguĂȘs (Brasil) · Deutsch · Français · æ„æŹèȘ · çźäœäžæ · çčé«äžæ
Exécutez le produit complet localement.
Prérequis
- Node.js :
~24(Node 24.x). Le repo lâimpose viapackage.json#engines. - pnpm :
10.33.x. Le repo fixepnpm@10.33.2viapackageManager; utilisez Corepack pour que la bonne version soit sĂ©lectionnĂ©e automatiquement. - OS : macOS, Linux et WSL2 sont les environnements principaux pris en charge. Windows natif devrait fonctionner pour la plupart des workflows, mais WSL2 reste lâoption la plus fiable.
- CLI dâagent locale optionnelle : Claude Code, Codex, Devin for Terminal, Gemini CLI, OpenCode, Cursor Agent, Qwen, GitHub Copilot CLI, etc. Si aucune nâest installĂ©e, utilisez le mode BYOK API depuis Settings.
nvm / fnm sont des outils de confort optionnels, pas une étape obligatoire de la configuration du projet. Si vous en utilisez un, installez/sélectionnez Node 24 avant de lancer pnpm :
# nvm
nvm install 24
nvm use 24
# fnm
fnm install 24
fnm use 24
Activez ensuite Corepack et laissez le repo sélectionner pnpm :
corepack enable
corepack pnpm --version # doit afficher 10.33.2
Démarrage rapide (mode dev)
corepack enable
pnpm install
pnpm tools-dev run web # démarre daemon + web au premier plan
# ouvrez lâURL web affichĂ©e par tools-dev
Pour le shell desktop et tous les sidecars gérés en arriÚre-plan :
pnpm tools-dev # démarre daemon + web + desktop en arriÚre-plan
Au premier chargement, lâapp dĂ©tecte votre CLI de coding agent installĂ©e (Claude Code / Codex / Devin for Terminal / Gemini / OpenCode / Cursor Agent / Qwen), la sĂ©lectionne automatiquement, puis utilise par dĂ©faut le Skill web-prototype et le Design System Neutral Modern. Tapez un prompt et cliquez sur Send. Les sorties de lâagent sâaffichent en streaming dans le panneau gauche ; la balise <artifact> est extraite et le HTML sâaffiche en direct Ă droite. Une fois la gĂ©nĂ©ration terminĂ©e, cliquez sur Save to disk pour enregistrer lâartifact sous ./.od/artifacts/<timestamp>-<slug>/index.html.
Le menu dĂ©roulant Design System charge les Design Systems depuis design-systems/*/DESIGN.md : starters Ă©crits Ă la main, product systems intĂ©grĂ©s et design skills normalisĂ©s. Choisissez-en un pour habiller chaque prototype dans lâesthĂ©tique de cette marque.
Le menu déroulant Skill regroupe les entrées par mode / surface et affiche le Skill par défaut de chaque mode avec un suffixe · default. Le catalogue live vient de skills/ et couvre les workflows web, deck, Design System, image, vidéo et audio. Exemples inclus :
- Prototype â
web-prototype(gĂ©nĂ©rique),saas-landing,dashboard,pricing-page,docs-page,blog-post,mobile-app. - Deck / PPT â
simple-deck(swipe horizontal single-file) etmagazine-web-ppt(le bundleguizang-pptdepuisop7418/guizang-ppt-skill, par dĂ©faut en mode deck, avec ses propres assets/template + 4 rĂ©fĂ©rences). Les Skills avec side files reçoivent automatiquement un prĂ©ambule "Skill root (absolute)" pour que lâagent puisse rĂ©soudreassets/template.htmletreferences/*.mddepuis le vrai chemin disque au lieu de son CWD. - MĂ©dias et Design System â par exemple
image-poster,video-shortform,audio-jingle,hyperframesetdesign-brief.
Associez un Skill, un Design System et un seul prompt : vous obtenez un prototype, un deck ou un rendu adapté au mode / à la surface choisie.
Autres scripts
pnpm tools-dev # daemon + web + desktop en arriĂšre-plan
pnpm tools-dev start web # daemon + web en arriĂšre-plan
pnpm tools-dev run web # daemon + web au premier plan (e2e/dev server)
pnpm tools-dev restart # redémarre daemon + web + desktop
pnpm tools-dev restart --daemon-port 7457 --web-port 5175
pnpm tools-dev status # inspecte les runtimes gérés
pnpm tools-dev logs # affiche les logs daemon/web/desktop
pnpm tools-dev check # statut + logs récents + diagnostics courants
pnpm tools-dev stop # arrĂȘte les runtimes gĂ©rĂ©s
pnpm --filter @open-design/daemon build # build apps/daemon/dist/cli.js pour `od`
pnpm --filter @open-design/web build # build du paquet web si nécessaire
pnpm typecheck # typecheck du workspace
pnpm tools-dev est le seul point dâentrĂ©e du lifecycle local. Nâutilisez pas les anciens alias root supprimĂ©s (pnpm dev, pnpm dev:all, pnpm daemon, pnpm preview, pnpm start).
Pendant le dĂ©veloppement local, tools-dev dĂ©marre dâabord le daemon, transmet son port Ă apps/web, puis apps/web/next.config.ts réécrit /api/*, /artifacts/* et /frames/* vers ce port daemon. Lâapp App Router peut ainsi parler au processus Express voisin sans configuration CORS.
Checks de génération média / agent dispatcher
Les Skills image, vidĂ©o, audio et HyperFrames appellent la CLI locale od via des variables dâenvironnement injectĂ©es par le daemon lorsquâil lance un agent :
OD_BINâ chemin absolu versapps/daemon/dist/cli.js.OD_DAEMON_URLâ URL du daemon en cours dâexĂ©cution.OD_PROJECT_IDâ id du projet actif.OD_PROJECT_DIRâ dossier de fichiers du projet actif.
Si la génération média échoue avec OD_BIN: parameter not set, apps/daemon/dist/cli.js manquant, ou failed to reach daemon at http://127.0.0.1:0, rebuildez la CLI daemon et redémarrez le runtime géré :
pnpm --filter @open-design/daemon build
pnpm tools-dev restart --daemon-port 7457 --web-port 5175
ls -la apps/daemon/dist/cli.js
curl -s http://127.0.0.1:7457/api/health
Ouvrez ensuite de nouveau le projet depuis lâapp Open Design au lieu de reprendre une ancienne session agent dans le terminal. Un agent lancĂ© par le daemon devrait voir des valeurs comme :
echo "OD_BIN=$OD_BIN"
echo "OD_PROJECT_ID=$OD_PROJECT_ID"
echo "OD_PROJECT_DIR=$OD_PROJECT_DIR"
echo "OD_DAEMON_URL=$OD_DAEMON_URL"
ls -la "$OD_BIN"
OD_DAEMON_URL doit ĂȘtre un vrai port daemon comme http://127.0.0.1:7457, pas http://127.0.0.1:0. La valeur :0 est seulement une indication interne "choisir un port libre" au lancement et ne doit pas se retrouver dans les sessions agent.
En mode production daemon-only, le daemon sert lui-mĂȘme lâexport static Next.js Ă http://localhost:7456; aucun reverse proxy nâest impliquĂ©.
Si vous placez nginx devant le daemon, gardez les routes SSE non bufferisĂ©es et non compressĂ©es. Un Ă©chec courant : la console navigateur affiche net::ERR_INCOMPLETE_CHUNKED_ENCODING 200 (OK) aprĂšs 80-90 secondes, parce que gzip on dans nginx bufferise les rĂ©ponses SSE chunked mĂȘme quand le daemon envoie X-Accel-Buffering: no.
location /api/ {
proxy_pass http://127.0.0.1:7456;
proxy_buffering off;
gzip off;
proxy_read_timeout 86400s;
proxy_send_timeout 86400s;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
Deux modes dâexĂ©cution
| Mode | Valeur du picker | Flux dâune requĂȘte |
|---|---|---|
| Local CLI (par dĂ©faut quand le daemon dĂ©tecte un agent) | "Local CLI" | Frontend â daemon /api/chat â spawn(<agent>, ...) â stdout â SSE â parser <artifact> â preview |
| Mode API (fallback / aucune CLI) | "Anthropic API" / "OpenAI API" / "Azure OpenAI" / "Google Gemini" | Frontend â daemon /api/proxy/{provider}/stream â SSE provider normalisĂ© en delta/end/error â parser <artifact> â preview |
Les deux modes alimentent le mĂȘme parser <artifact> et la mĂȘme iframe sandboxĂ©e. Seuls le transport et la livraison du system prompt changent : les CLI locales nâont pas de canal systĂšme sĂ©parĂ©, donc le prompt composĂ© est intĂ©grĂ© au message utilisateur.
Composition du prompt
Ă chaque envoi, lâapp construit un system prompt Ă partir de trois couches et lâenvoie au provider :
BASE_SYSTEM_PROMPT (contrat de sortie : wrap in <artifact>, no code fences)
+ active design system body (DESIGN.md â palette/type/layout)
+ active skill body (SKILL.md â workflow and output rules)
Changez le Skill ou le Design System dans la barre supĂ©rieure : le prochain envoi utilise le nouveau stack. Les contenus sont mis en cache en mĂ©moire par session, donc un choix ne coĂ»te quâun fetch daemon.
File map
open-design/
âââ apps/
â âââ daemon/ # Node/Express â spawn les agents locaux + sert les APIs
â â âââ src/
â â âââ cli.ts # entrĂ©e bin `od`
â â âââ server.ts # /api/* + static serving
â â âââ agents.ts # scanner PATH + adapters CLI de coding agents
â â âââ skills.ts # loader SKILL.md (frontmatter parser)
â â âââ design-systems.ts # loader DESIGN.md
â â âââ sidecar/ # wrapper sidecar daemon pour tools-dev
â â âââ tests/ # tests du package daemon
â âââ web/ # Next.js 16 App Router + client React
â âââ app/ # entrypoints App Router
â âââ src/ # modules client/runtime React + TypeScript
â â âââ App.tsx # orchestre mode / skill / DS pickers + send
â â âââ providers/ # transports daemon + BYOK API
â â âââ prompts/ # system, discovery, directions, deck framework
â â âââ artifacts/ # parser <artifact> streaming + manifests
â â âââ runtime/ # iframe srcdoc, markdown, helpers dâexport
â â âââ state/ # localStorage + Ă©tat projet persistĂ© par le daemon
â âââ sidecar/ # wrapper sidecar web pour tools-dev
â âââ next.config.ts # rewrites tools-dev + config export prod apps/web/out
â âââ desktop/ # runtime Electron, lancĂ©/inspectĂ© par tools-dev
âââ packages/
â âââ contracts/ # contrats app partagĂ©s web/daemon
â âââ sidecar-proto/ # contrat du protocole sidecar Open Design
â âââ sidecar/ # primitives runtime sidecar gĂ©nĂ©riques
â âââ platform/ # primitives process/platform gĂ©nĂ©riques
âââ tools/dev/ # lifecycle `pnpm tools-dev` et inspect CLI
âââ e2e/ # UI Playwright + harness intĂ©gration externe/Vitest
âââ skills/ # SKILL.md â drop-in depuis nâimporte quel repo Claude Code skill
â âââ web-prototype/ # prototype single-screen gĂ©nĂ©rique (dĂ©faut du mode prototype)
â âââ saas-landing/ # page marketing (hero / features / pricing / CTA)
â âââ dashboard/ # dashboard admin / analytics
â âââ pricing-page/ # pricing autonome + comparaison
â âââ docs-page/ # layout documentation 3 colonnes
â âââ blog-post/ # long-form Ă©ditorial
â âââ mobile-app/ # Ă©cran unique dans phone frame
â âââ simple-deck/ # deck minimal Ă swipe horizontal
â âââ guizang-ppt/ # magazine-web-ppt â deck/PPT par dĂ©faut inclus
â âââ SKILL.md
â âââ assets/template.html
â âââ references/{themes,layouts,components,checklist}.md
âââ design-systems/ # DESIGN.md â schĂ©ma 9 sections (awesome-claude-design)
â âââ default/ # Neutral Modern (starter)
â âââ warm-editorial/ # Warm Editorial (starter)
â âââ README.md # aperçu du catalogue
â âââ âŠsystems # starters · product systems · design skills normalisĂ©s
âââ scripts/sync-design-systems.ts # rĂ©import depuis le tarball getdesign upstream
âââ docs/ # vision produit + spec
âââ .od/ # donnĂ©es runtime (gitignored, auto-créées)
â âââ app.sqlite # projects / conversations / messages / tabs
â âââ artifacts/ # rendus ponctuels "Save to disk"
â âââ projects/<id>/ # dossier de travail par projet + cwd de lâagent
âââ pnpm-workspace.yaml # apps/* + packages/* + tools/* + e2e
âââ package.json # scripts qualitĂ© root + bin `od`
Dépannage
- "no agents found on PATH" â installez une CLI compatible, par exemple
claude,codex,gemini,opencode,cursor-agent,qwenoucopilot. La liste exacte des adapters dĂ©tectĂ©s vit dansapps/daemon/src/agents.ts. Ou passez au mode API/BYOK dans la barre supĂ©rieure et collez une clĂ© dans Settings. - daemon 500 sur /api/chat â vĂ©rifiez la fin de stderr dans le terminal daemon ; la CLI a gĂ©nĂ©ralement rejetĂ© ses args. Les CLIs nâacceptent pas toutes la mĂȘme forme dâargv ; consultez
apps/daemon/src/agents.tsbuildArgssi vous devez ajuster. - la génération média dit que
OD_BINmanque ou que lâURL daemon vaut:0â exĂ©cutez les checks du dispatcher mĂ©dia ci-dessus. Ne reprenez pas lâancienne session CLI ; rouvrez le projet depuis lâapp Open Design pour que le daemon injecte des variablesOD_*fraĂźches. - Codex charge trop de contexte plugin â dĂ©marrez Open Design avec
OD_CODEX_DISABLE_PLUGINS=1 pnpm tools-devpour que les processus Codex lancĂ©s par le daemon tournent avec--disable plugins. - lâartifact ne rend jamais â le modĂšle a produit du texte sans wrapper
<artifact>. Vérifiez que le system prompt passe bien (log daemon) et envisagez un modÚle plus capable ou un Skill plus strict.
Retour Ă la vision
Ce Quickstart est la graine exécutable de la spec dans docs/. La spec décrit vers quoi le projet grandit (voir docs/roadmap.md). Points clés :
docs/architecture.mddĂ©crit le stack livrĂ© : Next.js 16 App Router devant, daemon local derriĂšre, et rewritesapps/web/next.config.tsen dev pour que le navigateur parle toujours Ă la mĂȘme surface/api.docs/skills-protocol.mddĂ©crit le schĂ©maod:complet. Le daemon lit les mĂ©tadonnĂ©es runtime utiles depuisSKILL.mdpour router les Skills, composer le prompt, afficher les exemples et configurer les surfaces web / image / vidĂ©o / audio ; le protocole reste la rĂ©fĂ©rence pour les champs avancĂ©s.docs/agent-adapters.mdanticipe un dispatch plus riche (capability detection, streaming tool-calls). Notreapps/daemon/src/agents.tsest un dispatcher minimal : suffisant pour prouver le cĂąblage.docs/modes.mddĂ©crit les workflows prototype / deck / template / design-system. Le catalogue runtime peut aussi exposer des Skills pour les surfaces image, vidĂ©o et audio ; le picker filtre les entrĂ©es parmodeetsurface.